Revision 31e1acd3

b/snf-pithos-backend/pithos/backends/modular.py
489 489
        if shared and public:
490 490
            # get shared first
491 491
            shared = self._list_object_permissions(user, account, container, prefix, shared=True, public=False)
492
            objects = []
492
            objects = set()
493 493
            if shared:
494 494
                path, node = self._lookup_container(account, container)
495 495
                shared = self._get_formatted_paths(shared)
496
                objects = self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared, all_props)
496
                objects |= set(self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared, all_props))
497 497
            
498 498
            # get public
499
            objects.extend(self._list_public_object_properties(user, account, container, prefix, all_props))
499
            objects |= set(self._list_public_object_properties(user, account, container, prefix, all_props))
500
            objects = list(objects)
500 501
            
501 502
            objects.sort(key=lambda x: x[0])
502 503
            start, limit = self._list_limits([x[0] for x in objects], marker, limit)
......
1129 1130
    
1130 1131
    def _report_object_change(self, user, account, path, details={}):
1131 1132
        logger.debug("_report_object_change: %s %s %s %s", user, account, path, details)
1132
        details.update({'user': user})
1133
        details.update({'user': user, 'filename':path})
1133 1134
        self.messages.append((QUEUE_MESSAGE_KEY_PREFIX % ('object',), account, QUEUE_INSTANCE_ID, 'object', path, details))
1134 1135
    
1135 1136
    def _report_sharing_change(self, user, account, path, details={}):
b/snf-pithos-tools/pithos/tools/test.py
74 74
    #TODO unauthorized request
75 75
    def setUp(self):
76 76
        self.client = Pithos_Client(get_url(), get_auth(), get_user())
77
        
78
        #keep track of initial containers
79
        self.initial_containers = self.client.list_containers()
80
        
77 81
        self._clean_account()
78 82
        self.invalid_client = Pithos_Client(get_url(), get_auth(), 'invalid')
79 83

  
......
82 86

  
83 87
        #keep track of initial account meta
84 88
        self.initial_meta = self.client.retrieve_account_metadata(restricted=True)
85

  
89
        
