def test__worker_process_called_with_cfg(self): self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self._assert_defaults__worker_run_setup_and_teardown()
def test__worker_process_queue_on_sla_validation_error_monitor( self, *args): self.scenario_cfg['sla'] = {'action': 'monitor'} self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} self.benchmark.my_method = self.MyMethod( side_effect=self.MyMethod.SLA_VALIDATION_ERROR_SIDE_EFFECT) queue = mock.Mock() proxduration._worker_process(queue, self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self._assert_defaults__worker_run_setup_and_teardown() benchmark_output = { 'timestamp': mock.ANY, 'sequence': 1, 'data': { 'my_key': 102 }, 'errors': ('My Case SLA validation failed. ' 'Error: my error message', ) } queue.put.assert_has_calls( [mock.call(benchmark_output, True, constants.QUEUE_PUT_TIMEOUT)])
def test__worker_process_runner_id(self, mock_os_getpid): mock_os_getpid.return_value = 101 self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self.assertEqual(101, self.scenario_cfg['runner']['runner_id'])
def test__worker_process_broad_exception(self, *args): self.benchmark.my_method = mock.Mock( side_effect=y_exc.YardstickException) self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self._assert_defaults__worker_run_setup_and_teardown()
def test__worker_process_except_sla_validation_error_no_sla_cfg(self): self.benchmark.my_method = mock.Mock( side_effect=y_exc.SLAValidationError) self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self._assert_defaults__worker_run_setup_and_teardown()
def test__worker_process_output_queue(self): self.benchmark.my_method = mock.Mock(return_value='my_result') self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} output_queue = mock.Mock() proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), output_queue) self._assert_defaults__worker_run_setup_and_teardown() output_queue.put.assert_has_calls( [mock.call('my_result', True, constants.QUEUE_PUT_TIMEOUT)])
def test__worker_process_called_without_cfg(self): scenario_cfg = {'runner': {}} aborted = multiprocessing.Event() aborted.set() proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', scenario_cfg, {}, aborted, mock.Mock()) self.benchmark_cls.assert_called_once_with(scenario_cfg, {}) self.benchmark.setup.assert_called_once() self.benchmark.teardown.assert_called_once()
def test__worker_process_output_queue(self): self.benchmark.my_method = mock.Mock(return_value='my_result') self.scenario_cfg["runner"] = {"sampled": True, "duration": 1} output_queue = multiprocessing.Queue() proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), output_queue) time.sleep(0.1) self._assert_defaults__worker_run_setup_and_teardown() self.assertEquals(output_queue.get(), 'my_result')
def test__worker_process_benchmark_teardown_on_broad_exception( self, *args): self.benchmark.teardown = mock.Mock( side_effect=y_exc.YardstickException) self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} with self.assertRaises(SystemExit) as raised: proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self.assertEqual(1, raised.exception.code) self._assert_defaults__worker_run_setup_and_teardown()
def test__worker_process_output_queue_multiple_iterations(self): self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} self.benchmark.my_method = self.MyMethod() output_queue = mock.Mock() proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), output_queue) self._assert_defaults__worker_run_setup_and_teardown() for idx in range(102, 101 + len(output_queue.method_calls)): output_queue.put.assert_has_calls( [mock.call(idx, True, constants.QUEUE_PUT_TIMEOUT)])
def test__worker_process_raise_sla_validation_error_sla_cfg_default(self): self.scenario_cfg['sla'] = {} self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} self.benchmark.my_method = mock.Mock( side_effect=y_exc.SLAValidationError) with self.assertRaises(y_exc.SLAValidationError): proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self.benchmark_cls.assert_called_once_with(self.scenario_cfg, {}) self.benchmark.setup.assert_called_once() self.benchmark.my_method.assert_called_once_with({})
def test__worker_process_queue(self): self.benchmark.my_method = self.MyMethod() self.scenario_cfg["runner"] = {"sampled": True, "duration": 1} queue = multiprocessing.Queue() timestamp = time.time() proxduration._worker_process(queue, self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) time.sleep(0.1) self._assert_defaults__worker_run_setup_and_teardown() result = queue.get() self.assertGreater(result['timestamp'], timestamp) self.assertEqual(result['errors'], '') self.assertEqual(result['data'], {'my_key': 102}) self.assertEqual(result['sequence'], 1)
def test__worker_process_output_queue_multiple_iterations(self): self.scenario_cfg["runner"] = {"sampled": True, "duration": 1} self.benchmark.my_method = self.MyMethod() output_queue = multiprocessing.Queue() proxduration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), output_queue) time.sleep(0.1) self._assert_defaults__worker_run_setup_and_teardown() self.assertGreater(self.benchmark.my_method.count, 103) count = 101 while not output_queue.empty(): count += 1 self.assertEquals(output_queue.get(), count)
def test__worker_process_queue_on_broad_exception(self, *args): self.benchmark.my_method = self.MyMethod( side_effect=self.MyMethod.BROAD_EXCEPTION_SIDE_EFFECT) self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} queue = mock.Mock() proxduration._worker_process(queue, self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) benchmark_output = { 'timestamp': mock.ANY, 'sequence': 1, 'data': { 'my_key': 102 }, 'errors': mock.ANY } queue.put.assert_has_calls( [mock.call(benchmark_output, True, constants.QUEUE_PUT_TIMEOUT)])
def test__worker_process_queue(self): self.benchmark.my_method = self.MyMethod() self.scenario_cfg["runner"] = {"sampled": True, "duration": 0.1} queue = mock.Mock() proxduration._worker_process(queue, self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) self._assert_defaults__worker_run_setup_and_teardown() benchmark_output = { 'timestamp': mock.ANY, 'sequence': 1, 'data': { 'my_key': 102 }, 'errors': '' } queue.put.assert_has_calls( [mock.call(benchmark_output, True, constants.QUEUE_PUT_TIMEOUT)])
def test__worker_process_queue_on_sla_validation_error_monitor(self): self.scenario_cfg['sla'] = {'action': 'monitor'} self.scenario_cfg["runner"] = {"sampled": True, "duration": 1} self.benchmark.my_method = self.MyMethod( side_effect=self.MyMethod.SLA_VALIDATION_ERROR_SIDE_EFFECT) queue = multiprocessing.Queue() timestamp = time.time() proxduration._worker_process(queue, self.benchmark_cls, 'my_method', self.scenario_cfg, {}, multiprocessing.Event(), mock.Mock()) time.sleep(0.1) self._assert_defaults__worker_run_setup_and_teardown() result = queue.get() self.assertGreater(result['timestamp'], timestamp) self.assertEqual(result['errors'], ('My Case SLA validation failed. ' 'Error: my error message', )) self.assertEqual(result['data'], {'my_key': 102}) self.assertEqual(result['sequence'], 1)