def test_s3_path_object_optional(self): self.assertEqual( s3io.parse_s3_path('s3://bucket/name', object_optional=True), ('bucket', 'name')) self.assertEqual( s3io.parse_s3_path('s3://bucket/', object_optional=True), ('bucket', ''))
def setUp(self): # These tests can be run locally against a mock S3 client, or as integration # tests against the real S3 client. self.USE_MOCK = True # If you're running integration tests with S3, set this variable to be an # s3 path that you have access to where test data can be written. If you're # just running tests against the mock, this can be any s3 path. It should # end with a '/'. self.TEST_DATA_PATH = 's3://random-data-sets/beam_tests/' self.test_bucket, self.test_path = s3io.parse_s3_path(self.TEST_DATA_PATH) if self.USE_MOCK: self.client = fake_client.FakeS3Client() test_data_bucket, _ = s3io.parse_s3_path(self.TEST_DATA_PATH) self.client.known_buckets.add(test_data_bucket) self.aws = s3io.S3IO(self.client) else: self.aws = s3io.S3IO()
def _insert_random_file(self, client, path, size): bucket, name = s3io.parse_s3_path(path) contents = os.urandom(size) fakeFile = fake_client.FakeFile(bucket, name, contents) if self.USE_MOCK: self.client.add_file(fakeFile) else: f = self.aws.open(path, 'w') f.write(contents) f.close() return fakeFile
def test_file_mime_type(self): if self.USE_MOCK: self.skipTest("The boto3_client mock doesn't support mime_types") mime_type = 'example/example' file_name = self.TEST_DATA_PATH + 'write_file' f = self.aws.open(file_name, 'w', mime_type=mime_type) f.write(b'a string of binary text') f.close() bucket, key = s3io.parse_s3_path(file_name) metadata = self.client.get_object_metadata(messages.GetRequest(bucket, key)) self.assertEqual(mime_type, metadata.mime_type) # Clean up self.aws.delete(file_name)
def test_get_range_bad_start_end(self): file_name = self.TEST_DATA_PATH + 'get_range' contents = os.urandom(1024) with self.aws.open(file_name, 'w') as f: f.write(contents) bucket, object = s3io.parse_s3_path(file_name) response = self.client.get_range(messages.GetRequest(bucket, object), -10, 20) self.assertEqual(response, contents) response = self.client.get_range(messages.GetRequest(bucket, object), 20, 10) self.assertEqual(response, contents) # Clean up self.aws.delete(file_name)
def test_s3_path(self): self.assertEqual(s3io.parse_s3_path('s3://bucket/name'), ('bucket', 'name')) self.assertEqual(s3io.parse_s3_path('s3://bucket/name/sub'), ('bucket', 'name/sub'))