import unittest import requests from docker.errors import ( APIError, ContainerError, DockerException, create_api_error_from_http_exception, create_unexpected_kwargs_error, ) from .fake_api import FAKE_CONTAINER_ID, FAKE_IMAGE_ID from .fake_api_client import make_fake_client class APIErrorTest(unittest.TestCase): def test_api_error_is_caught_by_dockerexception(self): try: raise APIError("this should be caught by DockerException") except DockerException: pass def test_status_code_200(self): """The status_code property is present with 200 response.""" resp = requests.Response() resp.status_code = 200 err = APIError('', response=resp) assert err.status_code == 200 def test_status_code_400(self): """The status_code property is present with 400 response.""" resp = requests.Response() resp.status_code = 400 err = APIError('', response=resp) assert err.status_code == 400 def test_status_code_500(self): """The status_code property is present with 500 response.""" resp = requests.Response() resp.status_code = 500 err = APIError('', response=resp) assert err.status_code == 500 def test_is_server_error_200(self): """Report not server error on 200 response.""" resp = requests.Response() resp.status_code = 200 err = APIError('', response=resp) assert err.is_server_error() is False def test_is_server_error_300(self): """Report not server error on 300 response.""" resp = requests.Response() resp.status_code = 300 err = APIError('', response=resp) assert err.is_server_error() is False def test_is_server_error_400(self): """Report not server error on 400 response.""" resp = requests.Response() resp.status_code = 400 err = APIError('', response=resp) assert err.is_server_error() is False def test_is_server_error_500(self): """Report server error on 500 response.""" resp = requests.Response() resp.status_code = 500 err = APIError('', response=resp) assert err.is_server_error() is True def test_is_client_error_500(self): """Report not client error on 500 response.""" resp = requests.Response() resp.status_code = 500 err = APIError('', response=resp) assert err.is_client_error() is False def test_is_client_error_400(self): """Report client error on 400 response.""" resp = requests.Response() resp.status_code = 400 err = APIError('', response=resp) assert err.is_client_error() is True def test_is_error_300(self): """Report no error on 300 response.""" resp = requests.Response() resp.status_code = 300 err = APIError('', response=resp) assert err.is_error() is False def test_is_error_400(self): """Report error on 400 response.""" resp = requests.Response() resp.status_code = 400 err = APIError('', response=resp) assert err.is_error() is True def test_is_error_500(self): """Report error on 500 response.""" resp = requests.Response() resp.status_code = 500 err = APIError('', response=resp) assert err.is_error() is True def test_create_error_from_exception(self): resp = requests.Response() resp.status_code = 500 err = APIError('') try: resp.raise_for_status() except requests.exceptions.HTTPError as e: try: create_api_error_from_http_exception(e) except APIError as e: err = e assert err.is_server_error() is True class ContainerErrorTest(unittest.TestCase): def test_container_without_stderr(self): """The massage does not contain stderr""" client = make_fake_client() container = client.containers.get(FAKE_CONTAINER_ID) command = "echo Hello World" exit_status = 42 image = FAKE_IMAGE_ID stderr = None err = ContainerError(container, exit_status, command, image, stderr) msg = ("Command '{}' in image '{}' returned non-zero exit status {}" ).format(command, image, exit_status) assert str(err) == msg def test_container_with_stderr(self): """The massage contains stderr""" client = make_fake_client() container = client.containers.get(FAKE_CONTAINER_ID) command = "echo Hello World" exit_status = 42 image = FAKE_IMAGE_ID stderr = "Something went wrong" err = ContainerError(container, exit_status, command, image, stderr) msg = ("Command '{}' in image '{}' returned non-zero exit status {}: " "{}").format(command, image, exit_status, stderr) assert str(err) == msg class CreateUnexpectedKwargsErrorTest(unittest.TestCase): def test_create_unexpected_kwargs_error_single(self): e = create_unexpected_kwargs_error('f', {'foo': 'bar'}) assert str(e) == "f() got an unexpected keyword argument 'foo'" def test_create_unexpected_kwargs_error_multiple(self): e = create_unexpected_kwargs_error('f', {'foo': 'bar', 'baz': 'bosh'}) assert str(e) == "f() got unexpected keyword arguments 'baz', 'foo'"