def test_unknown_connection_error(self, client): mock_scheduler_client = mock.create_autospec(spec=scheduler_client.SchedulerClient, instance=True) client.get.return_value = mock_scheduler_client proxy = scheduler_client.SchedulerProxy(Cluster(name='local')) # unknown, transient connection error mock_scheduler_client.get_thrift_client.side_effect = RuntimeError with pytest.raises(Exception): proxy.client() # successful connection on re-attempt mock_scheduler_client.get_thrift_client.side_effect = None assert proxy.client() is not None
def test_performBackup_transport_exception(self, mock_wait, mock_client): mock_scheduler_client = mock.create_autospec( spec=scheduler_client.SchedulerClient, spec_set=False, instance=True) mock_thrift_client = mock.create_autospec(spec=AuroraAdmin.Client, instance=True) mock_thrift_client.performBackup.side_effect = TTransport.TTransportException('error') mock_scheduler_client.get_thrift_client.return_value = mock_thrift_client mock_client.get.return_value = mock_scheduler_client proxy = scheduler_client.SchedulerProxy(Cluster(name='local')) with pytest.raises(scheduler_client.SchedulerProxy.NotRetriableError): proxy.performBackup() assert mock_thrift_client.performBackup.call_count == 1 assert not mock_wait.called
def test_transient_error(self, _, client): mock_scheduler_client = mock.create_autospec( spec=scheduler_client.SchedulerClient, spec_set=False, instance=True) mock_thrift_client = mock.create_autospec(spec=AuroraAdmin.Client, instance=True) mock_thrift_client.killTasks.side_effect = [ Response(responseCode=ResponseCode.ERROR_TRANSIENT, details=[ResponseDetail(message="message1"), ResponseDetail(message="message2")]), Response(responseCode=ResponseCode.ERROR_TRANSIENT), Response(responseCode=ResponseCode.OK)] mock_scheduler_client.get_thrift_client.return_value = mock_thrift_client client.get.return_value = mock_scheduler_client proxy = scheduler_client.SchedulerProxy(Cluster(name='local')) proxy.killTasks(None, None, JobKey(), None) assert mock_thrift_client.killTasks.call_count == 3
def test_getTierConfigs_transport_exception(self, mock_wait, mock_client): mock_scheduler_client = mock.create_autospec( spec=scheduler_client.SchedulerClient, spec_set=False, instance=True) mock_thrift_client = mock.create_autospec(spec=AuroraAdmin.Client, instance=True) mock_thrift_client.getTierConfigs.side_effect = [ TTransport.TTransportException('error'), Response(responseCode=ResponseCode.OK) ] mock_scheduler_client.get_thrift_client.return_value = mock_thrift_client mock_client.get.return_value = mock_scheduler_client proxy = scheduler_client.SchedulerProxy(Cluster(name='local')) proxy.getTierConfigs(retry=True) assert mock_thrift_client.getTierConfigs.call_count == 2 assert mock_wait.call_count == 1
def test_performBackup_retriable_errors(self, mock_wait, mock_client): mock_scheduler_client = mock.create_autospec( spec=scheduler_client.SchedulerClient, spec_set=False, instance=True) mock_thrift_client = mock.create_autospec(spec=AuroraAdmin.Client, instance=True) mock_thrift_client.performBackup.side_effect = [ Response(responseCode=ResponseCode.ERROR_TRANSIENT), scheduler_client.SchedulerProxy.TimeoutError, Response(responseCode=ResponseCode.OK)] mock_scheduler_client.get_thrift_client.return_value = mock_thrift_client mock_client.get.return_value = mock_scheduler_client proxy = scheduler_client.SchedulerProxy(Cluster(name='local')) proxy.performBackup() assert mock_thrift_client.performBackup.call_count == 3 assert mock_wait.call_count == 2
def make_scheduler_proxy(self): return scheduler_client.SchedulerProxy(Cluster(name='local'))