예제 #1
0
    def test_building_image_with_non_accpeted_package_type(self):
        docker_client_mock = Mock()
        layer_downloader_mock = Mock()
        setattr(layer_downloader_mock, "layer_cache", self.layer_cache_dir)
        docker_client_mock.api.build.return_value = ["mock"]

        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   False,
                                   docker_client=docker_client_mock)
        with self.assertRaises(InvalidIntermediateImageError):
            lambda_image.build("python3.6", "Non-accepted-packagetype", None,
                               [], False)
        with self.assertRaises(InvalidIntermediateImageError):
            lambda_image.build("python3.6", None, None, [], False)
예제 #2
0
    def test_building_image_with_no_runtime_only_image_always_build(
            self, generate_docker_image_version_patch, build_image_patch):
        docker_client_mock = Mock()
        layer_downloader_mock = Mock()
        setattr(layer_downloader_mock, "layer_cache", self.layer_cache_dir)
        docker_client_mock.api.build.return_value = ["mock"]
        generate_docker_image_version_patch.return_value = "image-version"

        docker_client_mock = Mock()
        docker_client_mock.images.get.return_value = Mock()

        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEqual(
            lambda_image.build(None, IMAGE, "mylambdaimage:v1", ["mylayer"],
                               False),
            f"mylambdaimage:rapid-{version}",
        )

        # No layers are added, because runtime is not defined.
        build_image_patch.assert_called_once_with(
            "mylambdaimage:v1",
            f"mylambdaimage:rapid-{version}", [],
            False,
            stream=ANY)
        # No Layers are added.
        layer_downloader_mock.assert_not_called()
예제 #3
0
    def test_force_building_image_that_doesnt_already_exists(
            self, generate_docker_image_version_patch, build_image_patch):
        layer_downloader_mock = Mock()
        layer_downloader_mock.download_all.return_value = ["layers1"]

        generate_docker_image_version_patch.return_value = "image-version"

        docker_client_mock = Mock()
        docker_client_mock.images.get.side_effect = ImageNotFound(
            "image not found")

        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   True,
                                   docker_client=docker_client_mock)
        actual_image_id = lambda_image.build("python3.6", ["layers1"])

        self.assertEquals(actual_image_id, "samcli/lambda:image-version")

        layer_downloader_mock.download_all.assert_called_once_with(["layers1"],
                                                                   True)
        generate_docker_image_version_patch.assert_called_once_with(
            ["layers1"], "python3.6")
        docker_client_mock.images.get.assert_called_once_with(
            "samcli/lambda:image-version")
        build_image_patch.assert_called_once_with(
            "lambci/lambda:python3.6", "samcli/lambda:image-version",
            ["layers1"])
예제 #4
0
    def test_not_building_image_that_already_exists(
            self, generate_docker_image_version_patch, build_image_patch):
        layer_downloader_mock = Mock()
        layer_mock = Mock()
        layer_mock.name = "layers1"
        layer_mock.is_defined_within_template = False
        layer_downloader_mock.download_all.return_value = [layer_mock]

        generate_docker_image_version_patch.return_value = "image-version"

        docker_client_mock = Mock()
        docker_client_mock.images.get.return_value = Mock()

        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   False,
                                   docker_client=docker_client_mock)
        actual_image_id = lambda_image.build("python3.6", ZIP, None,
                                             [layer_mock], False)

        self.assertEqual(actual_image_id, "samcli/lambda:image-version")

        layer_downloader_mock.download_all.assert_called_once_with(
            [layer_mock], False)
        generate_docker_image_version_patch.assert_called_once_with(
            [layer_mock], "python3.6")
        docker_client_mock.images.get.assert_called_once_with(
            "samcli/lambda:image-version")
        build_image_patch.assert_not_called()
