Revision 7812e1f9 pithos/api/tests.py
b/pithos/api/tests.py | ||
---|---|---|
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 | 34 |
from pithos.lib.client import Pithos_Client, Fault |
35 |
import unittest |
|
36 | 35 |
from django.utils import simplejson as json |
37 | 36 |
from xml.dom import minidom |
38 | 37 |
from StringIO import StringIO |
38 |
import unittest |
|
39 | 39 |
import time as _time |
40 | 40 |
import types |
41 | 41 |
import hashlib |
... | ... | |
267 | 267 |
self.containers = ['apples', 'bananas', 'kiwis', 'oranges', 'pears'] |
268 | 268 |
for item in self.containers: |
269 | 269 |
self.client.create_container(item) |
270 |
|
|
271 |
#keep track of initial account groups |
|
272 |
self.initial_groups = self.client.retrieve_account_groups() |
|
273 |
|
|
274 |
#keep track of initial account meta |
|
275 |
self.initial_meta = self.client.retrieve_account_metadata(restricted=True) |
|
276 |
|
|
277 |
meta = {'foo':'bar'} |
|
278 |
self.client.update_account_metadata(**meta) |
|
279 |
self.updated_meta = self.initial_meta.update(meta) |
|
270 | 280 |
|
271 | 281 |
def tearDown(self): |
272 |
self.client.delete_account_metadata(['foo']) |
|
282 |
#delete additionally created meta |
|
283 |
l = [] |
|
284 |
for m in self.client.retrieve_account_metadata(restricted=True): |
|
285 |
if m not in self.initial_meta: |
|
286 |
l.append(m) |
|
287 |
self.client.delete_account_metadata(l) |
|
288 |
|
|
289 |
#delete additionally created groups |
|
290 |
l = [] |
|
291 |
for g in self.client.retrieve_account_groups(): |
|
292 |
if g not in self.initial_groups: |
|
293 |
l.append(g) |
|
294 |
self.client.unset_account_groups(l) |
|
295 |
|
|
296 |
#print '#', self.client.retrieve_account_groups() |
|
297 |
#print '#', self.client.retrieve_account_metadata(restricted=True) |
|
273 | 298 |
BaseTestCase.tearDown(self) |
274 | 299 |
|
275 | 300 |
def test_get_account_meta(self): |
... | ... | |
293 | 318 |
past = t - datetime.timedelta(minutes=-15) |
294 | 319 |
past = int(_time.mktime(past.timetuple())) |
295 | 320 |
|
296 |
meta = {'foo':'bar'}
|
|
321 |
meta = {'premium':True}
|
|
297 | 322 |
self.client.update_account_metadata(**meta) |
298 | 323 |
meta = self.client.retrieve_account_metadata(restricted=True, |
299 | 324 |
until=past) |
300 |
self.assertTrue('foo' not in meta)
|
|
325 |
self.assertTrue('premium' not in meta)
|
|
301 | 326 |
|
302 | 327 |
meta = self.client.retrieve_account_metadata(restricted=True) |
303 |
self.assertTrue('foo' in meta)
|
|
328 |
self.assertTrue('premium' in meta)
|
|
304 | 329 |
|
305 | 330 |
def test_get_account_meta_until_invalid_date(self): |
306 |
meta = {'foo':'bar'}
|
|
331 |
meta = {'premium':True}
|
|
307 | 332 |
self.client.update_account_metadata(**meta) |
308 | 333 |
meta = self.client.retrieve_account_metadata(restricted=True, |
309 | 334 |
until='kshfksfh') |
310 |
self.assertTrue('foo' in meta)
|
|
335 |
self.assertTrue('premium' in meta)
|
|
311 | 336 |
|
312 | 337 |
class AccountGet(BaseTestCase): |
313 | 338 |
def setUp(self): |
... | ... | |
478 | 503 |
|
479 | 504 |
self.assertEqual(meta, self.client.retrieve_account_metadata(restricted=True)) |
480 | 505 |
|
481 |
#def test_delete_meta(self): |
|
482 |
# with AssertMappingInvariant(self.client.reset_account_groups): |
|
483 |
# meta = {'test':'test', 'tost':'tost'} |
|
484 |
# self.client.update_account_metadata(**meta) |
|
485 |
# |
|
486 |
# self.client.delete_account_metadata(**meta) |
|
506 |
def test_delete_meta(self): |
|
507 |
with AssertMappingInvariant(self.client.retrieve_account_groups): |
|
508 |
meta = {'test':'test', 'tost':'tost'} |
|
509 |
self.client.update_account_metadata(**meta) |
|
510 |
|
|
511 |
self.client.delete_account_metadata(meta.keys()) |
|
512 |
|
|
513 |
account_meta = self.client.retrieve_account_metadata(restricted=True) |
|
514 |
for m in meta: |
|
515 |
self.assertTrue(m not in account_meta.keys()) |
|
487 | 516 |
|
488 | 517 |
def test_set_account_groups(self): |
489 | 518 |
with AssertMappingInvariant(self.client.retrieve_account_metadata): |
... | ... | |
1131 | 1160 |
#assert content-type |
1132 | 1161 |
self.assertEqual(h['content-type'], o['meta']['content_type']) |
1133 | 1162 |
|
1163 |
def test_upload_with_name_containing_slash(self): |
|
1164 |
name = '/%s' % o_names[0] |
|
1165 |
meta = {'test':'test1'} |
|
1166 |
o = self.upload_random_data(self.container, name, **meta) |
|
1167 |
|
|
1168 |
self.assertEqual(o['data'], |
|
1169 |
self.client.retrieve_object(self.container, name)) |
|
1170 |
|
|
1171 |
self.assertTrue(name in self.client.list_objects(self.container)) |
|
1172 |
|
|
1173 |
def test_create_directory_marker(self): |
|
1174 |
self.client.create_directory_marker(self.container, 'foo') |
|
1175 |
meta = self.client.retrieve_object_metadata(self.container, 'foo') |
|
1176 |
self.assertEqual(meta['content-length'], '0') |
|
1177 |
self.assertEqual(meta['content-type'], 'application/directory') |
|
1178 |
|
|
1134 | 1179 |
def test_upload_unprocessable_entity(self): |
1135 | 1180 |
meta={'etag':'123', 'test':'test1'} |
1136 | 1181 |
|
... | ... | |
1165 | 1210 |
self.obj['name'], |
1166 | 1211 |
self.containers[0], |
1167 | 1212 |
'testcopy', |
1168 |
**meta)[0]
|
|
1213 |
meta)[0] |
|
1169 | 1214 |
|
1170 | 1215 |
#assert copy success |
1171 | 1216 |
self.assertEqual(status, 201) |
... | ... | |
1190 | 1235 |
self.obj['name'], |
1191 | 1236 |
self.containers[1], |
1192 | 1237 |
'testcopy', |
1193 |
**meta)[0]
|
|
1238 |
meta)[0] |
|
1194 | 1239 |
self.assertEqual(status, 201) |
1195 | 1240 |
|
1196 | 1241 |
# assert updated metadata |
... | ... | |
1207 | 1252 |
#copy from invalid object |
1208 | 1253 |
meta = {'test':'testcopy'} |
1209 | 1254 |
self.assert_raises_fault(404, self.client.copy_object, self.containers[0], |
1210 |
'test.py', self.containers[1], 'testcopy', |
|
1211 |
**meta) |
|
1255 |
'test.py', self.containers[1], 'testcopy', meta) |
|
1212 | 1256 |
|
1213 | 1257 |
#copy from invalid container |
1214 | 1258 |
meta = {'test':'testcopy'} |
1215 | 1259 |
self.assert_raises_fault(404, self.client.copy_object, self.containers[1], |
1216 | 1260 |
self.obj['name'], self.containers[1], |
1217 |
'testcopy', **meta)
|
|
1261 |
'testcopy', meta) |
|
1218 | 1262 |
|
1219 | 1263 |
|
1220 |
class ObjectMove(ObjectCopy): |
|
1264 |
class ObjectMove(BaseTestCase): |
|
1265 |
def setUp(self): |
|
1266 |
BaseTestCase.setUp(self) |
|
1267 |
self.account = 'test' |
|
1268 |
self.containers = ['c1', 'c2'] |
|
1269 |
for c in self.containers: |
|
1270 |
self.client.create_container(c) |
|
1271 |
self.obj = self.upload_random_data(self.containers[0], o_names[0]) |
|
1272 |
|
|
1221 | 1273 |
def test_move(self): |
1222 | 1274 |
#perform move |
1223 | 1275 |
meta = {'test':'testcopy'} |
1224 | 1276 |
src_path = os.path.join('/', self.containers[0], self.obj['name']) |
1225 | 1277 |
status = self.client.move_object(self.containers[0], self.obj['name'], |
1226 | 1278 |
self.containers[0], 'testcopy', |
1227 |
**meta)[0]
|
|
1279 |
meta)[0] |
|
1228 | 1280 |
|
1229 | 1281 |
#assert successful move |
1230 | 1282 |
self.assertEqual(status, 201) |
Also available in: Unified diff