Esempio n. 1
0
 def test_head_object_if_modified_since(self):
     size = 1024 * 256
     self.assert_head_bucket_result(result=self.s3.head_bucket(
         Bucket=env.BUCKET))
     key = KEY_PREFIX + random_string(16)
     body = random_bytes(size)
     expect_md5 = compute_md5(body)
     self.assert_put_object_result(result=self.s3.put_object(
         Bucket=env.BUCKET, Key=key, Body=body),
                                   etag=expect_md5)
     self.assert_head_object_result(result=self.s3.head_object(
         Bucket=env.BUCKET,
         Key=key,
         IfModifiedSince=datetime.datetime(1946, 2, 14)),
                                    etag=expect_md5,
                                    content_length=size)
     try:
         self.s3.head_object(Bucket=env.BUCKET,
                             Key=key,
                             IfModifiedSince=datetime.datetime.now())
         self.fail()  # Non exception occurred is illegal.
     except Exception as e:
         # Error code 304 is legal.
         self.assert_client_error(error=e, expect_status_code=304)
     self.assert_delete_object_result(
         result=self.s3.delete_object(Bucket=env.BUCKET, Key=key))
     self.assert_delete_object_result(
         result=self.s3.delete_object(Bucket=env.BUCKET, Key=KEY_PREFIX))
Esempio n. 2
0
 def test_head_object_if_match(self):
     size = 1024 * 256
     self.assert_head_bucket_result(result=self.s3.head_bucket(
         Bucket=env.BUCKET))
     key = KEY_PREFIX + random_string(16)
     body = random_bytes(size)
     expect_md5 = compute_md5(body)
     self.assert_put_object_result(result=self.s3.put_object(
         Bucket=env.BUCKET, Key=key, Body=body),
                                   etag=expect_md5)
     self.assert_head_object_result(result=self.s3.head_object(
         Bucket=env.BUCKET, Key=key, IfMatch=expect_md5),
                                    etag=expect_md5,
                                    content_length=size)
     try:
         fake_etag = '1b2cf535f27731c974343645a3985328'
         self.s3.head_object(Bucket=env.BUCKET, Key=key, IfMatch=fake_etag)
         self.fail()  # Non exception occurred is illegal.
     except Exception as e:
         # Error code 412 is legal.
         self.assert_client_error(error=e, expect_status_code=412)
     self.assert_delete_object_result(
         result=self.s3.delete_object(Bucket=env.BUCKET, Key=key))
     self.assert_delete_object_result(
         result=self.s3.delete_object(Bucket=env.BUCKET, Key=KEY_PREFIX))
Esempio n. 3
0
    def test_cors_options(self):
        # Put object
        key = 'test-options-object'
        size = 1024 * 256
        body = random_bytes(size)
        expect_md5 = compute_md5(body)
        self.assert_put_object_result(result=self.s3.put_object(
            Bucket=env.BUCKET, Key=key, Body=body),
                                      etag=expect_md5)

        # Put bucket cors
        self.assert_result_status_code(result=self.s3.put_bucket_cors(
            Bucket=env.BUCKET, CORSConfiguration=CORS_CONFIG))

        options_url = '{bucket_url}/{key}'.format(bucket_url=BUCKET_URL,
                                                  key=key)

        # Send options requests
        self.assert_cors_request_result(result=requests.options(
            url=options_url,
            headers={
                'Origin': PUT_ORIGIN,
                'Access-Control-Request-Method': 'GET'
            }),
                                        response_code=200,
                                        response_origin=PUT_ORIGIN,
                                        response_method='GET')

        # Delete bucket cors
        self.assert_result_status_code(
            result=self.s3.delete_bucket_cors(Bucket=env.BUCKET),
            status_code=204)
        # Send options requests
        self.assert_cors_request_result(result=requests.options(
            url=options_url,
            headers={
                'Origin': PUT_ORIGIN,
                'Access-Control-Request-Method': 'GET'
            }),
                                        response_code=200,
                                        response_origin=None,
                                        response_method=None)
        # Delete object
        self.assert_delete_object_result(
            result=self.s3.delete_object(Bucket=env.BUCKET, Key=key))
