Index: third_party/gsutil/boto/tests/unit/glacier/test_layer1.py |
diff --git a/third_party/gsutil/boto/tests/unit/glacier/test_layer1.py b/third_party/gsutil/boto/tests/unit/glacier/test_layer1.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4cabbeae50228ffbecf0476f3671c5b9085c06f8 |
--- /dev/null |
+++ b/third_party/gsutil/boto/tests/unit/glacier/test_layer1.py |
@@ -0,0 +1,98 @@ |
+import json |
+import copy |
+import tempfile |
+ |
+from tests.unit import AWSMockServiceTestCase |
+from boto.glacier.layer1 import Layer1 |
+ |
+ |
+class GlacierLayer1ConnectionBase(AWSMockServiceTestCase): |
+ connection_class = Layer1 |
+ |
+ def setUp(self): |
+ super(GlacierLayer1ConnectionBase, self).setUp() |
+ self.json_header = [('Content-Type', 'application/json')] |
+ self.vault_name = u'examplevault' |
+ self.vault_arn = 'arn:aws:glacier:us-east-1:012345678901:vaults/' + \ |
+ self.vault_name |
+ self.vault_info = {u'CreationDate': u'2012-03-16T22:22:47.214Z', |
+ u'LastInventoryDate': u'2012-03-21T22:06:51.218Z', |
+ u'NumberOfArchives': 2, |
+ u'SizeInBytes': 12334, |
+ u'VaultARN': self.vault_arn, |
+ u'VaultName': self.vault_name} |
+ |
+ |
+class GlacierVaultsOperations(GlacierLayer1ConnectionBase): |
+ |
+ def test_create_vault_parameters(self): |
+ self.set_http_response(status_code=201) |
+ self.service_connection.create_vault(self.vault_name) |
+ |
+ def test_list_vaults(self): |
+ content = {u'Marker': None, |
+ u'RequestId': None, |
+ u'VaultList': [self.vault_info]} |
+ self.set_http_response(status_code=200, header=self.json_header, |
+ body=json.dumps(content)) |
+ api_response = self.service_connection.list_vaults() |
+ self.assertDictEqual(content, api_response) |
+ |
+ def test_describe_vaults(self): |
+ content = copy.copy(self.vault_info) |
+ content[u'RequestId'] = None |
+ self.set_http_response(status_code=200, header=self.json_header, |
+ body=json.dumps(content)) |
+ api_response = self.service_connection.describe_vault(self.vault_name) |
+ self.assertDictEqual(content, api_response) |
+ |
+ def test_delete_vault(self): |
+ self.set_http_response(status_code=204) |
+ self.service_connection.delete_vault(self.vault_name) |
+ |
+ |
+class GlacierJobOperations(GlacierLayer1ConnectionBase): |
+ |
+ def setUp(self): |
+ super(GlacierJobOperations, self).setUp() |
+ self.job_content = 'abc' * 1024 |
+ |
+ def test_initiate_archive_job(self): |
+ content = {u'Type': u'archive-retrieval', |
+ u'ArchiveId': u'AAABZpJrTyioDC_HsOmHae8EZp_uBSJr6cnGOLKp_XJCl-Q', |
+ u'Description': u'Test Archive', |
+ u'SNSTopic': u'Topic', |
+ u'JobId': None, |
+ u'Location': None, |
+ u'RequestId': None} |
+ self.set_http_response(status_code=202, header=self.json_header, |
+ body=json.dumps(content)) |
+ api_response = self.service_connection.initiate_job(self.vault_name, |
+ self.job_content) |
+ self.assertDictEqual(content, api_response) |
+ |
+ def test_get_archive_output(self): |
+ header = [('Content-Type', 'application/octet-stream')] |
+ self.set_http_response(status_code=200, header=header, |
+ body=self.job_content) |
+ response = self.service_connection.get_job_output(self.vault_name, |
+ 'example-job-id') |
+ self.assertEqual(self.job_content, response.read()) |
+ |
+ |
+class GlacierUploadArchiveResets(GlacierLayer1ConnectionBase): |
+ def test_upload_archive(self): |
+ fake_data = tempfile.NamedTemporaryFile() |
+ fake_data.write('foobarbaz') |
+ # First seek to a non zero offset. |
+ fake_data.seek(2) |
+ self.set_http_response(status_code=201) |
+ # Simulate reading the request body when we send the request. |
+ self.service_connection.connection.request.side_effect = \ |
+ lambda *args: fake_data.read() |
+ self.service_connection.upload_archive('vault_name', fake_data, 'linear_hash', |
+ 'tree_hash') |
+ # Verify that we seek back to the original offset after making |
+ # a request. This ensures that if we need to resend the request we're |
+ # back at the correct location within the file. |
+ self.assertEqual(fake_data.tell(), 2) |