class TestContainerManager_run(TestCase): def setUp(self): self.mock_docker_client = Mock() self.manager = ContainerManager(docker_client=self.mock_docker_client) self.image_name = "image name" self.container_mock = Mock() self.container_mock.image = self.image_name self.container_mock.start = Mock() self.container_mock.create = Mock() self.container_mock.is_created = Mock() def test_must_error_with_warm(self): with self.assertRaises(ValueError): self.manager.run(self.container_mock, warm=True) def test_must_pull_image_and_run_container(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image doesn't exist. self.manager.has_image.return_value = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_pull_image_if_image_exist_and_no_skip(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_not_pull_image_if_image_is_samcli_lambda_image(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.container_mock.image = "samcli/lambda" self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with("samcli/lambda") self.manager.pull_image.assert_not_called() self.container_mock.start.assert_called_with(input_data=input_data) def test_must_not_pull_image_if_image_is_rapid_image(self): input_data = "input data" rapid_image_name = "Mock_image_name:rapid-1.0.0" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.container_mock.image = rapid_image_name self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(rapid_image_name) self.manager.pull_image.assert_not_called() self.container_mock.start.assert_called_with(input_data=input_data) def test_must_not_pull_image_if_asked_to_skip(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, skip pulling self.manager.skip_pull_image = True self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) # Must not call pull_image self.manager.pull_image.assert_not_called() self.container_mock.start.assert_called_with(input_data=input_data) def test_must_fail_if_image_pull_failed_and_image_does_not_exist(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock( side_effect=DockerImagePullFailedException("Failed to pull image")) # Assume the image exist. self.manager.has_image.return_value = False # And, don't skip pulling => Pull again self.manager.skip_pull_image = False with self.assertRaises(DockerImagePullFailedException): self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_not_called() def test_must_run_if_image_pull_failed_and_image_does_exist(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock( side_effect=DockerImagePullFailedException("Failed to pull image")) # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_create_container_if_not_exists(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume container does NOT exist self.container_mock.is_created.return_value = False self.manager.run(self.container_mock, input_data) # Container should be created self.container_mock.create.assert_called_with() def test_must_not_create_container_if_it_already_exists(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume container does NOT exist self.container_mock.is_created.return_value = True self.manager.run(self.container_mock, input_data) # Container should be created self.container_mock.create.assert_not_called()
class TestContainerManager_run(TestCase): def setUp(self): self.mock_docker_client = Mock() self.manager = ContainerManager(docker_client=self.mock_docker_client) self.image_name = "image name" self.container_mock = Mock() self.container_mock.image = self.image_name self.container_mock.start = Mock() self.container_mock.create = Mock() self.container_mock.is_created = Mock() def test_must_error_with_warm(self): with self.assertRaises(ValueError): self.manager.run(self.container_mock, warm=True) def test_must_pull_image_and_run_container(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image doesn't exist. self.manager.has_image.return_value = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_pull_image_if_image_exist_and_no_skip(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_not_pull_image_if_asked_to_skip(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, skip pulling self.manager.skip_pull_image = True self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) # Must not call pull_image self.manager.pull_image.assert_not_called() self.container_mock.start.assert_called_with(input_data=input_data) def test_must_create_container_if_not_exists(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume container does NOT exist self.container_mock.is_created.return_value = False self.manager.run(self.container_mock, input_data) # Container should be created self.container_mock.create.assert_called_with() def test_must_not_create_container_if_it_already_exists(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume container does NOT exist self.container_mock.is_created.return_value = True self.manager.run(self.container_mock, input_data) # Container should be created self.container_mock.create.assert_not_called()
class TestContainerManager_run(TestCase): def setUp(self): self.mock_docker_client = Mock() self.manager = ContainerManager(docker_client=self.mock_docker_client) self.image_name = "image name" self.container_mock = Mock() self.container_mock.image = self.image_name self.container_mock.start = Mock() self.container_mock.create = Mock() self.container_mock.is_created = Mock() def test_must_error_with_warm(self): with self.assertRaises(ValueError): self.manager.run(self.container_mock, warm=True) def test_must_pull_image_and_run_container(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image doesn't exist. self.manager.has_image.return_value = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_pull_image_if_image_exist_and_no_skip(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_not_pull_image_if_image_is_samcli_lambda_image(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.container_mock.image = "samcli/lambda" self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with("samcli/lambda") self.manager.pull_image.assert_not_called() self.container_mock.start.assert_called_with(input_data=input_data) def test_must_not_pull_image_if_asked_to_skip(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume the image exist. self.manager.has_image.return_value = True # And, skip pulling self.manager.skip_pull_image = True self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) # Must not call pull_image self.manager.pull_image.assert_not_called() self.container_mock.start.assert_called_with(input_data=input_data) def test_must_fail_if_image_pull_failed_and_image_does_not_exist(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock(side_effect=DockerImagePullFailedException("Failed to pull image")) # Assume the image exist. self.manager.has_image.return_value = False # And, don't skip pulling => Pull again self.manager.skip_pull_image = False with self.assertRaises(DockerImagePullFailedException): self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_not_called() def test_must_run_if_image_pull_failed_and_image_does_exist(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock(side_effect=DockerImagePullFailedException("Failed to pull image")) # Assume the image exist. self.manager.has_image.return_value = True # And, don't skip pulling => Pull again self.manager.skip_pull_image = False self.manager.run(self.container_mock, input_data) self.manager.has_image.assert_called_with(self.image_name) self.manager.pull_image.assert_called_with(self.image_name) self.container_mock.start.assert_called_with(input_data=input_data) def test_must_create_container_if_not_exists(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume container does NOT exist self.container_mock.is_created.return_value = False self.manager.run(self.container_mock, input_data) # Container should be created self.container_mock.create.assert_called_with() def test_must_not_create_container_if_it_already_exists(self): input_data = "input data" self.manager.has_image = Mock() self.manager.pull_image = Mock() # Assume container does NOT exist self.container_mock.is_created.return_value = True self.manager.run(self.container_mock, input_data) # Container should be created self.container_mock.create.assert_not_called()