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.
16 # Unittest for yardstick.network_services.libs.ixia_libs.IxNet
18 from __future__ import absolute_import
22 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IxNextgen
23 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_4
24 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_6
30 class TestIxNextgen(unittest.TestCase):
32 def test___init__(self):
33 ixnet_gen = IxNextgen()
34 self.assertIsNone(ixnet_gen._bidir)
36 @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
37 def test_connect(self, *args):
39 ixnet_gen = IxNextgen()
40 ixnet_gen.get_config = mock.MagicMock()
41 ixnet_gen.get_ixnet = mock.MagicMock()
43 self.assertRaises(ImportError, ixnet_gen._connect, {"py_lib_path": "/tmp"})
45 def test_clear_ixia_config(self):
46 ixnet = mock.MagicMock()
47 ixnet.execute = mock.Mock()
49 ixnet_gen = IxNextgen(ixnet)
51 result = ixnet_gen.clear_ixia_config()
52 self.assertIsNone(result)
53 self.assertEqual(ixnet.execute.call_count, 1)
55 def test_load_ixia_profile(self):
56 ixnet = mock.MagicMock()
57 ixnet.execute = mock.Mock()
59 ixnet_gen = IxNextgen(ixnet)
61 result = ixnet_gen.load_ixia_profile({})
62 self.assertIsNone(result)
63 self.assertEqual(ixnet.execute.call_count, 1)
65 def test_load_ixia_config(self):
66 ixnet = mock.MagicMock()
67 ixnet.execute = mock.Mock()
69 ixnet_gen = IxNextgen(ixnet)
71 result = ixnet_gen.ix_load_config({})
72 self.assertIsNone(result)
73 self.assertEqual(ixnet.execute.call_count, 2)
75 @mock.patch('yardstick.network_services.libs.ixia_libs.IxNet.IxNet.log')
76 def test_ix_assign_ports(self, mock_logger):
77 ixnet = mock.MagicMock()
78 ixnet.getList.return_value = [0, 1]
79 ixnet.getAttribute.side_effect = ['up', 'down']
87 ixnet_gen = IxNextgen(ixnet)
88 ixnet_gen._cfg = config
90 result = ixnet_gen.ix_assign_ports()
91 self.assertIsNone(result)
92 self.assertEqual(ixnet.execute.call_count, 1)
93 self.assertEqual(ixnet.commit.call_count, 1)
94 self.assertEqual(ixnet.getAttribute.call_count, 2)
95 self.assertEqual(mock_logger.error.call_count, 1)
97 def test_ix_update_frame(self):
98 static_traffic_params = {
105 "dstmac": "00:00:00:00:00:03",
106 "framesPerSecond": True,
111 "srcmac": "00:00:00:00:00:01"
115 "dstip4": "152.16.40.20",
117 "srcip4": "152.16.100.20",
122 "dstip4": "152.16.40.20",
124 "srcip4": "152.16.100.20",
130 "dstip4": "152.16.100.20",
132 "srcip4": "152.16.40.20",
139 "traffic_type": "continuous"
147 "dstmac": "00:00:00:00:00:04",
148 "framesPerSecond": False,
149 "framesize": {"64B": "100"},
150 "srcmac": "00:00:00:00:00:01"
155 "dstip4": "152.16.100.20",
157 "srcip4": "152.16.40.20",
163 "dstip4": "152.16.100.20",
165 "srcip4": "152.16.40.20",
171 "dstip4": "152.16.100.20",
173 "srcip4": "152.16.40.20",
180 "traffic_type": "continuous"
184 ixnet = mock.MagicMock()
185 ixnet.remapIds.return_value = ["0"]
186 ixnet.setMultiAttribute.return_value = [1]
187 ixnet.commit.return_value = [1]
188 ixnet.getList.side_effect = [
193 "ethernet.header.destinationAddress",
194 "ethernet.header.sourceAddress",
198 ixnet_gen = IxNextgen(ixnet)
200 result = ixnet_gen.ix_update_frame(static_traffic_params)
201 self.assertIsNone(result)
202 self.assertEqual(ixnet.setMultiAttribute.call_count, 7)
203 self.assertEqual(ixnet.commit.call_count, 2)
205 def test_ix_update_udp(self):
206 ixnet = mock.MagicMock()
208 ixnet_gen = IxNextgen(ixnet)
210 result = ixnet_gen.ix_update_udp({})
211 self.assertIsNone(result)
213 def test_ix_update_tcp(self):
214 ixnet = mock.MagicMock()
215 ixnet_gen = IxNextgen(ixnet)
217 result = ixnet_gen.ix_update_tcp({})
218 self.assertIsNone(result)
220 def test_ix_start_traffic(self):
221 ixnet = mock.MagicMock()
222 ixnet.getList.return_value = [0]
223 ixnet.getAttribute.return_value = 'down'
225 ixnet_gen = IxNextgen(ixnet)
227 result = ixnet_gen.ix_start_traffic()
228 self.assertIsNone(result)
229 self.assertEqual(ixnet.getList.call_count, 1)
230 self.assertEqual(ixnet.execute.call_count, 3)
232 def test_ix_stop_traffic(self):
233 ixnet = mock.MagicMock()
234 ixnet.getList.return_value = [0]
236 ixnet_gen = IxNextgen(ixnet)
238 result = ixnet_gen.ix_stop_traffic()
239 self.assertIsNone(result)
240 self.assertEqual(ixnet.getList.call_count, 1)
241 self.assertEqual(ixnet.execute.call_count, 1)
243 def test_ix_get_statistics(self):
244 ixnet = mock.MagicMock()
245 ixnet.execute.return_value = ""
246 ixnet.getList.side_effect = [
248 '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
249 '::ixNet::OBJ-/statistics/view:"Port Statistics"',
252 '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
256 ixnet_gen = IxNextgen(ixnet)
258 result = ixnet_gen.ix_get_statistics()
259 self.assertIsNotNone(result)
260 self.assertEqual(ixnet.getList.call_count, 1)
261 self.assertEqual(ixnet.execute.call_count, 20)
263 def test_find_view_obj_no_where(self):
264 views = ['here', 'there', 'everywhere']
265 result = IxNextgen.find_view_obj('no_where', views)
266 self.assertEqual(result, '')
268 def test_add_ip_header_v4(self):
269 static_traffic_params = {
276 "dstmac": "00:00:00:00:00:03",
277 "framesPerSecond": True,
278 "framesize": {"64B": "100"},
279 "srcmac": "00:00:00:00:00:01"
283 "dstip4": "152.16.40.20",
285 "srcip4": "152.16.100.20",
291 "dstip4": "152.16.40.20",
293 "srcip4": "152.16.100.20",
299 "dstip4": "152.16.100.20",
301 "srcip4": "152.16.40.20",
308 "traffic_type": "continuous"
316 "dstmac": "00:00:00:00:00:04",
317 "framesPerSecond": True,
318 "framesize": {"64B": "100"},
319 "srcmac": "00:00:00:00:00:01"
324 "dstip4": "152.16.100.20",
326 "srcip4": "152.16.40.20",
332 "dstip4": "152.16.100.20",
334 "srcip4": "152.16.40.20",
340 "dstip4": "152.16.100.20",
342 "srcip4": "152.16.40.20",
349 "traffic_type": "continuous"
353 ixnet = mock.MagicMock()
354 ixnet.remapIds.return_value = ["0"]
355 ixnet.setMultiAttribute.return_value = [1]
356 ixnet.commit.return_value = [1]
357 ixnet.getList.side_effect = [[1], [0], [0], ["srcIp", "dstIp"]]
359 ixnet_gen = IxNextgen(ixnet)
361 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
362 self.assertIsNone(result)
363 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
364 self.assertEqual(ixnet.commit.call_count, 1)
366 def test_add_ip_header_v4_nothing_to_do(self):
367 static_traffic_params = {
374 "dstmac": "00:00:00:00:00:03",
375 "framesPerSecond": True,
376 "framesize": {"64B": "100"},
377 "srcmac": "00:00:00:00:00:01"
381 "dstip4": "152.16.40.20",
383 "srcip4": "152.16.100.20",
389 "dstip4": "152.16.40.20",
391 "srcip4": "152.16.100.20",
397 "dstip4": "152.16.100.20",
399 "srcip4": "152.16.40.20",
406 "traffic_type": "continuous"
414 "dstmac": "00:00:00:00:00:04",
415 "framesPerSecond": True,
416 "framesize": {"64B": "100"},
417 "srcmac": "00:00:00:00:00:01"
422 "dstip4": "152.16.100.20",
424 "srcip4": "152.16.40.20",
430 "dstip4": "152.16.100.20",
432 "srcip4": "152.16.40.20",
438 "dstip4": "152.16.100.20",
440 "srcip4": "152.16.40.20",
447 "traffic_type": "continuous"
451 ixnet = mock.MagicMock()
452 ixnet.remapIds.return_value = ["0"]
453 ixnet.setMultiAttribute.return_value = [1]
454 ixnet.commit.return_value = [1]
455 ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
457 ixnet_gen = IxNextgen(ixnet)
459 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
460 self.assertIsNone(result)
461 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
462 self.assertEqual(ixnet.commit.call_count, 1)
464 def test_add_ip_header_v6(self):
465 static_traffic_profile = {
472 "dstmac": "00:00:00:00:00:03",
473 "framesPerSecond": True,
474 "framesize": {"64B": "100"},
475 "srcmac": "00:00:00:00:00:01"
480 "dstip4": "152.16.40.20",
482 "srcip4": "152.16.100.20",
488 "dstip4": "152.16.100.20",
490 "srcip4": "152.16.40.20",
497 "traffic_type": "continuous"
505 "dstmac": "00:00:00:00:00:04",
506 "framesPerSecond": True,
507 "framesize": {"64B": "100"},
508 "srcmac": "00:00:00:00:00:01"
513 "dstip4": "152.16.100.20",
515 "srcip4": "152.16.40.20",
521 "dstip4": "152.16.100.20",
523 "srcip4": "152.16.40.20",
530 "traffic_type": "continuous"
534 ixnet = mock.MagicMock()
535 ixnet.getList.side_effect = [[1], [1], [1], ["srcIp", "dstIp"]]
536 ixnet.remapIds.return_value = ["0"]
537 ixnet.setMultiAttribute.return_value = [1]
538 ixnet.commit.return_value = [1]
540 ixnet_gen = IxNextgen(ixnet)
542 result = ixnet_gen.add_ip_header(static_traffic_profile, IP_VERSION_6)
543 self.assertIsNone(result)
544 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
545 self.assertEqual(ixnet.commit.call_count, 1)
547 def test_add_ip_header_v6_nothing_to_do(self):
548 static_traffic_params = {
555 "dstmac": "00:00:00:00:00:03",
556 "framesPerSecond": True,
557 "framesize": {"64B": "100"},
558 "srcmac": "00:00:00:00:00:01"
562 "dstip4": "152.16.40.20",
564 "srcip4": "152.16.100.20",
570 "dstip4": "152.16.40.20",
572 "srcip4": "152.16.100.20",
579 "traffic_type": "continuous"
587 "dstmac": "00:00:00:00:00:04",
588 "framesPerSecond": True,
589 "framesize": {"64B": "100"},
590 "srcmac": "00:00:00:00:00:01"
595 "dstip4": "152.16.100.20",
597 "srcip4": "152.16.40.20",
603 "dstip4": "152.16.100.20",
605 "srcip4": "152.16.40.20",
612 "traffic_type": "continuous"
616 ixnet = mock.MagicMock()
617 ixnet.getList.side_effect = [[1], [0, 1], [1], ["srcIP", "dstIP"]]
618 ixnet.remapIds.return_value = ["0"]
619 ixnet.setMultiAttribute.return_value = [1]
620 ixnet.commit.return_value = [1]
622 ixnet_gen = IxNextgen(ixnet)
624 result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_6)
625 self.assertIsNone(result)
626 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
628 def test_set_random_ip_multi_attributes_bad_ip_version(self):
629 bad_ip_version = object()
630 ixnet_gen = IxNextgen(mock.Mock())
634 with self.assertRaises(ValueError):
635 ixnet_gen.set_random_ip_multi_attributes(mock1, bad_ip_version, mock2, mock3)
637 def test_get_config(self):
641 "external-interface": [
643 "virtual-interface": {
644 "vpci": "0000:07:00.1",
648 "virtual-interface": {
649 "vpci": "0001:08:01.2",
658 "dut_result_dir": "test2",
660 "ixchassis": "test4",
662 "py_lib_path": "test6",
668 'py_lib_path': 'test6',
672 'cards': ['0000', '0001'],
673 'ports': ['07', '08'],
674 'output_dir': 'test2',
679 result = IxNextgen.get_config(tg_cfg)
680 self.assertDictEqual(result, expected)
682 def test_ix_update_ether(self):
683 static_traffic_params = {
690 "dstmac": "00:00:00:00:00:03",
691 "framesPerSecond": True,
693 "srcmac": "00:00:00:00:00:01"
697 "dstip4": "152.16.40.20",
699 "srcip4": "152.16.100.20",
704 "dstip4": "152.16.40.20",
706 "srcip4": "152.16.100.20",
712 "dstip4": "152.16.100.20",
714 "srcip4": "152.16.40.20",
721 "traffic_type": "continuous"
729 "dstmac": "00:00:00:00:00:04",
730 "framesPerSecond": True,
732 "srcmac": "00:00:00:00:00:01"
737 "dstip4": "152.16.100.20",
739 "srcip4": "152.16.40.20",
745 "dstip4": "152.16.100.20",
747 "srcip4": "152.16.40.20",
753 "dstip4": "152.16.100.20",
755 "srcip4": "152.16.40.20",
762 "traffic_type": "continuous"
766 ixnet = mock.MagicMock()
767 ixnet.setMultiAttribute.return_value = [1]
768 ixnet.commit.return_value = [1]
769 ixnet.getList.side_effect = [
774 "ethernet.header.destinationAddress",
775 "ethernet.header.sourceAddress",
779 ixnet_gen = IxNextgen(ixnet)
781 result = ixnet_gen.ix_update_ether(static_traffic_params)
782 self.assertIsNone(result)
783 self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
785 def test_ix_update_ether_nothing_to_do(self):
786 static_traffic_params = {
794 "dstip4": "152.16.40.20",
796 "srcip4": "152.16.100.20",
801 "dstip4": "152.16.40.20",
803 "srcip4": "152.16.100.20",
809 "dstip4": "152.16.100.20",
811 "srcip4": "152.16.40.20",
818 "traffic_type": "continuous"
828 "dstip4": "152.16.100.20",
830 "srcip4": "152.16.40.20",
836 "dstip4": "152.16.100.20",
838 "srcip4": "152.16.40.20",
844 "dstip4": "152.16.100.20",
846 "srcip4": "152.16.40.20",
853 "traffic_type": "continuous"
857 ixnet = mock.MagicMock()
858 ixnet.setMultiAttribute.return_value = [1]
859 ixnet.commit.return_value = [1]
860 ixnet.getList.side_effect = [
865 "ethernet.header.destinationAddress",
866 "ethernet.header.sourceAddress",
870 ixnet_gen = IxNextgen(ixnet)
872 result = ixnet_gen.ix_update_ether(static_traffic_params)
873 self.assertIsNone(result)
874 self.assertEqual(ixnet.setMultiAttribute.call_count, 0)