def test_collect_kpi(self, ssh, mock_time): mock_ssh(ssh) resource_helper = mock.MagicMock() resource_helper.execute.return_value = list(range(12)) resource_helper.collect_collectd_kpi.return_value = { 'core': { 'result': 234 } } prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf.resource_helper = resource_helper expected = { 'packets_in': 7, 'packets_dropped': 1, 'packets_fwd': 6, 'collect_stats': { 'core': { 'result': 234 } }, } result = prox_approx_vnf.collect_kpi() self.assertEqual(result, expected)
def test_instantiate(self, ssh, mock_find, mock_cpu_sys_cores, mock_time): mock_ssh(ssh) mock_cpu_sys_cores.get_core_socket.return_value = {'0': '01234'} prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf.ssh_helper = mock.MagicMock( **{"execute.return_value": (0, "", ""), "bin_path": ""}) prox_approx_vnf.setup_helper._setup_resources = mock.MagicMock() prox_approx_vnf.setup_helper._find_used_drivers = mock.MagicMock() prox_approx_vnf.setup_helper.used_drivers = {} prox_approx_vnf.setup_helper.bound_pci = [] prox_approx_vnf._run_prox = mock.MagicMock(return_value=0) prox_approx_vnf.resource_helper = mock.MagicMock() prox_approx_vnf.resource_helper.get_process_args.return_value = { '-e': '', '-t': '', }, 'configs/l3-gen-2.cfg', '/root/dppd-PROX-v035/build/prox' prox_approx_vnf.copy_to_target = mock.MagicMock() prox_approx_vnf.upload_prox_config = mock.MagicMock() prox_approx_vnf.generate_prox_config_file = mock.MagicMock() prox_approx_vnf.q_out.put("PROX started") prox_approx_vnf.WAIT_TIME = 0 # if process it still running exitcode will be None expected = 0, None result = prox_approx_vnf.instantiate(self.SCENARIO_CFG, self.CONTEXT_CFG) self.assertIn(result, expected)
def test__vnf_up_post(self, ssh, mock_time): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf.resource_helper = resource_helper = mock.Mock() prox_approx_vnf._vnf_up_post() self.assertEqual(resource_helper.up_post.call_count, 1)
def test_collect_kpi_no_client(self, ssh, mock_time): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf.resource_helper = None expected = { 'packets_in': 0, 'packets_dropped': 0, 'packets_fwd': 0, 'collect_stats': {'core': {}}, } result = prox_approx_vnf.collect_kpi() self.assertEqual(result, expected)
def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None): # don't call superclass, use custom wrapper of ProxApproxVnf self._vnf_wrapper = ProxApproxVnf(name, vnfd, setup_env_helper_type, resource_helper_type) self.bin_path = get_nsb_option('bin_path', '') self.name = self._vnf_wrapper.name self.ssh_helper = self._vnf_wrapper.ssh_helper self.setup_helper = self._vnf_wrapper.setup_helper self.resource_helper = self._vnf_wrapper.resource_helper self.scenario_helper = self._vnf_wrapper.scenario_helper self.runs_traffic = True self.traffic_finished = False self._tg_process = None self._traffic_process = None
def test_run_prox(self, ssh, *_): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf.scenario_helper.scenario_cfg = self.SCENARIO_CFG prox_approx_vnf.ssh_helper.provision_tool.return_value = '/tool_path12/tool_file34' prox_approx_vnf.setup_helper.remote_path = 'configs/file56.cfg' expected = "sudo bash -c 'cd /tool_path12; " \ "/tool_path12/tool_file34 -o cli -t -f /tmp/l3-swap-2.cfg '" prox_approx_vnf._run() result = prox_approx_vnf.ssh_helper.run.call_args[0][0] self.assertEqual(result, expected)
def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None): vnfd_cpy = copy.deepcopy(vnfd) super(ProxIrq, self).__init__(name, vnfd_cpy) self._vnf_wrapper = ProxApproxVnf( name, vnfd, setup_env_helper_type, resource_helper_type) self.bin_path = get_nsb_option('bin_path', '') self.name = self._vnf_wrapper.name self.ssh_helper = self._vnf_wrapper.ssh_helper self.setup_helper = self._vnf_wrapper.setup_helper self.resource_helper = self._vnf_wrapper.resource_helper self.scenario_helper = self._vnf_wrapper.scenario_helper self.irq_cores = None
def test_run_prox(self, ssh, mock_time): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) filewrapper = mock.MagicMock() config_path = self.SCENARIO_CFG['options']["vnf__1"]["prox_config"] prox_path = self.SCENARIO_CFG['options']["vnf__1"]["prox_path"] prox_args = self.SCENARIO_CFG['options']["vnf__1"]["prox_args"] prox_approx_vnf.WAIT_TIME = 0 prox_approx_vnf._run_prox(filewrapper, config_path, prox_path, prox_args) self.assertEqual(prox_approx_vnf.ssh_helper.run.call_args[0][0], "sudo bash -c 'cd /root/dppd-PROX-v035/build; " "/root/dppd-PROX-v035/build/prox -o cli -t -f configs/l3-swap-2.cfg '")
def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None): vnfd_cpy = copy.deepcopy(vnfd) super(ProxTrafficGen, self).__init__(name, vnfd_cpy) self._vnf_wrapper = ProxApproxVnf( name, vnfd, setup_env_helper_type, resource_helper_type) self.bin_path = get_nsb_option('bin_path', '') self.name = self._vnf_wrapper.name self.ssh_helper = self._vnf_wrapper.ssh_helper self.setup_helper = self._vnf_wrapper.setup_helper self.resource_helper = self._vnf_wrapper.resource_helper self.scenario_helper = self._vnf_wrapper.scenario_helper self.runs_traffic = True self.traffic_finished = False self._tg_process = None self._traffic_process = None
def test_wait_for_instantiate_panic(self, ssh, mock_time): mock_ssh(ssh, exec_result=(1, "", "")) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf._vnf_process = mock.MagicMock(**{"is_alive.return_value": True}) prox_approx_vnf._run_prox = mock.Mock(return_value=0) prox_approx_vnf.WAIT_TIME = 0 prox_approx_vnf.q_out.put("PANIC") with self.assertRaises(RuntimeError): prox_approx_vnf.wait_for_instantiate()
def test_terminate(self, ssh, mock_socket, mock_time): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf._vnf_process = mock.MagicMock() prox_approx_vnf._vnf_process.terminate = mock.Mock() prox_approx_vnf.ssh_helper = mock.MagicMock() prox_approx_vnf.setup_helper = mock.Mock() prox_approx_vnf.resource_helper = mock.MagicMock() self.assertIsNone(prox_approx_vnf.terminate())
class ProxTrafficGen(SampleVNFTrafficGen): APP_NAME = 'ProxTG' PROX_MODE = "Traffic Gen" LUA_PARAMETER_NAME = "gen" WAIT_TIME = 1 def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None): # don't call superclass, use custom wrapper of ProxApproxVnf self._vnf_wrapper = ProxApproxVnf(name, vnfd, setup_env_helper_type, resource_helper_type) self.bin_path = get_nsb_option('bin_path', '') self.name = self._vnf_wrapper.name self.ssh_helper = self._vnf_wrapper.ssh_helper self.setup_helper = self._vnf_wrapper.setup_helper self.resource_helper = self._vnf_wrapper.resource_helper self.scenario_helper = self._vnf_wrapper.scenario_helper self.runs_traffic = True self.traffic_finished = False self._tg_process = None self._traffic_process = None def terminate(self): self._vnf_wrapper.terminate() super(ProxTrafficGen, self).terminate() def instantiate(self, scenario_cfg, context_cfg): self._vnf_wrapper.instantiate(scenario_cfg, context_cfg) self._tg_process = self._vnf_wrapper._vnf_process def wait_for_instantiate(self): self._vnf_wrapper.wait_for_instantiate()
def test_vnf_execute_oserror(self, ssh, mock_time): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf.resource_helper = resource_helper = mock.Mock() resource_helper.execute.side_effect = OSError(errno.EPIPE, "") prox_approx_vnf.vnf_execute("", _ignore_errors=True) resource_helper.execute.side_effect = OSError(errno.ESHUTDOWN, "") prox_approx_vnf.vnf_execute("", _ignore_errors=True) resource_helper.execute.side_effect = OSError(errno.EADDRINUSE, "") with self.assertRaises(OSError): prox_approx_vnf.vnf_execute("", _ignore_errors=True)
def bad_test_instantiate(self, ssh, mock_time): prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) prox_approx_vnf.scenario_helper = mock.MagicMock() prox_approx_vnf.setup_helper = mock.MagicMock() # we can't mock super prox_approx_vnf.instantiate(self.SCENARIO_CFG, self.CONTEXT_CFG) prox_approx_vnf.setup_helper.build_config.assert_called_once()
class ProxTrafficGen(SampleVNFTrafficGen): APP_NAME = 'ProxTG' PROX_MODE = "Traffic Gen" LUA_PARAMETER_NAME = "gen" WAIT_TIME = 1 @staticmethod def _sort_vpci(vnfd): """ :param vnfd: vnfd.yaml :return: trex_cfg.yaml file """ def key_func(interface): return interface["virtual-interface"]["vpci"], interface["name"] ext_intf = vnfd["vdu"][0]["external-interface"] return sorted(ext_intf, key=key_func) def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None): # don't call superclass, use custom wrapper of ProxApproxVnf self._vnf_wrapper = ProxApproxVnf(name, vnfd, setup_env_helper_type, resource_helper_type) self.bin_path = get_nsb_option('bin_path', '') self.name = self._vnf_wrapper.name self.ssh_helper = self._vnf_wrapper.ssh_helper self.setup_helper = self._vnf_wrapper.setup_helper self.resource_helper = self._vnf_wrapper.resource_helper self.scenario_helper = self._vnf_wrapper.scenario_helper self.runs_traffic = True self.traffic_finished = False self._tg_process = None self._traffic_process = None # used for generating stats self.vpci_if_name_ascending = self._sort_vpci(vnfd) self.resource_helper.vpci_if_name_ascending = self._sort_vpci(vnfd) def listen_traffic(self, traffic_profile): pass def terminate(self): self._vnf_wrapper.terminate() super(ProxTrafficGen, self).terminate() def instantiate(self, scenario_cfg, context_cfg): self._vnf_wrapper.instantiate(scenario_cfg, context_cfg) self._tg_process = self._vnf_wrapper._vnf_process def wait_for_instantiate(self): self._vnf_wrapper.wait_for_instantiate()
class ProxIrq(SampleVNFTrafficGen): def __init__(self, name, vnfd, task_id, setup_env_helper_type=None, resource_helper_type=None): vnfd_cpy = copy.deepcopy(vnfd) super(ProxIrq, self).__init__(name, vnfd_cpy, task_id) self._vnf_wrapper = ProxApproxVnf(name, vnfd, task_id, setup_env_helper_type, resource_helper_type) self.bin_path = get_nsb_option('bin_path', '') self.name = self._vnf_wrapper.name self.ssh_helper = self._vnf_wrapper.ssh_helper self.setup_helper = self._vnf_wrapper.setup_helper self.resource_helper = self._vnf_wrapper.resource_helper self.scenario_helper = self._vnf_wrapper.scenario_helper self.irq_cores = None def terminate(self): self._vnf_wrapper.terminate() super(ProxIrq, self).terminate() def instantiate(self, scenario_cfg, context_cfg): self._vnf_wrapper.instantiate(scenario_cfg, context_cfg) self._tg_process = self._vnf_wrapper._vnf_process def wait_for_instantiate(self): self._vnf_wrapper.wait_for_instantiate() def get_irq_cores(self): cores = [] mode = "irq" for section_name, section in self.setup_helper.prox_config_data: if not section_name.startswith("core"): continue irq_mode = task_present = False task_present_task = 0 for key, value in section: if key == "mode" and value == mode: irq_mode = True if key == "task": task_present = True task_present_task = int(value) if irq_mode: if not task_present: task_present_task = 0 core_tuple = CoreSocketTuple(section_name) core = core_tuple.core_id cores.append((core, task_present_task)) return cores
def test_collect_kpi_error(self, ssh, mock_time): mock_ssh(ssh) resource_helper = mock.MagicMock() prox_approx_vnf = ProxApproxVnf(NAME, deepcopy(self.VNFD0)) prox_approx_vnf.resource_helper = resource_helper prox_approx_vnf.vnfd_helper['vdu'][0]['external-interface'] = [] with self.assertRaises(RuntimeError): prox_approx_vnf.collect_kpi()
def test___init__(self, ssh, mock_time): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) self.assertIsNone(prox_approx_vnf._vnf_process)
def test_scale(self, ssh, mock_time): mock_ssh(ssh) prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0) with self.assertRaises(NotImplementedError): prox_approx_vnf.scale()