예제 #5
0
    def test_building_image_with_no_layers(self):
        docker_client_mock = Mock()

        lambda_image = LambdaImage("layer_downloader",
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEquals(lambda_image.build("python3.6", []),
                          "lambci/lambda:python3.6")
예제 #6
0
    def test_building_image_with_go_debug(self):
        docker_client_mock = Mock()

        lambda_image = LambdaImage("layer_downloader",
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEqual(
            lambda_image.build("go1.x", [], True),
            f"amazon/aws-sam-cli-emulation-image-go1.x:debug-{version}")
예제 #7
0
    def test_building_image_with_no_layers(self):
        docker_client_mock = Mock()

        lambda_image = LambdaImage("layer_downloader",
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEqual(
            lambda_image.build("python3.6", [], False),
            f"amazon/aws-sam-cli-emulation-image-python3.6:rapid-{version}")
예제 #8
0
    def test_building_image_with_go_debug(self):
        docker_client_mock = Mock()
        layer_downloader_mock = Mock()
        setattr(layer_downloader_mock, "layer_cache", self.layer_cache_dir)
        docker_client_mock.api.build.return_value = ["mock"]
        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEqual(
            lambda_image.build("go1.x", ZIP, None, [], True),
            f"amazon/aws-sam-cli-emulation-image-go1.x:debug-{version}",
        )
예제 #9
0
    def test_building_image_with_no_layers_extensions_preview(
            self, PreviewEnabledMock):
        docker_client_mock = Mock()
        PreviewEnabledMock.return_value = True

        lambda_image = LambdaImage("layer_downloader",
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEqual(
            lambda_image.build("python3.6", [], False),
            f"amazon/aws-sam-cli-emulation-image-python3.6:preview-rapid-{version}",
        )
예제 #10
0
    def test_building_image_with_no_runtime_only_image(self):
        docker_client_mock = Mock()
        layer_downloader_mock = Mock()
        setattr(layer_downloader_mock, "layer_cache", self.layer_cache_dir)
        docker_client_mock.api.build.return_value = ["mock"]

        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEqual(
            lambda_image.build(None, IMAGE, "mylambdaimage:v1", [], False),
            f"mylambdaimage:rapid-{version}",
        )
예제 #11
0
    def test_building_image_with_no_layers(self):
        docker_client_mock = Mock()
        layer_downloader_mock = Mock()
        setattr(layer_downloader_mock, "layer_cache", self.layer_cache_dir)
        docker_client_mock.api.build.return_value = ["mock"]

        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   False,
                                   docker_client=docker_client_mock)

        self.assertEqual(
            lambda_image.build("python3.6", ZIP, None, []),
            f"amazon/aws-sam-cli-emulation-image-python3.6:rapid-{version}",
        )
예제 #12
0
    def test_not_force_building_image_that_doesnt_already_exists(self,
                                                                 generate_docker_image_version_patch,
                                                                 build_image_patch):
        layer_downloader_mock = Mock()
        layer_downloader_mock.download_all.return_value = ["layers1"]

        generate_docker_image_version_patch.return_value = "image-version"

        docker_client_mock = Mock()
        docker_client_mock.images.get.side_effect = ImageNotFound("image not found")

        lambda_image = LambdaImage(layer_downloader_mock, False, False, docker_client=docker_client_mock)
        actual_image_id = lambda_image.build("python3.6", ["layers1"])

        self.assertEquals(actual_image_id, "samcli/lambda:image-version")

        layer_downloader_mock.download_all.assert_called_once_with(["layers1"], False)
        generate_docker_image_version_patch.assert_called_once_with(["layers1"], "python3.6")
        docker_client_mock.images.get.assert_called_once_with("samcli/lambda:image-version")
        build_image_patch.assert_called_once_with("lambci/lambda:python3.6", "samcli/lambda:image-version", ["layers1"])
예제 #13
0
    def test_not_force_building_image_that_doesnt_already_exists(
            self, generate_docker_image_version_patch, build_image_patch):
        layer_downloader_mock = Mock()
        layer_downloader_mock.download_all.return_value = ["layers1"]

        generate_docker_image_version_patch.return_value = "image-version"

        docker_client_mock = Mock()
        docker_client_mock.images.get.side_effect = ImageNotFound(
            "image not found")

        stream = io.StringIO()

        lambda_image = LambdaImage(layer_downloader_mock,
                                   False,
                                   False,
                                   docker_client=docker_client_mock)
        actual_image_id = lambda_image.build("python3.6",
                                             ZIP,
                                             None, ["layers1"],
                                             False,
                                             stream=stream)

        self.assertEqual(actual_image_id, "samcli/lambda:image-version")

        layer_downloader_mock.download_all.assert_called_once_with(["layers1"],
                                                                   False)
        generate_docker_image_version_patch.assert_called_once_with(
            ["layers1"], "python3.6")
        docker_client_mock.images.get.assert_called_once_with(
            "samcli/lambda:image-version")
        build_image_patch.assert_called_once_with(
            "amazon/aws-sam-cli-emulation-image-python3.6:latest",
            "samcli/lambda:image-version",
            ["layers1"],
            False,
            stream=stream,
        )
예제 #14
0
    def test_not_building_image_that_already_exists(self,
                                                    generate_docker_image_version_patch,
                                                    build_image_patch):
        layer_downloader_mock = Mock()
        layer_mock = Mock()
        layer_mock.name = "layers1"
        layer_mock.is_defined_within_template = False
        layer_downloader_mock.download_all.return_value = [layer_mock]

        generate_docker_image_version_patch.return_value = "image-version"

        docker_client_mock = Mock()
        docker_client_mock.images.get.return_value = Mock()

        lambda_image = LambdaImage(layer_downloader_mock, False, False, docker_client=docker_client_mock)
        actual_image_id = lambda_image.build("python3.6", [layer_mock])

        self.assertEquals(actual_image_id, "samcli/lambda:image-version")

        layer_downloader_mock.download_all.assert_called_once_with([layer_mock], False)
        generate_docker_image_version_patch.assert_called_once_with([layer_mock], "python3.6")
        docker_client_mock.images.get.assert_called_once_with("samcli/lambda:image-version")
        build_image_patch.assert_not_called()
예제 #15
0
    def test_building_image_with_no_layers(self):
        docker_client_mock = Mock()

        lambda_image = LambdaImage("layer_downloader", False, False, docker_client=docker_client_mock)

        self.assertEquals(lambda_image.build("python3.6", []), "lambci/lambda:python3.6")