def test_run(self, mock_duration): runner = serial.SerialScenarioRunner(mock.MagicMock(), mock.MagicMock()) runner._run_scenario = mock.MagicMock() scenario_name = "NovaServers.boot_server_from_volume_and_delete" config_kwargs = {"image": {"id": 1}, "flavor": {"id": 1}} context_obj = { "task": runner.task, "scenario_name": scenario_name, "admin": { "endpoint": mock.MagicMock() }, "config": { "cleanup": ["nova", "cinder"], "some_ctx": 2, "users": {} } } result = runner.run(scenario_name, context_obj, config_kwargs) self.assertEqual(result, mock_duration.return_value) self.assertEqual(list(runner.result_queue), []) cls_name, method_name = scenario_name.split(".", 1) cls = scenario_base.Scenario.get_by_name(cls_name) expected_config_kwargs = {"image": 1, "flavor": 1} runner._run_scenario.assert_called_once_with(cls, method_name, context_obj, expected_config_kwargs)
def test_runner_send_result_exception(self): runner = serial.SerialScenarioRunner( mock.MagicMock(), self.fake_endpoints, mock.MagicMock()) self.assertRaises( jsonschema.ValidationError, lambda: runner._send_result(mock.MagicMock()))
def test__join_processes(self, mock_send_result): process = mock.MagicMock(is_alive=mock.MagicMock(return_value=False)) processes = 10 process_pool = collections.deque([process] * processes) mock_result_queue = mock.MagicMock(empty=mock.MagicMock( return_value=True)) runner = serial.SerialScenarioRunner(mock.MagicMock(), mock.MagicMock()) runner._join_processes(process_pool, mock_result_queue) self.assertEqual(processes, process.join.call_count) mock_result_queue.close.assert_called_once_with()
def test_run_scenario(self, mock_run_once): times = 5 result = {"duration": 10, "idle_duration": 0, "error": [], "scenario_output": {}, "atomic_actions": {}} mock_run_once.return_value = result expected_results = [result for i in range(times)] runner = serial.SerialScenarioRunner(mock.MagicMock(), {"times": times}) runner._run_scenario(fakes.FakeScenario, "do_it", fakes.FakeUserContext({}).context, {}) self.assertEqual(len(runner.result_queue), times) results = list(runner.result_queue) self.assertEqual(results, expected_results)
def test__create_process_pool(self): runner = serial.SerialScenarioRunner(mock.MagicMock(), mock.MagicMock()) processes_to_start = 10 def worker_process(i): pass counter = ((i, ) for i in range(100)) process_pool = runner._create_process_pool(processes_to_start, worker_process, counter) self.assertEqual(processes_to_start, len(process_pool)) for process in process_pool: self.assertIsInstance(process, multiprocessing.Process)
def test_abort(self): runner = serial.SerialScenarioRunner(mock.MagicMock(), {"times": 5}) self.assertFalse(runner.aborted.is_set()) runner.abort() self.assertTrue(runner.aborted.is_set())
def test__run_scenario_aborted(self): runner = serial.SerialScenarioRunner(mock.MagicMock(), {"times": 5}) runner.abort() runner._run_scenario(fakes.FakeScenario, "do_it", fakes.FakeUserContext({}).context, {}) self.assertEqual(len(runner.result_queue), 0)