Fix small things for integration of ApexLake with Yardstick
[yardstick.git] / yardstick / vTC / apexlake / tests / dpdk_packet_generator_test.py
1 # Copyright (c) 2015 Intel Research and Development Ireland Ltd.
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 import unittest
16 import mock
17 from experimental_framework.constants import conf_file_sections as conf_file
18
19
20 from experimental_framework.packet_generators \
21     import dpdk_packet_generator as mut
22
23
24 def dummy_get_dpdk_pktgen_vars():
25     vars = dict()
26     vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_dir/'
27     vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program'
28     vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
29     vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memchannel'
30     return vars
31
32
33 def dummy_get_base_dir():
34     return 'base_dir/'
35
36
37 def dummy_dirname(dir):
38     if dir == 'pktgen_dir_test':
39         return 'pktgen_dir'
40     return 'test_directory'
41
42
43 class MockChangeVlan():
44
45     ret_val = [False, False]
46
47     @staticmethod
48     def mock_change_vlan(pcap_dir=None, pcap_file=None, vlan=None):
49         if not pcap_file and not vlan:
50             return MockChangeVlan.ret_val
51
52         if pcap_dir == 'base_dir/experimental_framework/packet_generators/' \
53                        'pcap_files/' and \
54                        pcap_file == 'pcap_file_1' and vlan == 'vlan0':
55             MockChangeVlan.ret_val[0] = True
56         if pcap_dir == 'base_dir/experimental_framework/packet_generators/' \
57                        'pcap_files/' and \
58                        pcap_file == 'pcap_file_2' and vlan == 'vlan1':
59             MockChangeVlan.ret_val[1] = True
60         return False
61
62
63 class TestDpdkPacketGenConstructor(unittest.TestCase):
64
65     def setUp(self):
66         pass
67
68     def tearDown(self):
69         pass
70
71     def test_constructor(self):
72         obj = mut.DpdkPacketGenerator()
73         self.assertEqual(obj.command, '')
74         self.assertEqual(obj.directory, '')
75         self.assertEqual(obj.dpdk_interfaces, -1)
76
77
78 class TestDpdkPacketGenInitialization(unittest.TestCase):
79
80     def setUp(self):
81         self.mut = mut.DpdkPacketGenerator()
82         pass
83
84     def tearDown(self):
85         pass
86
87     @mock.patch('os.path')
88     @mock.patch('experimental_framework.common.get_dpdk_pktgen_vars',
89                 side_effect=dummy_get_dpdk_pktgen_vars)
90     @mock.patch('experimental_framework.common.get_base_dir',
91                 side_effect=dummy_get_base_dir)
92     @mock.patch('experimental_framework.packet_generators.'
93                 'dpdk_packet_generator.DpdkPacketGenerator._get_core_nics')
94     @mock.patch('experimental_framework.packet_generators.'
95                 'dpdk_packet_generator.DpdkPacketGenerator.'
96                 '_init_input_validation')
97     @mock.patch('experimental_framework.packet_generators.'
98                 'dpdk_packet_generator.DpdkPacketGenerator._change_vlan')
99     def test_init_dpdk_pktgen_for_success(self, m_change_vlan,
100                                           mock_init_input_validation,
101                                           mock_get_core_nics,
102                                           common_get_base_dir,
103                                           common_get_dpdk_vars,
104                                           mock_path):
105         """
106         Tests the initialization of the packet generator
107         """
108         mock_init_input_validation.return_value = None
109         mock_get_core_nics.return_value = "{corenics}"
110         mock_path.isfile.return_value = True
111         expected = 'pktgen_dir/program -c coremask -n memchannel ' \
112                    '--proc-type auto --file-prefix pg -- -T -P -m ' \
113                    '"{corenics}" -f base_dir/experimental_framework/' \
114                    'packet_generators/dpdk_pktgen/lua_file ' \
115                    '-s 0:base_dir/experimental_framework/packet_generators' \
116                    '/pcap_files/pcap_file > /dev/null'
117         self.mut.init_dpdk_pktgen(dpdk_interfaces=1, lua_script='lua_file',
118                                   pcap_file_0='pcap_file', vlan_0='vlan0')
119         self.assertEqual(expected, self.mut.command)
120         m_change_vlan.assert_called_once_with('base_dir/'
121                                               'experimental_framework/'
122                                               'packet_generators/pcap_files/',
123                                               'pcap_file', 'vlan0')
124
125     @mock.patch('os.path')
126     @mock.patch('experimental_framework.common.get_dpdk_pktgen_vars',
127                 side_effect=dummy_get_dpdk_pktgen_vars)
128     @mock.patch('experimental_framework.common.get_base_dir',
129                 side_effect=dummy_get_base_dir)
130     @mock.patch('experimental_framework.packet_generators.'
131                 'dpdk_packet_generator.DpdkPacketGenerator._get_core_nics')
132     @mock.patch('experimental_framework.packet_generators.'
133                 'dpdk_packet_generator.DpdkPacketGenerator.'
134                 '_init_input_validation')
135     @mock.patch('experimental_framework.packet_generators.'
136                 'dpdk_packet_generator.DpdkPacketGenerator.'
137                 '_change_vlan', side_effect=MockChangeVlan.mock_change_vlan)
138     def test_init_dpdk_pktgen_2_for_success(self, m_change_vlan,
139                                             mock_init_input_validation,
140                                             mock_get_core_nics,
141                                             common_get_base_dir,
142                                             common_get_dpdk_vars, mock_path):
143         """
144         Tests the initialization of the packet generator
145         :param common_get_base_dir: mock obj
146         :param common_get_dpdk_vars: mock obj
147         :param mock_path: mock obj
148         :return: None
149         """
150         mock_init_input_validation.return_value = None
151         mock_get_core_nics.return_value = "{corenics}"
152         mock_path.isfile.return_value = True
153         expected = 'pktgen_dir/program -c coremask -n memchannel ' \
154                    '--proc-type auto --file-prefix pg -- -T -P -m ' \
155                    '"{corenics}" -f base_dir/experimental_framework/' \
156                    'packet_generators/dpdk_pktgen/lua_file ' \
157                    '-s 0:base_dir/experimental_framework/packet_generators/' \
158                    'pcap_files/pcap_file_1 ' \
159                    '-s 1:base_dir/experimental_framework/packet_generators/' \
160                    'pcap_files/pcap_file_2 ' \
161                    '> /dev/null'
162         self.mut.init_dpdk_pktgen(dpdk_interfaces=1, lua_script='lua_file',
163                                   pcap_file_0='pcap_file_1',
164                                   pcap_file_1='pcap_file_2', vlan_0='vlan0',
165                                   vlan_1='vlan1')
166         self.assertEqual(expected, self.mut.command)
167         self.assertEqual(MockChangeVlan.mock_change_vlan(), [True, True])
168
169     @mock.patch('os.path')
170     @mock.patch('experimental_framework.common.get_dpdk_pktgen_vars',
171                 side_effect=dummy_get_dpdk_pktgen_vars)
172     @mock.patch('experimental_framework.common.get_base_dir',
173                 side_effect=dummy_get_base_dir)
174     @mock.patch('experimental_framework.packet_generators.'
175                 'dpdk_packet_generator.DpdkPacketGenerator._get_core_nics')
176     @mock.patch('experimental_framework.packet_generators.'
177                 'dpdk_packet_generator.DpdkPacketGenerator.'
178                 '_init_input_validation')
179     @mock.patch('experimental_framework.packet_generators.'
180                 'dpdk_packet_generator.DpdkPacketGenerator._change_vlan')
181     def test_init_dpdk_pktgen_for_failure(self, m_change_vlan,
182                                           mock_init_input_validation,
183                                           mock_get_core_nics,
184                                           common_get_base_dir,
185                                           common_get_dpdk_vars,
186                                           mock_path):
187         """
188         Tests the initialization of the packet generator
189         :param common_get_base_dir: mock obj
190         :param common_get_dpdk_vars: mock obj
191         :param mock_path: mock obj
192         :return: None
193         """
194         mock_init_input_validation.return_value = None
195         mock_get_core_nics.return_value = "{corenics}"
196         self.assertRaises(ValueError, self.mut.init_dpdk_pktgen, 1,
197                           'lua_file', 'pcap_file')
198
199     @mock.patch('os.path')
200     @mock.patch('experimental_framework.common.get_dpdk_pktgen_vars',
201                 side_effect=dummy_get_dpdk_pktgen_vars)
202     @mock.patch('experimental_framework.common.get_base_dir',
203                 side_effect=dummy_get_base_dir)
204     @mock.patch('experimental_framework.packet_generators.'
205                 'dpdk_packet_generator.DpdkPacketGenerator.'
206                 '_get_core_nics')
207     @mock.patch('experimental_framework.packet_generators.'
208                 'dpdk_packet_generator.DpdkPacketGenerator.'
209                 '_init_input_validation')
210     @mock.patch('experimental_framework.packet_generators.'
211                 'dpdk_packet_generator.DpdkPacketGenerator.'
212                 '_change_vlan')
213     def test_init_dpdk_pktgen_for_failure_2(self, m_change_vlan,
214                                             mock_init_input_validation,
215                                             mock_get_core_nics,
216                                             common_get_base_dir,
217                                             common_get_dpdk_vars,
218                                             mock_path):
219         """
220         Tests the initialization of the packet generator
221         :param common_get_base_dir: mock obj
222         :param common_get_dpdk_vars: mock obj
223         :param mock_path: mock obj
224         :return: None
225         """
226         mock_init_input_validation.return_value = None
227         mock_get_core_nics.return_value = "{corenics}"
228         self.assertRaises(ValueError, self.mut.init_dpdk_pktgen, 2,
229                           'lua_file_1', 'pcap_file_1', 'pcap_file_2',
230                           'vlan_0')
231
232
233 class DpdkPacketGeneratorDummy(mut.DpdkPacketGenerator):
234
235     def __init__(self):
236         self.directory = 'self_directory'
237         self.dpdk_interfaces = 1
238         self.command = 'command'
239         self._count = 0
240
241     chdir_test = [False, False]
242
243     @staticmethod
244     def _chdir(directory=None):
245         if not directory:
246             return DpdkPacketGeneratorDummy.chdir_test
247         if directory == 'current_directory':
248             DpdkPacketGeneratorDummy.chdir_test[0] = True
249             # self._count += 1
250         if directory == 'self_directory':
251             DpdkPacketGeneratorDummy.chdir_test[1] = True
252             # self._count += 1
253         return DpdkPacketGeneratorDummy.chdir_test
254
255
256 class TestDpdkPacketGenSendTraffic(unittest.TestCase):
257
258     def setUp(self):
259         self.mut = DpdkPacketGeneratorDummy()
260
261     @mock.patch('os.system')
262     @mock.patch('os.path')
263     @mock.patch('os.path.dirname', side_effect=dummy_dirname)
264     @mock.patch('experimental_framework.common.get_dpdk_pktgen_vars',
265                 side_effect=dummy_get_dpdk_pktgen_vars)
266     @mock.patch('experimental_framework.common.get_base_dir',
267                 side_effect=dummy_get_base_dir)
268     @mock.patch('experimental_framework.common.run_command')
269     @mock.patch('experimental_framework.packet_generators.'
270                 'dpdk_packet_generator.DpdkPacketGenerator._get_core_nics')
271     @mock.patch('experimental_framework.packet_generators.'
272                 'dpdk_packet_generator.DpdkPacketGenerator.'
273                 '_init_physical_nics')
274     @mock.patch('experimental_framework.packet_generators.'
275                 'dpdk_packet_generator.DpdkPacketGenerator.'
276                 '_finalize_physical_nics')
277     @mock.patch('experimental_framework.packet_generators.'
278                 'dpdk_packet_generator.DpdkPacketGenerator._chdir',
279                 side_effect=DpdkPacketGeneratorDummy._chdir)
280     def test_send_traffic_for_success(self, mock_ch_dir,
281                                       mock_finalize_physical_nics,
282                                       mock_init_physical_nics,
283                                       mock_get_core_nics,
284                                       common_run_command,
285                                       common_get_base_dir,
286                                       common_get_dpdk_vars,
287                                       mock_dir_name,
288                                       mock_os_path,
289                                       mock_os_system):
290         '''
291         Calls the packet generator and starts to send traffic
292         Blocking call
293         '''
294         mock_get_core_nics.return_value = "{corenics}"
295         mock_os_path.realpath.return_value = 'pktgen_dir_test'
296         mock_os_path.dirname.return_value = 'current_directory'
297         self.mut.send_traffic()
298
299         self.assertEqual(DpdkPacketGeneratorDummy._chdir(), [True, True])
300         mock_init_physical_nics.\
301             assert_called_once_with(1, {'coremask': 'coremask',
302                                         'program_name': 'program',
303                                         'memory_channels': 'memchannel',
304                                         'pktgen_directory': 'pktgen_dir/'})
305         mock_finalize_physical_nics.\
306             assert_called_once_with(1, {'coremask': 'coremask',
307                                         'program_name': 'program',
308                                         'memory_channels': 'memchannel',
309                                         'pktgen_directory': 'pktgen_dir/'})
310         common_run_command.assert_called_once_with('command')
311
312
313 class MockRunCommand:
314
315     ret_val = [False, False, False, False, False, False]
316     ret_val_finalization = [False, False, False, False, False, False]
317
318     @staticmethod
319     def mock_run_command(command=None):
320         if command == 'ifconfig interface_1 down':
321             MockRunCommand.ret_val[0] = True
322         if command == 'dpdk_directory/tools/dpdk_nic_bind.py --unbind 1:00.0':
323             MockRunCommand.ret_val[1] = True
324         if command == 'dpdk_directory/tools/dpdk_nic_bind.py ' \
325                       '--bind=igb_uio 1:00.0':
326             MockRunCommand.ret_val[2] = True
327         if command == 'ifconfig interface_2 down':
328             MockRunCommand.ret_val[3] = True
329         if command == 'dpdk_directory/tools/dpdk_nic_bind.py ' \
330                       '--unbind 1:00.1':
331             MockRunCommand.ret_val[4] = True
332         if command == 'dpdk_directory/tools/dpdk_nic_bind.py ' \
333                       '--bind=igb_uio 1:00.1':
334             MockRunCommand.ret_val[5] = True
335         else:
336             return MockRunCommand.ret_val
337
338     @staticmethod
339     def mock_run_command_finalization(command=None):
340         if command == 'dpdk_directory/tools/dpdk_nic_bind.py --unbind 1:00.0':
341             MockRunCommand.ret_val_finalization[0] = True
342         if command == 'dpdk_directory/tools/dpdk_nic_bind.py ' \
343                       '--bind=ixgbe 1:00.0':
344             MockRunCommand.ret_val_finalization[1] = True
345         if command == 'ifconfig interface_1 up':
346             MockRunCommand.ret_val_finalization[2] = True
347         if command == 'dpdk_directory/tools/dpdk_nic_bind.py --unbind 1:00.1':
348             MockRunCommand.ret_val_finalization[3] = True
349         if command == 'dpdk_directory/tools/dpdk_nic_bind.py ' \
350                       '--bind=ixgbe 1:00.1':
351             MockRunCommand.ret_val_finalization[4] = True
352         if command == 'ifconfig interface_2 up':
353             MockRunCommand.ret_val_finalization[5] = True
354         else:
355             return MockRunCommand.ret_val_finalization
356
357
358 class TestDpdkPacketGenOthers(unittest.TestCase):
359
360     def setUp(self):
361         self.mut = mut.DpdkPacketGenerator()
362
363     def tearDown(self):
364         pass
365
366     @mock.patch('experimental_framework.packet_generators.'
367                 'dpdk_packet_generator.DpdkPacketGenerator.'
368                 '_cores_configuration')
369     def test__get_core_nics_for_failure(self, mock_cores_configuration):
370         mock_cores_configuration.return_value = None
371         self.assertRaises(ValueError, mut.DpdkPacketGenerator._get_core_nics,
372                           '', '')
373
374     @mock.patch('experimental_framework.packet_generators.'
375                 'dpdk_packet_generator.DpdkPacketGenerator.'
376                 '_cores_configuration')
377     def test__get_core_nics_one_nic_for_success(self,
378                                                 mock_cores_configuration):
379         mock_cores_configuration.return_value = 'ret_val'
380         expected = 'ret_val'
381         output = mut.DpdkPacketGenerator._get_core_nics(1, 'coremask')
382         self.assertEqual(expected, output)
383         mock_cores_configuration.assert_called_once_with('coremask', 1, 2, 0)
384
385     @mock.patch('experimental_framework.packet_generators.'
386                 'dpdk_packet_generator.DpdkPacketGenerator.'
387                 '_cores_configuration')
388     def test__get_core_nics_two_nics_for_success(self,
389                                                  mock_cores_configuration):
390         mock_cores_configuration.return_value = 'ret_val'
391         expected = 'ret_val'
392         output = mut.DpdkPacketGenerator._get_core_nics(2, 'coremask')
393         self.assertEqual(expected, output)
394         mock_cores_configuration.assert_called_once_with('coremask', 1, 2, 2)
395
396     @mock.patch('os.path.isfile')
397     def test__init_input_validation_for_success(self, mock_is_file):
398         mock_is_file.return_value = True
399
400         pcap_file_0 = 'pcap_file_0'
401         pcap_file_1 = 'pcap_file_1'
402         lua_script = 'lua_script'
403         pcap_directory = 'pcap_directory'
404         lua_directory = 'lua_directory'
405
406         variables = dict()
407         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
408         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
409         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
410         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
411
412         self.assertEqual(mut.DpdkPacketGenerator._init_input_validation(
413             pcap_file_0, pcap_file_1,
414             lua_script, pcap_directory, lua_directory,
415             variables), None)
416
417     @mock.patch('os.path.isfile')
418     def test__init_input_validation_for_failure(self, mock_is_file):
419         mock_is_file.return_value = True
420
421         pcap_file_0 = 'pcap_file_0'
422         pcap_file_1 = 'pcap_file_1'
423         lua_script = 'lua_script'
424         pcap_directory = 'pcap_directory'
425         lua_directory = 'lua_directory'
426
427         variables = dict()
428         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
429         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
430         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
431         # variables[common.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
432
433         self.assertRaises(ValueError,
434                           mut.DpdkPacketGenerator.
435                           _init_input_validation, pcap_file_0, pcap_file_1,
436                           lua_script, pcap_directory, lua_directory, variables)
437
438     @mock.patch('os.path.isfile')
439     def test__init_input_validation_for_failure_2(self, mock_is_file):
440         mock_is_file.return_value = True
441
442         pcap_directory = None
443         pcap_file_0 = 'pcap_file_0'
444         pcap_file_1 = 'pcap_file_1'
445         lua_script = 'lua_script'
446         lua_directory = 'lua_directory'
447
448         variables = dict()
449         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
450         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
451         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
452         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
453
454         self.assertRaises(ValueError,
455                           mut.DpdkPacketGenerator.
456                           _init_input_validation, pcap_file_0, pcap_file_1,
457                           lua_script, pcap_directory, lua_directory, variables)
458
459     @mock.patch('os.path.isfile')
460     def test__init_input_validation_for_failure_3(self, mock_is_file):
461         mock_is_file.return_value = True
462
463         pcap_directory = 'directory'
464         pcap_file_0 = None
465         pcap_file_1 = 'pcap_file_1'
466         lua_script = 'lua_script'
467         lua_directory = 'lua_directory'
468
469         variables = dict()
470         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
471         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
472         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
473         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
474
475         self.assertRaises(ValueError,
476                           mut.DpdkPacketGenerator.
477                           _init_input_validation, pcap_file_0, pcap_file_1,
478                           lua_script, pcap_directory, lua_directory, variables)
479
480     @mock.patch('os.path.isfile')
481     def test__init_input_validation_for_failure_4(self, mock_is_file):
482         mock_is_file.return_value = True
483
484         pcap_directory = 'directory'
485         pcap_file_0 = 'pcap_file_0'
486         pcap_file_1 = None
487         lua_script = 'lua_script'
488         lua_directory = 'lua_directory'
489
490         variables = dict()
491         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
492         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
493         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
494         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
495
496         self.assertRaises(ValueError,
497                           mut.DpdkPacketGenerator.
498                           _init_input_validation, pcap_file_0, pcap_file_1,
499                           lua_script, pcap_directory, lua_directory, variables)
500
501     @mock.patch('os.path.isfile')
502     def test__init_input_validation_for_failure_5(self, mock_is_file):
503         mock_is_file.return_value = True
504
505         pcap_directory = 'directory'
506         pcap_file_0 = 'pcap_file_0'
507         pcap_file_1 = 'pcap_file_1'
508         lua_script = None
509         lua_directory = 'lua_directory'
510
511         variables = dict()
512         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
513         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
514         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
515         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
516
517         self.assertRaises(ValueError,
518                           mut.DpdkPacketGenerator.
519                           _init_input_validation, pcap_file_0, pcap_file_1,
520                           lua_script, pcap_directory, lua_directory, variables)
521
522     @mock.patch('os.path.isfile', side_effect=[False])
523     def test__init_input_validation_for_failure_6(self, mock_is_file):
524         # mock_is_file.return_value = False
525
526         pcap_directory = 'directory'
527         pcap_file_0 = 'pcap_file_0'
528         pcap_file_1 = 'pcap_file_1'
529         lua_script = 'lua_script'
530         lua_directory = 'lua_directory'
531
532         variables = dict()
533         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
534         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
535         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
536         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
537
538         self.assertRaises(ValueError,
539                           mut.DpdkPacketGenerator.
540                           _init_input_validation, pcap_file_0, pcap_file_1,
541                           lua_script, pcap_directory, lua_directory, variables)
542
543     @mock.patch('os.path.isfile', side_effect=[True, False])
544     def test__init_input_validation_for_failure_7(self, mock_is_file):
545         pcap_directory = 'directory'
546         pcap_file_0 = 'pcap_file_0'
547         pcap_file_1 = 'pcap_file_1'
548         lua_script = 'lua_script'
549         lua_directory = 'lua_directory'
550
551         variables = dict()
552         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
553         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
554         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
555         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
556
557         self.assertRaises(ValueError,
558                           mut.DpdkPacketGenerator.
559                           _init_input_validation, pcap_file_0, pcap_file_1,
560                           lua_script, pcap_directory, lua_directory, variables)
561
562     @mock.patch('os.path.isfile', side_effect=[True, True, False])
563     def test__init_input_validation_for_failure_8(self, mock_is_file):
564         pcap_directory = 'directory'
565         pcap_file_0 = 'pcap_file_0'
566         pcap_file_1 = 'pcap_file_1'
567         lua_script = 'lua_script'
568         lua_directory = 'lua_directory'
569
570         variables = dict()
571         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
572         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
573         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
574         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
575
576         self.assertRaises(ValueError,
577                           mut.DpdkPacketGenerator.
578                           _init_input_validation, pcap_file_0, pcap_file_1,
579                           lua_script, pcap_directory, lua_directory, variables)
580
581     @mock.patch('os.chdir')
582     def test__chdir_for_success(self, mock_os_chdir):
583         mut.DpdkPacketGenerator._chdir('directory')
584         mock_os_chdir.assert_called_once_with('directory')
585
586     @mock.patch('experimental_framework.common.run_command',
587                 side_effect=MockRunCommand.mock_run_command)
588     def test__init_physical_nics_for_success(self, mock_run_command):
589         dpdk_interfaces = 1
590         dpdk_vars = dict()
591
592         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
593         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
594         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
595         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
596         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
597         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
598         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
599         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
600         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
601         self.mut._init_physical_nics(dpdk_interfaces, dpdk_vars)
602         self.assertEqual(MockRunCommand.mock_run_command(),
603                          [True, True, True, False, False, False])
604
605     @mock.patch('experimental_framework.common.run_command',
606                 side_effect=MockRunCommand.mock_run_command)
607     def test__init_physical_nics_for_success_2(self, mock_run_command):
608         dpdk_interfaces = 2
609         dpdk_vars = dict()
610
611         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
612         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
613         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
614         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
615         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
616         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
617         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
618         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
619         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
620         self.mut._init_physical_nics(dpdk_interfaces, dpdk_vars)
621         self.assertEqual(MockRunCommand.mock_run_command(),
622                          [True, True, True, True, True, True])
623
624     @mock.patch('experimental_framework.common.run_command')
625     def test__init_physical_nics_for_failure(self, mock_run_command):
626         dpdk_interfaces = 3
627         dpdk_vars = dict()
628         self.assertRaises(ValueError, self.mut._init_physical_nics,
629                           dpdk_interfaces, dpdk_vars)
630
631     @mock.patch('experimental_framework.common.run_command',
632                 side_effect=MockRunCommand.mock_run_command_finalization)
633     def test__finalize_physical_nics_for_success(self, mock_run_command):
634         dpdk_interfaces = 1
635         dpdk_vars = dict()
636         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
637         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
638         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
639         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
640         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
641         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
642         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
643         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
644         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
645         self.mut._finalize_physical_nics(dpdk_interfaces, dpdk_vars)
646         self.assertEqual(MockRunCommand.mock_run_command_finalization(),
647                          [True, True, True, False, False, False])
648
649     @mock.patch('experimental_framework.common.run_command',
650                 side_effect=MockRunCommand.mock_run_command_finalization)
651     def test__finalize_physical_nics_for_success_2(self, mock_run_command):
652         dpdk_interfaces = 2
653         dpdk_vars = dict()
654         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
655         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
656         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
657         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
658         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
659         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
660         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
661         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
662         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
663         self.mut._finalize_physical_nics(dpdk_interfaces, dpdk_vars)
664         self.assertEqual(MockRunCommand.mock_run_command_finalization(),
665                          [True, True, True, True, True, True])
666
667     def test__finalize_physical_nics_for_failure(self):
668         dpdk_interfaces = 0
669         dpdk_vars = dict()
670         self.assertRaises(ValueError, self.mut._finalize_physical_nics,
671                           dpdk_interfaces, dpdk_vars)
672
673     def test__cores_configuration_for_success(self):
674         coremask = '1f'
675         expected = '[2:1].0,[4:3].1'
676         output = mut.DpdkPacketGenerator._cores_configuration(coremask,
677                                                               1, 2, 2)
678         self.assertEqual(expected, output)
679
680     def test__cores_configuration_for_success_2(self):
681         coremask = '1f'
682         expected = '2.0,[4:3].1'
683         output = mut.DpdkPacketGenerator._cores_configuration(coremask,
684                                                               1, 1, 2)
685         self.assertEqual(expected, output)
686
687     def test__cores_configuration_for_success_3(self):
688         coremask = '1f'
689         expected = '[3:2].0,4.1'
690         output = mut.DpdkPacketGenerator._cores_configuration(coremask,
691                                                               1, 2, 1)
692         self.assertEqual(expected, output)
693
694     def test__cores_configuration_for_failure(self):
695         coremask = '1'
696         self.assertRaises(ValueError,
697                           mut.DpdkPacketGenerator._cores_configuration,
698                           coremask, 1, 2, 2)
699
700     @mock.patch('experimental_framework.common.LOG')
701     @mock.patch('experimental_framework.common.run_command')
702     def test__change_vlan_for_success(self, mock_run_command, mock_log):
703         mut.DpdkPacketGenerator._change_vlan('/directory/', 'pcap_file', '10')
704         expected_param = '/directory/vlan_tag.sh /directory/pcap_file 10'
705         mock_run_command.assert_called_with(expected_param)