Exemplo n.º 1
0
    def test_upload_failure_while_streaming(self):
        image = "myimage:v1"
        self.docker_client.api.push.return_value.__iter__.return_value = iter([
            {
                "status": "Pushing to xyz"
            },
            {
                "id": "1",
                "status": "Preparing",
                "progress": ""
            },
            {
                "id": "2",
                "status": "Preparing",
                "progress": ""
            },
            {
                "id": "3",
                "status": "Preparing",
                "progress": ""
            },
            {
                "id": "1",
                "status": "Pushing",
                "progress": "[====>   ]"
            },
            {
                "id": "3",
                "status": "Pushing",
                "progress": "[====>   ]"
            },
            {
                "error": "Network Error!"
            },
            {},
        ])

        ecr_uploader = ECRUploader(
            docker_client=self.docker_client,
            ecr_client=self.ecr_client,
            ecr_repo=self.ecr_repo,
            ecr_repo_multi=self.ecr_repo_multi,
            tag=self.tag,
        )

        ecr_uploader.login = MagicMock()
        with self.assertRaises(DockerPushFailedError):
            ecr_uploader.upload(image, resource_name="HelloWorldFunction")
Exemplo n.º 2
0
    def test_ecr_login_failure(self):
        self.ecr_client.get_authorization_token = MagicMock(
            side_effect=ClientError(
                error_response={"Error": {
                    "Message": "mock token error"
                }},
                operation_name="get_authorization_token"))
        ecr_uploader = ECRUploader(
            docker_client=self.docker_client,
            ecr_client=self.ecr_client,
            ecr_repo=self.ecr_repo,
            ecr_repo_multi=self.ecr_repo_multi,
            tag=self.tag,
        )

        with self.assertRaises(ECRAuthorizationError):
            ecr_uploader.login()
Exemplo n.º 3
0
    def test_upload_failure(self, error):
        image = "myimage:v1"
        ecr_uploader = ECRUploader(
            docker_client=self.docker_client,
            ecr_client=self.ecr_client,
            ecr_repo=self.ecr_repo,
            ecr_repo_multi=self.ecr_repo_multi,
            tag=self.tag,
        )

        ecr_uploader.login = MagicMock()
        self.docker_client.images = MagicMock()
        self.docker_client.images.get = MagicMock(side_effect=error(
            **self.error_args.get(error.__name__)))

        with self.assertRaises(DockerPushFailedError):
            ecr_uploader.upload(image, resource_name="HelloWorldFunction")
Exemplo n.º 4
0
    def test_login_success(self, base64_mock):
        base64_mock.b64decode.return_value = b"username:password"

        self.ecr_client.get_authorization_token.return_value = {
            "authorizationData": [{
                "authorizationToken": "auth_token",
                "proxyEndpoint": "proxy"
            }]
        }
        ecr_uploader = ECRUploader(
            docker_client=self.docker_client,
            ecr_client=self.ecr_client,
            ecr_repo=self.ecr_repo,
            ecr_repo_multi=self.ecr_repo_multi,
            tag=self.tag,
        )

        ecr_uploader.login()
Exemplo n.º 5
0
    def test_docker_login_failure(self, base64_mock):
        base64_mock.b64decode.return_value = b"username:password"
        self.docker_client.login = MagicMock(side_effect=APIError(
            message="mock error"))
        self.ecr_client.get_authorization_token.return_value = {
            "authorizationData": [{
                "authorizationToken": "auth_token",
                "proxyEndpoint": "proxy"
            }]
        }
        ecr_uploader = ECRUploader(
            docker_client=self.docker_client,
            ecr_client=self.ecr_client,
            ecr_repo=self.ecr_repo,
            ecr_repo_multi=self.ecr_repo_multi,
            tag=self.tag,
        )

        with self.assertRaises(DockerLoginFailedError):
            ecr_uploader.login()
Exemplo n.º 6
0
    def test_ecr_uploader_init(self):
        ecr_uploader = ECRUploader(
            docker_client=self.docker_client,
            ecr_client=self.ecr_client,
            ecr_repo=self.ecr_repo,
            ecr_repo_multi=self.ecr_repo_multi,
            tag=self.tag,
        )

        self.assertEqual(ecr_uploader.docker_client, self.docker_client)
        self.assertEqual(ecr_uploader.ecr_repo, self.ecr_repo)
        self.assertEqual(ecr_uploader.tag, self.tag)
        self.assertEqual(ecr_uploader.ecr_client, self.ecr_client)
        self.assertIsInstance(ecr_uploader.stream, StreamWriter)
