def test_run_with_KeyboardInterrupt(self, mocked_loop, mocked_contract_client, mocked_tender_client, mocked_sync_client, mocked_db, mocked_logger, mocked_gevent): true_list = [True for i in xrange(0, 21)] true_list.append(False) mocked_loop.__nonzero__.side_effect = true_list cb = ContractingDataBridge({'main': {}}) cb._restart_synchronization_workers = MagicMock( side_effect=KeyboardInterrupt) cb.run() gevent_calls = mocked_gevent.killall.call_args_list logger_calls = mocked_logger.info.call_args_list keyboard_interrut_log = call('Exiting...') kill_all_jobs = call(cb.jobs, timeout=5) kill_all_immortal_jobs = call(cb.immortal_jobs, timeout=5) self.assertEqual( self._get_calls_count(logger_calls, keyboard_interrut_log), 1) self.assertEqual(self._get_calls_count(gevent_calls, kill_all_jobs), 1) self.assertEqual( self._get_calls_count(gevent_calls, kill_all_immortal_jobs), 1) cb._start_contract_sculptors = MagicMock(side_effect=KeyboardInterrupt) with self.assertRaises(KeyboardInterrupt) as e: cb.run() isinstance(e.exception, exceptions.KeyboardInterrupt)
def test_run_with_Exception(self, mocked_loop, mocked_contract_client, mocked_tender_client, mocked_sync_client, mocked_db, mocked_logger, mocked_gevent): cb = ContractingDataBridge({'main': {}}) true_list = [True for i in xrange(0, 21)] true_list.append(False) mocked_loop.__nonzero__.side_effect = true_list e = Exception('Error!') cb._restart_synchronization_workers = MagicMock(side_effect=e) cb.run() mocked_logger.exception.assert_called_once_with(e)
def test_restart_synchronization_workers(self, mocked_logger, mocked_contract_client, mocked_tender_client, mocked_sync_client, mocked_db): cb = ContractingDataBridge({'main': {}}) cb.clients_initialize = MagicMock() job_1 = MagicMock() job_2 = MagicMock() jobs_list = [job_1, job_2] cb.jobs = jobs_list cb._start_synchronization_workers = MagicMock() cb._restart_synchronization_workers() self.assertEqual(job_1.kill.call_count, 1) self.assertEqual(job_2.kill.call_count, 1) cb._start_synchronization_workers.assert_called_once_with() cb.clients_initialize.assert_called_once_with() mocked_logger.warn.assert_called_once_with( 'Restarting synchronization', extra={'MESSAGE_ID': 'c_bridge_restart'})
def test_run_with_all_jobs_and_workers(self, mocked_loop, mocked_contract_client, mocked_tender_client, mocked_sync_client, mocked_db, mocked_logger, mocked_gevent): cb = ContractingDataBridge({'main': {}}) true_list = [True, False] mocked_loop.__nonzero__.side_effect = true_list def _start_conrtact_sculptors(cb): get_tender_contracts = MagicMock() prepare_contract_data = MagicMock() prepare_contract_data_retry = MagicMock() put_contracts = MagicMock() retry_put_contracts = MagicMock() get_tender_contracts.dead = False prepare_contract_data.dead = False prepare_contract_data_retry.dead = False put_contracts.dead = False retry_put_contracts.dead = False cb.immortal_jobs = { 'get_tender_contracts': get_tender_contracts, 'prepare_contract_data': prepare_contract_data, 'prepare_contract_data_retry': prepare_contract_data_retry, 'put_contracts': put_contracts, 'retry_put_contracts': retry_put_contracts, } def _start_synchronization_workers(cb): get_tender_contracts_backward = MagicMock() get_tender_contracts_forward = MagicMock() get_tender_contracts_backward.dead = False get_tender_contracts_forward.dead = False cb.jobs = [ get_tender_contracts_backward, get_tender_contracts_forward ] cb._start_contract_sculptors = MagicMock( side_effect=_start_conrtact_sculptors(cb)) cb._start_synchronization_workers = MagicMock( side_effect=_start_synchronization_workers(cb)) _restart_synchronization_workers = MagicMock() cb._restart_synchronization_workers = _restart_synchronization_workers cb.run() logger_calls = mocked_logger.info.call_args_list first_log = call( "Caching backend: '{}', db name: '{}', host: '{}', port: '{}'". format(cb.cache_db._backend, cb.cache_db._db_name, cb.cache_db._host, cb.cache_db._port), extra={"MESSAGE_ID": DATABRIDGE_INFO}) second_log = call('Initialization contracting clients.', extra={"MESSAGE_ID": DATABRIDGE_INFO}) thread_log = call('Start Contracting Data Bridge', extra=({ 'MESSAGE_ID': DATABRIDGE_START })) self.assertEqual(mocked_logger.info.call_count, 3) self.assertEqual(self._get_calls_count(logger_calls, first_log), 1) self.assertEqual(self._get_calls_count(logger_calls, second_log), 1) self.assertEqual(self._get_calls_count(logger_calls, thread_log), 1) self.assertEqual(mocked_logger.warn.call_count, 0) self.assertEqual(mocked_gevent.spawn.call_count, 0) self.assertEqual(cb._restart_synchronization_workers.call_count, 0)