Skip to content

Commit

Permalink
1. add content-md5 header for policy, request payment and versioning …
Browse files Browse the repository at this point in the history
…api.

2. split versionig test cases
  • Loading branch information
huiguangjun committed Jul 10, 2019
1 parent 32955a2 commit 36fc0ab
Show file tree
Hide file tree
Showing 10 changed files with 1,217 additions and 1,164 deletions.
11 changes: 6 additions & 5 deletions oss2/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2026,11 +2026,11 @@ def put_bucket_versioning(self, config, headers=None):
"""
logger.debug("Start to put object versioning, bucket: {0}".format(
self.bucket_name))
data = self.__convert_data(BucketVersioningConfig, xml_utils.to_put_bucket_versioning, config)

if headers is not None:
headers = http.CaseInsensitiveDict(headers)
headers = http.CaseInsensitiveDict(headers)
headers['Content-MD5'] = utils.content_md5(data)

data = self.__convert_data(BucketVersioningConfig, xml_utils.to_put_bucket_versioning, config)
resp = self.__do_bucket('PUT', data=data, params={Bucket.VERSIONING: ''}, headers=headers)

return RequestResult(resp)
Expand All @@ -2053,7 +2053,8 @@ def put_bucket_policy(self, policy):

logger.debug("Start to put bucket policy, bucket: {0}, policy: {1}".format(
self.bucket_name, policy))
resp = self.__do_bucket('PUT', data=policy, params={Bucket.POLICY: ''})

resp = self.__do_bucket('PUT', data=policy, params={Bucket.POLICY: ''}, headers={'Content-MD5': utils.content_md5(policy)})
logger.debug("Put bucket policy done, req_id: {0}, status_code: {1}".format(resp.request_id, resp.status))
return RequestResult(resp)

Expand Down Expand Up @@ -2083,7 +2084,7 @@ def put_bucket_request_payment(self, payer):
"""
data = xml_utils.to_put_bucket_request_payment(payer)
logger.debug("Start to put bucket request payment, bucket: {0}, payer: {1}".format(self.bucket_name, payer))
resp = self.__do_bucket('PUT', data=data, params={Bucket.REQUESTPAYMENT: ''})
resp = self.__do_bucket('PUT', data=data, params={Bucket.REQUESTPAYMENT: ''}, headers={'Content-MD5': utils.content_md5(data)})
logger.debug("Put bucket request payment done, req_id: {0}, status_code: {1}".format(resp.request_id, resp.status))

return RequestResult(resp)
Expand Down
4 changes: 4 additions & 0 deletions tests/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
invalid_sample_data.csv binary
sample_data.csv binary
sample_json.json binary
sample_json_lines.json binary
2 changes: 1 addition & 1 deletion tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def clean_and_delete_bucket_by_prefix(bucket_prefix):
service = oss2.Service(oss2.Auth(OSS_ID, OSS_SECRET), OSS_ENDPOINT)
buckets = service.list_buckets(prefix=bucket_prefix).buckets
for b in buckets:
bucket = oss2.Bucket(oss2.Auth(OSS_ID, OSS_SECRET), OSS_ENDPOINT, b.name)
bucket = oss2.Bucket(oss2.Auth(OSS_ID, OSS_SECRET), b.extranet_endpoint, b.name)
clean_and_delete_bucket(bucket)


Expand Down
165 changes: 0 additions & 165 deletions tests/test_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -699,171 +699,6 @@ def test_bucket_encryption(self):
result = self.bucket.delete_bucket_encryption()
self.assertEqual(int(result.status), 204)

def test_bucket_versioning_wrong(self):

from oss2.models import BucketVersioningConfig

config = BucketVersioningConfig()

self.assertRaises(oss2.exceptions.MalformedXml,
self.bucket.put_bucket_versioning, config)

config.status = "Disabled"
self.assertRaises(oss2.exceptions.MalformedXml,
self.bucket.put_bucket_versioning, config)

def test_bucket_versioning(self):

from oss2.models import BucketVersioningConfig

auth = oss2.Auth(OSS_ID, OSS_SECRET)
bucket_name = OSS_BUCKET + "-test-versioning"
bucket = oss2.Bucket(auth, OSS_ENDPOINT, bucket_name)

self.assertRaises(oss2.exceptions.NoSuchBucket, bucket.get_bucket_info)

bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

wait_meta_sync()