Exemplo n.º 7
0
    def run(self):
        """
        Execute packaging based on the argument provided by customers and samconfig.toml.
        """
        region_name = self.region if self.region else None

        s3_client = boto3.client(
            "s3",
            config=get_boto_config_with_user_agent(signature_version="s3v4",
                                                   region_name=region_name),
        )
        ecr_client = boto3.client(
            "ecr",
            config=get_boto_config_with_user_agent(region_name=region_name))

        docker_client = docker.from_env()

        s3_uploader = S3Uploader(s3_client, self.s3_bucket, self.s3_prefix,
                                 self.kms_key_id, self.force_upload,
                                 self.no_progressbar)
        # attach the given metadata to the artifacts to be uploaded
        s3_uploader.artifact_metadata = self.metadata
        ecr_uploader = ECRUploader(docker_client, ecr_client,
                                   self.image_repository,
                                   self.image_repositories)

        self.uploaders = Uploaders(s3_uploader, ecr_uploader)

        code_signer_client = boto3.client(
            "signer",
            config=get_boto_config_with_user_agent(region_name=region_name))
        self.code_signer = CodeSigner(code_signer_client,
                                      self.signing_profiles)

        try:
            exported_str = self._export(self.template_file, self.use_json)

            self.write_output(self.output_template_file, exported_str)

            if self.output_template_file and not self.on_deploy:
                msg = self.MSG_PACKAGED_TEMPLATE_WRITTEN.format(
                    output_file_name=self.output_template_file,
                    output_file_path=os.path.abspath(
                        self.output_template_file),
                )
                click.echo(msg)
        except OSError as ex:
            raise PackageFailedError(template_file=self.template_file,
                                     ex=str(ex)) from ex
Exemplo n.º 8
0
    def run(self):

        region_name = self.region if self.region else None

        s3_client = boto3.client(
            "s3",
            config=get_boto_config_with_user_agent(signature_version="s3v4", region_name=region_name),
        )
        ecr_client = boto3.client("ecr", config=get_boto_config_with_user_agent(region_name=region_name))

        docker_client = docker.from_env()

        self.s3_uploader = S3Uploader(
            s3_client, self.s3_bucket, self.s3_prefix, self.kms_key_id, self.force_upload, self.no_progressbar
        )
        # attach the given metadata to the artifacts to be uploaded
        self.s3_uploader.artifact_metadata = self.metadata
        self.ecr_uploader = ECRUploader(docker_client, ecr_client, self.image_repository)

        code_signer_client = boto3.client("signer")
        self.code_signer = CodeSigner(code_signer_client, self.signing_profiles)

        # NOTE(srirammv): move this to its own class.
        self.uploader = {"s3": self.s3_uploader, "ecr": self.ecr_uploader}
        try:
            exported_str = self._export(self.template_file, self.use_json)

            self.write_output(self.output_template_file, exported_str)

            if self.output_template_file and not self.on_deploy:
                msg = self.MSG_PACKAGED_TEMPLATE_WRITTEN.format(
                    output_file_name=self.output_template_file,
                    output_file_path=os.path.abspath(self.output_template_file),
                )
                click.echo(msg)
        except OSError as ex:
            raise PackageFailedError(template_file=self.template_file, ex=str(ex)) from ex
Exemplo n.º 9
0
    def test_upload_success(self):
        image = "myimage:v1"
        self.docker_client.api.push.return_value.__iter__.return_value = iter([
            {
                "status": "Pushing to xyz"
            },
            {
                "id": "1",
                "status": "Preparing",
                "progress": ""
            },
            {
                "id": "2",
                "status": "Preparing",
                "progress": ""
            },
            {
                "id": "3",
                "status": "Preparing",
                "progress": ""
            },
            {
                "id": "1",
                "status": "Pushing",
                "progress": "[====>   ]"
            },
            {
                "id": "3",
                "status": "Pushing",
                "progress": "[====>   ]"
            },
            {
                "id": "2",
                "status": "Pushing",
                "progress": "[====>   ]"
            },
            {
                "id": "3",
                "status": "Pushed",
                "progress": "[========>]"
            },
            {
                "id": "1",
                "status": "Pushed",
                "progress": "[========>]"
            },
            {
                "id": "2",
                "status": "Pushed",
                "progress": "[========>]"
            },
            {
                "status": f"image {image} pushed digest: a89q34f"
            },
            {},
        ])

        ecr_uploader = ECRUploader(
            docker_client=self.docker_client,
            ecr_client=self.ecr_client,
            ecr_repo=self.ecr_repo,
            ecr_repo_multi=self.ecr_repo_multi,
            tag=self.tag,
        )

        ecr_uploader.login = MagicMock()

        ecr_uploader.upload(image, resource_name="HelloWorldFunction")