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