Document for Euphrates test case results
[yardstick.git] / tests / unit / network_services / libs / ixia_libs / test_IxNet.py
1 # Copyright (c) 2016-2017 Intel Corporation
2 #
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
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14 #
15
16 # Unittest for yardstick.network_services.libs.ixia_libs.IxNet
17
18 from __future__ import absolute_import
19 import unittest
20 import mock
21
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
25
26
27 UPLINK = "uplink"
28 DOWNLINK = "downlink"
29
30 class TestIxNextgen(unittest.TestCase):
31
32     def test___init__(self):
33         ixnet_gen = IxNextgen()
34         self.assertIsNone(ixnet_gen._bidir)
35
36     @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
37     def test_connect(self, *args):
38
39         ixnet_gen = IxNextgen()
40         ixnet_gen.get_config = mock.MagicMock()
41         ixnet_gen.get_ixnet = mock.MagicMock()
42
43         self.assertRaises(ImportError, ixnet_gen._connect, {"py_lib_path": "/tmp"})
44
45     def test_clear_ixia_config(self):
46         ixnet = mock.MagicMock()
47         ixnet.execute = mock.Mock()
48
49         ixnet_gen = IxNextgen(ixnet)
50
51         result = ixnet_gen.clear_ixia_config()
52         self.assertIsNone(result)
53         self.assertEqual(ixnet.execute.call_count, 1)
54
55     def test_load_ixia_profile(self):
56         ixnet = mock.MagicMock()
57         ixnet.execute = mock.Mock()
58
59         ixnet_gen = IxNextgen(ixnet)
60
61         result = ixnet_gen.load_ixia_profile({})
62         self.assertIsNone(result)
63         self.assertEqual(ixnet.execute.call_count, 1)
64
65     def test_load_ixia_config(self):
66         ixnet = mock.MagicMock()
67         ixnet.execute = mock.Mock()
68
69         ixnet_gen = IxNextgen(ixnet)
70
71         result = ixnet_gen.ix_load_config({})
72         self.assertIsNone(result)
73         self.assertEqual(ixnet.execute.call_count, 2)
74
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']
80
81         config = {
82             'chassis': '1.1.1.1',
83             'cards': ['1', '2'],
84             'ports': ['2', '2'],
85         }
86
87         ixnet_gen = IxNextgen(ixnet)
88         ixnet_gen._cfg = config
89
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)
96
97     def test_ix_update_frame(self):
98         static_traffic_params = {
99             UPLINK: {
100                 "id": 1,
101                 "bidir": "False",
102                 "duration": 60,
103                 "iload": "100",
104                 "outer_l2": {
105                     "dstmac": "00:00:00:00:00:03",
106                     "framesPerSecond": True,
107                     "framesize": {
108                         "64B": "100",
109                         "1KB": "0",
110                     },
111                     "srcmac": "00:00:00:00:00:01"
112                 },
113                 "outer_l3": {
114                     "dscp": 0,
115                     "dstip4": "152.16.40.20",
116                     "proto": "udp",
117                     "srcip4": "152.16.100.20",
118                     "ttl": 32
119                 },
120                 "outer_l3v4": {
121                     "dscp": 0,
122                     "dstip4": "152.16.40.20",
123                     "proto": "udp",
124                     "srcip4": "152.16.100.20",
125                     "ttl": 32
126                 },
127                 "outer_l3v6": {
128                     "count": 1024,
129                     "dscp": 0,
130                     "dstip4": "152.16.100.20",
131                     "proto": "udp",
132                     "srcip4": "152.16.40.20",
133                     "ttl": 32
134                 },
135                 "outer_l4": {
136                     "dstport": "2001",
137                     "srcport": "1234"
138                 },
139                 "traffic_type": "continuous"
140             },
141             DOWNLINK: {
142                 "id": 2,
143                 "bidir": "False",
144                 "duration": 60,
145                 "iload": "100",
146                 "outer_l2": {
147                     "dstmac": "00:00:00:00:00:04",
148                     "framesPerSecond": False,
149                     "framesize": {"64B": "100"},
150                     "srcmac": "00:00:00:00:00:01"
151                 },
152                 "outer_l3": {
153                     "count": 1024,
154                     "dscp": 0,
155                     "dstip4": "152.16.100.20",
156                     "proto": "udp",
157                     "srcip4": "152.16.40.20",
158                     "ttl": 32
159                 },
160                 "outer_l3v4": {
161                     "count": 1024,
162                     "dscp": 0,
163                     "dstip4": "152.16.100.20",
164                     "proto": "udp",
165                     "srcip4": "152.16.40.20",
166                     "ttl": 32
167                 },
168                 "outer_l3v6": {
169                     "count": 1024,
170                     "dscp": 0,
171                     "dstip4": "152.16.100.20",
172                     "proto": "udp",
173                     "srcip4": "152.16.40.20",
174                     "ttl": 32
175                 },
176                 "outer_l4": {
177                     "dstport": "1234",
178                     "srcport": "2001"
179                 },
180                 "traffic_type": "continuous"
181             }
182         }
183
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 = [
189             [1],
190             [1],
191             [1],
192             [
193                 "ethernet.header.destinationAddress",
194                 "ethernet.header.sourceAddress",
195             ],
196         ]
197
198         ixnet_gen = IxNextgen(ixnet)
199
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)
204
205     def test_ix_update_udp(self):
206         ixnet = mock.MagicMock()
207
208         ixnet_gen = IxNextgen(ixnet)
209
210         result = ixnet_gen.ix_update_udp({})
211         self.assertIsNone(result)
212
213     def test_ix_update_tcp(self):
214         ixnet = mock.MagicMock()
215         ixnet_gen = IxNextgen(ixnet)
216
217         result = ixnet_gen.ix_update_tcp({})
218         self.assertIsNone(result)
219
220     def test_ix_start_traffic(self):
221         ixnet = mock.MagicMock()
222         ixnet.getList.return_value = [0]
223         ixnet.getAttribute.return_value = 'down'
224
225         ixnet_gen = IxNextgen(ixnet)
226
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)
231
232     def test_ix_stop_traffic(self):
233         ixnet = mock.MagicMock()
234         ixnet.getList.return_value = [0]
235
236         ixnet_gen = IxNextgen(ixnet)
237
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)
242
243     def test_ix_get_statistics(self):
244         ixnet = mock.MagicMock()
245         ixnet.execute.return_value = ""
246         ixnet.getList.side_effect = [
247             [
248                 '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
249                 '::ixNet::OBJ-/statistics/view:"Port Statistics"',
250             ],
251             [
252                 '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
253             ],
254         ]
255
256         ixnet_gen = IxNextgen(ixnet)
257
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)
262
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, '')
267
268     def test_add_ip_header_v4(self):
269         static_traffic_params = {
270             "uplink_0": {
271                 "id": 1,
272                 "bidir": "False",
273                 "duration": 60,
274                 "iload": "100",
275                 "outer_l2": {
276                     "dstmac": "00:00:00:00:00:03",
277                     "framesPerSecond": True,
278                     "framesize": {"64B": "100"},
279                     "srcmac": "00:00:00:00:00:01"
280                 },
281                 "outer_l3": {
282                     "dscp": 0,
283                     "dstip4": "152.16.40.20",
284                     "proto": "udp",
285                     "srcip4": "152.16.100.20",
286                     "count": 1024,
287                     "ttl": 32
288                 },
289                 "outer_l3v4": {
290                     "dscp": 0,
291                     "dstip4": "152.16.40.20",
292                     "proto": "udp",
293                     "srcip4": "152.16.100.20",
294                     "ttl": 32
295                 },
296                 "outer_l3v6": {
297                     "count": 1024,
298                     "dscp": 0,
299                     "dstip4": "152.16.100.20",
300                     "proto": "udp",
301                     "srcip4": "152.16.40.20",
302                     "ttl": 32
303                 },
304                 "outer_l4": {
305                     "dstport": "2001",
306                     "srcport": "1234"
307                 },
308                 "traffic_type": "continuous"
309             },
310             "downlink_0": {
311                 "id": 2,
312                 "bidir": "False",
313                 "duration": 60,
314                 "iload": "100",
315                 "outer_l2": {
316                     "dstmac": "00:00:00:00:00:04",
317                     "framesPerSecond": True,
318                     "framesize": {"64B": "100"},
319                     "srcmac": "00:00:00:00:00:01"
320                 },
321                 "outer_l3": {
322                     "count": 1024,
323                     "dscp": 0,
324                     "dstip4": "152.16.100.20",
325                     "proto": "udp",
326                     "srcip4": "152.16.40.20",
327                     "ttl": 32
328                 },
329                 "outer_l3v4": {
330                     "count": 1024,
331                     "dscp": 0,
332                     "dstip4": "152.16.100.20",
333                     "proto": "udp",
334                     "srcip4": "152.16.40.20",
335                     "ttl": 32
336                 },
337                 "outer_l3v6": {
338                     "count": 1024,
339                     "dscp": 0,
340                     "dstip4": "152.16.100.20",
341                     "proto": "udp",
342                     "srcip4": "152.16.40.20",
343                     "ttl": 32
344                 },
345                 "outer_l4": {
346                     "dstport": "1234",
347                     "srcport": "2001"
348                 },
349                 "traffic_type": "continuous"
350             }
351         }
352
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"]]
358
359         ixnet_gen = IxNextgen(ixnet)
360
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)
365
366     def test_add_ip_header_v4_nothing_to_do(self):
367         static_traffic_params = {
368             "uplink_0": {
369                 "id": 1,
370                 "bidir": "False",
371                 "duration": 60,
372                 "iload": "100",
373                 "outer_l2": {
374                     "dstmac": "00:00:00:00:00:03",
375                     "framesPerSecond": True,
376                     "framesize": {"64B": "100"},
377                     "srcmac": "00:00:00:00:00:01"
378                 },
379                 "outer_l3": {
380                     "dscp": 0,
381                     "dstip4": "152.16.40.20",
382                     "proto": "udp",
383                     "srcip4": "152.16.100.20",
384                     "count": 1024,
385                     "ttl": 32
386                 },
387                 "outer_l3v4": {
388                     "dscp": 0,
389                     "dstip4": "152.16.40.20",
390                     "proto": "udp",
391                     "srcip4": "152.16.100.20",
392                     "ttl": 32
393                 },
394                 "outer_l3v6": {
395                     "count": 1024,
396                     "dscp": 0,
397                     "dstip4": "152.16.100.20",
398                     "proto": "udp",
399                     "srcip4": "152.16.40.20",
400                     "ttl": 32
401                 },
402                 "outer_l4": {
403                     "dstport": "2001",
404                     "srcport": "1234"
405                 },
406                 "traffic_type": "continuous"
407             },
408             "downlink_0": {
409                 "id": 2,
410                 "bidir": "False",
411                 "duration": 60,
412                 "iload": "100",
413                 "outer_l2": {
414                     "dstmac": "00:00:00:00:00:04",
415                     "framesPerSecond": True,
416                     "framesize": {"64B": "100"},
417                     "srcmac": "00:00:00:00:00:01"
418                 },
419                 "outer_l3": {
420                     "count": 1024,
421                     "dscp": 0,
422                     "dstip4": "152.16.100.20",
423                     "proto": "udp",
424                     "srcip4": "152.16.40.20",
425                     "ttl": 32
426                 },
427                 "outer_l3v4": {
428                     "count": 1024,
429                     "dscp": 0,
430                     "dstip4": "152.16.100.20",
431                     "proto": "udp",
432                     "srcip4": "152.16.40.20",
433                     "ttl": 32
434                 },
435                 "outer_l3v6": {
436                     "count": 1024,
437                     "dscp": 0,
438                     "dstip4": "152.16.100.20",
439                     "proto": "udp",
440                     "srcip4": "152.16.40.20",
441                     "ttl": 32
442                 },
443                 "outer_l4": {
444                     "dstport": "1234",
445                     "srcport": "2001"
446                 },
447                 "traffic_type": "continuous"
448             }
449         }
450
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"]]
456
457         ixnet_gen = IxNextgen(ixnet)
458
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)
463
464     def test_add_ip_header_v6(self):
465         static_traffic_profile = {
466             "uplink_0": {
467                 "id": 1,
468                 "bidir": "False",
469                 "duration": 60,
470                 "iload": "100",
471                 "outer_l2": {
472                     "dstmac": "00:00:00:00:00:03",
473                     "framesPerSecond": True,
474                     "framesize": {"64B": "100"},
475                     "srcmac": "00:00:00:00:00:01"
476                 },
477                 "outer_l3": {
478                     "count": 1024,
479                     "dscp": 0,
480                     "dstip4": "152.16.40.20",
481                     "proto": "udp",
482                     "srcip4": "152.16.100.20",
483                     "ttl": 32
484                 },
485                 "outer_l3v6": {
486                     "count": 1024,
487                     "dscp": 0,
488                     "dstip4": "152.16.100.20",
489                     "proto": "udp",
490                     "srcip4": "152.16.40.20",
491                     "ttl": 32
492                 },
493                 "outer_l4": {
494                     "dstport": "2001",
495                     "srcport": "1234"
496                 },
497                 "traffic_type": "continuous"
498             },
499             "downlink_0": {
500                 "id": 2,
501                 "bidir": "False",
502                 "duration": 60,
503                 "iload": "100",
504                 "outer_l2": {
505                     "dstmac": "00:00:00:00:00:04",
506                     "framesPerSecond": True,
507                     "framesize": {"64B": "100"},
508                     "srcmac": "00:00:00:00:00:01"
509                 },
510                 "outer_l3": {
511                     "count": 1024,
512                     "dscp": 0,
513                     "dstip4": "152.16.100.20",
514                     "proto": "udp",
515                     "srcip4": "152.16.40.20",
516                     "ttl": 32
517                 },
518                 "outer_l3v6": {
519                     "count": 1024,
520                     "dscp": 0,
521                     "dstip4": "152.16.100.20",
522                     "proto": "udp",
523                     "srcip4": "152.16.40.20",
524                     "ttl": 32
525                 },
526                 "outer_l4": {
527                     "dstport": "1234",
528                     "srcport": "2001"
529                 },
530                 "traffic_type": "continuous"
531             }
532         }
533
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]
539
540         ixnet_gen = IxNextgen(ixnet)
541
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)
546
547     def test_add_ip_header_v6_nothing_to_do(self):
548         static_traffic_params = {
549             "uplink_0": {
550                 "id": 1,
551                 "bidir": "False",
552                 "duration": 60,
553                 "iload": "100",
554                 "outer_l2": {
555                     "dstmac": "00:00:00:00:00:03",
556                     "framesPerSecond": True,
557                     "framesize": {"64B": "100"},
558                     "srcmac": "00:00:00:00:00:01"
559                 },
560                 "outer_l3": {
561                     "dscp": 0,
562                     "dstip4": "152.16.40.20",
563                     "proto": "udp",
564                     "srcip4": "152.16.100.20",
565                     "count": 1024,
566                     "ttl": 32
567                 },
568                 "outer_l3v6": {
569                     "dscp": 0,
570                     "dstip4": "152.16.40.20",
571                     "proto": "udp",
572                     "srcip4": "152.16.100.20",
573                     "ttl": 32
574                 },
575                 "outer_l4": {
576                     "dstport": "2001",
577                     "srcport": "1234"
578                 },
579                 "traffic_type": "continuous"
580             },
581             "downlink_0": {
582                 "id": 2,
583                 "bidir": "False",
584                 "duration": 60,
585                 "iload": "100",
586                 "outer_l2": {
587                     "dstmac": "00:00:00:00:00:04",
588                     "framesPerSecond": True,
589                     "framesize": {"64B": "100"},
590                     "srcmac": "00:00:00:00:00:01"
591                 },
592                 "outer_l3": {
593                     "count": 1024,
594                     "dscp": 0,
595                     "dstip4": "152.16.100.20",
596                     "proto": "udp",
597                     "srcip4": "152.16.40.20",
598                     "ttl": 32
599                 },
600                 "outer_l3v6": {
601                     "count": 1024,
602                     "dscp": 0,
603                     "dstip4": "152.16.100.20",
604                     "proto": "udp",
605                     "srcip4": "152.16.40.20",
606                     "ttl": 32
607                 },
608                 "outer_l4": {
609                     "dstport": "1234",
610                     "srcport": "2001"
611                 },
612                 "traffic_type": "continuous"
613             }
614         }
615
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]
621
622         ixnet_gen = IxNextgen(ixnet)
623
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)
627
628     def test_set_random_ip_multi_attributes_bad_ip_version(self):
629         bad_ip_version = object()
630         ixnet_gen = IxNextgen(mock.Mock())
631         mock1 = mock.Mock()
632         mock2 = mock.Mock()
633         mock3 = mock.Mock()
634         with self.assertRaises(ValueError):
635             ixnet_gen.set_random_ip_multi_attributes(mock1, bad_ip_version, mock2, mock3)
636
637     def test_get_config(self):
638         tg_cfg = {
639             "vdu": [
640                 {
641                     "external-interface": [
642                         {
643                             "virtual-interface": {
644                                 "vpci": "0000:07:00.1",
645                             },
646                         },
647                         {
648                             "virtual-interface": {
649                                 "vpci": "0001:08:01.2",
650                             },
651                         },
652                     ],
653                 },
654             ],
655             "mgmt-interface": {
656                 "ip": "test1",
657                 "tg-config": {
658                     "dut_result_dir": "test2",
659                     "version": "test3",
660                     "ixchassis": "test4",
661                     "tcl_port": "test5",
662                     "py_lib_path": "test6",
663                 },
664             }
665         }
666
667         expected = {
668             'py_lib_path': 'test6',
669             'machine': 'test1',
670             'port': 'test5',
671             'chassis': 'test4',
672             'cards': ['0000', '0001'],
673             'ports': ['07', '08'],
674             'output_dir': 'test2',
675             'version': 'test3',
676             'bidir': True,
677         }
678
679         result = IxNextgen.get_config(tg_cfg)
680         self.assertDictEqual(result, expected)
681
682     def test_ix_update_ether(self):
683         static_traffic_params = {
684             "uplink_0": {
685                 "id": 1,
686                 "bidir": "False",
687                 "duration": 60,
688                 "iload": "100",
689                 "outer_l2": {
690                     "dstmac": "00:00:00:00:00:03",
691                     "framesPerSecond": True,
692                     "framesize": 64,
693                     "srcmac": "00:00:00:00:00:01"
694                 },
695                 "outer_l3": {
696                     "dscp": 0,
697                     "dstip4": "152.16.40.20",
698                     "proto": "udp",
699                     "srcip4": "152.16.100.20",
700                     "ttl": 32
701                 },
702                 "outer_l3v4": {
703                     "dscp": 0,
704                     "dstip4": "152.16.40.20",
705                     "proto": "udp",
706                     "srcip4": "152.16.100.20",
707                     "ttl": 32
708                 },
709                 "outer_l3v6": {
710                     "count": 1024,
711                     "dscp": 0,
712                     "dstip4": "152.16.100.20",
713                     "proto": "udp",
714                     "srcip4": "152.16.40.20",
715                     "ttl": 32
716                 },
717                 "outer_l4": {
718                     "dstport": "2001",
719                     "srcport": "1234"
720                 },
721                 "traffic_type": "continuous"
722             },
723             "downlink_0": {
724                 "id": 2,
725                 "bidir": "False",
726                 "duration": 60,
727                 "iload": "100",
728                 "outer_l2": {
729                     "dstmac": "00:00:00:00:00:04",
730                     "framesPerSecond": True,
731                     "framesize": 64,
732                     "srcmac": "00:00:00:00:00:01"
733                 },
734                 "outer_l3": {
735                     "count": 1024,
736                     "dscp": 0,
737                     "dstip4": "152.16.100.20",
738                     "proto": "udp",
739                     "srcip4": "152.16.40.20",
740                     "ttl": 32
741                 },
742                 "outer_l3v4": {
743                     "count": 1024,
744                     "dscp": 0,
745                     "dstip4": "152.16.100.20",
746                     "proto": "udp",
747                     "srcip4": "152.16.40.20",
748                     "ttl": 32
749                 },
750                 "outer_l3v6": {
751                     "count": 1024,
752                     "dscp": 0,
753                     "dstip4": "152.16.100.20",
754                     "proto": "udp",
755                     "srcip4": "152.16.40.20",
756                     "ttl": 32
757                 },
758                 "outer_l4": {
759                     "dstport": "1234",
760                     "srcport": "2001"
761                 },
762                 "traffic_type": "continuous"
763             }
764         }
765
766         ixnet = mock.MagicMock()
767         ixnet.setMultiAttribute.return_value = [1]
768         ixnet.commit.return_value = [1]
769         ixnet.getList.side_effect = [
770             [1],
771             [1],
772             [1],
773             [
774                 "ethernet.header.destinationAddress",
775                 "ethernet.header.sourceAddress",
776             ],
777         ]
778
779         ixnet_gen = IxNextgen(ixnet)
780
781         result = ixnet_gen.ix_update_ether(static_traffic_params)
782         self.assertIsNone(result)
783         self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
784
785     def test_ix_update_ether_nothing_to_do(self):
786         static_traffic_params = {
787             "uplink_0": {
788                 "id": 1,
789                 "bidir": "False",
790                 "duration": 60,
791                 "iload": "100",
792                 "outer_l3": {
793                     "dscp": 0,
794                     "dstip4": "152.16.40.20",
795                     "proto": "udp",
796                     "srcip4": "152.16.100.20",
797                     "ttl": 32
798                 },
799                 "outer_l3v4": {
800                     "dscp": 0,
801                     "dstip4": "152.16.40.20",
802                     "proto": "udp",
803                     "srcip4": "152.16.100.20",
804                     "ttl": 32
805                 },
806                 "outer_l3v6": {
807                     "count": 1024,
808                     "dscp": 0,
809                     "dstip4": "152.16.100.20",
810                     "proto": "udp",
811                     "srcip4": "152.16.40.20",
812                     "ttl": 32
813                 },
814                 "outer_l4": {
815                     "dstport": "2001",
816                     "srcport": "1234"
817                 },
818                 "traffic_type": "continuous"
819             },
820             "downlink_0": {
821                 "id": 2,
822                 "bidir": "False",
823                 "duration": 60,
824                 "iload": "100",
825                 "outer_l3": {
826                     "count": 1024,
827                     "dscp": 0,
828                     "dstip4": "152.16.100.20",
829                     "proto": "udp",
830                     "srcip4": "152.16.40.20",
831                     "ttl": 32
832                 },
833                 "outer_l3v4": {
834                     "count": 1024,
835                     "dscp": 0,
836                     "dstip4": "152.16.100.20",
837                     "proto": "udp",
838                     "srcip4": "152.16.40.20",
839                     "ttl": 32
840                 },
841                 "outer_l3v6": {
842                     "count": 1024,
843                     "dscp": 0,
844                     "dstip4": "152.16.100.20",
845                     "proto": "udp",
846                     "srcip4": "152.16.40.20",
847                     "ttl": 32
848                 },
849                 "outer_l4": {
850                     "dstport": "1234",
851                     "srcport": "2001"
852                 },
853                 "traffic_type": "continuous"
854             }
855         }
856
857         ixnet = mock.MagicMock()
858         ixnet.setMultiAttribute.return_value = [1]
859         ixnet.commit.return_value = [1]
860         ixnet.getList.side_effect = [
861             [1],
862             [1],
863             [1],
864             [
865                 "ethernet.header.destinationAddress",
866                 "ethernet.header.sourceAddress",
867             ],
868         ]
869
870         ixnet_gen = IxNextgen(ixnet)
871
872         result = ixnet_gen.ix_update_ether(static_traffic_params)
873         self.assertIsNone(result)
874         self.assertEqual(ixnet.setMultiAttribute.call_count, 0)