Exemple #1
0
    def test_bucket_name_when_bucket_owned_in_other_region(self):
        # Given
        session = Mock()
        session.region_name = 'dummy-region'
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {'Buckets': []}
        s3_client.create_bucket.side_effect = [
            ClientError(
                {
                    'Error': {
                        'Code':
                        'BucketAlreadyOwnedByYou',
                        'Message':
                        'Your previous request to create the named ' +
                        'bucket succeeded and you already own it.'
                    }
                }, 'CreateBucket'), {}
        ]

        s3_bucket_factory = S3BucketFactory(session)

        # When
        bucket_name = s3_bucket_factory.get_bucket_name()

        # Then
        first_call, second_call = s3_client.create_bucket.mock_calls
        first_bucket_param = first_call[2]['Bucket']
        second_bucket_param = second_call[2]['Bucket']
        assert match(NEW_BUCKET_PATTERN, first_bucket_param)
        assert match(NEW_BUCKET_PATTERN, second_bucket_param)
        assert first_bucket_param != bucket_name
        assert second_bucket_param == bucket_name
Exemple #2
0
    def test_assertion_error_on_multiple_buckets(self):

        # Given
        session = Mock()
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {
            'Buckets': [{
                'Name': 'state-bucket'
            }, {
                'Name': 'another-state-bucket'
            }]
        }

        s3_client.get_bucket_tagging.return_value = {
            'TagSet': [{
                'Key': TFSTATE_TAG_NAME,
                'Value': TAG_VALUE,
            }]
        }

        s3_client.get_bucket_location.return_value = {
            'LocationConstraint': session.region_name
        }

        s3_bucket_factory = S3BucketFactory(session)

        # When & Then
        self.assertRaises(AssertionError, s3_bucket_factory.get_bucket_name)
Exemple #3
0
    def test_bucket_name_when_bucket_not_available(self):
        # Given
        session = Mock()
        session.region_name = 'dummy-region'
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {'Buckets': []}
        s3_client.create_bucket.side_effect = [
            ClientError(
                {
                    'Error': {
                        'Code': 'BucketAlreadyExists',
                        'Message': 'The requested bucket name is not available'
                    }
                }, 'CreateBucket'), {}
        ]

        s3_bucket_factory = S3BucketFactory(session)

        # When
        bucket_name = s3_bucket_factory.get_bucket_name()

        # Then
        first_call, second_call = s3_client.create_bucket.mock_calls
        first_bucket_param = first_call[2]['Bucket']
        second_bucket_param = second_call[2]['Bucket']
        assert match(NEW_BUCKET_PATTERN, first_bucket_param)
        assert match(NEW_BUCKET_PATTERN, second_bucket_param)
        assert first_bucket_param != bucket_name
        assert second_bucket_param == bucket_name
Exemple #4
0
    def test_get_existing_bucket(self, bucket_name):
        # Given
        session = Mock()
        session.region_name = 'dummy-region'
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {
            'Buckets': [{
                'Name': bucket_name
            }]
        }
        s3_client.get_bucket_tagging.return_value = {
            'TagSet': [{
                'Key': TFSTATE_TAG_NAME,
                'Value': TAG_VALUE,
            }]
        }
        s3_client.get_bucket_location.return_value = {
            'LocationConstraint': session.region_name
        }

        s3_bucket_factory = S3BucketFactory(session)

        # When
        retrieved_bucket_name = s3_bucket_factory.get_bucket_name()

        # Then
        session.client.called_once_with('s3')
        s3_client.list_buckets.assert_called_once_with()
        s3_client.get_bucket_tagging.assert_called_once_with(
            Bucket=bucket_name)
        s3_client.get_bucket_location.assert_called_once_with(
            Bucket=bucket_name)
        assert retrieved_bucket_name == bucket_name
