2015-11-24 12:34:53 +01:00
|
|
|
# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
|
|
# may not use this file except in compliance with the License. A copy of
|
|
|
|
# the License is located at
|
|
|
|
#
|
|
|
|
# http://aws.amazon.com/apache2.0/
|
|
|
|
#
|
|
|
|
# or in the "license" file accompanying this file. This file is
|
|
|
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
|
|
# ANY KIND, either express or implied. See the License for the specific
|
|
|
|
# language governing permissions and limitations under the License.
|
|
|
|
from tests import unittest
|
|
|
|
|
|
|
|
from botocore.exceptions import ClientError
|
2016-11-10 03:28:04 +01:00
|
|
|
from botocore.vendored import six
|
2015-11-24 12:34:53 +01:00
|
|
|
import botocore.session
|
|
|
|
|
|
|
|
|
|
|
|
class TestGlacier(unittest.TestCase):
|
|
|
|
# We have to use a single vault for all the integration tests.
|
|
|
|
# This is because if we create a vault and upload then delete
|
|
|
|
# an archive, we cannot immediately clean up and delete the vault.
|
|
|
|
# The compromise is that we'll use a single vault and use
|
|
|
|
# get_or_create semantics for the integ tests. This does mean you
|
|
|
|
# need to be careful when writing tests. Assume that other code
|
|
|
|
# is also using this vault in parallel, so don't rely on things like
|
|
|
|
# number of archives in a vault.
|
|
|
|
|
|
|
|
VAULT_NAME = 'botocore-integ-test-vault'
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.session = botocore.session.get_session()
|
|
|
|
self.client = self.session.create_client('glacier', 'us-west-2')
|
|
|
|
# There's no error if the vault already exists so we don't
|
|
|
|
# need to catch any exceptions here.
|
|
|
|
self.client.create_vault(vaultName=self.VAULT_NAME)
|
|
|
|
|
|
|
|
def test_can_list_vaults_without_account_id(self):
|
|
|
|
response = self.client.list_vaults()
|
|
|
|
self.assertIn('VaultList', response)
|
|
|
|
|
|
|
|
def test_can_handle_error_responses(self):
|
|
|
|
with self.assertRaises(ClientError):
|
|
|
|
self.client.list_vaults(accountId='asdf')
|
|
|
|
|
|
|
|
def test_can_upload_archive(self):
|
|
|
|
body = six.BytesIO(b"bytes content")
|
|
|
|
response = self.client.upload_archive(vaultName=self.VAULT_NAME,
|
|
|
|
archiveDescription='test upload',
|
|
|
|
body=body)
|
|
|
|
self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 201)
|
|
|
|
archive_id = response['archiveId']
|
|
|
|
response = self.client.delete_archive(vaultName=self.VAULT_NAME,
|
|
|
|
archiveId=archive_id)
|
|
|
|
self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 204)
|
|
|
|
|
|
|
|
def test_can_upload_archive_from_bytes(self):
|
|
|
|
response = self.client.upload_archive(vaultName=self.VAULT_NAME,
|
|
|
|
archiveDescription='test upload',
|
|
|
|
body=b'bytes body')
|
|
|
|
self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 201)
|
|
|
|
archive_id = response['archiveId']
|
|
|
|
response = self.client.delete_archive(vaultName=self.VAULT_NAME,
|
|
|
|
archiveId=archive_id)
|
|
|
|
self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 204)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|
|
|
|
|