Revision 95e0d8ee
b/pithos/tools/pithos-test | ||
---|---|---|
1374 | 1374 |
self.obj = self.upload_random_data(self.containers[0], o_names[0]) |
1375 | 1375 |
|
1376 | 1376 |
def test_move(self): |
1377 |
meta = self.client.retrieve_object_metadata(self.containers[0], |
|
1378 |
self.obj['name']) |
|
1379 |
self.assertTrue('x-object-uuid' in meta) |
|
1380 |
uuid = meta['x-object-uuid'] |
|
1381 |
|
|
1377 | 1382 |
#perform move |
1378 | 1383 |
meta = {'test':'testcopy'} |
1379 | 1384 |
src_path = '/'.join(('/', self.containers[0], self.obj['name'])) |
... | ... | |
1386 | 1391 |
|
1387 | 1392 |
#assert updated metadata |
1388 | 1393 |
meta = self.client.retrieve_object_metadata(self.containers[0], |
1389 |
'testcopy', |
|
1390 |
restricted=True) |
|
1391 |
self.assertTrue('test' in meta.keys()) |
|
1392 |
self.assertTrue(meta['test'], 'testcopy') |
|
1394 |
'testcopy') |
|
1395 |
self.assertTrue('x-object-meta-test' in meta.keys()) |
|
1396 |
self.assertTrue(meta['x-object-meta-test'], 'testcopy') |
|
1397 |
|
|
1398 |
#assert same uuid |
|
1399 |
self.assertTrue(meta['x-object-uuid'], uuid) |
|
1393 | 1400 |
|
1394 | 1401 |
#assert src object no more exists |
1395 | 1402 |
self.assert_object_not_exists(self.containers[0], self.obj['name']) |
... | ... | |
1405 | 1412 |
self.obj.append(self.upload_random_data(self.containers[0], o_names[i])) |
1406 | 1413 |
|
1407 | 1414 |
def test_update_meta(self): |
1408 |
#perform update metadata |
|
1409 |
more = {'foo':'foo', 'bar':'bar'} |
|
1410 |
status = self.client.update_object_metadata(self.containers[0], |
|
1411 |
self.obj[0]['name'], |
|
1412 |
**more)[0] |
|
1413 |
#assert request accepted |
|
1414 |
self.assertEqual(status, 202) |
|
1415 |
|
|
1416 |
#assert old metadata are still there |
|
1417 |
headers = self.client.retrieve_object_metadata(self.containers[0], |
|
1418 |
self.obj[0]['name'], |
|
1419 |
restricted=True) |
|
1420 |
#assert new metadata have been updated |
|
1421 |
for k,v in more.items(): |
|
1422 |
self.assertTrue(k in headers.keys()) |
|
1423 |
self.assertTrue(headers[k], v) |
|
1415 |
with AssertUUidInvariant(self.client.retrieve_object_metadata, |
|
1416 |
self.containers[0], |
|
1417 |
self.obj[0]['name']): |
|
1418 |
#perform update metadata |
|
1419 |
more = {'foo':'foo', 'bar':'bar'} |
|
1420 |
status = self.client.update_object_metadata(self.containers[0], |
|
1421 |
self.obj[0]['name'], |
|
1422 |
**more)[0] |
|
1423 |
#assert request accepted |
|
1424 |
self.assertEqual(status, 202) |
|
1425 |
|
|
1426 |
#assert old metadata are still there |
|
1427 |
headers = self.client.retrieve_object_metadata(self.containers[0], |
|
1428 |
self.obj[0]['name'], |
|
1429 |
restricted=True) |
|
1430 |
#assert new metadata have been updated |
|
1431 |
for k,v in more.items(): |
|
1432 |
self.assertTrue(k in headers.keys()) |
|
1433 |
self.assertTrue(headers[k], v) |
|
1424 | 1434 |
|
1425 | 1435 |
def test_update_object(self, |
1426 | 1436 |
first_byte_pos=0, |
1427 | 1437 |
last_byte_pos=499, |
1428 | 1438 |
instance_length = True, |
1429 | 1439 |
content_length = 500): |
1430 |
l = len(self.obj[0]['data']) |
|
1431 |
range = 'bytes %d-%d/%s' %(first_byte_pos, |
|
1432 |
last_byte_pos, |
|
1433 |
l if instance_length else '*') |
|
1434 |
partial = last_byte_pos - first_byte_pos + 1 |
|
1435 |
length = first_byte_pos + partial |
|
1436 |
data = get_random_data(partial) |
|
1437 |
args = {'content_type':'application/octet-stream', |
|
1438 |
'content_range':'%s' %range} |
|
1439 |
if content_length: |
|
1440 |
args['content_length'] = content_length |
|
1441 |
|
|
1442 |
status = self.client.update_object(self.containers[0], self.obj[0]['name'], |
|
1443 |
StringIO(data), **args)[0] |
|
1444 |
|
|
1445 |
if partial < 0 or (instance_length and l <= last_byte_pos): |
|
1446 |
self.assertEqual(status, 202) |
|
1447 |
else: |
|
1448 |
self.assertEqual(status, 204) |
|
1449 |
#check modified object |
|
1450 |
content = self.client.retrieve_object(self.containers[0], |
|
1451 |
self.obj[0]['name']) |
|
1452 |
self.assertEqual(content[:first_byte_pos], self.obj[0]['data'][:first_byte_pos]) |
|
1453 |
self.assertEqual(content[first_byte_pos:last_byte_pos+1], data) |
|
1454 |
self.assertEqual(content[last_byte_pos+1:], self.obj[0]['data'][last_byte_pos+1:]) |
|
1440 |
with AssertUUidInvariant(self.client.retrieve_object_metadata, |
|
1441 |
self.containers[0], |
|
1442 |
self.obj[0]['name']): |
|
1443 |
l = len(self.obj[0]['data']) |
|
1444 |
range = 'bytes %d-%d/%s' %(first_byte_pos, |
|
1445 |
last_byte_pos, |
|
1446 |
l if instance_length else '*') |
|
1447 |
partial = last_byte_pos - first_byte_pos + 1 |
|
1448 |
length = first_byte_pos + partial |
|
1449 |
data = get_random_data(partial) |
|
1450 |
args = {'content_type':'application/octet-stream', |
|
1451 |
'content_range':'%s' %range} |
|
1452 |
if content_length: |
|
1453 |
args['content_length'] = content_length |
|
1454 |
|
|
1455 |
status = self.client.update_object(self.containers[0], self.obj[0]['name'], |
|
1456 |
StringIO(data), **args)[0] |
|
1457 |
|
|
1458 |
if partial < 0 or (instance_length and l <= last_byte_pos): |
|
1459 |
self.assertEqual(status, 202) |
|
1460 |
else: |
|
1461 |
self.assertEqual(status, 204) |
|
1462 |
#check modified object |
|
1463 |
content = self.client.retrieve_object(self.containers[0], |
|
1464 |
self.obj[0]['name']) |
|
1465 |
self.assertEqual(content[:first_byte_pos], self.obj[0]['data'][:first_byte_pos]) |
|
1466 |
self.assertEqual(content[first_byte_pos:last_byte_pos+1], data) |
|
1467 |
self.assertEqual(content[last_byte_pos+1:], self.obj[0]['data'][last_byte_pos+1:]) |
|
1455 | 1468 |
|
1456 | 1469 |
def test_update_object_lt_blocksize(self): |
1457 | 1470 |
self.test_update_object(10, 20, content_length=None) |
... | ... | |
1998 | 2011 |
data = public_client.get(url)[2] |
1999 | 2012 |
self.assertEqual(o_data, data) |
2000 | 2013 |
|
2014 |
class AssertUUidInvariant(object): |
|
2015 |
def __init__(self, callable, *args, **kwargs): |
|
2016 |
self.callable = callable |
|
2017 |
self.args = args |
|
2018 |
self.kwargs = kwargs |
|
2019 |
|
|
2020 |
def __enter__(self): |
|
2021 |
self.map = self.callable(*self.args, **self.kwargs) |
|
2022 |
assert('x-object-uuid' in self.map) |
|
2023 |
self.uuid = self.map['x-object-uuid'] |
|
2024 |
return self.map |
|
2025 |
|
|
2026 |
def __exit__(self, type, value, tb): |
|
2027 |
map = self.callable(*self.args, **self.kwargs) |
|
2028 |
assert('x-object-uuid' in self.map) |
|
2029 |
uuid = map['x-object-uuid'] |
|
2030 |
assert(uuid == self.uuid) |
|
2031 |
|
|
2001 | 2032 |
class AssertMappingInvariant(object): |
2002 | 2033 |
def __init__(self, callable, *args, **kwargs): |
2003 | 2034 |
self.callable = callable |
... | ... | |
2010 | 2041 |
|
2011 | 2042 |
def __exit__(self, type, value, tb): |
2012 | 2043 |
map = self.callable(*self.args, **self.kwargs) |
2013 |
for k in self.map.keys():
|
|
2014 |
if is_date(self.map[k]):
|
|
2044 |
for k, v in self.map.items():
|
|
2045 |
if is_date(v):
|
|
2015 | 2046 |
continue |
2016 |
assert map[k] == self.map[k] |
|
2017 |
|
|
2047 |
print '#', k, v, map[k] |
|
2048 |
assert(k in map) |
|
2049 |
assert v == map[k] |
|
2050 |
|
|
2018 | 2051 |
class AssertContentInvariant(object): |
2019 | 2052 |
def __init__(self, callable, *args, **kwargs): |
2020 | 2053 |
self.callable = callable |
Also available in: Unified diff