Exemple #5
0
    def test_existing_bucket_name_returned_when_in_us_standard_region(self):

        # Given
        session = Mock()
        session.region_name = 'us-east-1'
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {
            'Buckets': [{
                'Name': 'dummy-bucket-name'
            }]
        }
        s3_client.get_bucket_tagging.return_value = {
            'TagSet': [{
                'Key': TFSTATE_TAG_NAME,
                'Value': TAG_VALUE,
            }]
        }
        s3_client.get_bucket_location.return_value = {
            'LocationConstraint': None
        }

        s3_bucket_factory = S3BucketFactory(session)
        # When
        bucket_name = s3_bucket_factory.get_bucket_name()

        # Then
        assert bucket_name == 'dummy-bucket-name'
Exemple #6
0
    def test_bucket_created_and_tagged(self):

        # Given
        session = Mock()
        session.region_name = 'dummy-region-name'
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {'Buckets': []}

        s3_bucket_factory = S3BucketFactory(session)
        # When
        bucket_name = s3_bucket_factory.get_bucket_name()

        # Then
        s3_client.create_bucket.assert_called_once_with(
            Bucket=bucket_name,
            CreateBucketConfiguration={
                'LocationConstraint': 'dummy-region-name'
            })

        s3_client.put_bucket_tagging.assert_called_once_with(
            Bucket=bucket_name,
            Tagging={
                'TagSet': [{
                    'Key': TFSTATE_TAG_NAME,
                    'Value': TAG_VALUE,
                }]
            })
Exemple #7
0
    def test_bucket_created_and_tagged_in_us_standard_region(self):

        # Given
        session = Mock()
        session.region_name = 'us-east-1'
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {'Buckets': []}

        s3_bucket_factory = S3BucketFactory(session)
        # When
        bucket_name = s3_bucket_factory.get_bucket_name()

        # Then
        s3_client.create_bucket.assert_called_once_with(Bucket=bucket_name)

        s3_client.put_bucket_tagging.assert_called_once_with(
            Bucket=bucket_name,
            Tagging={
                'TagSet': [{
                    'Key': TFSTATE_TAG_NAME,
                    'Value': TAG_VALUE,
                }]
            })
Exemple #8
0
    def test_bucket_name_generally_unique_based_on_region(self):

        # Given
        session = Mock()
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {'Buckets': []}

        # When
        session.region_name = 'region-1'
        bucket = S3BucketFactory(session).get_bucket_name()
        duplicate_bucket = S3BucketFactory(session).get_bucket_name()
        session.region_name = 'region-2'
        bucket_different_region = S3BucketFactory(session).get_bucket_name()

        # Then
        assert match(NEW_BUCKET_PATTERN, bucket)
        assert match(NEW_BUCKET_PATTERN, duplicate_bucket)
        assert match(NEW_BUCKET_PATTERN, bucket_different_region)
        assert bucket == duplicate_bucket
        assert bucket != bucket_different_region
Exemple #9
0
    def test_handle_missing_buckets(self):
        # Given
        session = Mock()
        session.region_name = 'dummy-region-name'
        s3_client = Mock()
        session.client.return_value = s3_client

        s3_client.list_buckets.return_value = {
            'Buckets': [{
                'Name': 'another-bucket'
            }, {
                'Name': 'state-bucket'
            }]
        }

        def get_bucket_tagging(Bucket):
            if Bucket == 'state-bucket':
                return {
                    'TagSet': [{
                        'Key': TFSTATE_TAG_NAME,
                        'Value': TAG_VALUE,
                    }]
                }
            else:
                raise ClientError(
                    {
                        'Error': {
                            'Code': 'NoSuchBucket',
                            'Message': 'The bucket does not exist'
                        }
                    }, 'GetBucketTagging')

        s3_client.get_bucket_tagging = get_bucket_tagging

        s3_client.get_bucket_location.return_value = {
            'LocationConstraint': session.region_name
        }

        s3_bucket_factory = S3BucketFactory(session)

        # When
        bucket = s3_bucket_factory.get_bucket_name()

        # Then
        assert bucket == 'state-bucket'