fix some format issure
fir some format according to pep8 Change-Id: Iec8f67ea2166c955732bd598661140d4cfce6d40
This commit is contained in:
parent
2b23eb3e41
commit
4d6ae96d92
@ -38,6 +38,7 @@ def chunks(s, length=3):
|
|||||||
yield s[i:j]
|
yield s[i:j]
|
||||||
i, j = j, j + length
|
i, j = j, j + length
|
||||||
|
|
||||||
|
|
||||||
def timeout(seconds, method, *args, **kwargs):
|
def timeout(seconds, method, *args, **kwargs):
|
||||||
class TimeoutThread(threading.Thread):
|
class TimeoutThread(threading.Thread):
|
||||||
def __init__(self, method, *args, **kwargs):
|
def __init__(self, method, *args, **kwargs):
|
||||||
@ -66,6 +67,7 @@ def timeout(seconds, method, *args, **kwargs):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
class Utils:
|
class Utils:
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_ascii_name(cls, length=None):
|
def create_ascii_name(cls, length=None):
|
||||||
@ -83,11 +85,12 @@ class Utils:
|
|||||||
u'\u1802\u0901\uF111\uD20F\uB30D\u940B\u850A\u5607'\
|
u'\u1802\u0901\uF111\uD20F\uB30D\u940B\u850A\u5607'\
|
||||||
u'\u3705\u1803\u0902\uF112\uD210\uB30E\u940C\u850B'\
|
u'\u3705\u1803\u0902\uF112\uD210\uB30E\u940C\u850B'\
|
||||||
u'\u5608\u3706\u1804\u0903\u03A9\u2603'
|
u'\u5608\u3706\u1804\u0903\u03A9\u2603'
|
||||||
return ''.join([random.choice(utf8_chars) for x in \
|
return ''.join([random.choice(utf8_chars)
|
||||||
xrange(length)]).encode('utf-8')
|
for x in xrange(length)]).encode('utf-8')
|
||||||
|
|
||||||
create_name = create_ascii_name
|
create_name = create_ascii_name
|
||||||
|
|
||||||
|
|
||||||
class Base(unittest.TestCase):
|
class Base(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
cls = type(self)
|
cls = type(self)
|
||||||
@ -107,6 +110,7 @@ class Base(unittest.TestCase):
|
|||||||
'Status returned: %d Expected: %s' %
|
'Status returned: %d Expected: %s' %
|
||||||
(self.env.conn.response.status, status_or_statuses))
|
(self.env.conn.response.status, status_or_statuses))
|
||||||
|
|
||||||
|
|
||||||
class Base2(object):
|
class Base2(object):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
Utils.create_name = Utils.create_utf8_name
|
Utils.create_name = Utils.create_utf8_name
|
||||||
@ -115,6 +119,7 @@ class Base2(object):
|
|||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
Utils.create_name = Utils.create_ascii_name
|
Utils.create_name = Utils.create_ascii_name
|
||||||
|
|
||||||
|
|
||||||
class TestAccountEnv:
|
class TestAccountEnv:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
@ -132,13 +137,16 @@ class TestAccountEnv:
|
|||||||
|
|
||||||
cls.containers.append(cont)
|
cls.containers.append(cont)
|
||||||
|
|
||||||
|
|
||||||
class TestAccountDev(Base):
|
class TestAccountDev(Base):
|
||||||
env = TestAccountEnv
|
env = TestAccountEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestAccountDevUTF8(Base2, TestAccountDev):
|
class TestAccountDevUTF8(Base2, TestAccountDev):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestAccount(Base):
|
class TestAccount(Base):
|
||||||
env = TestAccountEnv
|
env = TestAccountEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
@ -210,9 +218,7 @@ class TestAccount(Base):
|
|||||||
container_info[container.name] = info
|
container_info[container.name] = info
|
||||||
|
|
||||||
for format in ['json', 'xml']:
|
for format in ['json', 'xml']:
|
||||||
for a in self.env.account.containers(
|
for a in self.env.account.containers(parms={'format': format}):
|
||||||
parms={'format':format}):
|
|
||||||
|
|
||||||
self.assert_(a['count'] >= 0)
|
self.assert_(a['count'] >= 0)
|
||||||
self.assert_(a['bytes'] >= 0)
|
self.assert_(a['bytes'] >= 0)
|
||||||
|
|
||||||
@ -270,7 +276,7 @@ class TestAccount(Base):
|
|||||||
|
|
||||||
def testMarkerLimitContainerList(self):
|
def testMarkerLimitContainerList(self):
|
||||||
for format in [None, 'json', 'xml']:
|
for format in [None, 'json', 'xml']:
|
||||||
for marker in ['0', 'A', 'I', 'R', 'Z', 'a', 'i', 'r', 'z', \
|
for marker in ['0', 'A', 'I', 'R', 'Z', 'a', 'i', 'r', 'z',
|
||||||
'abc123', 'mnop', 'xyz']:
|
'abc123', 'mnop', 'xyz']:
|
||||||
|
|
||||||
limit = random.randint(2, 9)
|
limit = random.randint(2, 9)
|
||||||
@ -291,9 +297,11 @@ class TestAccount(Base):
|
|||||||
self.assertEquals(sorted(containers, cmp=locale.strcoll),
|
self.assertEquals(sorted(containers, cmp=locale.strcoll),
|
||||||
containers)
|
containers)
|
||||||
|
|
||||||
|
|
||||||
class TestAccountUTF8(Base2, TestAccount):
|
class TestAccountUTF8(Base2, TestAccount):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestAccountNoContainersEnv:
|
class TestAccountNoContainersEnv:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
@ -303,6 +311,7 @@ class TestAccountNoContainersEnv:
|
|||||||
config['username']))
|
config['username']))
|
||||||
cls.account.delete_containers()
|
cls.account.delete_containers()
|
||||||
|
|
||||||
|
|
||||||
class TestAccountNoContainers(Base):
|
class TestAccountNoContainers(Base):
|
||||||
env = TestAccountNoContainersEnv
|
env = TestAccountNoContainersEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
@ -317,9 +326,11 @@ class TestAccountNoContainers(Base):
|
|||||||
else:
|
else:
|
||||||
self.assert_status(200)
|
self.assert_status(200)
|
||||||
|
|
||||||
|
|
||||||
class TestAccountNoContainersUTF8(Base2, TestAccountNoContainers):
|
class TestAccountNoContainersUTF8(Base2, TestAccountNoContainers):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestContainerEnv:
|
class TestContainerEnv:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
@ -341,13 +352,16 @@ class TestContainerEnv:
|
|||||||
file.write_random(cls.file_size)
|
file.write_random(cls.file_size)
|
||||||
cls.files.append(file.name)
|
cls.files.append(file.name)
|
||||||
|
|
||||||
|
|
||||||
class TestContainerDev(Base):
|
class TestContainerDev(Base):
|
||||||
env = TestContainerEnv
|
env = TestContainerEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestContainerDevUTF8(Base2, TestContainerDev):
|
class TestContainerDevUTF8(Base2, TestContainerDev):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestContainer(Base):
|
class TestContainer(Base):
|
||||||
env = TestContainerEnv
|
env = TestContainerEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
@ -357,7 +371,6 @@ class TestContainer(Base):
|
|||||||
|
|
||||||
for l in (limit - 100, limit - 10, limit - 1, limit,
|
for l in (limit - 100, limit - 10, limit - 1, limit,
|
||||||
limit + 1, limit + 10, limit + 100):
|
limit + 1, limit + 10, limit + 100):
|
||||||
|
|
||||||
cont = self.env.account.container('a' * l)
|
cont = self.env.account.container('a' * l)
|
||||||
if l <= limit:
|
if l <= limit:
|
||||||
self.assert_(cont.create())
|
self.assert_(cont.create())
|
||||||
@ -392,7 +405,8 @@ class TestContainer(Base):
|
|||||||
for i in xrange(len(files)):
|
for i in xrange(len(files)):
|
||||||
f = files[i]
|
f = files[i]
|
||||||
for j in xrange(1, len(files) - i):
|
for j in xrange(1, len(files) - i):
|
||||||
self.assert_(cont.files(parms={'limit':j, 'marker':f}) == files[i+1:i+j+1])
|
self.assert_(cont.files(parms={'limit': j, 'marker': f}) ==
|
||||||
|
files[i + 1: i + j + 1])
|
||||||
self.assert_(cont.files(parms={'marker': f}) == files[i + 1:])
|
self.assert_(cont.files(parms={'marker': f}) == files[i + 1:])
|
||||||
self.assert_(cont.files(parms={'marker': f, 'prefix': f}) == [])
|
self.assert_(cont.files(parms={'marker': f, 'prefix': f}) == [])
|
||||||
self.assert_(cont.files(parms={'prefix': f}) == [f])
|
self.assert_(cont.files(parms={'prefix': f}) == [f])
|
||||||
@ -541,12 +555,12 @@ class TestContainer(Base):
|
|||||||
|
|
||||||
def testMarkerLimitFileList(self):
|
def testMarkerLimitFileList(self):
|
||||||
for format in [None, 'json', 'xml']:
|
for format in [None, 'json', 'xml']:
|
||||||
for marker in ['0', 'A', 'I', 'R', 'Z', 'a', 'i', 'r', 'z', \
|
for marker in ['0', 'A', 'I', 'R', 'Z', 'a', 'i', 'r', 'z',
|
||||||
'abc123', 'mnop', 'xyz']:
|
'abc123', 'mnop', 'xyz']:
|
||||||
|
|
||||||
limit = random.randint(2, self.env.file_count - 1)
|
limit = random.randint(2, self.env.file_count - 1)
|
||||||
files = self.env.container.files(parms={'format':format, \
|
files = self.env.container.files(parms={'format': format,
|
||||||
'marker':marker, 'limit':limit})
|
'marker': marker,
|
||||||
|
'limit': limit})
|
||||||
|
|
||||||
if not files:
|
if not files:
|
||||||
continue
|
continue
|
||||||
@ -587,8 +601,8 @@ class TestContainer(Base):
|
|||||||
|
|
||||||
def testTooLongName(self):
|
def testTooLongName(self):
|
||||||
cont = self.env.account.container('x' * 257)
|
cont = self.env.account.container('x' * 257)
|
||||||
self.assert_(not cont.create(), 'created container with name %s' % \
|
self.assert_(not cont.create(),
|
||||||
(cont.name))
|
'created container with name %s' % (cont.name))
|
||||||
self.assert_status(400)
|
self.assert_status(400)
|
||||||
|
|
||||||
def testContainerExistenceCachingProblem(self):
|
def testContainerExistenceCachingProblem(self):
|
||||||
@ -603,9 +617,11 @@ class TestContainer(Base):
|
|||||||
file = cont.file(Utils.create_name())
|
file = cont.file(Utils.create_name())
|
||||||
file.write_random()
|
file.write_random()
|
||||||
|
|
||||||
|
|
||||||
class TestContainerUTF8(Base2, TestContainer):
|
class TestContainerUTF8(Base2, TestContainer):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestContainerPathsEnv:
|
class TestContainerPathsEnv:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
@ -668,9 +684,10 @@ class TestContainerPathsEnv:
|
|||||||
if f.endswith('/'):
|
if f.endswith('/'):
|
||||||
file.write(hdrs={'content-type': 'application/directory'})
|
file.write(hdrs={'content-type': 'application/directory'})
|
||||||
else:
|
else:
|
||||||
file.write_random(cls.file_size, hdrs={'content-type': \
|
file.write_random(cls.file_size, hdrs={'content-type':
|
||||||
'application/directory'})
|
'application/directory'})
|
||||||
|
|
||||||
|
|
||||||
class TestContainerPaths(Base):
|
class TestContainerPaths(Base):
|
||||||
env = TestContainerPathsEnv
|
env = TestContainerPathsEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
@ -678,6 +695,7 @@ class TestContainerPaths(Base):
|
|||||||
def testTraverseContainer(self):
|
def testTraverseContainer(self):
|
||||||
found_files = []
|
found_files = []
|
||||||
found_dirs = []
|
found_dirs = []
|
||||||
|
|
||||||
def recurse_path(path, count=0):
|
def recurse_path(path, count=0):
|
||||||
if count > 10:
|
if count > 10:
|
||||||
raise ValueError('too deep recursion')
|
raise ValueError('too deep recursion')
|
||||||
@ -689,6 +707,7 @@ class TestContainerPaths(Base):
|
|||||||
found_dirs.append(file)
|
found_dirs.append(file)
|
||||||
else:
|
else:
|
||||||
found_files.append(file)
|
found_files.append(file)
|
||||||
|
|
||||||
recurse_path('')
|
recurse_path('')
|
||||||
for file in self.env.files:
|
for file in self.env.files:
|
||||||
if file.startswith('/'):
|
if file.startswith('/'):
|
||||||
@ -726,7 +745,7 @@ class TestContainerPaths(Base):
|
|||||||
for format in ('json', 'xml'):
|
for format in ('json', 'xml'):
|
||||||
for file in self.env.container.files(parms={'format': format}):
|
for file in self.env.container.files(parms={'format': format}):
|
||||||
self.assert_(int(file['bytes']) >= 0)
|
self.assert_(int(file['bytes']) >= 0)
|
||||||
self.assert_(file.has_key('last_modified'))
|
self.assert_('last_modified' in file)
|
||||||
if file['name'].endswith('/'):
|
if file['name'].endswith('/'):
|
||||||
self.assertEquals(file['content_type'],
|
self.assertEquals(file['content_type'],
|
||||||
'application/directory')
|
'application/directory')
|
||||||
@ -767,6 +786,7 @@ class TestContainerPaths(Base):
|
|||||||
assert_listing('dir1/subdir with spaces/',
|
assert_listing('dir1/subdir with spaces/',
|
||||||
['dir1/subdir with spaces/file B'])
|
['dir1/subdir with spaces/file B'])
|
||||||
|
|
||||||
|
|
||||||
class TestFileEnv:
|
class TestFileEnv:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
@ -782,13 +802,16 @@ class TestFileEnv:
|
|||||||
|
|
||||||
cls.file_size = 128
|
cls.file_size = 128
|
||||||
|
|
||||||
|
|
||||||
class TestFileDev(Base):
|
class TestFileDev(Base):
|
||||||
env = TestFileEnv
|
env = TestFileEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestFileDevUTF8(Base2, TestFileDev):
|
class TestFileDevUTF8(Base2, TestFileDev):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestFile(Base):
|
class TestFile(Base):
|
||||||
env = TestFileEnv
|
env = TestFileEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
@ -921,14 +944,16 @@ class TestFile(Base):
|
|||||||
# invalid source container
|
# invalid source container
|
||||||
file = self.env.container.file(Utils.create_name())
|
file = self.env.container.file(Utils.create_name())
|
||||||
self.assertRaises(ResponseError, file.write,
|
self.assertRaises(ResponseError, file.write,
|
||||||
hdrs={'X-Copy-From': '%s%s/%s' % (prefix,
|
hdrs={'X-Copy-From': '%s%s/%s' %
|
||||||
|
(prefix,
|
||||||
Utils.create_name(), source_filename)})
|
Utils.create_name(), source_filename)})
|
||||||
self.assert_status(404)
|
self.assert_status(404)
|
||||||
|
|
||||||
# invalid source object
|
# invalid source object
|
||||||
file = self.env.container.file(Utils.create_name())
|
file = self.env.container.file(Utils.create_name())
|
||||||
self.assertRaises(ResponseError, file.write,
|
self.assertRaises(ResponseError, file.write,
|
||||||
hdrs={'X-Copy-From': '%s%s/%s' % (prefix,
|
hdrs={'X-Copy-From': '%s%s/%s' %
|
||||||
|
(prefix,
|
||||||
self.env.container.name, Utils.create_name())})
|
self.env.container.name, Utils.create_name())})
|
||||||
self.assert_status(404)
|
self.assert_status(404)
|
||||||
|
|
||||||
@ -936,7 +961,8 @@ class TestFile(Base):
|
|||||||
dest_cont = self.env.account.container(Utils.create_name())
|
dest_cont = self.env.account.container(Utils.create_name())
|
||||||
file = dest_cont.file(Utils.create_name())
|
file = dest_cont.file(Utils.create_name())
|
||||||
self.assertRaises(ResponseError, file.write,
|
self.assertRaises(ResponseError, file.write,
|
||||||
hdrs={'X-Copy-From': '%s%s/%s' % (prefix,
|
hdrs={'X-Copy-From': '%s%s/%s' %
|
||||||
|
(prefix,
|
||||||
self.env.container.name, source_filename)})
|
self.env.container.name, source_filename)})
|
||||||
self.assert_status(404)
|
self.assert_status(404)
|
||||||
|
|
||||||
@ -976,9 +1002,8 @@ class TestFile(Base):
|
|||||||
|
|
||||||
file.metadata = {Utils.create_name(): Utils.create_name()}
|
file.metadata = {Utils.create_name(): Utils.create_name()}
|
||||||
|
|
||||||
for method in (file.info, file.read, file.sync_metadata, \
|
for method in (file.info, file.read, file.sync_metadata,
|
||||||
file.delete):
|
file.delete):
|
||||||
|
|
||||||
self.assertRaises(ResponseError, method)
|
self.assertRaises(ResponseError, method)
|
||||||
self.assert_status(404)
|
self.assert_status(404)
|
||||||
|
|
||||||
@ -993,7 +1018,6 @@ class TestFile(Base):
|
|||||||
|
|
||||||
for i in (number_limit - 10, number_limit - 1, number_limit,
|
for i in (number_limit - 10, number_limit - 1, number_limit,
|
||||||
number_limit + 1, number_limit + 10, number_limit + 100):
|
number_limit + 1, number_limit + 10, number_limit + 100):
|
||||||
|
|
||||||
size_limit = 4096
|
size_limit = 4096
|
||||||
|
|
||||||
j = size_limit / (i * 2)
|
j = size_limit / (i * 2)
|
||||||
@ -1099,8 +1123,8 @@ class TestFile(Base):
|
|||||||
limit = 5 * 2 ** 30 + 2
|
limit = 5 * 2 ** 30 + 2
|
||||||
tsecs = 3
|
tsecs = 3
|
||||||
|
|
||||||
for i in (limit-100, limit-10, limit-1, limit, limit+1, limit+10,
|
for i in (limit - 100, limit - 10, limit - 1, limit, limit + 1,
|
||||||
limit+100):
|
limit + 10, limit + 100):
|
||||||
|
|
||||||
file = self.env.container.file(Utils.create_name())
|
file = self.env.container.file(Utils.create_name())
|
||||||
|
|
||||||
@ -1135,25 +1159,28 @@ class TestFile(Base):
|
|||||||
|
|
||||||
# content length x
|
# content length x
|
||||||
self.assertRaises(ResponseError, file.write_random, file_length,
|
self.assertRaises(ResponseError, file.write_random, file_length,
|
||||||
hdrs={'Content-Length':'X'}, cfg={'no_content_length':True})
|
hdrs={'Content-Length': 'X'},
|
||||||
|
cfg={'no_content_length': True})
|
||||||
self.assert_status(400)
|
self.assert_status(400)
|
||||||
|
|
||||||
# bad request types
|
# bad request types
|
||||||
#for req in ('LICK', 'GETorHEAD_base', 'container_info', 'best_response'):
|
#for req in ('LICK', 'GETorHEAD_base', 'container_info',
|
||||||
|
# 'best_response'):
|
||||||
for req in ('LICK', 'GETorHEAD_base'):
|
for req in ('LICK', 'GETorHEAD_base'):
|
||||||
self.env.account.conn.make_request(req)
|
self.env.account.conn.make_request(req)
|
||||||
self.assert_status(405)
|
self.assert_status(405)
|
||||||
|
|
||||||
# bad range headers
|
# bad range headers
|
||||||
self.assert_(len(file.read(hdrs={'Range':'parsecs=8-12'})) == \
|
self.assert_(len(file.read(hdrs={'Range': 'parsecs=8-12'})) ==
|
||||||
file_length)
|
file_length)
|
||||||
self.assert_status(200)
|
self.assert_status(200)
|
||||||
|
|
||||||
def testMetadataLengthLimits(self):
|
def testMetadataLengthLimits(self):
|
||||||
key_limit, value_limit = 128, 256
|
key_limit, value_limit = 128, 256
|
||||||
lengths = [[key_limit, value_limit], [key_limit, value_limit+1], \
|
lengths = [[key_limit, value_limit], [key_limit, value_limit + 1],
|
||||||
[key_limit+1, value_limit], [key_limit, 0], \
|
[key_limit + 1, value_limit], [key_limit, 0],
|
||||||
[key_limit, value_limit*10], [key_limit*10, value_limit]]
|
[key_limit, value_limit * 10],
|
||||||
|
[key_limit * 10, value_limit]]
|
||||||
|
|
||||||
for l in lengths:
|
for l in lengths:
|
||||||
metadata = {'a' * l[0]: 'b' * l[1]}
|
metadata = {'a' * l[0]: 'b' * l[1]}
|
||||||
@ -1205,7 +1232,7 @@ class TestFile(Base):
|
|||||||
self.assertEquals(info['content_length'], self.env.file_size)
|
self.assertEquals(info['content_length'], self.env.file_size)
|
||||||
self.assertEquals(info['etag'], md5)
|
self.assertEquals(info['etag'], md5)
|
||||||
self.assertEquals(info['content_type'], content_type)
|
self.assertEquals(info['content_type'], content_type)
|
||||||
self.assert_(info.has_key('last_modified'))
|
self.assert_('last_modified' in info)
|
||||||
|
|
||||||
def testDeleteOfFileThatDoesNotExist(self):
|
def testDeleteOfFileThatDoesNotExist(self):
|
||||||
# in container that exists
|
# in container that exists
|
||||||
@ -1309,7 +1336,7 @@ class TestFile(Base):
|
|||||||
|
|
||||||
files = []
|
files = []
|
||||||
for i in (0, 1, 10, 100, 1000, 10000):
|
for i in (0, 1, 10, 100, 1000, 10000):
|
||||||
files.append({'name': Utils.create_name(), \
|
files.append({'name': Utils.create_name(),
|
||||||
'content_type': Utils.create_name(), 'bytes': i})
|
'content_type': Utils.create_name(), 'bytes': i})
|
||||||
|
|
||||||
write_time = time.time()
|
write_time = time.time()
|
||||||
@ -1334,11 +1361,11 @@ class TestFile(Base):
|
|||||||
f['content_type'])
|
f['content_type'])
|
||||||
self.assertEquals(int(file['bytes']), f['bytes'])
|
self.assertEquals(int(file['bytes']), f['bytes'])
|
||||||
|
|
||||||
d = datetime.strptime(file['last_modified'].\
|
d = datetime.strptime(file['last_modified'].split('.')[0],
|
||||||
split('.')[0], "%Y-%m-%dT%H:%M:%S")
|
"%Y-%m-%dT%H:%M:%S")
|
||||||
lm = time.mktime(d.timetuple())
|
lm = time.mktime(d.timetuple())
|
||||||
|
|
||||||
if f.has_key('last_modified'):
|
if 'last_modified' in f:
|
||||||
self.assertEquals(f['last_modified'], lm)
|
self.assertEquals(f['last_modified'], lm)
|
||||||
else:
|
else:
|
||||||
f['last_modified'] = lm
|
f['last_modified'] = lm
|
||||||
@ -1346,7 +1373,7 @@ class TestFile(Base):
|
|||||||
f[format] = True
|
f[format] = True
|
||||||
found = True
|
found = True
|
||||||
|
|
||||||
self.assert_(found, 'Unexpected file %s found in ' \
|
self.assert_(found, 'Unexpected file %s found in '
|
||||||
'%s listing' % (file['name'], format))
|
'%s listing' % (file['name'], format))
|
||||||
|
|
||||||
headers = dict(self.env.conn.response.getheaders())
|
headers = dict(self.env.conn.response.getheaders())
|
||||||
@ -1359,12 +1386,12 @@ class TestFile(Base):
|
|||||||
|
|
||||||
lm_diff = max([f['last_modified'] for f in files]) -\
|
lm_diff = max([f['last_modified'] for f in files]) -\
|
||||||
min([f['last_modified'] for f in files])
|
min([f['last_modified'] for f in files])
|
||||||
self.assert_(lm_diff < write_time + 1, 'Diff in last ' + \
|
self.assert_(lm_diff < write_time + 1, 'Diff in last '
|
||||||
'modified times should be less than time to write files')
|
'modified times should be less than time to write files')
|
||||||
|
|
||||||
for f in files:
|
for f in files:
|
||||||
for format in ['json', 'xml']:
|
for format in ['json', 'xml']:
|
||||||
self.assert_(f[format], 'File %s not found in %s listing' \
|
self.assert_(f[format], 'File %s not found in %s listing'
|
||||||
% (f['name'], format))
|
% (f['name'], format))
|
||||||
|
|
||||||
def testStackedOverwrite(self):
|
def testStackedOverwrite(self):
|
||||||
@ -1416,9 +1443,11 @@ class TestFile(Base):
|
|||||||
info = file.info()
|
info = file.info()
|
||||||
self.assertEquals(etag, info['etag'])
|
self.assertEquals(etag, info['etag'])
|
||||||
|
|
||||||
|
|
||||||
class TestFileUTF8(Base2, TestFile):
|
class TestFileUTF8(Base2, TestFile):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
class TestFileComparisonEnv:
|
class TestFileComparisonEnv:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
@ -1444,6 +1473,7 @@ class TestFileComparisonEnv:
|
|||||||
cls.time_old = time.asctime(time.localtime(time.time() - 86400))
|
cls.time_old = time.asctime(time.localtime(time.time() - 86400))
|
||||||
cls.time_new = time.asctime(time.localtime(time.time() + 86400))
|
cls.time_new = time.asctime(time.localtime(time.time() + 86400))
|
||||||
|
|
||||||
|
|
||||||
class TestFileComparison(Base):
|
class TestFileComparison(Base):
|
||||||
env = TestFileComparisonEnv
|
env = TestFileComparisonEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
@ -1486,20 +1516,21 @@ class TestFileComparison(Base):
|
|||||||
|
|
||||||
def testIfMatchAndUnmodified(self):
|
def testIfMatchAndUnmodified(self):
|
||||||
for file in self.env.files:
|
for file in self.env.files:
|
||||||
hdrs = {'If-Match': file.md5, 'If-Unmodified-Since': \
|
hdrs = {'If-Match': file.md5,
|
||||||
self.env.time_new}
|
'If-Unmodified-Since': self.env.time_new}
|
||||||
self.assert_(file.read(hdrs=hdrs))
|
self.assert_(file.read(hdrs=hdrs))
|
||||||
|
|
||||||
hdrs = {'If-Match': 'bogus', 'If-Unmodified-Since': \
|
hdrs = {'If-Match': 'bogus',
|
||||||
self.env.time_new}
|
'If-Unmodified-Since': self.env.time_new}
|
||||||
self.assertRaises(ResponseError, file.read, hdrs=hdrs)
|
self.assertRaises(ResponseError, file.read, hdrs=hdrs)
|
||||||
self.assert_status(412)
|
self.assert_status(412)
|
||||||
|
|
||||||
hdrs = {'If-Match': file.md5, 'If-Unmodified-Since': \
|
hdrs = {'If-Match': file.md5,
|
||||||
self.env.time_old}
|
'If-Unmodified-Since': self.env.time_old}
|
||||||
self.assertRaises(ResponseError, file.read, hdrs=hdrs)
|
self.assertRaises(ResponseError, file.read, hdrs=hdrs)
|
||||||
self.assert_status(412)
|
self.assert_status(412)
|
||||||
|
|
||||||
|
|
||||||
class TestFileComparisonUTF8(Base2, TestFileComparison):
|
class TestFileComparisonUTF8(Base2, TestFileComparison):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user