result = bucket.get_bucket_versioning()

self.assertTrue(result.status is None)

config = BucketVersioningConfig()

config.status = oss2.BUCKET_VERSIONING_ENABLE
result = bucket.put_bucket_versioning(config)
self.assertEqual(int(result.status)/100, 2)

wait_meta_sync()

result = bucket.get_bucket_info()
self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None)
self.assertEqual(result.versioning_status, 'Enabled')

config.status = oss2.BUCKET_VERSIONING_SUSPEND
result = bucket.put_bucket_versioning(config)
self.assertEqual(int(result.status)/100, 2)

bucket.delete_bucket()

def test_list_object_versions_wrong(self):
from oss2.models import BucketVersioningConfig

auth = oss2.Auth(OSS_ID, OSS_SECRET)
bucket_name = OSS_BUCKET + "-test-list-object-versions-wrong"
bucket = oss2.Bucket(auth, OSS_ENDPOINT, bucket_name)

self.assertRaises(oss2.exceptions.NoSuchBucket, bucket.get_bucket_info)

bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

wait_meta_sync()

config = BucketVersioningConfig()

config.status = "Enabled"
result = bucket.put_bucket_versioning(config)
self.assertEqual(int(result.status)/100, 2)

result = bucket.put_object("test", "test1")
self.assertEqual(int(result.status)/100, 2)
versionid1 = result.versionid

result = bucket.put_object("test", "test2")
self.assertEqual(int(result.status)/100, 2)
versionid2 = result.versionid

self.assertRaises(oss2.exceptions.InvalidArgument,
bucket.list_object_versions, prefix=1025*'a')

self.assertRaises(oss2.exceptions.InvalidArgument,
bucket.list_object_versions, key_marker=1025*'a')

self.assertRaises(oss2.exceptions.InvalidArgument,
bucket.list_object_versions, versionid_marker=1025*'a')

self.assertRaises(oss2.exceptions.InvalidArgument,
bucket.list_object_versions, delimiter=1025*'a')

self.assertRaises(oss2.exceptions.InvalidArgument,
bucket.list_object_versions, max_keys=1001)

result = bucket.list_object_versions()
self.assertEqual(len(result.versions), 2)
self.assertEqual(result.versions[0].versionid, versionid2)
self.assertEqual(result.versions[1].versionid, versionid1)
self.assertEqual(len(result.delete_marker), 0)

bucket.delete_object("test", {"versionId": versionid1})
bucket.delete_object("test", {"versionId": versionid2})

bucket.delete_bucket()

def test_list_object_versions_truncated(self):

from oss2.models import BucketVersioningConfig
from oss2.models import BatchDeleteObjectVersion
from oss2.models import BatchDeleteObjectVersionList

auth = oss2.Auth(OSS_ID, OSS_SECRET)
bucket_name = OSS_BUCKET + "-test-list-object-versions-truncated"
bucket = oss2.Bucket(auth, OSS_ENDPOINT, bucket_name)

bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

wait_meta_sync()

config = BucketVersioningConfig()
config.status = 'Enabled'

result = bucket.put_bucket_versioning(config)

wait_meta_sync()

result = bucket.get_bucket_info()

self.assertEqual(int(result.status)/100, 2)
self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None)
self.assertEqual(result.versioning_status, "Enabled")

for i in range(0, 1024):
bucket.put_object("test", "test"+str(i))

loop_time = 0
next_key_marker = ''
next_version_marker = ''
delete_versions = []

while True:

result = bucket.list_object_versions(key_marker=next_key_marker, versionid_marker=next_version_marker)
self.assertTrue(len(result.versions) > 0)
self.assertTrue(len(result.delete_marker) == 0)
version_list = BatchDeleteObjectVersionList()
for item in result.versions:
version_list.append(BatchDeleteObjectVersion(item.key, item.versionid))
delete_versions.append(version_list)

if result.is_truncated:
next_key_marker = result.next_key_marker
next_version_marker = result.next_versionid_marker
else:
break

loop_time += 1
if loop_time > 12:
self.assertFalse(True, "loop too much times, break")

for item in delete_versions:
result = bucket.delete_object_versions(item)

try:
bucket.delete_bucket()
except:
self.assertFalse(True, "should not get a exception")

def test_bucket_tagging(self):

from oss2.models import Tagging, TaggingRule
Expand Down

0 comments on commit 36fc0ab

Please sign in to comment.