forked from TrueCloudLab/s3-tests
Compare commits
4 commits
Author | SHA1 | Date | |
---|---|---|---|
|
7504073866 | ||
|
6b4c00559d | ||
|
2ba0de0021 | ||
|
53e6f52d86 |
3 changed files with 39 additions and 2 deletions
|
@ -26,6 +26,9 @@ def get_prefix():
|
||||||
assert prefix is not None
|
assert prefix is not None
|
||||||
return prefix
|
return prefix
|
||||||
|
|
||||||
|
def is_slow_backend():
|
||||||
|
return slow_backend
|
||||||
|
|
||||||
def choose_bucket_prefix(template, max_len=30):
|
def choose_bucket_prefix(template, max_len=30):
|
||||||
"""
|
"""
|
||||||
Choose a prefix for our test buckets, so they're easy to identify.
|
Choose a prefix for our test buckets, so they're easy to identify.
|
||||||
|
@ -237,6 +240,7 @@ def setup():
|
||||||
|
|
||||||
global prefix
|
global prefix
|
||||||
global targets
|
global targets
|
||||||
|
global slow_backend
|
||||||
|
|
||||||
try:
|
try:
|
||||||
template = cfg.get('fixtures', 'bucket prefix')
|
template = cfg.get('fixtures', 'bucket prefix')
|
||||||
|
@ -244,6 +248,11 @@ def setup():
|
||||||
template = 'test-{random}-'
|
template = 'test-{random}-'
|
||||||
prefix = choose_bucket_prefix(template=template)
|
prefix = choose_bucket_prefix(template=template)
|
||||||
|
|
||||||
|
try:
|
||||||
|
slow_backend = cfg.getboolean('fixtures', 'slow backend')
|
||||||
|
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
|
||||||
|
slow_backend = False
|
||||||
|
|
||||||
# pull the default_region out, if it exists
|
# pull the default_region out, if it exists
|
||||||
try:
|
try:
|
||||||
default_region = cfg.get('fixtures', 'default_region')
|
default_region = cfg.get('fixtures', 'default_region')
|
||||||
|
|
|
@ -278,6 +278,7 @@ def test_object_create_bad_expect_unreadable():
|
||||||
@attr(operation='create w/empty content length')
|
@attr(operation='create w/empty content length')
|
||||||
@attr(assertion='fails 400')
|
@attr(assertion='fails 400')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
|
@attr('fails_on_dho')
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
def test_object_create_bad_contentlength_empty():
|
def test_object_create_bad_contentlength_empty():
|
||||||
key = _setup_bad_object({'Content-Length': ''})
|
key = _setup_bad_object({'Content-Length': ''})
|
||||||
|
@ -293,6 +294,7 @@ def test_object_create_bad_contentlength_empty():
|
||||||
@attr(operation='create w/negative content length')
|
@attr(operation='create w/negative content length')
|
||||||
@attr(assertion='fails 400')
|
@attr(assertion='fails 400')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_create_bad_contentlength_negative():
|
def test_object_create_bad_contentlength_negative():
|
||||||
key = _setup_bad_object({'Content-Length': -1})
|
key = _setup_bad_object({'Content-Length': -1})
|
||||||
|
|
||||||
|
@ -319,6 +321,7 @@ def test_object_create_bad_contentlength_none():
|
||||||
@attr(operation='create w/non-graphic content length')
|
@attr(operation='create w/non-graphic content length')
|
||||||
@attr(assertion='fails 400')
|
@attr(assertion='fails 400')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_create_bad_contentlength_unreadable():
|
def test_object_create_bad_contentlength_unreadable():
|
||||||
key = _setup_bad_object({'Content-Length': '\x07'})
|
key = _setup_bad_object({'Content-Length': '\x07'})
|
||||||
|
|
||||||
|
@ -334,6 +337,7 @@ def test_object_create_bad_contentlength_unreadable():
|
||||||
@attr(assertion='fails 400')
|
@attr(assertion='fails 400')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_create_bad_contentlength_mismatch_above():
|
def test_object_create_bad_contentlength_mismatch_above():
|
||||||
content = 'bar'
|
content = 'bar'
|
||||||
length = len(content) + 1
|
length = len(content) + 1
|
||||||
|
@ -399,6 +403,7 @@ def test_object_create_bad_contenttype_none():
|
||||||
@attr(assertion='fails 403')
|
@attr(assertion='fails 403')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_create_bad_contenttype_unreadable():
|
def test_object_create_bad_contenttype_unreadable():
|
||||||
key = _setup_bad_object({'Content-Type': '\x08'})
|
key = _setup_bad_object({'Content-Type': '\x08'})
|
||||||
|
|
||||||
|
@ -459,6 +464,7 @@ def test_object_create_bad_authorization_invalid():
|
||||||
@attr(assertion='fails 403')
|
@attr(assertion='fails 403')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_create_bad_authorization_unreadable():
|
def test_object_create_bad_authorization_unreadable():
|
||||||
key = _setup_bad_object({'Authorization': '\x07'})
|
key = _setup_bad_object({'Authorization': '\x07'})
|
||||||
|
|
||||||
|
@ -714,6 +720,7 @@ def _create_new_connection():
|
||||||
@attr(operation='create w/empty content length')
|
@attr(operation='create w/empty content length')
|
||||||
@attr(assertion='fails 400')
|
@attr(assertion='fails 400')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
|
@attr('fails_on_dho')
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
def test_bucket_create_bad_contentlength_empty():
|
def test_bucket_create_bad_contentlength_empty():
|
||||||
conn = _create_new_connection()
|
conn = _create_new_connection()
|
||||||
|
@ -730,6 +737,7 @@ def test_bucket_create_bad_contentlength_empty():
|
||||||
@attr(operation='create w/negative content length')
|
@attr(operation='create w/negative content length')
|
||||||
@attr(assertion='fails 400')
|
@attr(assertion='fails 400')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_bucket_create_bad_contentlength_negative():
|
def test_bucket_create_bad_contentlength_negative():
|
||||||
_add_custom_headers({'Content-Length': -1})
|
_add_custom_headers({'Content-Length': -1})
|
||||||
e = assert_raises(boto.exception.S3ResponseError, get_new_bucket)
|
e = assert_raises(boto.exception.S3ResponseError, get_new_bucket)
|
||||||
|
@ -752,6 +760,7 @@ def test_bucket_create_bad_contentlength_none():
|
||||||
@attr(operation='create w/non-graphic content length')
|
@attr(operation='create w/non-graphic content length')
|
||||||
@attr(assertion='fails 400')
|
@attr(assertion='fails 400')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_bucket_create_bad_contentlength_unreadable():
|
def test_bucket_create_bad_contentlength_unreadable():
|
||||||
_add_custom_headers({'Content-Length': '\x07'})
|
_add_custom_headers({'Content-Length': '\x07'})
|
||||||
e = assert_raises(boto.exception.S3ResponseError, get_new_bucket)
|
e = assert_raises(boto.exception.S3ResponseError, get_new_bucket)
|
||||||
|
@ -812,6 +821,7 @@ def test_bucket_create_bad_authorization_invalid():
|
||||||
@attr(assertion='fails 403')
|
@attr(assertion='fails 403')
|
||||||
@nose.with_setup(teardown=_clear_custom_headers)
|
@nose.with_setup(teardown=_clear_custom_headers)
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_bucket_create_bad_authorization_unreadable():
|
def test_bucket_create_bad_authorization_unreadable():
|
||||||
_add_custom_headers({'Authorization': '\x07'})
|
_add_custom_headers({'Authorization': '\x07'})
|
||||||
e = assert_raises(boto.exception.S3ResponseError, get_new_bucket)
|
e = assert_raises(boto.exception.S3ResponseError, get_new_bucket)
|
||||||
|
|
|
@ -47,6 +47,7 @@ from . import (
|
||||||
targets,
|
targets,
|
||||||
config,
|
config,
|
||||||
get_prefix,
|
get_prefix,
|
||||||
|
is_slow_backend,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -559,6 +560,7 @@ def test_bucket_list_maxkeys_invalid():
|
||||||
|
|
||||||
|
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
|
@attr('fails_on_dho')
|
||||||
@attr(resource='bucket')
|
@attr(resource='bucket')
|
||||||
@attr(method='get')
|
@attr(method='get')
|
||||||
@attr(operation='list all keys')
|
@attr(operation='list all keys')
|
||||||
|
@ -2182,6 +2184,7 @@ def _head_bucket(bucket, authenticated=True):
|
||||||
@attr(method='head')
|
@attr(method='head')
|
||||||
@attr(operation='head bucket')
|
@attr(operation='head bucket')
|
||||||
@attr(assertion='succeeds')
|
@attr(assertion='succeeds')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_bucket_head():
|
def test_bucket_head():
|
||||||
bucket = _setup_bucket_request('private')
|
bucket = _setup_bucket_request('private')
|
||||||
|
|
||||||
|
@ -2192,6 +2195,7 @@ def test_bucket_head():
|
||||||
@attr(method='head')
|
@attr(method='head')
|
||||||
@attr(operation='read bucket extended information')
|
@attr(operation='read bucket extended information')
|
||||||
@attr(assertion='extended information is getting updated')
|
@attr(assertion='extended information is getting updated')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_bucket_head_extended():
|
def test_bucket_head_extended():
|
||||||
bucket = _setup_bucket_request('private')
|
bucket = _setup_bucket_request('private')
|
||||||
|
|
||||||
|
@ -2249,6 +2253,7 @@ def test_object_raw_authenticated():
|
||||||
@attr(method='get')
|
@attr(method='get')
|
||||||
@attr(operation='authenticated on private bucket/private object with modified response headers')
|
@attr(operation='authenticated on private bucket/private object with modified response headers')
|
||||||
@attr(assertion='succeeds')
|
@attr(assertion='succeeds')
|
||||||
|
@attr('fails_on_dho')
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
def test_object_raw_response_headers():
|
def test_object_raw_response_headers():
|
||||||
(bucket, key) = _setup_request('private', 'private')
|
(bucket, key) = _setup_request('private', 'private')
|
||||||
|
@ -3581,6 +3586,7 @@ def test_bucket_header_acl_grants():
|
||||||
@attr(method='ACLs')
|
@attr(method='ACLs')
|
||||||
@attr(operation='add second FULL_CONTROL user')
|
@attr(operation='add second FULL_CONTROL user')
|
||||||
@attr(assertion='works for S3, fails for DHO')
|
@attr(assertion='works for S3, fails for DHO')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_bucket_acl_grant_email():
|
def test_bucket_acl_grant_email():
|
||||||
bucket = get_new_bucket()
|
bucket = get_new_bucket()
|
||||||
# add alt user
|
# add alt user
|
||||||
|
@ -3652,6 +3658,7 @@ def test_bucket_acl_revoke_all():
|
||||||
@attr(operation='set/enable/disable logging target')
|
@attr(operation='set/enable/disable logging target')
|
||||||
@attr(assertion='operations succeed')
|
@attr(assertion='operations succeed')
|
||||||
@attr('fails_on_rgw')
|
@attr('fails_on_rgw')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_logging_toggle():
|
def test_logging_toggle():
|
||||||
bucket = get_new_bucket()
|
bucket = get_new_bucket()
|
||||||
log_bucket = get_new_bucket(targets.main.default, bucket.name + '-log')
|
log_bucket = get_new_bucket(targets.main.default, bucket.name + '-log')
|
||||||
|
@ -3977,6 +3984,7 @@ def test_bucket_recreate_not_overriding():
|
||||||
@attr(method='put')
|
@attr(method='put')
|
||||||
@attr(operation='create and list objects with special names')
|
@attr(operation='create and list objects with special names')
|
||||||
@attr(assertion='special names work')
|
@attr(assertion='special names work')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_bucket_create_special_key_names():
|
def test_bucket_create_special_key_names():
|
||||||
key_names = [' ', '%', '_', '_ ', '_ _', '__']
|
key_names = [' ', '%', '_', '_ ', '_ _', '__']
|
||||||
bucket = _create_keys(keys=key_names)
|
bucket = _create_keys(keys=key_names)
|
||||||
|
@ -4029,6 +4037,7 @@ def test_object_copy_same_bucket():
|
||||||
@attr(method='put')
|
@attr(method='put')
|
||||||
@attr(operation='copy object to itself')
|
@attr(operation='copy object to itself')
|
||||||
@attr(assertion='fails')
|
@attr(assertion='fails')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_copy_to_itself():
|
def test_object_copy_to_itself():
|
||||||
bucket = get_new_bucket()
|
bucket = get_new_bucket()
|
||||||
key = bucket.new_key('foo123bar')
|
key = bucket.new_key('foo123bar')
|
||||||
|
@ -4042,6 +4051,7 @@ def test_object_copy_to_itself():
|
||||||
@attr(method='put')
|
@attr(method='put')
|
||||||
@attr(operation='modify object metadata by copying')
|
@attr(operation='modify object metadata by copying')
|
||||||
@attr(assertion='fails')
|
@attr(assertion='fails')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_copy_to_itself_with_metadata():
|
def test_object_copy_to_itself_with_metadata():
|
||||||
bucket = get_new_bucket()
|
bucket = get_new_bucket()
|
||||||
key = bucket.new_key('foo123bar')
|
key = bucket.new_key('foo123bar')
|
||||||
|
@ -4087,6 +4097,7 @@ def test_object_copy_not_owned_bucket():
|
||||||
@attr(method='put')
|
@attr(method='put')
|
||||||
@attr(operation='copy object and change acl')
|
@attr(operation='copy object and change acl')
|
||||||
@attr(assertion='works')
|
@attr(assertion='works')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_object_copy_canned_acl():
|
def test_object_copy_canned_acl():
|
||||||
bucket = get_new_bucket()
|
bucket = get_new_bucket()
|
||||||
key = bucket.new_key('foo123bar')
|
key = bucket.new_key('foo123bar')
|
||||||
|
@ -4401,6 +4412,7 @@ def _cors_request_and_check(func, url, headers, expect_status, expect_allow_orig
|
||||||
@attr(method='get')
|
@attr(method='get')
|
||||||
@attr(operation='check cors response when origin header set')
|
@attr(operation='check cors response when origin header set')
|
||||||
@attr(assertion='returning cors header')
|
@attr(assertion='returning cors header')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_cors_origin_response():
|
def test_cors_origin_response():
|
||||||
cfg = CORSConfiguration()
|
cfg = CORSConfiguration()
|
||||||
bucket = get_new_bucket()
|
bucket = get_new_bucket()
|
||||||
|
@ -4711,6 +4723,7 @@ def test_atomic_dual_write_8mb():
|
||||||
@attr(operation='write file in deleted bucket')
|
@attr(operation='write file in deleted bucket')
|
||||||
@attr(assertion='fail 404')
|
@attr(assertion='fail 404')
|
||||||
@attr('fails_on_aws')
|
@attr('fails_on_aws')
|
||||||
|
@attr('fails_on_dho')
|
||||||
def test_atomic_write_bucket_gone():
|
def test_atomic_write_bucket_gone():
|
||||||
bucket = get_new_bucket()
|
bucket = get_new_bucket()
|
||||||
|
|
||||||
|
@ -4806,6 +4819,7 @@ def test_region_bucket_create_master_access_remove_secondary():
|
||||||
e = assert_raises(boto.exception.S3ResponseError, master_conn.get_bucket, bucket.name)
|
e = assert_raises(boto.exception.S3ResponseError, master_conn.get_bucket, bucket.name)
|
||||||
eq(e.status, 404)
|
eq(e.status, 404)
|
||||||
|
|
||||||
|
|
||||||
@attr(resource='object')
|
@attr(resource='object')
|
||||||
@attr(method='copy')
|
@attr(method='copy')
|
||||||
@attr(operation='copy object between regions, verify')
|
@attr(operation='copy object between regions, verify')
|
||||||
|
@ -4821,8 +4835,12 @@ def test_region_copy_object():
|
||||||
print 'created new dest bucket ', dest_bucket.name
|
print 'created new dest bucket ', dest_bucket.name
|
||||||
region_sync_meta(targets.main, dest)
|
region_sync_meta(targets.main, dest)
|
||||||
|
|
||||||
for file_size in (1024, 1024 * 1024, 10 * 1024 * 1024,
|
if is_slow_backend():
|
||||||
100 * 1024 * 1024):
|
sizes = (1024, 10 * 1024 * 1024)
|
||||||
|
else:
|
||||||
|
sizes = (1024, 10 * 1024 * 1024, 100 * 1024 * 1024)
|
||||||
|
|
||||||
|
for file_size in sizes:
|
||||||
for (k2, r) in targets.main.iteritems():
|
for (k2, r) in targets.main.iteritems():
|
||||||
if r == dest_conn:
|
if r == dest_conn:
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in a new issue