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
29 class TestIxNextgen(unittest.TestCase):
31 def test___init__(self):
32 ixnet_gen = IxNextgen()
33 self.assertIsNone(ixnet_gen._bidir)
35 @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
36 def test_connect(self, mock_sys):
38 ixnet_gen = IxNextgen()
39 ixnet_gen.get_config = mock.MagicMock()
40 ixnet_gen.get_ixnet = mock.MagicMock()
42 self.assertRaises(ImportError, ixnet_gen._connect, {"py_lib_path": "/tmp"})
44 def test_clear_ixia_config(self):
45 ixnet = mock.MagicMock()
46 ixnet.execute = mock.Mock()
48 ixnet_gen = IxNextgen(ixnet)
50 result = ixnet_gen.clear_ixia_config()
51 self.assertIsNone(result)
52 self.assertEqual(ixnet.execute.call_count, 1)
54 def test_load_ixia_profile(self):
55 ixnet = mock.MagicMock()
56 ixnet.execute = mock.Mock()
58 ixnet_gen = IxNextgen(ixnet)
60 result = ixnet_gen.load_ixia_profile({})
61 self.assertIsNone(result)
62 self.assertEqual(ixnet.execute.call_count, 1)
64 def test_load_ixia_config(self):
65 ixnet = mock.MagicMock()
66 ixnet.execute = mock.Mock()
68 ixnet_gen = IxNextgen(ixnet)
70 result = ixnet_gen.ix_load_config({})
71 self.assertIsNone(result)
72 self.assertEqual(ixnet.execute.call_count, 2)
74 @mock.patch('yardstick.network_services.libs.ixia_libs.IxNet.IxNet.log')
75 def test_ix_assign_ports(self, mock_logger):
76 ixnet = mock.MagicMock()
77 ixnet.getList.return_value = [0, 1]
78 ixnet.getAttribute.side_effect = ['up', 'down']
88 ixnet_gen = IxNextgen(ixnet)
89 ixnet_gen._cfg = config
91 result = ixnet_gen.ix_assign_ports()
92 self.assertIsNone(result)
93 self.assertEqual(ixnet.execute.call_count, 1)
94 self.assertEqual(ixnet.commit.call_count, 1)
95 self.assertEqual(ixnet.getAttribute.call_count, 2)
96 self.assertEqual(mock_logger.error.call_count, 1)
98 def test_ix_update_frame(self):
99 static_traffic_params = {
106 "dstmac": "00:00:00:00:00:03",
107 "framesPerSecond": True,
112 "srcmac": "00:00:00:00:00:01"
116 "dstip4": "152.16.40.20",
118 "srcip4": "152.16.100.20",
123 "dstip4": "152.16.40.20",
125 "srcip4": "152.16.100.20",
131 "dstip4": "152.16.100.20",
133 "srcip4": "152.16.40.20",
140 "traffic_type": "continuous"
148 "dstmac": "00:00:00:00:00:04",
149 "framesPerSecond": False,
150 "framesize": {"64B": "100"},
151 "srcmac": "00:00:00:00:00:01"
156 "dstip4": "152.16.100.20",
158 "srcip4": "152.16.40.20",
164 "dstip4": "152.16.100.20",
166 "srcip4": "152.16.40.20",
172 "dstip4": "152.16.100.20",
174 "srcip4": "152.16.40.20",
181 "traffic_type": "continuous"
185 ixnet = mock.MagicMock()
186 ixnet.remapIds.return_value = ["0"]
187 ixnet.setMultiAttribute.return_value = [1]
188 ixnet.commit.return_value = [1]
189 ixnet.getList.side_effect = [
194 "ethernet.header.destinationAddress",
195 "ethernet.header.sourceAddress",
199 ixnet_gen = IxNextgen(ixnet)
201 result = ixnet_gen.ix_update_frame(static_traffic_params)
202 self.assertIsNone(result)
203 self.assertEqual(ixnet.setMultiAttribute.call_count, 7)
204 self.assertEqual(ixnet.commit.call_count, 2)
206 def test_ix_update_udp(self):
207 ixnet = mock.MagicMock()
209 ixnet_gen = IxNextgen(ixnet)
211 result = ixnet_gen.ix_update_udp({})
212 self.assertIsNone(result)
214 def test_ix_update_tcp(self):
215 ixnet = mock.MagicMock()
216 ixnet_gen = IxNextgen(ixnet)
218 result = ixnet_gen.ix_update_tcp({})
219 self.assertIsNone(result)
221 def test_ix_start_traffic(self):
222 ixnet = mock.MagicMock()
223 ixnet.getList.return_value = [0]
224 ixnet.getAttribute.return_value = 'down'
226 ixnet_gen = IxNextgen(ixnet)
228 result = ixnet_gen.ix_start_traffic()
229 self.assertIsNone(result)
230 self.assertEqual(ixnet.getList.call_count, 1)
231 self.assertEqual(ixnet.execute.call_count, 3)
233 def test_ix_stop_traffic(self):
234 ixnet = mock.MagicMock()
235 ixnet.getList.return_value = [0]
237 ixnet_gen = IxNextgen(ixnet)
239 result = ixnet_gen.ix_stop_traffic()
240 self.assertIsNone(result)
241 self.assertEqual(ixnet.getList.call_count, 1)
242 self.assertEqual(ixnet.execute.call_count, 1)
244 def test_ix_get_statistics(self):
245 ixnet = mock.MagicMock()
246 ixnet.execute.return_value = ""
247 ixnet.getList.side_effect = [
249 '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
250 '::ixNet::OBJ-/statistics/view:"Port Statistics"',
253 '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
257 ixnet_gen = IxNextgen(ixnet)
259 result = ixnet_gen.ix_get_statistics()
260 self.assertIsNotNone(result)
261 self.assertEqual(ixnet.getList.call_count, 1)
262 self.assertEqual(ixnet.execute.call_count, 20)
264 def test_find_view_obj_no_where(self):
265 views = ['here', 'there', 'everywhere']
266 result = IxNextgen.find_view_obj('no_where', views)
267 self.assertEqual(result, '')
269 def test_add_ip_header_v4(self):
270 static_traffic_params = {
277 "dstmac": "00:00:00:00:00:03",
278 "framesPerSecond": True,
279 "framesize": {"64B": "100"},
280 "srcmac": "00:00:00:00:00:01"
284 "dstip4": "152.16.40.20",
286 "srcip4": "152.16.100.20",
292 "dstip4": "152.16.40.20",
294 "srcip4": "152.16.100.20",
300 "dstip4": "152.16.100.20",
302 "srcip4": "152.16.40.20",
309 "traffic_type": "continuous"
317 "dstmac": "00:00:00:00:00:04",
318 "framesPerSecond": True,
319 "framesize": {"64B": "100"},
320 "srcmac": "00:00:00:00:00:01"
325 "dstip4": "152.16.100.20",
327 "srcip4": "152.16.40.20",
333 "dstip4": "152.16.100.20",
335 "srcip4": "152.16.40.20",
341 "dstip4": "152.16.100.20",
343 "srcip4": "152.16.40.20",
350 "traffic_type": "continuous"
354 ixnet = mock.MagicMock()
355 ixnet.remapIds.return_value = ["0"]
356 ixnet.setMultiAttribute.return_value = [1]
357 ixnet.commit.return_value = [1]
358 ixnet.getList.side_effect = [[1], [0], [0], ["srcIp", "dstIp"]]
360 ixnet_gen = IxNextgen(ixnet)
362 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
363 self.assertIsNone(result)
364 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
365 self.assertEqual(ixnet.commit.call_count, 1)
367 def test_add_ip_header_v4_nothing_to_do(self):
368 static_traffic_params = {
375 "dstmac": "00:00:00:00:00:03",
376 "framesPerSecond": True,
377 "framesize": {"64B": "100"},
378 "srcmac": "00:00:00:00:00:01"
382 "dstip4": "152.16.40.20",
384 "srcip4": "152.16.100.20",
390 "dstip4": "152.16.40.20",
392 "srcip4": "152.16.100.20",
398 "dstip4": "152.16.100.20",
400 "srcip4": "152.16.40.20",
407 "traffic_type": "continuous"
415 "dstmac": "00:00:00:00:00:04",
416 "framesPerSecond": True,
417 "framesize": {"64B": "100"},
418 "srcmac": "00:00:00:00:00:01"
423 "dstip4": "152.16.100.20",
425 "srcip4": "152.16.40.20",
431 "dstip4": "152.16.100.20",
433 "srcip4": "152.16.40.20",
439 "dstip4": "152.16.100.20",
441 "srcip4": "152.16.40.20",
448 "traffic_type": "continuous"
452 ixnet = mock.MagicMock()
453 ixnet.remapIds.return_value = ["0"]
454 ixnet.setMultiAttribute.return_value = [1]
455 ixnet.commit.return_value = [1]
456 ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
458 ixnet_gen = IxNextgen(ixnet)
460 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
461 self.assertIsNone(result)
462 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
463 self.assertEqual(ixnet.commit.call_count, 1)
465 def test_add_ip_header_v6(self):
466 static_traffic_profile = {
473 "dstmac": "00:00:00:00:00:03",
474 "framesPerSecond": True,
475 "framesize": {"64B": "100"},
476 "srcmac": "00:00:00:00:00:01"
481 "dstip4": "152.16.40.20",
483 "srcip4": "152.16.100.20",
489 "dstip4": "152.16.100.20",
491 "srcip4": "152.16.40.20",
498 "traffic_type": "continuous"
506 "dstmac": "00:00:00:00:00:04",
507 "framesPerSecond": True,
508 "framesize": {"64B": "100"},
509 "srcmac": "00:00:00:00:00:01"
514 "dstip4": "152.16.100.20",
516 "srcip4": "152.16.40.20",
522 "dstip4": "152.16.100.20",
524 "srcip4": "152.16.40.20",
531 "traffic_type": "continuous"
535 ixnet = mock.MagicMock()
536 ixnet.getList.side_effect = [[1], [1], [1], ["srcIp", "dstIp"]]
537 ixnet.remapIds.return_value = ["0"]
538 ixnet.setMultiAttribute.return_value = [1]
539 ixnet.commit.return_value = [1]
541 ixnet_gen = IxNextgen(ixnet)
543 result = ixnet_gen.add_ip_header(static_traffic_profile, IP_VERSION_6)
544 self.assertIsNone(result)
545 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
546 self.assertEqual(ixnet.commit.call_count, 1)
548 def test_add_ip_header_v6_nothing_to_do(self):
549 static_traffic_params = {
556 "dstmac": "00:00:00:00:00:03",
557 "framesPerSecond": True,
558 "framesize": {"64B": "100"},
559 "srcmac": "00:00:00:00:00:01"
563 "dstip4": "152.16.40.20",
565 "srcip4": "152.16.100.20",
571 "dstip4": "152.16.40.20",
573 "srcip4": "152.16.100.20",
580 "traffic_type": "continuous"
588 "dstmac": "00:00:00:00:00:04",
589 "framesPerSecond": True,
590 "framesize": {"64B": "100"},
591 "srcmac": "00:00:00:00:00:01"
596 "dstip4": "152.16.100.20",
598 "srcip4": "152.16.40.20",
604 "dstip4": "152.16.100.20",
606 "srcip4": "152.16.40.20",
613 "traffic_type": "continuous"
617 ixnet = mock.MagicMock()
618 ixnet.getList.side_effect = [[1], [0, 1], [1], ["srcIP", "dstIP"]]
619 ixnet.remapIds.return_value = ["0"]
620 ixnet.setMultiAttribute.return_value = [1]
621 ixnet.commit.return_value = [1]
623 ixnet_gen = IxNextgen(ixnet)
625 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_6)
626 self.assertIsNone(result)
627 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
629 def test_set_random_ip_multi_attributes_bad_ip_version(self):
630 bad_ip_version = object()
631 ixnet_gen = IxNextgen(mock.Mock())
635 with self.assertRaises(ValueError):
636 ixnet_gen.set_random_ip_multi_attributes(mock1, bad_ip_version, mock2, mock3)
638 def test_get_config(self):
642 "external-interface": [
644 "virtual-interface": {
645 "vpci": "0000:07:00.1",
649 "virtual-interface": {
650 "vpci": "0001:08:01.2",
659 "dut_result_dir": "test2",
661 "ixchassis": "test4",
663 "py_lib_path": "test6",
669 'py_lib_path': 'test6',
677 'output_dir': 'test2',
682 result = IxNextgen.get_config(tg_cfg)
683 self.assertDictEqual(result, expected)
685 def test_ix_update_ether(self):
686 static_traffic_params = {
693 "dstmac": "00:00:00:00:00:03",
694 "framesPerSecond": True,
696 "srcmac": "00:00:00:00:00:01"
700 "dstip4": "152.16.40.20",
702 "srcip4": "152.16.100.20",
707 "dstip4": "152.16.40.20",
709 "srcip4": "152.16.100.20",
715 "dstip4": "152.16.100.20",
717 "srcip4": "152.16.40.20",
724 "traffic_type": "continuous"
732 "dstmac": "00:00:00:00:00:04",
733 "framesPerSecond": True,
735 "srcmac": "00:00:00:00:00:01"
740 "dstip4": "152.16.100.20",
742 "srcip4": "152.16.40.20",
748 "dstip4": "152.16.100.20",
750 "srcip4": "152.16.40.20",
756 "dstip4": "152.16.100.20",
758 "srcip4": "152.16.40.20",
765 "traffic_type": "continuous"
769 ixnet = mock.MagicMock()
770 ixnet.setMultiAttribute.return_value = [1]
771 ixnet.commit.return_value = [1]
772 ixnet.getList.side_effect = [
777 "ethernet.header.destinationAddress",
778 "ethernet.header.sourceAddress",
782 ixnet_gen = IxNextgen(ixnet)
784 result = ixnet_gen.ix_update_ether(static_traffic_params)
785 self.assertIsNone(result)
786 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
788 def test_ix_update_ether_nothing_to_do(self):
789 static_traffic_params = {
797 "dstip4": "152.16.40.20",
799 "srcip4": "152.16.100.20",
804 "dstip4": "152.16.40.20",
806 "srcip4": "152.16.100.20",
812 "dstip4": "152.16.100.20",
814 "srcip4": "152.16.40.20",
821 "traffic_type": "continuous"
831 "dstip4": "152.16.100.20",
833 "srcip4": "152.16.40.20",
839 "dstip4": "152.16.100.20",
841 "srcip4": "152.16.40.20",
847 "dstip4": "152.16.100.20",
849 "srcip4": "152.16.40.20",
856 "traffic_type": "continuous"
860 ixnet = mock.MagicMock()
861 ixnet.setMultiAttribute.return_value = [1]
862 ixnet.commit.return_value = [1]
863 ixnet.getList.side_effect = [
868 "ethernet.header.destinationAddress",
869 "ethernet.header.sourceAddress",
873 ixnet_gen = IxNextgen(ixnet)
875 result = ixnet_gen.ix_update_ether(static_traffic_params)
876 self.assertIsNone(result)
877 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)