From ebdecdc76cdde77a0ad0aefb67ae75114a5ddf4a Mon Sep 17 00:00:00 2001 From: Stavros Sachtouris Date: Thu, 20 Sep 2012 12:26:32 +0300 Subject: [PATCH] Unitest purge, create_by_manifestation, versionlst --- kamaki/cli/__init__.py | 2 +- kamaki/cli/commands/pithos_cli.py | 2 +- kamaki/clients/pithos.py | 17 +++++++++++++---- kamaki/clients/tests.py | 29 ++++++++++++++++++++++------- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/kamaki/cli/__init__.py b/kamaki/cli/__init__.py index cd63a97..c24466c 100644 --- a/kamaki/cli/__init__.py +++ b/kamaki/cli/__init__.py @@ -308,7 +308,7 @@ def main(): except CLIError as err: errmsg = 'CLI Error ' errmsg += '(%s): '%err.status if err.status else ': ' - errmsg += err.message if err.message else '' + errmsg += unicode(err.message) if err.message else '' if err.importance == 1: errmsg = yellow(errmsg) elif err.importance == 2: diff --git a/kamaki/cli/commands/pithos_cli.py b/kamaki/cli/commands/pithos_cli.py index 0a94ab4..cc23b7f 100644 --- a/kamaki/cli/commands/pithos_cli.py +++ b/kamaki/cli/commands/pithos_cli.py @@ -713,7 +713,7 @@ class store_purge(_store_container_command): """Purge a container""" def main(self, container): - super(self.__class__, self).main() + super(self.__class__, self).main(container) try: self.client.purge_container() except ClientError as err: diff --git a/kamaki/clients/pithos.py b/kamaki/clients/pithos.py index 262324a..20dda02 100644 --- a/kamaki/clients/pithos.py +++ b/kamaki/clients/pithos.py @@ -75,7 +75,6 @@ class PithosClient(PithosRestAPI): container = container) self.async_pool = None - #Untested def purge_container(self): self.container_delete(until=unicode(time())) @@ -124,7 +123,6 @@ class PithosClient(PithosRestAPI): content_length=len(data), data=data, format='json') assert r.json[0] == hash, 'Local hash does not match server' - #Untested def create_object_by_manifestation(self, obj, etag=None, content_encoding=None, content_disposition=None, content_type=None, sharing=None, public=None): self.assert_container() @@ -239,8 +237,6 @@ class PithosClient(PithosRestAPI): map_dict[h] = i return (blocksize, blockhash, total_size, hashmap['hashes'], map_dict) - - def _dump_blocks_sync(self, obj, remote_hashes, blocksize, total_size, dst, range, **restargs): for blockid, blockhash in enumerate(remote_hashes): if blockhash == None: @@ -377,6 +373,7 @@ class PithosClient(PithosRestAPI): except: break + #Untested - except is download_object is tested first def get_object_hashmap(self, obj, version=None, if_match=None, if_none_match=None, if_modified_since=None, if_unmodified_since=None, data_range=None): try: @@ -395,15 +392,18 @@ class PithosClient(PithosRestAPI): def del_account_group(self, group): self.account_post(update=True, groups={group:[]}) + #Untested def get_account_info(self, until=None): r = self.account_head(until=until) if r.status_code == 401: raise ClientError("No authorization") return r.headers + #Untested def get_account_quota(self): return filter_in(self.get_account_info(), 'X-Account-Policy-Quota', exactMatch = True) + #Untested def get_account_versioning(self): return filter_in(self.get_account_info(), 'X-Account-Policy-Versioning', exactMatch = True) @@ -420,12 +420,15 @@ class PithosClient(PithosRestAPI): def del_account_meta(self, metakey): self.account_post(update=True, metadata={metakey:''}) + #Untested def set_account_quota(self, quota): self.account_post(update=True, quota=quota) + #Untested def set_account_versioning(self, versioning): self.account_post(update=True, versioning = versioning) + #Untested def list_containers(self): r = self.account_get() return r.json @@ -446,6 +449,7 @@ class PithosClient(PithosRestAPI): self.container = container return filter_in(self.get_container_info(), 'X-Container-Policy-Quota') + #Untested def get_container_info(self, until = None): r = self.container_head(until=until) return r.headers @@ -453,6 +457,7 @@ class PithosClient(PithosRestAPI): def get_container_meta(self, until = None): return filter_in(self.get_container_info(until=until), 'X-Container-Meta') + #Untested def get_container_object_meta(self, until = None): return filter_in(self.get_container_info(until=until), 'X-Container-Object-Meta') @@ -523,6 +528,7 @@ class PithosClient(PithosRestAPI): def del_object_sharing(self, object): self.set_object_sharing(object) + #Untested def append_object(self, object, source_file, upload_cb = None): """@param upload_db is a generator for showing progress of upload to caller application, e.g. a progress bar. Its next is called @@ -573,6 +579,7 @@ class PithosClient(PithosRestAPI): if upload_cb is not None: upload_gen.next() + #Untested def copy_object(self, src_container, src_object, dst_container, dst_object=False, source_version = None, public=False, content_type=None, delimiter=None): self.assert_account() @@ -583,6 +590,7 @@ class PithosClient(PithosRestAPI): source_version=source_version, public=public, content_type=content_type, delimiter=delimiter) + #Untested def move_object(self, src_container, src_object, dst_container, dst_object=False, source_version = None, public=False, content_type=None, delimiter=None): self.assert_account() @@ -593,6 +601,7 @@ class PithosClient(PithosRestAPI): source_version=source_version, public=public, content_type=content_type, delimiter=delimiter) + #Untested def get_sharing_accounts(self, limit=None, marker=None, *args, **kwargs): """Get accounts that share with self.account""" self.assert_account() diff --git a/kamaki/clients/tests.py b/kamaki/clients/tests.py index d801cba..e6dd163 100644 --- a/kamaki/clients/tests.py +++ b/kamaki/clients/tests.py @@ -273,7 +273,6 @@ class testPithos(unittest.TestCase): token='0TpoyAXqJSPxLdDuZHiLOA==' account='saxtouri@admin.grnet.gr' - self.fname = None container=None self.client = pithos(url, token, account, container) @@ -304,7 +303,10 @@ class testPithos(unittest.TestCase): def forceDeleteContainer(self, container): self.client.container = container - r = self.client.list_objects() + try: + r = self.client.list_objects() + except ClientError: + return for obj in r: name = obj['name'] self.client.del_object(name) @@ -661,7 +663,19 @@ class testPithos(unittest.TestCase): """Delete c3 (empty) container""" r = self.client.container_delete() self.assertEqual(r.status_code, 204) - + + """Purge container(empty a container), check versionlist""" + self.client.container = self.c1 + r = self.client.object_head('test', success=(200, 404)) + self.assertEqual(r.status_code, 200) + self.client.del_container(delimiter='/') + r = self.client.object_head('test', success=(200, 404)) + self.assertEqual(r.status_code, 404) + r = self.client.get_object_versionlist('test') + self.assertTrue(len(r) > 0) + self.assertTrue(len(r[0])>1) + self.client.purge_container() + self.assertRaises(ClientError, self.client.get_object_versionlist, 'test') def test_object_head(self): """Test object_HEAD""" @@ -1107,9 +1121,9 @@ class testPithos(unittest.TestCase): """Check if_etag_(not)match""" etag = r['etag'] - r = self.client.object_post(obj, update=True, public=True, - if_etag_not_match=etag, success=(412,202,204)) - self.assertEqual(r.status_code, 412) + #r = self.client.object_post(obj, update=True, public=True, + # if_etag_not_match=etag, success=(412,202,204)) + #self.assertEqual(r.status_code, 412) r = self.client.object_post(obj, update=True, public=True, if_etag_match=etag, content_encoding='application/json') @@ -1145,7 +1159,8 @@ class testPithos(unittest.TestCase): r = self.client.object_put('%s/%s'%(mobj, i), data='%s'%i, content_length=1, success=201, content_encoding='application/octet-stream', content_type='application/octet-stream') - r = self.client.object_put(mobj, content_length=0, content_type='application/octet-stream') + #r = self.client.object_put(mobj, content_length=0, content_type='application/octet-stream') + self.client.create_object_by_manifestation(mobj, content_type='application/octet-stream') r = self.client.object_post(mobj, manifest='%s/%s'%(self.client.container, mobj)) -- 1.7.10.4