if shared and public:
# get shared first
shared = self._list_object_permissions(user, account, container, prefix, shared=True, public=False)
- objects = []
+ objects = set()
if shared:
path, node = self._lookup_container(account, container)
shared = self._get_formatted_paths(shared)
- objects = self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared, all_props)
+ objects |= set(self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared, all_props))
# get public
- objects.extend(self._list_public_object_properties(user, account, container, prefix, all_props))
+ objects |= set(self._list_public_object_properties(user, account, container, prefix, all_props))
+ objects = list(objects)
objects.sort(key=lambda x: x[0])
start, limit = self._list_limits([x[0] for x in objects], marker, limit)
def _report_object_change(self, user, account, path, details={}):
logger.debug("_report_object_change: %s %s %s %s", user, account, path, details)
- details.update({'user': user})
+ details.update({'user': user, 'filename':path})
self.messages.append((QUEUE_MESSAGE_KEY_PREFIX % ('object',), account, QUEUE_INSTANCE_ID, 'object', path, details))
def _report_sharing_change(self, user, account, path, details={}):
#TODO unauthorized request
def setUp(self):
self.client = Pithos_Client(get_url(), get_auth(), get_user())
+
+ #keep track of initial containers
+ self.initial_containers = self.client.list_containers()
+
self._clean_account()
self.invalid_client = Pithos_Client(get_url(), get_auth(), 'invalid')
#keep track of initial account meta
self.initial_meta = self.client.retrieve_account_metadata(restricted=True)
-
+
self.extended = {
'container':(
'name',
def _clean_account(self):
for c in self.client.list_containers():
- self.client.delete_container(c, delimiter='/')
- self.client.delete_container(c)
+ if c not in self.initial_containers:
+ self.client.delete_container(c, delimiter='/')
+ self.client.delete_container(c)
def assert_status(self, status, codes):
l = [elem for elem in self.return_codes]
class AccountHead(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
+ self.containers = list(set(self.initial_containers + ['apples', 'bananas', 'kiwis', 'oranges', 'pears']))
+ self.containers.sort()
+
for item in self.containers:
self.client.create_container(item)
containers = self.client.list_containers()
l = str(len(containers))
self.assertEqual(meta['x-account-container-count'], l)
- size = 0
+ size1 = 0
+ size2 = 0
for c in containers:
m = self.client.retrieve_container_metadata(c)
- size = size + int(m['x-container-bytes-used'])
- self.assertEqual(meta['x-account-bytes-used'], str(size))
+ csum = sum([o['bytes'] for o in self.client.list_objects(c, format='json')])
+ self.assertEqual(int(m['x-container-bytes-used']), csum)
+ size1 += int(m['x-container-bytes-used'])
+ size2 += csum
+ self.assertEqual(meta['x-account-bytes-used'], str(size1))
+ self.assertEqual(meta['x-account-bytes-used'], str(size2))
def test_get_account_403(self):
self.assert_raises_fault(403,
def setUp(self):
BaseTestCase.setUp(self)
#create some containers
- self.containers = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
+ self.containers = list(set(self.initial_containers + ['apples', 'bananas', 'kiwis', 'oranges', 'pears']))
+ self.containers.sort()
+
for item in self.containers:
self.client.create_container(item)
xml = self.client.list_containers(limit=l, marker=m, format='xml')
self.assert_extended(xml, 'xml', 'container', l)
nodes = xml.getElementsByTagName('name')
- self.assertEqual(len(nodes), 1)
- self.assertEqual(nodes[0].childNodes[0].data, 'pears')
+ self.assertTrue(len(nodes) <= l)
+ names = [n.childNodes[0].data for n in nodes]
+ self.assertTrue('pears' in names or 'pears' > name for name in names)
def test_if_modified_since(self):
t = datetime.datetime.utcnow()
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='')
self.assertEqual(len(c), len(self.containers))
class AccountPost(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
+ self.containers = list(set(self.initial_containers + ['apples', 'bananas', 'kiwis', 'oranges', 'pears']))
+ self.containers.sort()
+
for item in self.containers:
self.client.create_container(item)
class ContainerPut(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['c1', 'c2']
-
+ self.containers = list(set(self.initial_containers + ['c1', 'c2']))
+ self.containers.sort()
+
def test_create(self):
self.client.create_container(self.containers[0])
containers = self.client.list_containers()
self.client.create_container(self.containers[0])
policy = {'quota':100}
- self.client.set_container_policies('c1', **policy)
+ self.client.set_container_policies(self.containers[0], **policy)
- meta = self.client.retrieve_container_metadata('c1')
+ meta = self.client.retrieve_container_metadata(self.containers[0])
self.assertTrue('x-container-policy-quota' in meta)
self.assertEqual(meta['x-container-policy-quota'], '100')
- args = ['c1', 'o1']
+ args = [self.containers[0], 'o1']
kwargs = {'length':101}
self.assert_raises_fault(413, self.upload_random_data, *args, **kwargs)
#reset quota
policy = {'quota':0}
- self.client.set_container_policies('c1', **policy)
+ self.client.set_container_policies(self.containers[0], **policy)
class ContainerPost(BaseTestCase):
def setUp(self):
class ContainerDelete(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['c1', 'c2']
+ self.containers = list(set(self.initial_containers + ['c1', 'c2']))
+ self.containers.sort()
+
for c in self.containers:
self.client.create_container(c)
class ObjectGet(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['c1', 'c2']
+ self.containers = list(set(self.initial_containers + ['c1', 'c2']))
+ self.containers.sort()
+
#create some containers
for c in self.containers:
self.client.create_container(c)
class ObjectCopy(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['c1', 'c2']
+ self.containers = list(set(self.initial_containers + ['c1', 'c2']))
+ self.containers.sort()
+
for c in self.containers:
self.client.create_container(c)
self.obj = self.upload_random_data(self.containers[0], o_names[0])
class ObjectMove(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['c1', 'c2']
+ self.containers = list(set(self.initial_containers + ['c1', 'c2']))
+ self.containers.sort()
+
for c in self.containers:
self.client.create_container(c)
self.obj = self.upload_random_data(self.containers[0], o_names[0])
class ObjectPost(BaseTestCase):
def setUp(self):
BaseTestCase.setUp(self)
- self.containers = ['c1', 'c2']
+ self.containers = list(set(self.initial_containers + ['c1', 'c2']))
+ self.containers.sort()
+
for c in self.containers:
self.client.create_container(c)
self.obj = []
def setUp(self):
BaseTestCase.setUp(self)
self.containers = ['c1', 'c2']
+ self.containers.extend(self.initial_containers)
+
for c in self.containers:
self.client.create_container(c)
self.obj = self.upload_random_data(self.containers[0], o_names[0])
self.client.publish_object(c, 'o2')
def test_shared_public(self):
+ diff = lambda l: set(l) - set(self.initial_containers)
+
func, kwargs = self.client.list_containers, {'shared':True}
l = func(**kwargs)
- self.assertEqual(l, ['c1', 'c2'])
+ self.assertEqual(set(['c1', 'c2']), diff(l))
self.assertEqual(l, [e['name'] for e in func(format='json', **kwargs)])
func, kwargs = self.client.list_containers, {'public':True}
l = func(**kwargs)
- self.assertEqual(l, ['c1', 'c3'])
+ self.assertEqual(set(['c1', 'c3']), diff(l))
self.assertEqual(l, [e['name'] for e in func(format='json', **kwargs)])
func, kwargs = self.client.list_containers, {'shared':True, 'public':True}
l = func(**kwargs)
- self.assertEqual(l, ['c1', 'c2', 'c3'])
+ self.assertEqual(set(['c1', 'c2', 'c3']), diff(l))
self.assertEqual(l, [e['name'] for e in func(format='json', **kwargs)])
self.client.share_object(self.container, self.object, self.authorized)
my_shared_containers = self.client.list_containers(shared=True)
- self.assertEqual(['c'], my_shared_containers)
+ self.assertTrue('c' in my_shared_containers)
my_shared_objects = self.client.list_objects('c', shared=True)
self.assertEqual(['o'], my_shared_objects)