1 # Copyright (c) 2016-2017 Intel Corporation
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
19 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IxNextgen
20 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_4
21 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_6
27 class TestIxNextgen(unittest.TestCase):
29 def test___init__(self):
30 ixnet_gen = IxNextgen()
31 self.assertIsNone(ixnet_gen._bidir)
33 @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
34 def test_connect(self, *args):
36 ixnet_gen = IxNextgen()
37 ixnet_gen.get_config = mock.MagicMock()
38 ixnet_gen.get_ixnet = mock.MagicMock()
40 self.assertRaises(ImportError, ixnet_gen._connect,
41 {"py_lib_path": "/tmp"})
43 def test_clear_ixia_config(self):
44 ixnet = mock.MagicMock()
45 ixnet.execute = mock.Mock()
47 ixnet_gen = IxNextgen(ixnet)
49 result = ixnet_gen.clear_ixia_config()
50 self.assertIsNone(result)
51 self.assertEqual(ixnet.execute.call_count, 1)
53 def test_load_ixia_profile(self):
54 ixnet = mock.MagicMock()
55 ixnet.execute = mock.Mock()
57 ixnet_gen = IxNextgen(ixnet)
59 result = ixnet_gen.load_ixia_profile({})
60 self.assertIsNone(result)
61 self.assertEqual(ixnet.execute.call_count, 1)
63 def test_load_ixia_config(self):
64 ixnet = mock.MagicMock()
65 ixnet.execute = mock.Mock()
67 ixnet_gen = IxNextgen(ixnet)
69 result = ixnet_gen.ix_load_config({})
70 self.assertIsNone(result)
71 self.assertEqual(ixnet.execute.call_count, 2)
73 @mock.patch('yardstick.network_services.libs.ixia_libs.IxNet.IxNet.log')
74 def test_ix_assign_ports(self, mock_logger):
75 ixnet = mock.MagicMock()
76 ixnet.getList.return_value = [0, 1]
77 ixnet.getAttribute.side_effect = ['up', 'down']
85 ixnet_gen = IxNextgen(ixnet)
86 ixnet_gen._cfg = config
88 result = ixnet_gen.ix_assign_ports()
89 self.assertIsNone(result)
90 self.assertEqual(ixnet.execute.call_count, 1)
91 self.assertEqual(ixnet.commit.call_count, 1)
92 self.assertEqual(ixnet.getAttribute.call_count, 2)
93 self.assertEqual(mock_logger.error.call_count, 1)
95 def test_ix_update_frame(self):
96 static_traffic_params = {
103 "dstmac": "00:00:00:00:00:03",
104 "framesPerSecond": True,
109 "srcmac": "00:00:00:00:00:01"
113 "dstip4": "152.16.40.20",
115 "srcip4": "152.16.100.20",
120 "dstip4": "152.16.40.20",
122 "srcip4": "152.16.100.20",
128 "dstip4": "152.16.100.20",
130 "srcip4": "152.16.40.20",
137 "traffic_type": "continuous"
145 "dstmac": "00:00:00:00:00:04",
146 "framesPerSecond": False,
147 "framesize": {"64B": "100"},
148 "srcmac": "00:00:00:00:00:01"
153 "dstip4": "152.16.100.20",
155 "srcip4": "152.16.40.20",
161 "dstip4": "152.16.100.20",
163 "srcip4": "152.16.40.20",
169 "dstip4": "152.16.100.20",
171 "srcip4": "152.16.40.20",
178 "traffic_type": "continuous"
182 ixnet = mock.MagicMock()
183 ixnet.remapIds.return_value = ["0"]
184 ixnet.setMultiAttribute.return_value = [1]
185 ixnet.commit.return_value = [1]
186 ixnet.getList.side_effect = [
191 "ethernet.header.destinationAddress",
192 "ethernet.header.sourceAddress",
196 ixnet_gen = IxNextgen(ixnet)
198 result = ixnet_gen.ix_update_frame(static_traffic_params)
199 self.assertIsNone(result)
200 self.assertEqual(ixnet.setMultiAttribute.call_count, 7)
201 self.assertEqual(ixnet.commit.call_count, 2)
203 def test_ix_update_udp(self):
204 ixnet = mock.MagicMock()
206 ixnet_gen = IxNextgen(ixnet)
208 result = ixnet_gen.ix_update_udp({})
209 self.assertIsNone(result)
211 def test_ix_update_tcp(self):
212 ixnet = mock.MagicMock()
213 ixnet_gen = IxNextgen(ixnet)
215 result = ixnet_gen.ix_update_tcp({})
216 self.assertIsNone(result)
218 def test_ix_start_traffic(self):
219 ixnet = mock.MagicMock()
220 ixnet.getList.return_value = [0]
221 ixnet.getAttribute.return_value = 'down'
223 ixnet_gen = IxNextgen(ixnet)
225 result = ixnet_gen.ix_start_traffic()
226 self.assertIsNone(result)
227 self.assertEqual(ixnet.getList.call_count, 1)
228 self.assertEqual(ixnet.execute.call_count, 3)
230 def test_ix_stop_traffic(self):
231 ixnet = mock.MagicMock()
232 ixnet.getList.return_value = [0]
234 ixnet_gen = IxNextgen(ixnet)
236 result = ixnet_gen.ix_stop_traffic()
237 self.assertIsNone(result)
238 self.assertEqual(ixnet.getList.call_count, 1)
239 self.assertEqual(ixnet.execute.call_count, 1)
241 def test_ix_get_statistics(self):
242 ixnet = mock.MagicMock()
243 ixnet.execute.return_value = ""
244 ixnet.getList.side_effect = [
246 '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
247 '::ixNet::OBJ-/statistics/view:"Port Statistics"',
250 '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
254 ixnet_gen = IxNextgen(ixnet)
256 result = ixnet_gen.ix_get_statistics()
257 self.assertIsNotNone(result)
258 self.assertEqual(ixnet.getList.call_count, 1)
259 self.assertEqual(ixnet.execute.call_count, 20)
261 def test_find_view_obj_no_where(self):
262 views = ['here', 'there', 'everywhere']
263 result = IxNextgen.find_view_obj('no_where', views)
264 self.assertEqual(result, '')
266 def test_add_ip_header_v4(self):
267 static_traffic_params = {
274 "dstmac": "00:00:00:00:00:03",
275 "framesPerSecond": True,
276 "framesize": {"64B": "100"},
277 "srcmac": "00:00:00:00:00:01"
281 "dstip4": "152.16.40.20",
283 "srcip4": "152.16.100.20",
289 "dstip4": "152.16.40.20",
291 "srcip4": "152.16.100.20",
297 "dstip4": "152.16.100.20",
299 "srcip4": "152.16.40.20",
306 "traffic_type": "continuous"
314 "dstmac": "00:00:00:00:00:04",
315 "framesPerSecond": True,
316 "framesize": {"64B": "100"},
317 "srcmac": "00:00:00:00:00:01"
322 "dstip4": "152.16.100.20",
324 "srcip4": "152.16.40.20",
330 "dstip4": "152.16.100.20",
332 "srcip4": "152.16.40.20",
338 "dstip4": "152.16.100.20",
340 "srcip4": "152.16.40.20",
347 "traffic_type": "continuous"
351 ixnet = mock.MagicMock()
352 ixnet.remapIds.return_value = ["0"]
353 ixnet.setMultiAttribute.return_value = [1]
354 ixnet.commit.return_value = [1]
355 ixnet.getList.side_effect = [[1], [0], [0], ["srcIp", "dstIp"]]
357 ixnet_gen = IxNextgen(ixnet)
359 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
360 self.assertIsNone(result)
361 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
362 self.assertEqual(ixnet.commit.call_count, 1)
364 def test_add_ip_header_v4_nothing_to_do(self):
365 static_traffic_params = {
372 "dstmac": "00:00:00:00:00:03",
373 "framesPerSecond": True,
374 "framesize": {"64B": "100"},
375 "srcmac": "00:00:00:00:00:01"
379 "dstip4": "152.16.40.20",
381 "srcip4": "152.16.100.20",
387 "dstip4": "152.16.40.20",
389 "srcip4": "152.16.100.20",
395 "dstip4": "152.16.100.20",
397 "srcip4": "152.16.40.20",
404 "traffic_type": "continuous"
412 "dstmac": "00:00:00:00:00:04",
413 "framesPerSecond": True,
414 "framesize": {"64B": "100"},
415 "srcmac": "00:00:00:00:00:01"
420 "dstip4": "152.16.100.20",
422 "srcip4": "152.16.40.20",
428 "dstip4": "152.16.100.20",
430 "srcip4": "152.16.40.20",
436 "dstip4": "152.16.100.20",
438 "srcip4": "152.16.40.20",
445 "traffic_type": "continuous"
449 ixnet = mock.MagicMock()
450 ixnet.remapIds.return_value = ["0"]
451 ixnet.setMultiAttribute.return_value = [1]
452 ixnet.commit.return_value = [1]
453 ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
455 ixnet_gen = IxNextgen(ixnet)
457 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
458 self.assertIsNone(result)
459 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
460 self.assertEqual(ixnet.commit.call_count, 1)
462 def test_add_ip_header_v6(self):
463 static_traffic_profile = {
470 "dstmac": "00:00:00:00:00:03",
471 "framesPerSecond": True,
472 "framesize": {"64B": "100"},
473 "srcmac": "00:00:00:00:00:01"
478 "dstip4": "152.16.40.20",
480 "srcip4": "152.16.100.20",
486 "dstip4": "152.16.100.20",
488 "srcip4": "152.16.40.20",
495 "traffic_type": "continuous"
503 "dstmac": "00:00:00:00:00:04",
504 "framesPerSecond": True,
505 "framesize": {"64B": "100"},
506 "srcmac": "00:00:00:00:00:01"
511 "dstip4": "152.16.100.20",
513 "srcip4": "152.16.40.20",
519 "dstip4": "152.16.100.20",
521 "srcip4": "152.16.40.20",
528 "traffic_type": "continuous"
532 ixnet = mock.MagicMock()
533 ixnet.getList.side_effect = [[1], [1], [1], ["srcIp", "dstIp"]]
534 ixnet.remapIds.return_value = ["0"]
535 ixnet.setMultiAttribute.return_value = [1]
536 ixnet.commit.return_value = [1]
538 ixnet_gen = IxNextgen(ixnet)
540 result = ixnet_gen.add_ip_header(static_traffic_profile, IP_VERSION_6)
541 self.assertIsNone(result)
542 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
543 self.assertEqual(ixnet.commit.call_count, 1)
545 def test_add_ip_header_v6_nothing_to_do(self):
546 static_traffic_params = {
553 "dstmac": "00:00:00:00:00:03",
554 "framesPerSecond": True,
555 "framesize": {"64B": "100"},
556 "srcmac": "00:00:00:00:00:01"
560 "dstip4": "152.16.40.20",
562 "srcip4": "152.16.100.20",
568 "dstip4": "152.16.40.20",
570 "srcip4": "152.16.100.20",
577 "traffic_type": "continuous"
585 "dstmac": "00:00:00:00:00:04",
586 "framesPerSecond": True,
587 "framesize": {"64B": "100"},
588 "srcmac": "00:00:00:00:00:01"
593 "dstip4": "152.16.100.20",
595 "srcip4": "152.16.40.20",
601 "dstip4": "152.16.100.20",
603 "srcip4": "152.16.40.20",
610 "traffic_type": "continuous"
614 ixnet = mock.MagicMock()
615 ixnet.getList.side_effect = [[1], [0, 1], [1], ["srcIP", "dstIP"]]
616 ixnet.remapIds.return_value = ["0"]
617 ixnet.setMultiAttribute.return_value = [1]
618 ixnet.commit.return_value = [1]
620 ixnet_gen = IxNextgen(ixnet)
622 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_6)
623 self.assertIsNone(result)
624 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
626 def test_set_random_ip_multi_attributes_bad_ip_version(self):
627 bad_ip_version = object()
628 ixnet_gen = IxNextgen(mock.Mock())
629 with self.assertRaises(ValueError):
630 ixnet_gen.set_random_ip_multi_attributes(
631 mock.Mock(), bad_ip_version, mock.Mock(), mock.Mock())
633 def test_get_config(self):
637 "external-interface": [
639 "virtual-interface": {
640 "vpci": "0000:07:00.1",
644 "virtual-interface": {
645 "vpci": "0001:08:01.2",
654 "dut_result_dir": "test2",
656 "ixchassis": "test4",
658 "py_lib_path": "test6",
664 'py_lib_path': 'test6',
668 'cards': ['0000', '0001'],
669 'ports': ['07', '08'],
670 'output_dir': 'test2',
675 result = IxNextgen.get_config(tg_cfg)
676 self.assertDictEqual(result, expected)
678 def test_ix_update_ether(self):
679 static_traffic_params = {
686 "dstmac": "00:00:00:00:00:03",
687 "framesPerSecond": True,
689 "srcmac": "00:00:00:00:00:01"
693 "dstip4": "152.16.40.20",
695 "srcip4": "152.16.100.20",
700 "dstip4": "152.16.40.20",
702 "srcip4": "152.16.100.20",
708 "dstip4": "152.16.100.20",
710 "srcip4": "152.16.40.20",
717 "traffic_type": "continuous"
725 "dstmac": "00:00:00:00:00:04",
726 "framesPerSecond": True,
728 "srcmac": "00:00:00:00:00:01"
733 "dstip4": "152.16.100.20",
735 "srcip4": "152.16.40.20",
741 "dstip4": "152.16.100.20",
743 "srcip4": "152.16.40.20",
749 "dstip4": "152.16.100.20",
751 "srcip4": "152.16.40.20",
758 "traffic_type": "continuous"
762 ixnet = mock.MagicMock()
763 ixnet.setMultiAttribute.return_value = [1]
764 ixnet.commit.return_value = [1]
765 ixnet.getList.side_effect = [
770 "ethernet.header.destinationAddress",
771 "ethernet.header.sourceAddress",
775 ixnet_gen = IxNextgen(ixnet)
777 result = ixnet_gen.ix_update_ether(static_traffic_params)
778 self.assertIsNone(result)
779 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
781 def test_ix_update_ether_nothing_to_do(self):
782 static_traffic_params = {
790 "dstip4": "152.16.40.20",
792 "srcip4": "152.16.100.20",
797 "dstip4": "152.16.40.20",
799 "srcip4": "152.16.100.20",
805 "dstip4": "152.16.100.20",
807 "srcip4": "152.16.40.20",
814 "traffic_type": "continuous"
824 "dstip4": "152.16.100.20",
826 "srcip4": "152.16.40.20",
832 "dstip4": "152.16.100.20",
834 "srcip4": "152.16.40.20",
840 "dstip4": "152.16.100.20",
842 "srcip4": "152.16.40.20",
849 "traffic_type": "continuous"
853 ixnet = mock.MagicMock()
854 ixnet.setMultiAttribute.return_value = [1]
855 ixnet.commit.return_value = [1]
856 ixnet.getList.side_effect = [
861 "ethernet.header.destinationAddress",
862 "ethernet.header.sourceAddress",
866 ixnet_gen = IxNextgen(ixnet)
868 result = ixnet_gen.ix_update_ether(static_traffic_params)
869 self.assertIsNone(result)
870 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)