aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/vTC/apexlake/tests/instantiation_validation_bench_test.py
diff options
context:
space:
mode:
authorVincenzo Riccobene <vincenzox.m.riccobene@intel.com>2015-12-11 21:42:20 +0000
committerJörgen Karlsson <jorgen.w.karlsson@ericsson.com>2015-12-15 16:05:40 +0000
commitd8377e956f73f70cb70b62a3c31677460ea85f6e (patch)
treed7ebc7c31caa4dfdb7fcc1cc559aab0c1bc96dc2 /yardstick/vTC/apexlake/tests/instantiation_validation_bench_test.py
parent9c78a42bb6cc9ba8a8f93c3b1f95f5ed5b9b1c97 (diff)
Add support to the test case required by YARDSTICK-145
Add support to ApexLake to the test case that validates the instantiation of the virtual Traffic Classifier within OpenStack JIRA: YARDSTICK-145 Change-Id: I533712de36de4e40fdec15b2be2348fbb8c29dfc Signed-off-by: Vincenzo Riccobene <vincenzox.m.riccobene@intel.com>
Diffstat (limited to 'yardstick/vTC/apexlake/tests/instantiation_validation_bench_test.py')
-rw-r--r--yardstick/vTC/apexlake/tests/instantiation_validation_bench_test.py322
1 files changed, 322 insertions, 0 deletions
diff --git a/yardstick/vTC/apexlake/tests/instantiation_validation_bench_test.py b/yardstick/vTC/apexlake/tests/instantiation_validation_bench_test.py
new file mode 100644
index 000000000..569d24c5a
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/instantiation_validation_bench_test.py
@@ -0,0 +1,322 @@
+# Copyright (c) 2015 Intel Research and Development Ireland Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import unittest
+import mock
+import experimental_framework.constants.conf_file_sections as cfs
+import experimental_framework.benchmarks.\
+ instantiation_validation_benchmark as iv_module
+from experimental_framework.benchmarks.\
+ instantiation_validation_benchmark import InstantiationValidationBenchmark
+
+
+kill_counter = [0, 0]
+command_counter = [0, 0, 0, 0, 0]
+replace_counter = [0, 0, 0]
+
+
+def dummy_os_kill(pid, signal, get_counters=None):
+ if get_counters:
+ return kill_counter
+ if pid == 1234:
+ kill_counter[0] += 1
+ return
+ if pid == 4321:
+ kill_counter[1] += 1
+ return
+ raise Exception(pid)
+
+
+def dummy_run_command(command, get_counters=None):
+ if get_counters:
+ return command_counter
+ if command == 'smcroute -k':
+ command_counter[0] += 1
+ return
+ elif command == 'ip link delete interface.100':
+ command_counter[1] += 1
+ return
+ raise Exception(command)
+
+
+def dummy_run_command_2(command, get_counters=None):
+ if get_counters:
+ return command_counter
+ if command == 'ip link add link interface name interface.' \
+ '100 type vlan id 100':
+ command_counter[0] += 1
+ return
+ elif command == 'ifconfig interface.100 10.254.254.254 up':
+ command_counter[1] += 1
+ return
+ elif command == "echo 'mgroup from interface.100 group 224.192.16.1' > " \
+ "/etc/smcroute.conf":
+ command_counter[2] += 1
+ return
+ elif command == "smcroute -d":
+ command_counter[3] += 1
+ return
+ elif command == "test_sniff interface.100 128 &":
+ command_counter[4] += 1
+ return
+ raise Exception(command)
+
+
+def dummy_replace_in_file(file, str_from, str_to, get_couters=None):
+ if get_couters:
+ return replace_counter
+ if file == 'file':
+ if str_from == 'local out_file = "result_file"':
+ if str_to == 'local out_file = ""':
+ replace_counter[0] += 1
+ return
+ if str_from == 'local traffic_rate = 100':
+ if str_to == 'local traffic_rate = 0':
+ replace_counter[1] += 1
+ return
+ if str_from == 'local traffic_delay = 60':
+ if str_to == 'local traffic_delay = 0':
+ replace_counter[2] += 1
+ return
+ if str_from == 'local out_file = ""':
+ if str_to == 'local out_file = "result_file"':
+ replace_counter[3] += 1
+ return
+ if str_from == 'local traffic_rate = 0':
+ if str_to == 'local traffic_rate = 100':
+ replace_counter[4] += 1
+ return
+ if str_from == 'local traffic_delay = 0':
+ if str_to == 'local traffic_delay = 60':
+ replace_counter[5] += 1
+ return
+ raise Exception(file + ' ' + str_from + ' ' + str_to)
+
+
+class DummyDpdkPacketGenerator():
+
+ counter = 0
+
+ def __init__(self):
+ DummyDpdkPacketGenerator.counter = [0, 0]
+
+ def init_dpdk_pktgen(self, dpdk_interfaces, lua_script, pcap_file_0,
+ pcap_file_1, vlan_0, vlan_1):
+ if dpdk_interfaces == 1:
+ if lua_script == 'constant_traffic.lua':
+ if pcap_file_0 == 'packet_512.pcap':
+ if pcap_file_1 == 'igmp.pcap':
+ if vlan_0 == '-1':
+ if vlan_1 == '-1':
+ DummyDpdkPacketGenerator.counter[0] += 1
+
+ def send_traffic(self):
+ DummyDpdkPacketGenerator.counter[1] += 1
+ return
+
+
+class DummyInstantiaionValidationBenchmark(InstantiationValidationBenchmark):
+
+ counter = [0, 0, 0, 0, 0]
+
+ def _configure_lua_file(self, traffic_rate_percentage, traffic_time):
+ DummyInstantiaionValidationBenchmark.counter[0] += 1
+
+ def _init_packet_checker(self):
+ DummyInstantiaionValidationBenchmark.counter[1] += 1
+
+ def _finalize_packet_checker(self):
+ DummyInstantiaionValidationBenchmark.counter[2] += 1
+
+ def _reset_lua_file(self, traffic_rate_percentage, traffic_time):
+ if traffic_rate_percentage == '1' and traffic_time == '10':
+ DummyInstantiaionValidationBenchmark.counter[3] += 1
+
+ def _get_results(self):
+ DummyInstantiaionValidationBenchmark.counter[4] += 1
+ res = {'test': 'result'}
+ return res
+
+
+class InstantiationValidationInitTest(unittest.TestCase):
+
+ def setUp(self):
+ self.iv = InstantiationValidationBenchmark('InstantiationValidation',
+ dict())
+
+ def tearDown(self):
+ pass
+
+ @mock.patch('experimental_framework.common.get_base_dir')
+ def test___init___for_success(self, mock_base_dir):
+ mock_base_dir.return_value = 'base_dir/'
+ iv = InstantiationValidationBenchmark('InstantiationValidation',
+ dict())
+ self.assertEqual(iv.base_dir,
+ 'base_dir/experimental_framework/'
+ 'packet_generators/dpdk_pktgen/')
+ self.assertEqual(iv.results_file,
+ 'base_dir/experimental_framework/'
+ 'packet_generators/dpdk_pktgen/packets.res')
+ self.assertEqual(iv.lua_file,
+ 'base_dir/experimental_framework/'
+ 'packet_generators/dpdk_pktgen/constant_traffic.lua')
+ self.assertEqual(iv.pkt_checker_command,
+ 'base_dir/experimental_framework/'
+ 'libraries/packet_checker/test_sniff ')
+ self.assertEqual(iv.res_dir, '')
+ self.assertEqual(iv.interface_name, '')
+
+ def test_init_for_success(self):
+ self.iv.init()
+
+ def test_finalize_for_success(self):
+ self.iv.finalize()
+
+ def test_get_features_for_success(self):
+
+ expected = dict()
+ expected['description'] = 'Instantiation Validation Benchmark'
+ expected['parameters'] = [
+ iv_module.THROUGHPUT,
+ iv_module.VLAN_SENDER,
+ iv_module.VLAN_RECEIVER
+ ]
+ expected['allowed_values'] = dict()
+ expected['allowed_values'][iv_module.THROUGHPUT] = \
+ map(str, range(0, 100))
+ expected['allowed_values'][iv_module.VLAN_SENDER] = \
+ map(str, range(-1, 4096))
+ expected['allowed_values'][iv_module.VLAN_RECEIVER] = \
+ map(str, range(-1, 4096))
+ expected['default_values'] = dict()
+ expected['default_values'][iv_module.THROUGHPUT] = '1'
+ expected['default_values'][iv_module.VLAN_SENDER] = '-1'
+ expected['default_values'][iv_module.VLAN_RECEIVER] = '-1'
+ output = self.iv.get_features()
+ self.assertEqual(expected, output)
+
+ @mock.patch('commands.getoutput')
+ def test__get_pids_for_success(self, mock_getoutput):
+ expected = [1234]
+ mock_getoutput.return_value = '1234'
+ output = self.iv._get_pids()
+ self.assertEqual(expected, output)
+
+ expected = [1234, 4321]
+ mock_getoutput.return_value = '1234\n4321'
+ output = self.iv._get_pids()
+ self.assertEqual(expected, output)
+
+ expected = []
+ mock_getoutput.return_value = None
+ output = self.iv._get_pids()
+ self.assertEqual(expected, output)
+
+ @mock.patch('experimental_framework.common.run_command',
+ side_effect=dummy_run_command)
+ @mock.patch('os.kill', side_effect=dummy_os_kill)
+ @mock.patch('experimental_framework.benchmarks.'
+ 'instantiation_validation_benchmark.'
+ 'InstantiationValidationBenchmark._get_pids')
+ def test__finalize_packet_checker_for_success(self,
+ mock_pids,
+ mock_os_kill,
+ mock_run_command):
+ global command_counter
+ global kill_counter
+ command_counter = [0, 0, 0, 0, 0]
+ kill_counter = [0, 0]
+ mock_pids.return_value = [1234, 4321]
+ self.iv.interface_name = 'interface'
+ self.iv.params[iv_module.VLAN_RECEIVER] = '100'
+ self.iv._finalize_packet_checker()
+ self.assertEqual(dummy_os_kill('', '', True), [1, 1])
+ self.assertEqual(dummy_run_command('', True), [1, 1, 0, 0, 0])
+
+ @mock.patch('experimental_framework.common.run_command',
+ side_effect=dummy_run_command_2)
+ @mock.patch('experimental_framework.benchmarks.'
+ 'instantiation_validation_benchmark.'
+ 'InstantiationValidationBenchmark._get_pids')
+ @mock.patch('os.kill', side_effect=dummy_os_kill)
+ def test__init_packet_checker_for_success(self, mock_kill,
+ mock_pids, mock_run_command):
+ global command_counter
+ command_counter = [0, 0, 0, 0, 0]
+ mock_pids.return_value = [1234, 4321]
+ self.iv.pkt_checker_command = 'test_sniff '
+ self.iv.interface_name = 'interface'
+ self.iv.params[iv_module.VLAN_RECEIVER] = '100'
+ self.iv._init_packet_checker()
+ self.assertEqual(dummy_run_command('', True), [1, 1, 1, 1, 1])
+
+ @mock.patch('experimental_framework.common.get_file_first_line')
+ def test__get_results_for_success(self, mock_get_file):
+ self.iv.res_dir = 'directory'
+ mock_get_file.side_effect = ['100', '50']
+ expected = {'failure': '0'}
+ output = self.iv._get_results()
+ self.assertEqual(expected, output)
+
+ mock_get_file.side_effect = ['10', '50']
+ expected = {'failure': '1'}
+ output = self.iv._get_results()
+ self.assertEqual(expected, output)
+
+ @mock.patch('experimental_framework.common.replace_in_file',
+ side_effect=dummy_replace_in_file)
+ def test__reset_lua_file_for_success(self, mock_replace):
+ global replace_counter
+ replace_counter = [0, 0, 0, 0, 0, 0]
+ traffic_rate_percentage = '100'
+ traffic_time = '60'
+ self.iv.lua_file = 'file'
+ self.iv.results_file = 'result_file'
+ self.iv._reset_lua_file(traffic_rate_percentage, traffic_time)
+ self.assertEqual(dummy_replace_in_file('', '', '', True),
+ [1, 1, 1, 0, 0, 0])
+
+ @mock.patch('experimental_framework.common.replace_in_file',
+ side_effect=dummy_replace_in_file)
+ def test__configure_lua_file_for_success(self, mock_replace):
+ global replace_counter
+ replace_counter = [0, 0, 0, 0, 0, 0]
+ traffic_rate_percentage = '100'
+ traffic_time = '60'
+ self.iv.lua_file = 'file'
+ self.iv.results_file = 'result_file'
+ self.iv._configure_lua_file(traffic_rate_percentage, traffic_time)
+ self.assertEqual(dummy_replace_in_file('', '', '', True),
+ [0, 0, 0, 1, 1, 1])
+
+ @mock.patch('experimental_framework.packet_generators.'
+ 'dpdk_packet_generator.DpdkPacketGenerator',
+ side_effect=DummyDpdkPacketGenerator)
+ @mock.patch('experimental_framework.common.get_dpdk_pktgen_vars')
+ def test_run_for_success(self, mock_common_get_vars, mock_pktgen):
+ rval = dict()
+ rval[cfs.CFSP_DPDK_BUS_SLOT_NIC_2] = 'bus_2'
+ rval[cfs.CFSP_DPDK_NAME_IF_2] = 'if_2'
+ mock_common_get_vars.return_value = rval
+ expected = {'test': 'result'}
+ iv = DummyInstantiaionValidationBenchmark('InstantiationValidation',
+ dict())
+ iv.params[iv_module.THROUGHPUT] = '1'
+ output = iv.run()
+ self.assertEqual(expected, output)
+ self.assertEqual(DummyDpdkPacketGenerator.counter,
+ [1, 1])
+ self.assertEqual(DummyInstantiaionValidationBenchmark.counter,
+ [1, 1, 1, 1, 1])