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.
20 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IxNextgen
21 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_4
22 from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_6
28 class TestIxNextgen(unittest.TestCase):
30 def test___init__(self):
31 ixnet_gen = IxNextgen()
32 self.assertIsNone(ixnet_gen._bidir)
34 @mock.patch.object(IxNetwork, 'IxNet')
35 def test_connect(self, mock_ixnet):
36 ixnet_instance = mock.Mock()
37 mock_ixnet.return_value = ixnet_instance
38 ixnet_gen = IxNextgen()
39 with mock.patch.object(ixnet_gen, 'get_config') as mock_config:
40 mock_config.return_value = {'machine': 'machine_fake',
43 ixnet_gen._connect(mock.ANY)
45 ixnet_instance.connect.assert_called_once_with(
46 'machine_fake', '-port', 'port_fake', '-version', '12345')
47 mock_config.assert_called_once()
49 def test_clear_ixia_config(self):
50 ixnet = mock.MagicMock()
51 ixnet.execute = mock.Mock()
53 ixnet_gen = IxNextgen(ixnet)
55 result = ixnet_gen.clear_ixia_config()
56 self.assertIsNone(result)
57 self.assertEqual(ixnet.execute.call_count, 1)
59 def test_load_ixia_profile(self):
60 ixnet = mock.MagicMock()
61 ixnet.execute = mock.Mock()
63 ixnet_gen = IxNextgen(ixnet)
65 result = ixnet_gen.load_ixia_profile({})
66 self.assertIsNone(result)
67 self.assertEqual(ixnet.execute.call_count, 1)
69 def test_load_ixia_config(self):
70 ixnet = mock.MagicMock()
71 ixnet.execute = mock.Mock()
73 ixnet_gen = IxNextgen(ixnet)
75 result = ixnet_gen.ix_load_config({})
76 self.assertIsNone(result)
77 self.assertEqual(ixnet.execute.call_count, 2)
79 @mock.patch('yardstick.network_services.libs.ixia_libs.IxNet.IxNet.log')
80 def test_ix_assign_ports(self, mock_logger):
81 ixnet = mock.MagicMock()
82 ixnet.getList.return_value = [0, 1]
83 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())
635 with self.assertRaises(ValueError):
636 ixnet_gen.set_random_ip_multi_attributes(
637 mock.Mock(), bad_ip_version, mock.Mock(), mock.Mock())
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",
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)