forked from TrueCloudLab/s3-tests
add bucket list data vs object data comparison tests
* test_bucket_list_return_data * test_bucket_list_object_time
This commit is contained in:
parent
fd68aa2b5b
commit
ea3f73ef90
1 changed files with 77 additions and 0 deletions
|
@ -3,6 +3,9 @@ import boto.exception
|
||||||
import boto.s3.connection
|
import boto.s3.connection
|
||||||
import boto.s3.acl
|
import boto.s3.acl
|
||||||
import bunch
|
import bunch
|
||||||
|
import datetime
|
||||||
|
import email.utils
|
||||||
|
import isodate
|
||||||
import nose
|
import nose
|
||||||
import operator
|
import operator
|
||||||
import random
|
import random
|
||||||
|
@ -460,6 +463,80 @@ def test_bucket_list_marker_before_list():
|
||||||
eq(names, key_names)
|
eq(names, key_names)
|
||||||
|
|
||||||
|
|
||||||
|
def _compare_dates(iso_datetime, http_datetime):
|
||||||
|
date = isodate.parse_datetime(iso_datetime)
|
||||||
|
|
||||||
|
pd = email.utils.parsedate_tz(http_datetime)
|
||||||
|
tz = isodate.tzinfo.FixedOffset(0, pd[-1]/60, 'who cares')
|
||||||
|
date2 = datetime.datetime(*pd[:6], tzinfo=tz)
|
||||||
|
|
||||||
|
# our tolerance
|
||||||
|
minutes = 5
|
||||||
|
acceptable_delta = datetime.timedelta(minutes=minutes)
|
||||||
|
assert abs(date - date2) < acceptable_delta, \
|
||||||
|
("Times are not within {minutes} minutes of each other: "
|
||||||
|
+ "{date1!r}, {date2!r}"
|
||||||
|
).format(
|
||||||
|
minutes=minutes,
|
||||||
|
date1=iso_datetime,
|
||||||
|
date2=http_datetime,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@attr('fails_on_dho')
|
||||||
|
@attr('fails_on_rgw')
|
||||||
|
def test_bucket_list_return_data():
|
||||||
|
key_names = ['bar', 'baz', 'foo']
|
||||||
|
bucket = _create_keys(keys=key_names)
|
||||||
|
|
||||||
|
# grab the data from each key individually
|
||||||
|
data = {}
|
||||||
|
for key_name in key_names:
|
||||||
|
key = bucket.get_key(key_name)
|
||||||
|
acl = key.get_acl()
|
||||||
|
data.update({
|
||||||
|
key_name: {
|
||||||
|
'user_id': acl.owner.id,
|
||||||
|
'display_name': acl.owner.display_name,
|
||||||
|
'etag': key.etag,
|
||||||
|
'last_modified': key.last_modified,
|
||||||
|
'size': key.size,
|
||||||
|
'md5': key.md5,
|
||||||
|
'content_encoding': key.content_encoding,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
# now grab the data from each key through list
|
||||||
|
li = bucket.list()
|
||||||
|
for key in li:
|
||||||
|
key_data = data[key.name]
|
||||||
|
eq(key.content_encoding, key_data['content_encoding'])
|
||||||
|
eq(key.owner.display_name, key_data['display_name'])
|
||||||
|
eq(key.etag, key_data['etag'])
|
||||||
|
eq(key.md5, key_data['md5'])
|
||||||
|
eq(key.size, key_data['size'])
|
||||||
|
eq(key.owner.id, key_data['user_id'])
|
||||||
|
_compare_dates(key.last_modified, key_data['last_modified'])
|
||||||
|
|
||||||
|
|
||||||
|
@attr('fails_on_dho')
|
||||||
|
@attr('fails_on_rgw')
|
||||||
|
def test_bucket_list_object_time():
|
||||||
|
bucket = _create_keys(keys=['foo'])
|
||||||
|
|
||||||
|
# Wed, 10 Aug 2011 21:58:25 GMT'
|
||||||
|
key = bucket.get_key('foo')
|
||||||
|
http_datetime = key.last_modified
|
||||||
|
|
||||||
|
# ISO-6801 formatted datetime
|
||||||
|
# there should be only one element, but list doesn't have a __getitem__
|
||||||
|
# only an __iter__
|
||||||
|
for key in bucket.list():
|
||||||
|
iso_datetime = key.last_modified
|
||||||
|
|
||||||
|
_compare_dates(iso_datetime, http_datetime)
|
||||||
|
|
||||||
|
|
||||||
def test_bucket_notexist():
|
def test_bucket_notexist():
|
||||||
name = '{prefix}foo'.format(prefix=get_prefix())
|
name = '{prefix}foo'.format(prefix=get_prefix())
|
||||||
print 'Trying bucket {name!r}'.format(name=name)
|
print 'Trying bucket {name!r}'.format(name=name)
|
||||||
|
|
Loading…
Reference in a new issue