Esempio n. 1
0
    def test_retrieve_inventory(self):
        class FakeResponse(object):
            status = 202

            def getheader(self, key, default=None):
                if key == 'x-amz-job-id':
                    return 'HkF9p6'
                elif key == 'Content-Type':
                    return 'application/json'

                return 'something'

            def read(self, amt=None):
                return """{
  "Action": "ArchiveRetrieval",
  "ArchiveId": "NkbByEejwEggmBz2fTHgJrg0XBoDfjP4q6iu87-EXAMPLEArchiveId",
  "ArchiveSizeInBytes": 16777216,
  "ArchiveSHA256TreeHash": "beb0fe31a1c7ca8c6c04d574ea906e3f97",
  "Completed": false,
  "CreationDate": "2012-05-15T17:21:39.339Z",
  "CompletionDate": "2012-05-15T17:21:43.561Z",
  "InventorySizeInBytes": null,
  "JobDescription": "My ArchiveRetrieval Job",
  "JobId": "HkF9p6",
  "RetrievalByteRange": "0-16777215",
  "SHA256TreeHash": "beb0fe31a1c7ca8c6c04d574ea906e3f97b31fd",
  "SNSTopic": "arn:aws:sns:us-east-1:012345678901:mytopic",
  "StatusCode": "InProgress",
  "StatusMessage": "Operation in progress.",
  "VaultARN": "arn:aws:glacier:us-east-1:012345678901:vaults/examplevault"
}"""

        raw_resp = FakeResponse()
        init_resp = GlacierResponse(raw_resp, [('x-amz-job-id', 'JobId')])
        raw_resp_2 = FakeResponse()
        desc_resp = GlacierResponse(raw_resp_2, [])

        with mock.patch.object(self.vault.layer1,
                               'initiate_job',
                               return_value=init_resp):
            with mock.patch.object(self.vault.layer1,
                                   'describe_job',
                                   return_value=desc_resp):
                # The old/back-compat variant of the call.
                self.assertEqual(self.vault.retrieve_inventory(), 'HkF9p6')

                # The variant the returns a full ``Job`` object.
                job = self.vault.retrieve_inventory_job()
                self.assertTrue(isinstance(job, Job))
                self.assertEqual(job.id, 'HkF9p6')
Esempio n. 2
0
 def test_get_job_validate_checksum_success(self):
     response = GlacierResponse(mock.Mock(), None)
     response['TreeHash'] = 'tree_hash'
     self.api.get_job_output.return_value = response
     with mock.patch('boto.glacier.job.tree_hash_from_str') as t:
         t.return_value = 'tree_hash'
         self.job.get_output(byte_range=(1, 1024), validate_checksum=True)
Esempio n. 3
0
 def test_get_job_validation_fails(self):
     response = GlacierResponse(mock.Mock(), None)
     response['TreeHash'] = 'tree_hash'
     self.api.get_job_output.return_value = response
     with mock.patch('boto.glacier.job.tree_hash_from_str') as t:
         t.return_value = 'BAD_TREE_HASH_VALUE'
         with self.assertRaises(TreeHashDoesNotMatchError):
             # With validate_checksum set to True, this call fails.
             self.job.get_output(byte_range=(1, 1024), validate_checksum=True)
         # With validate_checksum set to False, this call succeeds.
         self.job.get_output(byte_range=(1, 1024), validate_checksum=False)
Esempio n. 4
0
 def test_download_to_fileobj(self):
     http_response = mock.Mock(read=mock.Mock(return_value='xyz'))
     response = GlacierResponse(http_response, None)
     response['TreeHash'] = 'tree_hash'
     self.api.get_job_output.return_value = response
     fileobj = StringIO()
     self.job.archive_size = 3
     with mock.patch('boto.glacier.job.tree_hash_from_str') as t:
         t.return_value = 'tree_hash'
         self.job.download_to_fileobj(fileobj)
     fileobj.seek(0)
     self.assertEqual(http_response.read.return_value, fileobj.read())
Esempio n. 5
0
 def test_204_body_isnt_passed_to_json(self):
     response = self.create_response(status_code=204,
                                     header=[('Content-Type',
                                              'application/json')])
     result = GlacierResponse(response, response.getheaders())
     self.assertEquals(result.status, response.status)