Esempio n. 4
0
 def __do_test_put_object(self, file_name, file_size):
     key = file_name
     body = random_bytes(file_size)
     expect_etag = compute_md5(body)
     # put object
     self.assert_put_object_result(
         result=self.s3.put_object(Bucket=BUCKET, Key=key, Body=body),
         etag=expect_etag)
     # head object
     self.assert_head_object_result(
         result=self.s3.head_object(Bucket=BUCKET, Key=key),
         etag=expect_etag,
         content_length=file_size)
     # get object
     self.assert_get_object_result(
         result=self.s3.get_object(Bucket=BUCKET, Key=key),
         etag=expect_etag,
         content_length=file_size,
         body_md5=expect_etag)
Esempio n. 5
0
    def __test_transfer(self, size):
        name = random_string(16)
        key = KEY_PREFIX + name
        local_filename = os.path.join('/tmp', name)
        expect_md5 = generate_file(path=local_filename, size=size)

        # Upload parallel
        f = open(local_filename, 'rb')
        future = self.tm.upload(fileobj=f, bucket=BUCKET, key=key)
        result = wait_future_done(future, timeout=90)
        self.assertTrue(result)
        f.close()

        # Checking remote file stat
        self.assert_head_object_result(result=self.s3.head_object(
            Bucket=BUCKET, Key=key),
                                       content_length=size)

        # Download parallel
        download_filename = local_filename + "_dl"
        f = open(download_filename, 'wb+')
        future = self.tm.download(fileobj=f, bucket=BUCKET, key=key)
        result = wait_future_done(future, timeout=90)
        self.assertTrue(result)
        f.flush()

        # Checking download file
        f.seek(0)
        actual_md5 = compute_md5(f.read())
        f.close()
        self.assertEqual(actual_md5, expect_md5)

        # Remove remote and local files
        os.remove(local_filename)
        os.remove(download_filename)
        self.assert_delete_object_result(
            result=self.s3.delete_object(Bucket=BUCKET, Key=key))
        self.assert_delete_object_result(
            result=self.s3.delete_object(Bucket=BUCKET, Key=KEY_PREFIX))
Esempio n. 6
0
 def test_head_object(self):
     size = 1024 * 256
     self.assert_head_bucket_result(self.s3.head_bucket(Bucket=env.BUCKET))
     key = KEY_PREFIX + random_string(16)
     body = random_bytes(size)
     expect_md5 = compute_md5(body)
     self.assert_put_object_result(result=self.s3.put_object(
         Bucket=env.BUCKET, Key=key, Body=body),
                                   etag=expect_md5)
     self.assert_head_object_result(result=self.s3.head_object(
         Bucket=env.BUCKET, Key=key),
                                    etag=expect_md5,
                                    content_length=size)
     self.assert_delete_object_result(
         result=self.s3.delete_object(Bucket=env.BUCKET, Key=key))
     self.assert_delete_object_result(
         result=self.s3.delete_object(Bucket=env.BUCKET, Key=KEY_PREFIX))
     try:
         self.s3.head_object(Bucket=env.BUCKET, Key=key)
         self.fail()  # Non exception occurred is illegal.
     except Exception as e:
         # Error code 404 is legal.
         self.assert_client_error(e, expect_status_code=404)
Esempio n. 7
0
 def test_put_directory(self):
     key = random_string(16)
     content_type = 'application/directory'
     md5 = compute_md5(bytes())
     # Put a directory object
     self.assert_put_object_result(result=self.s3.put_object(
         Bucket=BUCKET, Key=key, ContentType=content_type),
                                   etag=md5)
     # Get the directory info
     self.assert_head_object_result(result=self.s3.head_object(
         Bucket=BUCKET, Key=key + '/'),
                                    etag=md5,
                                    content_type=content_type,
                                    content_length=0)
     # Get directory object
     self.assert_get_object_result(result=self.s3.get_object(Bucket=BUCKET,
                                                             Key=key + '/'),
                                   etag=md5,
                                   content_type=content_type,
                                   content_length=0,
                                   body_md5=md5)
     # Delete the directory
     self.assert_delete_object_result(
         result=self.s3.delete_object(Bucket=BUCKET, Key=key + '/'))