def test_upload_part_bad_number(self): object = self.test_path + 'upload_part' contents = os.urandom(1024) request = messages.UploadRequest(self.test_bucket, object, None) response = self.client.create_multipart_upload(request) upload_id = response.upload_id part_number = 0.5 request = messages.UploadPartRequest(self.test_bucket, object, upload_id, part_number, contents) self.assertRaises(messages.S3ClientError, self.client.upload_part, request) try: response = self.client.upload_part(request) except Exception as e: self.assertIsInstance(e, messages.S3ClientError) self.assertEqual(e.code, 400)
def test_complete_multipart_upload_too_many(self): object = self.test_path + 'upload_part' request = messages.UploadRequest(self.test_bucket, object, None) response = self.client.create_multipart_upload(request) upload_id = response.upload_id part_number = 1 contents_1 = os.urandom(5 * 1024) request_1 = messages.UploadPartRequest(self.test_bucket, object, upload_id, part_number, contents_1) response_1 = self.client.upload_part(request_1) part_number = 2 contents_2 = os.urandom(1024) request_2 = messages.UploadPartRequest(self.test_bucket, object, upload_id, part_number, contents_2) response_2 = self.client.upload_part(request_2) parts = [ { 'PartNumber': 1, 'ETag': response_1.etag }, { 'PartNumber': 2, 'ETag': response_2.etag }, { 'PartNumber': 3, 'ETag': 'fake-etag' }, ] complete_request = messages.CompleteMultipartUploadRequest( self.test_bucket, object, upload_id, parts) try: self.client.complete_multipart_upload(complete_request) except Exception as e: self.assertIsInstance(e, messages.S3ClientError) self.assertEqual(e.code, 400)
def _write_to_s3(self, data): try: request = messages.UploadPartRequest( self._bucket, self._name, self.upload_id, self.part_number, data) response = self._client.upload_part(request) self.parts.append({ 'ETag': response.etag, 'PartNumber': response.part_number }) self.part_number = self.part_number + 1 except messages.S3ClientError as e: self.last_error = e if e.code == 404: raise IOError(errno.ENOENT, 'Not found: %s' % self._path) else: logging.error('HTTP error while requesting file %s: %s', self._path, 3) raise
def test_upload_part_nonexistent_upload_id(self): object = self.test_path + 'upload_part' upload_id = 'not-an-id-12345' part_number = 1 contents = os.urandom(1024) request = messages.UploadPartRequest(self.test_bucket, object, upload_id, part_number, contents) self.assertRaises(messages.S3ClientError, self.client.upload_part, request) try: self.client.upload_part(request) except Exception as e: self.assertIsInstance(e, messages.S3ClientError) self.assertEqual(e.code, 404)