extend client library and write tests for listing public container/objects
authorSofia Papagiannaki <papagian@gmail.com>
Wed, 23 May 2012 12:55:30 +0000 (15:55 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Wed, 23 May 2012 12:55:30 +0000 (15:55 +0300)
Refs: #2394

snf-pithos-backend/pithos/backends/modular.py
snf-pithos-tools/pithos/tools/lib/client.py
snf-pithos-tools/pithos/tools/test.py

index 8d7c332..9e1b4ea 100644 (file)
@@ -330,6 +330,7 @@ class ModularBackend(BaseBackend):
             if public:
                 allowed.extend([x[0].split('/', 2)[1] for x in self.permissions.public_list(account)])
             allowed = list(set(allowed))
+            allowed.sort()
             start, limit = self._list_limits(allowed, marker, limit)
             return allowed[start:start + limit]
         node = self.node.node_lookup(account)
@@ -489,6 +490,7 @@ class ModularBackend(BaseBackend):
             if public:
                 allowed.extend([x[0] for x in self.permissions.public_list(path)])
             allowed = list(set(allowed))
+            allowed.sort()
             if not allowed:
                 return []
         return allowed
index 69de7b8..5dec80b 100644 (file)
@@ -562,12 +562,14 @@ class Pithos_Client(OOS_Client):
     
     def list_containers(self, format='text', if_modified_since=None,
                         if_unmodified_since=None, limit=None, marker=None,
-                        shared=False, until=None, account=None):
+                        shared=False, until=None, account=None, public=False):
         """returns a list with the account containers"""
         account = account or self.account
         params = {'until':until} if until else {}
         if shared:
             params['shared'] = None
+        if public:
+            params['public'] = None
         headers = {'if-modified-since':if_modified_since,
                    'if-unmodified-since':if_unmodified_since}
         return OOS_Client.list_containers(self, account=account, format=format,
@@ -645,12 +647,14 @@ class Pithos_Client(OOS_Client):
                      limit=None, marker=None, prefix=None, delimiter=None,
                      path=None, shared=False, include_trashed=False, params={},
                      if_modified_since=None, if_unmodified_since=None, meta='',
-                     until=None, account=None):
+                     until=None, account=None, public=False):
         """returns a list with the container objects"""
         account = account or self.account
         params = {'until':until, 'meta':meta}
         if shared:
             params['shared'] = None
+        if public:
+            params['public'] = None
         args = locals().copy()
         for elem in ['self', 'container', 'params', 'until', 'meta']:
             args.pop(elem)
index 20121a5..9d1f101 100755 (executable)
@@ -375,6 +375,7 @@ class AccountGet(BaseTestCase):
                 self.assertEqual(len(c), len(self.containers) + 1)
             except Fault, f:
                 self.failIf(f.status == 304) #fail if not modified
+        
 
     def test_if_modified_since_invalid_date(self):
         c = self.client.list_containers(if_modified_since='')
@@ -1736,6 +1737,42 @@ class ListSharing(BaseTestCase):
         self.assertTrue('o1' in my_shared_objects)
         self.assertTrue('o2' not in my_shared_objects)
 
+class List(BaseTestCase):
+    def setUp(self):
+        BaseTestCase.setUp(self)
+        for i in range(1, 5):
+            c = 'c%s' % i
+            self.client.create_container(c)
+            for j in range(1, 3):
+                o = 'o%s' % j
+                self.upload_random_data(c, o)
+            if i < 3:
+                self.client.share_object(c, 'o1', ['papagian'], read=True)
+            if i%2 != 0:
+                self.client.publish_object(c, 'o2')
+    
+    def test_shared_public(self):
+        self.assertEqual(self.client.list_containers(shared=True),
+                         ['c1', 'c2'])
+        self.assertEqual(self.client.list_containers(public=True), ['c1', 'c3'])
+        self.assertEqual(self.client.list_containers(shared=True, public=True), ['c1', 'c2', 'c3'])
+        
+        self.assertEqual(self.client.list_objects('c1', shared=True), ['o1'])
+        self.assertEqual(self.client.list_objects('c1', public=True), ['o2'])
+        self.assertEqual(self.client.list_objects('c1', shared=True, public=True), ['o1', 'o2'])
+        
+        self.assertEqual(self.client.list_objects('c2', shared=True), ['o1'])
+        self.assertEqual(self.client.list_objects('c2', public=True), '')
+        self.assertEqual(self.client.list_objects('c2', shared=True, public=True), ['o1'])
+        
+        self.assertEqual(self.client.list_objects('c3', shared=True), '')
+        self.assertEqual(self.client.list_objects('c3', public=True), ['o2'])
+        self.assertEqual(self.client.list_objects('c3', shared=True, public=True), ['o2'])
+        
+        self.assertEqual(self.client.list_objects('c4', shared=True), '')
+        self.assertEqual(self.client.list_objects('c4', public=True), '')
+        self.assertEqual(self.client.list_objects('c4', shared=True, public=True), '')
+
 class TestGreek(BaseTestCase):
     def test_create_container(self):
         self.client.create_container('φάκελος')