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']
91 ixnet_gen = IxNextgen(ixnet)
92 ixnet_gen._cfg = config
94 result = ixnet_gen.ix_assign_ports()
95 self.assertIsNone(result)
96 self.assertEqual(ixnet.execute.call_count, 1)
97 self.assertEqual(ixnet.commit.call_count, 1)
98 self.assertEqual(ixnet.getAttribute.call_count, 2)
99 self.assertEqual(mock_logger.error.call_count, 1)
101 def test_ix_update_frame(self):
102 static_traffic_params = {
109 "dstmac": "00:00:00:00:00:03",
110 "framesPerSecond": True,
115 "srcmac": "00:00:00:00:00:01"
119 "dstip4": "152.16.40.20",
121 "srcip4": "152.16.100.20",
126 "dstip4": "152.16.40.20",
128 "srcip4": "152.16.100.20",
134 "dstip4": "152.16.100.20",
136 "srcip4": "152.16.40.20",
143 "traffic_type": "continuous"
151 "dstmac": "00:00:00:00:00:04",
152 "framesPerSecond": False,
153 "framesize": {"64B": "100"},
154 "srcmac": "00:00:00:00:00:01"
159 "dstip4": "152.16.100.20",
161 "srcip4": "152.16.40.20",
167 "dstip4": "152.16.100.20",
169 "srcip4": "152.16.40.20",
175 "dstip4": "152.16.100.20",
177 "srcip4": "152.16.40.20",
184 "traffic_type": "continuous"
188 ixnet = mock.MagicMock()
189 ixnet.remapIds.return_value = ["0"]
190 ixnet.setMultiAttribute.return_value = [1]
191 ixnet.commit.return_value = [1]
192 ixnet.getList.side_effect = [
197 "ethernet.header.destinationAddress",
198 "ethernet.header.sourceAddress",
202 ixnet_gen = IxNextgen(ixnet)
204 result = ixnet_gen.ix_update_frame(static_traffic_params)
205 self.assertIsNone(result)
206 self.assertEqual(ixnet.setMultiAttribute.call_count, 7)
207 self.assertEqual(ixnet.commit.call_count, 2)
209 def test_ix_update_udp(self):
210 ixnet = mock.MagicMock()
212 ixnet_gen = IxNextgen(ixnet)
214 result = ixnet_gen.ix_update_udp({})
215 self.assertIsNone(result)
217 def test_ix_update_tcp(self):
218 ixnet = mock.MagicMock()
219 ixnet_gen = IxNextgen(ixnet)
221 result = ixnet_gen.ix_update_tcp({})
222 self.assertIsNone(result)
224 def test_ix_start_traffic(self):
225 ixnet = mock.MagicMock()
226 ixnet.getList.return_value = [0]
227 ixnet.getAttribute.return_value = 'down'
229 ixnet_gen = IxNextgen(ixnet)
231 result = ixnet_gen.ix_start_traffic()
232 self.assertIsNone(result)
233 self.assertEqual(ixnet.getList.call_count, 1)
234 self.assertEqual(ixnet.execute.call_count, 3)
236 def test_ix_stop_traffic(self):
237 ixnet = mock.MagicMock()
238 ixnet.getList.return_value = [0]
240 ixnet_gen = IxNextgen(ixnet)
242 result = ixnet_gen.ix_stop_traffic()
243 self.assertIsNone(result)
244 self.assertEqual(ixnet.getList.call_count, 1)
245 self.assertEqual(ixnet.execute.call_count, 1)
247 def test_ix_get_statistics(self):
248 ixnet = mock.MagicMock()
249 ixnet.execute.return_value = ""
250 ixnet.getList.side_effect = [
252 '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
253 '::ixNet::OBJ-/statistics/view:"Port Statistics"',
256 '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
260 ixnet_gen = IxNextgen(ixnet)
262 result = ixnet_gen.ix_get_statistics()
263 self.assertIsNotNone(result)
264 self.assertEqual(ixnet.getList.call_count, 1)
265 self.assertEqual(ixnet.execute.call_count, 20)
267 def test_find_view_obj_no_where(self):
268 views = ['here', 'there', 'everywhere']
269 result = IxNextgen.find_view_obj('no_where', views)
270 self.assertEqual(result, '')
272 def test_add_ip_header_v4(self):
273 static_traffic_params = {
280 "dstmac": "00:00:00:00:00:03",
281 "framesPerSecond": True,
282 "framesize": {"64B": "100"},
283 "srcmac": "00:00:00:00:00:01"
287 "dstip4": "152.16.40.20",
289 "srcip4": "152.16.100.20",
295 "dstip4": "152.16.40.20",
297 "srcip4": "152.16.100.20",
303 "dstip4": "152.16.100.20",
305 "srcip4": "152.16.40.20",
312 "traffic_type": "continuous"
320 "dstmac": "00:00:00:00:00:04",
321 "framesPerSecond": True,
322 "framesize": {"64B": "100"},
323 "srcmac": "00:00:00:00:00:01"
328 "dstip4": "152.16.100.20",
330 "srcip4": "152.16.40.20",
336 "dstip4": "152.16.100.20",
338 "srcip4": "152.16.40.20",
344 "dstip4": "152.16.100.20",
346 "srcip4": "152.16.40.20",
353 "traffic_type": "continuous"
357 ixnet = mock.MagicMock()
358 ixnet.remapIds.return_value = ["0"]
359 ixnet.setMultiAttribute.return_value = [1]
360 ixnet.commit.return_value = [1]
361 ixnet.getList.side_effect = [[1], [0], [0], ["srcIp", "dstIp"]]
363 ixnet_gen = IxNextgen(ixnet)
365 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
366 self.assertIsNone(result)
367 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
368 self.assertEqual(ixnet.commit.call_count, 1)
370 def test_add_ip_header_v4_nothing_to_do(self):
371 static_traffic_params = {
378 "dstmac": "00:00:00:00:00:03",
379 "framesPerSecond": True,
380 "framesize": {"64B": "100"},
381 "srcmac": "00:00:00:00:00:01"
385 "dstip4": "152.16.40.20",
387 "srcip4": "152.16.100.20",
393 "dstip4": "152.16.40.20",
395 "srcip4": "152.16.100.20",
401 "dstip4": "152.16.100.20",
403 "srcip4": "152.16.40.20",
410 "traffic_type": "continuous"
418 "dstmac": "00:00:00:00:00:04",
419 "framesPerSecond": True,
420 "framesize": {"64B": "100"},
421 "srcmac": "00:00:00:00:00:01"
426 "dstip4": "152.16.100.20",
428 "srcip4": "152.16.40.20",
434 "dstip4": "152.16.100.20",
436 "srcip4": "152.16.40.20",
442 "dstip4": "152.16.100.20",
444 "srcip4": "152.16.40.20",
451 "traffic_type": "continuous"
455 ixnet = mock.MagicMock()
456 ixnet.remapIds.return_value = ["0"]
457 ixnet.setMultiAttribute.return_value = [1]
458 ixnet.commit.return_value = [1]
459 ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
461 ixnet_gen = IxNextgen(ixnet)
463 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
464 self.assertIsNone(result)
465 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
466 self.assertEqual(ixnet.commit.call_count, 1)
468 def test_add_ip_header_v6(self):
469 static_traffic_profile = {
476 "dstmac": "00:00:00:00:00:03",
477 "framesPerSecond": True,
478 "framesize": {"64B": "100"},
479 "srcmac": "00:00:00:00:00:01"
484 "dstip4": "152.16.40.20",
486 "srcip4": "152.16.100.20",
492 "dstip4": "152.16.100.20",
494 "srcip4": "152.16.40.20",
501 "traffic_type": "continuous"
509 "dstmac": "00:00:00:00:00:04",
510 "framesPerSecond": True,
511 "framesize": {"64B": "100"},
512 "srcmac": "00:00:00:00:00:01"
517 "dstip4": "152.16.100.20",
519 "srcip4": "152.16.40.20",
525 "dstip4": "152.16.100.20",
527 "srcip4": "152.16.40.20",
534 "traffic_type": "continuous"
538 ixnet = mock.MagicMock()
539 ixnet.getList.side_effect = [[1], [1], [1], ["srcIp", "dstIp"]]
540 ixnet.remapIds.return_value = ["0"]
541 ixnet.setMultiAttribute.return_value = [1]
542 ixnet.commit.return_value = [1]
544 ixnet_gen = IxNextgen(ixnet)
546 result = ixnet_gen.add_ip_header(static_traffic_profile, IP_VERSION_6)
547 self.assertIsNone(result)
548 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
549 self.assertEqual(ixnet.commit.call_count, 1)
551 def test_add_ip_header_v6_nothing_to_do(self):
552 static_traffic_params = {
559 "dstmac": "00:00:00:00:00:03",
560 "framesPerSecond": True,
561 "framesize": {"64B": "100"},
562 "srcmac": "00:00:00:00:00:01"
566 "dstip4": "152.16.40.20",
568 "srcip4": "152.16.100.20",
574 "dstip4": "152.16.40.20",
576 "srcip4": "152.16.100.20",
583 "traffic_type": "continuous"
591 "dstmac": "00:00:00:00:00:04",
592 "framesPerSecond": True,
593 "framesize": {"64B": "100"},
594 "srcmac": "00:00:00:00:00:01"
599 "dstip4": "152.16.100.20",
601 "srcip4": "152.16.40.20",
607 "dstip4": "152.16.100.20",
609 "srcip4": "152.16.40.20",
616 "traffic_type": "continuous"
620 ixnet = mock.MagicMock()
621 ixnet.getList.side_effect = [[1], [0, 1], [1], ["srcIP", "dstIP"]]
622 ixnet.remapIds.return_value = ["0"]
623 ixnet.setMultiAttribute.return_value = [1]
624 ixnet.commit.return_value = [1]
626 ixnet_gen = IxNextgen(ixnet)
628 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_6)
629 self.assertIsNone(result)
630 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
632 def test_set_random_ip_multi_attributes_bad_ip_version(self):
633 bad_ip_version = object()
634 ixnet_gen = IxNextgen(mock.Mock())
638 with self.assertRaises(ValueError):
639 ixnet_gen.set_random_ip_multi_attributes(mock1, bad_ip_version, mock2, mock3)
641 def test_get_config(self):
645 "external-interface": [
647 "virtual-interface": {
648 "vpci": "0000:07:00.1",
652 "virtual-interface": {
653 "vpci": "0001:08:01.2",
662 "dut_result_dir": "test2",
664 "ixchassis": "test4",
666 "py_lib_path": "test6",
672 'py_lib_path': 'test6',
680 'output_dir': 'test2',
685 result = IxNextgen.get_config(tg_cfg)
686 self.assertDictEqual(result, expected)
688 def test_ix_update_ether(self):
689 static_traffic_params = {
696 "dstmac": "00:00:00:00:00:03",
697 "framesPerSecond": True,
699 "srcmac": "00:00:00:00:00:01"
703 "dstip4": "152.16.40.20",
705 "srcip4": "152.16.100.20",
710 "dstip4": "152.16.40.20",
712 "srcip4": "152.16.100.20",
718 "dstip4": "152.16.100.20",
720 "srcip4": "152.16.40.20",
727 "traffic_type": "continuous"
735 "dstmac": "00:00:00:00:00:04",
736 "framesPerSecond": True,
738 "srcmac": "00:00:00:00:00:01"
743 "dstip4": "152.16.100.20",
745 "srcip4": "152.16.40.20",
751 "dstip4": "152.16.100.20",
753 "srcip4": "152.16.40.20",
759 "dstip4": "152.16.100.20",
761 "srcip4": "152.16.40.20",
768 "traffic_type": "continuous"
772 ixnet = mock.MagicMock()
773 ixnet.setMultiAttribute.return_value = [1]
774 ixnet.commit.return_value = [1]
775 ixnet.getList.side_effect = [
780 "ethernet.header.destinationAddress",
781 "ethernet.header.sourceAddress",
785 ixnet_gen = IxNextgen(ixnet)
787 result = ixnet_gen.ix_update_ether(static_traffic_params)
788 self.assertIsNone(result)
789 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
791 def test_ix_update_ether_nothing_to_do(self):
792 static_traffic_params = {
800 "dstip4": "152.16.40.20",
802 "srcip4": "152.16.100.20",
807 "dstip4": "152.16.40.20",
809 "srcip4": "152.16.100.20",
815 "dstip4": "152.16.100.20",
817 "srcip4": "152.16.40.20",
824 "traffic_type": "continuous"
834 "dstip4": "152.16.100.20",
836 "srcip4": "152.16.40.20",
842 "dstip4": "152.16.100.20",
844 "srcip4": "152.16.40.20",
850 "dstip4": "152.16.100.20",
852 "srcip4": "152.16.40.20",
859 "traffic_type": "continuous"
863 ixnet = mock.MagicMock()
864 ixnet.setMultiAttribute.return_value = [1]
865 ixnet.commit.return_value = [1]
866 ixnet.getList.side_effect = [
871 "ethernet.header.destinationAddress",
872 "ethernet.header.sourceAddress",
876 ixnet_gen = IxNextgen(ixnet)
878 result = ixnet_gen.ix_update_ether(static_traffic_params)
879 self.assertIsNone(result)
880 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)