86 90
        self.extended = {
87 91
            'container':(
88 92
                'name',
......
117 121

  
118 122
    def _clean_account(self):
119 123
        for c in self.client.list_containers():
120
            self.client.delete_container(c, delimiter='/')
121
            self.client.delete_container(c)
124
            if c not in self.initial_containers:
125
                self.client.delete_container(c, delimiter='/')
126
                self.client.delete_container(c)
122 127
    
123 128
    def assert_status(self, status, codes):
124 129
        l = [elem for elem in self.return_codes]
......
258 263
class AccountHead(BaseTestCase):
259 264
    def setUp(self):
260 265
        BaseTestCase.setUp(self)
261
        self.containers = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
266
        self.containers = list(set(self.initial_containers + ['apples', 'bananas', 'kiwis', 'oranges', 'pears']))
267
        self.containers.sort()
268
        
262 269
        for item in self.containers:
263 270
            self.client.create_container(item)
264 271

  
......
272 279
        containers = self.client.list_containers()
273 280
        l = str(len(containers))
274 281
        self.assertEqual(meta['x-account-container-count'], l)
275
        size = 0
282
        size1 = 0
283
        size2 = 0
276 284
        for c in containers:
277 285
            m = self.client.retrieve_container_metadata(c)
278
            size = size + int(m['x-container-bytes-used'])
279
        self.assertEqual(meta['x-account-bytes-used'], str(size))
286
            csum = sum([o['bytes'] for o in self.client.list_objects(c, format='json')])
287
            self.assertEqual(int(m['x-container-bytes-used']), csum)
288
            size1 += int(m['x-container-bytes-used'])
289
            size2 += csum
290
        self.assertEqual(meta['x-account-bytes-used'], str(size1))
291
        self.assertEqual(meta['x-account-bytes-used'], str(size2))
280 292

  
281 293
    def test_get_account_403(self):
282 294
        self.assert_raises_fault(403,
......
307 319
    def setUp(self):
308 320
        BaseTestCase.setUp(self)
309 321
        #create some containers
310
        self.containers = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
322
        self.containers = list(set(self.initial_containers + ['apples', 'bananas', 'kiwis', 'oranges', 'pears']))
323
        self.containers.sort()
324
        
311 325
        for item in self.containers:
312 326
            self.client.create_container(item)
313 327

  
......
351 365
        xml = self.client.list_containers(limit=l, marker=m, format='xml')
352 366
        self.assert_extended(xml, 'xml', 'container', l)
353 367
        nodes = xml.getElementsByTagName('name')
354
        self.assertEqual(len(nodes), 1)
355
        self.assertEqual(nodes[0].childNodes[0].data, 'pears')
368
        self.assertTrue(len(nodes) <= l)
369
        names = [n.childNodes[0].data for n in nodes]
370
        self.assertTrue('pears' in names or 'pears' > name for name in names)
356 371

  
357 372
    def test_if_modified_since(self):
358 373
        t = datetime.datetime.utcnow()
......
368 383
                self.assertEqual(len(c), len(self.containers) + 1)
369 384
            except Fault, f:
370 385
                self.failIf(f.status == 304) #fail if not modified
371
        
372

  
386
    
373 387
    def test_if_modified_since_invalid_date(self):
374 388
        c = self.client.list_containers(if_modified_since='')
375 389
        self.assertEqual(len(c), len(self.containers))
......
412 426
class AccountPost(BaseTestCase):
413 427
    def setUp(self):
414 428
        BaseTestCase.setUp(self)
415
        self.containers = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
429
        self.containers = list(set(self.initial_containers + ['apples', 'bananas', 'kiwis', 'oranges', 'pears']))
430
        self.containers.sort()
431
        
416 432
        for item in self.containers:
417 433
            self.client.create_container(item)
418 434

  
......
779 795
class ContainerPut(BaseTestCase):
780 796
    def setUp(self):
781 797
        BaseTestCase.setUp(self)
782
        self.containers = ['c1', 'c2']
783

  
798
        self.containers = list(set(self.initial_containers + ['c1', 'c2']))
799
        self.containers.sort()
800
    
784 801
    def test_create(self):
785 802
        self.client.create_container(self.containers[0])
786 803
        containers = self.client.list_containers()
......
795 812
        self.client.create_container(self.containers[0])
796 813

  
797 814
        policy = {'quota':100}
798
        self.client.set_container_policies('c1', **policy)
815
        self.client.set_container_policies(self.containers[0], **policy)
799 816

  
800
        meta = self.client.retrieve_container_metadata('c1')
817
        meta = self.client.retrieve_container_metadata(self.containers[0])
801 818
        self.assertTrue('x-container-policy-quota' in meta)
802 819
        self.assertEqual(meta['x-container-policy-quota'], '100')
803 820

  
804
        args = ['c1', 'o1']
821
        args = [self.containers[0], 'o1']
805 822
        kwargs = {'length':101}
806 823
        self.assert_raises_fault(413, self.upload_random_data, *args, **kwargs)
807 824

  
808 825
        #reset quota
809 826
        policy = {'quota':0}
810
        self.client.set_container_policies('c1', **policy)
827
        self.client.set_container_policies(self.containers[0], **policy)
811 828

  
812 829
class ContainerPost(BaseTestCase):
813 830
    def setUp(self):
......
828 845
class ContainerDelete(BaseTestCase):
829 846
    def setUp(self):
830 847
        BaseTestCase.setUp(self)
831
        self.containers = ['c1', 'c2']
848
        self.containers = list(set(self.initial_containers + ['c1', 'c2']))
849
        self.containers.sort()
850
        
832 851
        for c in self.containers:
833 852
            self.client.create_container(c)
834 853

  
......
859 878
class ObjectGet(BaseTestCase):
860 879
    def setUp(self):
861 880
        BaseTestCase.setUp(self)
862
        self.containers = ['c1', 'c2']
881
        self.containers = list(set(self.initial_containers + ['c1', 'c2']))
882
        self.containers.sort()
883
        
863 884
        #create some containers
864 885
        for c in self.containers:
865 886
            self.client.create_container(c)
......
1371 1392
class ObjectCopy(BaseTestCase):
1372 1393
    def setUp(self):
1373 1394
        BaseTestCase.setUp(self)
1374
        self.containers = ['c1', 'c2']
1395
        self.containers = list(set(self.initial_containers + ['c1', 'c2']))
1396
        self.containers.sort()
1397
        
1375 1398
        for c in self.containers:
1376 1399
            self.client.create_container(c)
1377 1400
        self.obj = self.upload_random_data(self.containers[0], o_names[0])
......
1456 1479
class ObjectMove(BaseTestCase):
1457 1480
    def setUp(self):
1458 1481
        BaseTestCase.setUp(self)
1459
        self.containers = ['c1', 'c2']
1482
        self.containers = list(set(self.initial_containers + ['c1', 'c2']))
1483
        self.containers.sort()
1484
        
1460 1485
        for c in self.containers:
1461 1486
            self.client.create_container(c)
1462 1487
        self.obj = self.upload_random_data(self.containers[0], o_names[0])
......
1517 1542
class ObjectPost(BaseTestCase):
1518 1543
    def setUp(self):
1519 1544
        BaseTestCase.setUp(self)
1520
        self.containers = ['c1', 'c2']
1545
        self.containers = list(set(self.initial_containers + ['c1', 'c2']))
1546
        self.containers.sort()
1547
        
1521 1548
        for c in self.containers:
1522 1549
            self.client.create_container(c)
1523 1550
        self.obj = []
......
1796 1823
    def setUp(self):
1797 1824
        BaseTestCase.setUp(self)
1798 1825
        self.containers = ['c1', 'c2']
1826
        self.containers.extend(self.initial_containers)
1827
        
1799 1828
        for c in self.containers:
1800 1829
            self.client.create_container(c)
1801 1830
        self.obj = self.upload_random_data(self.containers[0], o_names[0])
......
1869 1898
                self.client.publish_object(c, 'o2')
1870 1899
    
1871 1900
    def test_shared_public(self):
1901
        diff = lambda l: set(l) - set(self.initial_containers)
1902
        
1872 1903
        func, kwargs = self.client.list_containers, {'shared':True}
1873 1904
        l = func(**kwargs)
1874
        self.assertEqual(l, ['c1', 'c2'])
1905
        self.assertEqual(set(['c1', 'c2']), diff(l))
1875 1906
        self.assertEqual(l, [e['name'] for e in func(format='json', **kwargs)])
1876 1907
        
1877 1908
        func, kwargs = self.client.list_containers, {'public':True}
1878 1909
        l = func(**kwargs)
1879
        self.assertEqual(l, ['c1', 'c3'])
1910
        self.assertEqual(set(['c1', 'c3']), diff(l))
1880 1911
        self.assertEqual(l, [e['name'] for e in func(format='json', **kwargs)])
1881 1912
        
1882 1913
        func, kwargs = self.client.list_containers, {'shared':True, 'public':True}
1883 1914
        l = func(**kwargs)
1884
        self.assertEqual(l, ['c1', 'c2', 'c3'])
1915
        self.assertEqual(set(['c1', 'c2', 'c3']), diff(l))
1885 1916
        self.assertEqual(l, [e['name'] for e in func(format='json', **kwargs)])
1886 1917
        
1887 1918
        
......
2288 2319
        self.client.share_object(self.container, self.object, self.authorized)
2289 2320

  
2290 2321
        my_shared_containers = self.client.list_containers(shared=True)
2291
        self.assertEqual(['c'], my_shared_containers)
2322
        self.assertTrue('c' in my_shared_containers)
2292 2323
        my_shared_objects = self.client.list_objects('c', shared=True)
2293 2324
        self.assertEqual(['o'], my_shared_objects)
2294 2325

  

Also available in: Unified diff