bad250e7be8e5d977572b8fc7a337e4d0dbc8c33
[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 = 'sudo 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 = 'sudo 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 == 'sudo ifconfig interface_1 down':
321             MockRunCommand.ret_val[0] = True
322         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
323                       '--unbind 1:00.0':
324             MockRunCommand.ret_val[1] = True
325         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
326                       '--bind=igb_uio 1:00.0':
327             MockRunCommand.ret_val[2] = True
328         if command == 'sudo ifconfig interface_2 down':
329             MockRunCommand.ret_val[3] = True
330         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
331                       '--unbind 1:00.1':
332             MockRunCommand.ret_val[4] = True
333         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
334                       '--bind=igb_uio 1:00.1':
335             MockRunCommand.ret_val[5] = True
336         else:
337             return MockRunCommand.ret_val
338
339     @staticmethod
340     def mock_run_command_finalization(command=None):
341         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
342                       '--unbind 1:00.0':
343             MockRunCommand.ret_val_finalization[0] = True
344         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
345                       '--bind=ixgbe 1:00.0':
346             MockRunCommand.ret_val_finalization[1] = True
347         if command == 'sudo ifconfig interface_1 up':
348             MockRunCommand.ret_val_finalization[2] = True
349         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
350                       '--unbind 1:00.1':
351             MockRunCommand.ret_val_finalization[3] = True
352         if command == 'sudo dpdk_directory/tools/dpdk_nic_bind.py ' \
353                       '--bind=ixgbe 1:00.1':
354             MockRunCommand.ret_val_finalization[4] = True
355         if command == 'sudo ifconfig interface_2 up':
356             MockRunCommand.ret_val_finalization[5] = True
357         else:
358             return MockRunCommand.ret_val_finalization
359
360
361 class TestDpdkPacketGenOthers(unittest.TestCase):
362
363     def setUp(self):
364         self.mut = mut.DpdkPacketGenerator()
365
366     def tearDown(self):
367         pass
368
369     @mock.patch('experimental_framework.packet_generators.'
370                 'dpdk_packet_generator.DpdkPacketGenerator.'
371                 '_cores_configuration')
372     def test__get_core_nics_for_failure(self, mock_cores_configuration):
373         mock_cores_configuration.return_value = None
374         self.assertRaises(ValueError, mut.DpdkPacketGenerator._get_core_nics,
375                           '', '')
376
377     @mock.patch('experimental_framework.packet_generators.'
378                 'dpdk_packet_generator.DpdkPacketGenerator.'
379                 '_cores_configuration')
380     def test__get_core_nics_one_nic_for_success(self,
381                                                 mock_cores_configuration):
382         mock_cores_configuration.return_value = 'ret_val'
383         expected = 'ret_val'
384         output = mut.DpdkPacketGenerator._get_core_nics(1, 'coremask')
385         self.assertEqual(expected, output)
386         mock_cores_configuration.assert_called_once_with('coremask', 1, 2, 0)
387
388     @mock.patch('experimental_framework.packet_generators.'
389                 'dpdk_packet_generator.DpdkPacketGenerator.'
390                 '_cores_configuration')
391     def test__get_core_nics_two_nics_for_success(self,
392                                                  mock_cores_configuration):
393         mock_cores_configuration.return_value = 'ret_val'
394         expected = 'ret_val'
395         output = mut.DpdkPacketGenerator._get_core_nics(2, 'coremask')
396         self.assertEqual(expected, output)
397         mock_cores_configuration.assert_called_once_with('coremask', 1, 2, 2)
398
399     @mock.patch('os.path.isfile')
400     def test__init_input_validation_for_success(self, mock_is_file):
401         mock_is_file.return_value = True
402
403         pcap_file_0 = 'pcap_file_0'
404         pcap_file_1 = 'pcap_file_1'
405         lua_script = 'lua_script'
406         pcap_directory = 'pcap_directory'
407         lua_directory = 'lua_directory'
408
409         variables = dict()
410         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
411         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
412         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
413         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
414
415         self.assertEqual(mut.DpdkPacketGenerator._init_input_validation(
416             pcap_file_0, pcap_file_1,
417             lua_script, pcap_directory, lua_directory,
418             variables), None)
419
420     @mock.patch('os.path.isfile')
421     def test__init_input_validation_for_failure(self, mock_is_file):
422         mock_is_file.return_value = True
423
424         pcap_file_0 = 'pcap_file_0'
425         pcap_file_1 = 'pcap_file_1'
426         lua_script = 'lua_script'
427         pcap_directory = 'pcap_directory'
428         lua_directory = 'lua_directory'
429
430         variables = dict()
431         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
432         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
433         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
434         # variables[common.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
435
436         self.assertRaises(ValueError,
437                           mut.DpdkPacketGenerator.
438                           _init_input_validation, pcap_file_0, pcap_file_1,
439                           lua_script, pcap_directory, lua_directory, variables)
440
441     @mock.patch('os.path.isfile')
442     def test__init_input_validation_for_failure_2(self, mock_is_file):
443         mock_is_file.return_value = True
444
445         pcap_directory = None
446         pcap_file_0 = 'pcap_file_0'
447         pcap_file_1 = 'pcap_file_1'
448         lua_script = 'lua_script'
449         lua_directory = 'lua_directory'
450
451         variables = dict()
452         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
453         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
454         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
455         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
456
457         self.assertRaises(ValueError,
458                           mut.DpdkPacketGenerator.
459                           _init_input_validation, pcap_file_0, pcap_file_1,
460                           lua_script, pcap_directory, lua_directory, variables)
461
462     @mock.patch('os.path.isfile')
463     def test__init_input_validation_for_failure_3(self, mock_is_file):
464         mock_is_file.return_value = True
465
466         pcap_directory = 'directory'
467         pcap_file_0 = None
468         pcap_file_1 = 'pcap_file_1'
469         lua_script = 'lua_script'
470         lua_directory = 'lua_directory'
471
472         variables = dict()
473         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
474         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
475         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
476         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
477
478         self.assertRaises(ValueError,
479                           mut.DpdkPacketGenerator.
480                           _init_input_validation, pcap_file_0, pcap_file_1,
481                           lua_script, pcap_directory, lua_directory, variables)
482
483     @mock.patch('os.path.isfile')
484     def test__init_input_validation_for_failure_4(self, mock_is_file):
485         mock_is_file.return_value = True
486
487         pcap_directory = 'directory'
488         pcap_file_0 = 'pcap_file_0'
489         pcap_file_1 = None
490         lua_script = 'lua_script'
491         lua_directory = 'lua_directory'
492
493         variables = dict()
494         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
495         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
496         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
497         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
498
499         self.assertRaises(ValueError,
500                           mut.DpdkPacketGenerator.
501                           _init_input_validation, pcap_file_0, pcap_file_1,
502                           lua_script, pcap_directory, lua_directory, variables)
503
504     @mock.patch('os.path.isfile')
505     def test__init_input_validation_for_failure_5(self, mock_is_file):
506         mock_is_file.return_value = True
507
508         pcap_directory = 'directory'
509         pcap_file_0 = 'pcap_file_0'
510         pcap_file_1 = 'pcap_file_1'
511         lua_script = None
512         lua_directory = 'lua_directory'
513
514         variables = dict()
515         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
516         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
517         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
518         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
519
520         self.assertRaises(ValueError,
521                           mut.DpdkPacketGenerator.
522                           _init_input_validation, pcap_file_0, pcap_file_1,
523                           lua_script, pcap_directory, lua_directory, variables)
524
525     @mock.patch('os.path.isfile', side_effect=[False])
526     def test__init_input_validation_for_failure_6(self, mock_is_file):
527         # mock_is_file.return_value = False
528
529         pcap_directory = 'directory'
530         pcap_file_0 = 'pcap_file_0'
531         pcap_file_1 = 'pcap_file_1'
532         lua_script = 'lua_script'
533         lua_directory = 'lua_directory'
534
535         variables = dict()
536         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
537         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
538         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
539         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
540
541         self.assertRaises(ValueError,
542                           mut.DpdkPacketGenerator.
543                           _init_input_validation, pcap_file_0, pcap_file_1,
544                           lua_script, pcap_directory, lua_directory, variables)
545
546     @mock.patch('os.path.isfile', side_effect=[True, False])
547     def test__init_input_validation_for_failure_7(self, mock_is_file):
548         pcap_directory = 'directory'
549         pcap_file_0 = 'pcap_file_0'
550         pcap_file_1 = 'pcap_file_1'
551         lua_script = 'lua_script'
552         lua_directory = 'lua_directory'
553
554         variables = dict()
555         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
556         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
557         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
558         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
559
560         self.assertRaises(ValueError,
561                           mut.DpdkPacketGenerator.
562                           _init_input_validation, pcap_file_0, pcap_file_1,
563                           lua_script, pcap_directory, lua_directory, variables)
564
565     @mock.patch('os.path.isfile', side_effect=[True, True, False])
566     def test__init_input_validation_for_failure_8(self, mock_is_file):
567         pcap_directory = 'directory'
568         pcap_file_0 = 'pcap_file_0'
569         pcap_file_1 = 'pcap_file_1'
570         lua_script = 'lua_script'
571         lua_directory = 'lua_directory'
572
573         variables = dict()
574         variables[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'directory'
575         variables[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
576         variables[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
577         variables[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
578
579         self.assertRaises(ValueError,
580                           mut.DpdkPacketGenerator.
581                           _init_input_validation, pcap_file_0, pcap_file_1,
582                           lua_script, pcap_directory, lua_directory, variables)
583
584     @mock.patch('os.chdir')
585     def test__chdir_for_success(self, mock_os_chdir):
586         mut.DpdkPacketGenerator._chdir('directory')
587         mock_os_chdir.assert_called_once_with('directory')
588
589     @mock.patch('experimental_framework.common.run_command',
590                 side_effect=MockRunCommand.mock_run_command)
591     def test__init_physical_nics_for_success(self, mock_run_command):
592         dpdk_interfaces = 1
593         dpdk_vars = dict()
594
595         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
596         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
597         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
598         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
599         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
600         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
601         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
602         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
603         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
604         self.mut._init_physical_nics(dpdk_interfaces, dpdk_vars)
605         self.assertEqual(MockRunCommand.mock_run_command(),
606                          [True, True, True, False, False, False])
607
608     @mock.patch('experimental_framework.common.run_command',
609                 side_effect=MockRunCommand.mock_run_command)
610     def test__init_physical_nics_for_success_2(self, mock_run_command):
611         dpdk_interfaces = 2
612         dpdk_vars = dict()
613
614         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
615         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
616         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
617         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
618         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
619         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
620         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
621         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
622         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
623         self.mut._init_physical_nics(dpdk_interfaces, dpdk_vars)
624         self.assertEqual(MockRunCommand.mock_run_command(),
625                          [True, True, True, True, True, True])
626
627     @mock.patch('experimental_framework.common.run_command')
628     def test__init_physical_nics_for_failure(self, mock_run_command):
629         dpdk_interfaces = 3
630         dpdk_vars = dict()
631         self.assertRaises(ValueError, self.mut._init_physical_nics,
632                           dpdk_interfaces, dpdk_vars)
633
634     @mock.patch('experimental_framework.common.run_command',
635                 side_effect=MockRunCommand.mock_run_command_finalization)
636     def test__finalize_physical_nics_for_success(self, mock_run_command):
637         dpdk_interfaces = 1
638         dpdk_vars = dict()
639         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
640         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
641         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
642         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
643         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
644         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
645         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
646         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
647         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
648         self.mut._finalize_physical_nics(dpdk_interfaces, dpdk_vars)
649         self.assertEqual(MockRunCommand.mock_run_command_finalization(),
650                          [True, True, True, False, False, False])
651
652     @mock.patch('experimental_framework.common.run_command',
653                 side_effect=MockRunCommand.mock_run_command_finalization)
654     def test__finalize_physical_nics_for_success_2(self, mock_run_command):
655         dpdk_interfaces = 2
656         dpdk_vars = dict()
657         dpdk_vars[conf_file.CFSP_DPDK_DPDK_DIRECTORY] = 'dpdk_directory/'
658         dpdk_vars[conf_file.CFSP_DPDK_PKTGEN_DIRECTORY] = 'pktgen_directory/'
659         dpdk_vars[conf_file.CFSP_DPDK_PROGRAM_NAME] = 'program_name'
660         dpdk_vars[conf_file.CFSP_DPDK_COREMASK] = 'coremask'
661         dpdk_vars[conf_file.CFSP_DPDK_MEMORY_CHANNEL] = 'memory_channels'
662         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_1] = '1:00.0'
663         dpdk_vars[conf_file.CFSP_DPDK_BUS_SLOT_NIC_2] = '1:00.1'
664         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_1] = 'interface_1'
665         dpdk_vars[conf_file.CFSP_DPDK_NAME_IF_2] = 'interface_2'
666         self.mut._finalize_physical_nics(dpdk_interfaces, dpdk_vars)
667         self.assertEqual(MockRunCommand.mock_run_command_finalization(),
668                          [True, True, True, True, True, True])
669
670     def test__finalize_physical_nics_for_failure(self):
671         dpdk_interfaces = 0
672         dpdk_vars = dict()
673         self.assertRaises(ValueError, self.mut._finalize_physical_nics,
674                           dpdk_interfaces, dpdk_vars)
675
676     def test__cores_configuration_for_success(self):
677         coremask = '1f'
678         expected = '[2:1].0,[4:3].1'
679         output = mut.DpdkPacketGenerator._cores_configuration(coremask,
680                                                               1, 2, 2)
681         self.assertEqual(expected, output)
682
683     def test__cores_configuration_for_success_2(self):
684         coremask = '1f'
685         expected = '2.0,[4:3].1'
686         output = mut.DpdkPacketGenerator._cores_configuration(coremask,
687                                                               1, 1, 2)
688         self.assertEqual(expected, output)
689
690     def test__cores_configuration_for_success_3(self):
691         coremask = '1f'
692         expected = '[3:2].0,4.1'
693         output = mut.DpdkPacketGenerator._cores_configuration(coremask,
694                                                               1, 2, 1)
695         self.assertEqual(expected, output)
696
697     def test__cores_configuration_for_failure(self):
698         coremask = '1'
699         self.assertRaises(ValueError,
700                           mut.DpdkPacketGenerator._cores_configuration,
701                           coremask, 1, 2, 2)
702
703     @mock.patch('experimental_framework.common.LOG')
704     @mock.patch('experimental_framework.common.run_command')
705     def test__change_vlan_for_success(self, mock_run_command, mock_log):
706         mut.DpdkPacketGenerator._change_vlan('/directory/', 'pcap_file', '10')
707         expected_param = '/directory/vlan_tag.sh /directory/pcap_file 10'
708         mock_run_command.assert_called_with(expected_param)