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