def test_result_exception(mock_civis): # An error in the job should be raised by the result callback = mock.MagicMock() exc = ZeroDivisionError() mock_civis.io.civis_to_file.side_effect = make_to_file_mock(exc) fut = ContainerFuture(1, 2, client=mock.MagicMock()) fut._set_api_exception(Response({'state': 'failed'})) res = civis.parallel._CivisBackendResult(fut, callback) with pytest.raises(ZeroDivisionError): res.get() assert callback.call_count == 0
def test_result_callback_exception(mock_civis): # An error in the result retrieval should be raised by .get callback = mock.MagicMock() exc = ZeroDivisionError() mock_civis.io.civis_to_file.side_effect = exc fut = ContainerFuture(1, 2, client=mock.MagicMock()) # We're simulating a job which succeeded but generated an # exception when we try to download the outputs. fut._set_api_exception(Response({'state': 'succeeded'})) res = civis.parallel._CivisBackendResult(fut, callback) with pytest.raises(ZeroDivisionError): res.get() assert callback.call_count == 0
def test_result_exception_no_result(): # If the job errored but didn't write an output, we should get # a generic TransportableException back. callback = mock.MagicMock() # Passing the client mock as an argument instead of globally # patching the client tests that the _CivisBackendResult # uses the client object on the input CivisFuture. mock_client = mock.MagicMock().APIClient() mock_client.scripts.list_containers_runs_outputs.return_value = [] fut = ContainerFuture(1, 2, client=mock_client) fut._set_api_exception(Response({'state': 'failed'})) res = civis.parallel._CivisBackendResult(fut, callback) with pytest.raises(TransportableException) as exc: res.get() assert "{'state': 'failed'}" in str(exc.value) assert callback.call_count == 0
def test_result_exception_no_result(m_sleep): # If the job errored but didn't write an output, we should get # a generic TransportableException back. callback = mock.MagicMock() mock_client = create_client_mock_for_container_tests(1, 2, state='failed', run_outputs=[]) fut = ContainerFuture(1, 2, client=mock_client) res = civis.parallel._CivisBackendResult(fut, callback) fut._set_api_exception(CivisJobFailure(Response({'state': 'failed'}))) with pytest.raises(TransportableException) as exc: res.get() assert "{'state': 'failed'}" in str(exc.value) assert callback.call_count == 0