3 # Copyright (c) 2016-2017 Intel Corporation
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
18 # Unittest for yardstick.network_services.libs.ixia_libs.IxNet
20 from __future__ import absolute_import
24 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IxNextgen
25 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_4
26 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_6
32 class TestIxNextgen(unittest.TestCase):
34 def test___init__(self):
35 ixnet_gen = IxNextgen()
36 self.assertIsNone(ixnet_gen._bidir)
38 @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
39 def test_connect(self, mock_sys):
41 ixnet_gen = IxNextgen()
42 ixnet_gen.get_config = mock.MagicMock()
43 ixnet_gen.get_ixnet = mock.MagicMock()
45 self.assertRaises(ImportError, ixnet_gen._connect, {"py_lib_path": "/tmp"})
47 def test_clear_ixia_config(self):
48 ixnet = mock.MagicMock()
49 ixnet.execute = mock.Mock()
51 ixnet_gen = IxNextgen(ixnet)
53 result = ixnet_gen.clear_ixia_config()
54 self.assertIsNone(result)
55 self.assertEqual(ixnet.execute.call_count, 1)
57 def test_load_ixia_profile(self):
58 ixnet = mock.MagicMock()
59 ixnet.execute = mock.Mock()
61 ixnet_gen = IxNextgen(ixnet)
63 result = ixnet_gen.load_ixia_profile({})
64 self.assertIsNone(result)
65 self.assertEqual(ixnet.execute.call_count, 1)
67 def test_load_ixia_config(self):
68 ixnet = mock.MagicMock()
69 ixnet.execute = mock.Mock()
71 ixnet_gen = IxNextgen(ixnet)
73 result = ixnet_gen.ix_load_config({})
74 self.assertIsNone(result)
75 self.assertEqual(ixnet.execute.call_count, 2)
77 @mock.patch('yardstick.network_services.libs.ixia_libs.IxNet.IxNet.log')
78 def test_ix_assign_ports(self, mock_logger):
79 ixnet = mock.MagicMock()
80 ixnet.getList.return_value = [0, 1]
81 ixnet.getAttribute.side_effect = ['up', 'down']
89 ixnet_gen = IxNextgen(ixnet)
90 ixnet_gen._cfg = config
92 result = ixnet_gen.ix_assign_ports()
93 self.assertIsNone(result)
94 self.assertEqual(ixnet.execute.call_count, 1)
95 self.assertEqual(ixnet.commit.call_count, 1)
96 self.assertEqual(ixnet.getAttribute.call_count, 2)
97 self.assertEqual(mock_logger.error.call_count, 1)
99 def test_ix_update_frame(self):
100 static_traffic_params = {
107 "dstmac": "00:00:00:00:00:03",
108 "framesPerSecond": True,
113 "srcmac": "00:00:00:00:00:01"
117 "dstip4": "152.16.40.20",
119 "srcip4": "152.16.100.20",
124 "dstip4": "152.16.40.20",
126 "srcip4": "152.16.100.20",
132 "dstip4": "152.16.100.20",
134 "srcip4": "152.16.40.20",
141 "traffic_type": "continuous"
149 "dstmac": "00:00:00:00:00:04",
150 "framesPerSecond": False,
151 "framesize": {"64B": "100"},
152 "srcmac": "00:00:00:00:00:01"
157 "dstip4": "152.16.100.20",
159 "srcip4": "152.16.40.20",
165 "dstip4": "152.16.100.20",
167 "srcip4": "152.16.40.20",
173 "dstip4": "152.16.100.20",
175 "srcip4": "152.16.40.20",
182 "traffic_type": "continuous"
186 ixnet = mock.MagicMock()
187 ixnet.remapIds.return_value = ["0"]
188 ixnet.setMultiAttribute.return_value = [1]
189 ixnet.commit.return_value = [1]
190 ixnet.getList.side_effect = [
195 "ethernet.header.destinationAddress",
196 "ethernet.header.sourceAddress",
200 ixnet_gen = IxNextgen(ixnet)
202 result = ixnet_gen.ix_update_frame(static_traffic_params)
203 self.assertIsNone(result)
204 self.assertEqual(ixnet.setMultiAttribute.call_count, 7)
205 self.assertEqual(ixnet.commit.call_count, 2)
207 def test_ix_update_udp(self):
208 ixnet = mock.MagicMock()
210 ixnet_gen = IxNextgen(ixnet)
212 result = ixnet_gen.ix_update_udp({})
213 self.assertIsNone(result)
215 def test_ix_update_tcp(self):
216 ixnet = mock.MagicMock()
217 ixnet_gen = IxNextgen(ixnet)
219 result = ixnet_gen.ix_update_tcp({})
220 self.assertIsNone(result)
222 def test_ix_start_traffic(self):
223 ixnet = mock.MagicMock()
224 ixnet.getList.return_value = [0]
225 ixnet.getAttribute.return_value = 'down'
227 ixnet_gen = IxNextgen(ixnet)
229 result = ixnet_gen.ix_start_traffic()
230 self.assertIsNone(result)
231 self.assertEqual(ixnet.getList.call_count, 1)
232 self.assertEqual(ixnet.execute.call_count, 3)
234 def test_ix_stop_traffic(self):
235 ixnet = mock.MagicMock()
236 ixnet.getList.return_value = [0]
238 ixnet_gen = IxNextgen(ixnet)
240 result = ixnet_gen.ix_stop_traffic()
241 self.assertIsNone(result)
242 self.assertEqual(ixnet.getList.call_count, 1)
243 self.assertEqual(ixnet.execute.call_count, 1)
245 def test_ix_get_statistics(self):
246 ixnet = mock.MagicMock()
247 ixnet.execute.return_value = ""
248 ixnet.getList.side_effect = [
250 '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
251 '::ixNet::OBJ-/statistics/view:"Port Statistics"',
254 '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
258 ixnet_gen = IxNextgen(ixnet)
260 result = ixnet_gen.ix_get_statistics()
261 self.assertIsNotNone(result)
262 self.assertEqual(ixnet.getList.call_count, 1)
263 self.assertEqual(ixnet.execute.call_count, 20)
265 def test_find_view_obj_no_where(self):
266 views = ['here', 'there', 'everywhere']
267 result = IxNextgen.find_view_obj('no_where', views)
268 self.assertEqual(result, '')
270 def test_add_ip_header_v4(self):
271 static_traffic_params = {
278 "dstmac": "00:00:00:00:00:03",
279 "framesPerSecond": True,
280 "framesize": {"64B": "100"},
281 "srcmac": "00:00:00:00:00:01"
285 "dstip4": "152.16.40.20",
287 "srcip4": "152.16.100.20",
293 "dstip4": "152.16.40.20",
295 "srcip4": "152.16.100.20",
301 "dstip4": "152.16.100.20",
303 "srcip4": "152.16.40.20",
310 "traffic_type": "continuous"
318 "dstmac": "00:00:00:00:00:04",
319 "framesPerSecond": True,
320 "framesize": {"64B": "100"},
321 "srcmac": "00:00:00:00:00:01"
326 "dstip4": "152.16.100.20",
328 "srcip4": "152.16.40.20",
334 "dstip4": "152.16.100.20",
336 "srcip4": "152.16.40.20",
342 "dstip4": "152.16.100.20",
344 "srcip4": "152.16.40.20",
351 "traffic_type": "continuous"
355 ixnet = mock.MagicMock()
356 ixnet.remapIds.return_value = ["0"]
357 ixnet.setMultiAttribute.return_value = [1]
358 ixnet.commit.return_value = [1]
359 ixnet.getList.side_effect = [[1], [0], [0], ["srcIp", "dstIp"]]
361 ixnet_gen = IxNextgen(ixnet)
363 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
364 self.assertIsNone(result)
365 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
366 self.assertEqual(ixnet.commit.call_count, 1)
368 def test_add_ip_header_v4_nothing_to_do(self):
369 static_traffic_params = {
376 "dstmac": "00:00:00:00:00:03",
377 "framesPerSecond": True,
378 "framesize": {"64B": "100"},
379 "srcmac": "00:00:00:00:00:01"
383 "dstip4": "152.16.40.20",
385 "srcip4": "152.16.100.20",
391 "dstip4": "152.16.40.20",
393 "srcip4": "152.16.100.20",
399 "dstip4": "152.16.100.20",
401 "srcip4": "152.16.40.20",
408 "traffic_type": "continuous"
416 "dstmac": "00:00:00:00:00:04",
417 "framesPerSecond": True,
418 "framesize": {"64B": "100"},
419 "srcmac": "00:00:00:00:00:01"
424 "dstip4": "152.16.100.20",
426 "srcip4": "152.16.40.20",
432 "dstip4": "152.16.100.20",
434 "srcip4": "152.16.40.20",
440 "dstip4": "152.16.100.20",
442 "srcip4": "152.16.40.20",
449 "traffic_type": "continuous"
453 ixnet = mock.MagicMock()
454 ixnet.remapIds.return_value = ["0"]
455 ixnet.setMultiAttribute.return_value = [1]
456 ixnet.commit.return_value = [1]
457 ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
459 ixnet_gen = IxNextgen(ixnet)
461 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
462 self.assertIsNone(result)
463 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
464 self.assertEqual(ixnet.commit.call_count, 1)
466 def test_add_ip_header_v6(self):
467 static_traffic_profile = {
474 "dstmac": "00:00:00:00:00:03",
475 "framesPerSecond": True,
476 "framesize": {"64B": "100"},
477 "srcmac": "00:00:00:00:00:01"
482 "dstip4": "152.16.40.20",
484 "srcip4": "152.16.100.20",
490 "dstip4": "152.16.100.20",
492 "srcip4": "152.16.40.20",
499 "traffic_type": "continuous"
507 "dstmac": "00:00:00:00:00:04",
508 "framesPerSecond": True,
509 "framesize": {"64B": "100"},
510 "srcmac": "00:00:00:00:00:01"
515 "dstip4": "152.16.100.20",
517 "srcip4": "152.16.40.20",
523 "dstip4": "152.16.100.20",
525 "srcip4": "152.16.40.20",
532 "traffic_type": "continuous"
536 ixnet = mock.MagicMock()
537 ixnet.getList.side_effect = [[1], [1], [1], ["srcIp", "dstIp"]]
538 ixnet.remapIds.return_value = ["0"]
539 ixnet.setMultiAttribute.return_value = [1]
540 ixnet.commit.return_value = [1]
542 ixnet_gen = IxNextgen(ixnet)
544 result = ixnet_gen.add_ip_header(static_traffic_profile, IP_VERSION_6)
545 self.assertIsNone(result)
546 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
547 self.assertEqual(ixnet.commit.call_count, 1)
549 def test_add_ip_header_v6_nothing_to_do(self):
550 static_traffic_params = {
557 "dstmac": "00:00:00:00:00:03",
558 "framesPerSecond": True,
559 "framesize": {"64B": "100"},
560 "srcmac": "00:00:00:00:00:01"
564 "dstip4": "152.16.40.20",
566 "srcip4": "152.16.100.20",
572 "dstip4": "152.16.40.20",
574 "srcip4": "152.16.100.20",
581 "traffic_type": "continuous"
589 "dstmac": "00:00:00:00:00:04",
590 "framesPerSecond": True,
591 "framesize": {"64B": "100"},
592 "srcmac": "00:00:00:00:00:01"
597 "dstip4": "152.16.100.20",
599 "srcip4": "152.16.40.20",
605 "dstip4": "152.16.100.20",
607 "srcip4": "152.16.40.20",
614 "traffic_type": "continuous"
618 ixnet = mock.MagicMock()
619 ixnet.getList.side_effect = [[1], [0, 1], [1], ["srcIP", "dstIP"]]
620 ixnet.remapIds.return_value = ["0"]
621 ixnet.setMultiAttribute.return_value = [1]
622 ixnet.commit.return_value = [1]
624 ixnet_gen = IxNextgen(ixnet)
626 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_6)
627 self.assertIsNone(result)
628 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
630 def test_set_random_ip_multi_attributes_bad_ip_version(self):
631 bad_ip_version = object()
632 ixnet_gen = IxNextgen(mock.Mock())
636 with self.assertRaises(ValueError):
637 ixnet_gen.set_random_ip_multi_attributes(mock1, bad_ip_version, mock2, mock3)
639 def test_get_config(self):
643 "external-interface": [
645 "virtual-interface": {
646 "vpci": "0000:07:00.1",
650 "virtual-interface": {
651 "vpci": "0001:08:01.2",
660 "dut_result_dir": "test2",
662 "ixchassis": "test4",
664 "py_lib_path": "test6",
670 'py_lib_path': 'test6',
674 'cards': ['0000', '0001'],
675 'ports': ['07', '08'],
676 'output_dir': 'test2',
681 result = IxNextgen.get_config(tg_cfg)
682 self.assertDictEqual(result, expected)
684 def test_ix_update_ether(self):
685 static_traffic_params = {
692 "dstmac": "00:00:00:00:00:03",
693 "framesPerSecond": True,
695 "srcmac": "00:00:00:00:00:01"
699 "dstip4": "152.16.40.20",
701 "srcip4": "152.16.100.20",
706 "dstip4": "152.16.40.20",
708 "srcip4": "152.16.100.20",
714 "dstip4": "152.16.100.20",
716 "srcip4": "152.16.40.20",
723 "traffic_type": "continuous"
731 "dstmac": "00:00:00:00:00:04",
732 "framesPerSecond": True,
734 "srcmac": "00:00:00:00:00:01"
739 "dstip4": "152.16.100.20",
741 "srcip4": "152.16.40.20",
747 "dstip4": "152.16.100.20",
749 "srcip4": "152.16.40.20",
755 "dstip4": "152.16.100.20",
757 "srcip4": "152.16.40.20",
764 "traffic_type": "continuous"
768 ixnet = mock.MagicMock()
769 ixnet.setMultiAttribute.return_value = [1]
770 ixnet.commit.return_value = [1]
771 ixnet.getList.side_effect = [
776 "ethernet.header.destinationAddress",
777 "ethernet.header.sourceAddress",
781 ixnet_gen = IxNextgen(ixnet)
783 result = ixnet_gen.ix_update_ether(static_traffic_params)
784 self.assertIsNone(result)
785 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
787 def test_ix_update_ether_nothing_to_do(self):
788 static_traffic_params = {
796 "dstip4": "152.16.40.20",
798 "srcip4": "152.16.100.20",
803 "dstip4": "152.16.40.20",
805 "srcip4": "152.16.100.20",
811 "dstip4": "152.16.100.20",
813 "srcip4": "152.16.40.20",
820 "traffic_type": "continuous"
830 "dstip4": "152.16.100.20",
832 "srcip4": "152.16.40.20",
838 "dstip4": "152.16.100.20",
840 "srcip4": "152.16.40.20",
846 "dstip4": "152.16.100.20",
848 "srcip4": "152.16.40.20",
855 "traffic_type": "continuous"
859 ixnet = mock.MagicMock()
860 ixnet.setMultiAttribute.return_value = [1]
861 ixnet.commit.return_value = [1]
862 ixnet.getList.side_effect = [
867 "ethernet.header.destinationAddress",
868 "ethernet.header.sourceAddress",
872 ixnet_gen = IxNextgen(ixnet)
874 result = ixnet_gen.ix_update_ether(static_traffic_params)
875 self.assertIsNone(result)
876 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)