root / snf-pithos-app / pithos / api / test / containers.py @ 78bd53a7
History | View | Annotate | Download (33.9 kB)
1 | f3787696 | Sofia Papagiannaki | #!/usr/bin/env python
|
---|---|---|---|
2 | f3787696 | Sofia Papagiannaki | #coding=utf8
|
3 | f3787696 | Sofia Papagiannaki | |
4 | f3787696 | Sofia Papagiannaki | # Copyright 2011-2013 GRNET S.A. All rights reserved.
|
5 | f3787696 | Sofia Papagiannaki | #
|
6 | f3787696 | Sofia Papagiannaki | # Redistribution and use in source and binary forms, with or
|
7 | f3787696 | Sofia Papagiannaki | # without modification, are permitted provided that the following
|
8 | f3787696 | Sofia Papagiannaki | # conditions are met:
|
9 | f3787696 | Sofia Papagiannaki | #
|
10 | f3787696 | Sofia Papagiannaki | # 1. Redistributions of source code must retain the above
|
11 | f3787696 | Sofia Papagiannaki | # copyright notice, this list of conditions and the following
|
12 | f3787696 | Sofia Papagiannaki | # disclaimer.
|
13 | f3787696 | Sofia Papagiannaki | #
|
14 | f3787696 | Sofia Papagiannaki | # 2. Redistributions in binary form must reproduce the above
|
15 | f3787696 | Sofia Papagiannaki | # copyright notice, this list of conditions and the following
|
16 | f3787696 | Sofia Papagiannaki | # disclaimer in the documentation and/or other materials
|
17 | f3787696 | Sofia Papagiannaki | # provided with the distribution.
|
18 | f3787696 | Sofia Papagiannaki | #
|
19 | f3787696 | Sofia Papagiannaki | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
20 | f3787696 | Sofia Papagiannaki | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21 | f3787696 | Sofia Papagiannaki | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
22 | f3787696 | Sofia Papagiannaki | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
23 | f3787696 | Sofia Papagiannaki | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
24 | f3787696 | Sofia Papagiannaki | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25 | f3787696 | Sofia Papagiannaki | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
26 | f3787696 | Sofia Papagiannaki | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
27 | f3787696 | Sofia Papagiannaki | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
28 | f3787696 | Sofia Papagiannaki | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
29 | f3787696 | Sofia Papagiannaki | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
30 | f3787696 | Sofia Papagiannaki | # POSSIBILITY OF SUCH DAMAGE.
|
31 | f3787696 | Sofia Papagiannaki | #
|
32 | f3787696 | Sofia Papagiannaki | # The views and conclusions contained in the software and
|
33 | f3787696 | Sofia Papagiannaki | # documentation are those of the authors and should not be
|
34 | f3787696 | Sofia Papagiannaki | # interpreted as representing official policies, either expressed
|
35 | f3787696 | Sofia Papagiannaki | # or implied, of GRNET S.A.
|
36 | f3787696 | Sofia Papagiannaki | |
37 | 3a19e99b | Sofia Papagiannaki | from pithos.api.test import (PithosAPITest, DATE_FORMATS, o_names, |
38 | 3a19e99b | Sofia Papagiannaki | pithos_settings, pithos_test_settings) |
39 | bc4f25c0 | Sofia Papagiannaki | from pithos.api.test.util import strnextling, get_random_data, get_random_name |
40 | f3787696 | Sofia Papagiannaki | |
41 | d6a92fa0 | Sofia Papagiannaki | from synnefo.lib import join_urls |
42 | d6a92fa0 | Sofia Papagiannaki | |
43 | f3787696 | Sofia Papagiannaki | import django.utils.simplejson as json |
44 | f3787696 | Sofia Papagiannaki | from django.http import urlencode |
45 | f3787696 | Sofia Papagiannaki | |
46 | f3787696 | Sofia Papagiannaki | from xml.dom import minidom |
47 | f3787696 | Sofia Papagiannaki | from urllib import quote |
48 | 3a19e99b | Sofia Papagiannaki | import time as _time |
49 | f3787696 | Sofia Papagiannaki | |
50 | f3787696 | Sofia Papagiannaki | import random |
51 | f3787696 | Sofia Papagiannaki | import datetime |
52 | f3787696 | Sofia Papagiannaki | |
53 | f3787696 | Sofia Papagiannaki | |
54 | f3787696 | Sofia Papagiannaki | class ContainerHead(PithosAPITest): |
55 | f3787696 | Sofia Papagiannaki | def test_get_meta(self): |
56 | f3787696 | Sofia Papagiannaki | self.create_container('apples') |
57 | f3787696 | Sofia Papagiannaki | |
58 | f3787696 | Sofia Papagiannaki | # populate with objects
|
59 | f3787696 | Sofia Papagiannaki | objects = {} |
60 | f3787696 | Sofia Papagiannaki | for i in range(random.randint(1, 100)): |
61 | f3787696 | Sofia Papagiannaki | |
62 | f3787696 | Sofia Papagiannaki | # upload object
|
63 | f3787696 | Sofia Papagiannaki | meta = {'foo%s' % i: 'bar'} |
64 | f3787696 | Sofia Papagiannaki | name, data, resp = self.upload_object('apples', **meta) |
65 | f3787696 | Sofia Papagiannaki | objects[name] = data |
66 | f3787696 | Sofia Papagiannaki | |
67 | f3787696 | Sofia Papagiannaki | t1 = datetime.datetime.utcnow() |
68 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'apples') |
69 | d6a92fa0 | Sofia Papagiannaki | r = self.head(url)
|
70 | f3787696 | Sofia Papagiannaki | self.assertEqual(int(r['X-Container-Object-Count']), len(objects)) |
71 | f3787696 | Sofia Papagiannaki | self.assertEqual(int(r['X-Container-Bytes-Used']), |
72 | f3787696 | Sofia Papagiannaki | sum([len(i) for i in objects.values()])) |
73 | f3787696 | Sofia Papagiannaki | self.assertTrue('X-Container-Block-Size' in r) |
74 | f3787696 | Sofia Papagiannaki | self.assertTrue('X-Container-Block-Hash' in r) |
75 | f3787696 | Sofia Papagiannaki | self.assertTrue('X-Container-Until-Timestamp' not in r) |
76 | f3787696 | Sofia Papagiannaki | self.assertEqual(r['X-Container-Policy-Versioning'], 'auto') |
77 | f3787696 | Sofia Papagiannaki | self.assertEqual(int(r['X-Container-Policy-Quota']), 0) |
78 | f3787696 | Sofia Papagiannaki | t2 = datetime.datetime.strptime(r['Last-Modified'], DATE_FORMATS[2]) |
79 | f3787696 | Sofia Papagiannaki | delta = (t2 - t1) |
80 | f3787696 | Sofia Papagiannaki | threashold = datetime.timedelta(seconds=1)
|
81 | f3787696 | Sofia Papagiannaki | self.assertTrue(delta < threashold)
|
82 | f3787696 | Sofia Papagiannaki | self.assertTrue(r['X-Container-Object-Meta']) |
83 | f3787696 | Sofia Papagiannaki | (self.assertTrue('foo%s' % i in r['X-Container-Object-Meta']) |
84 | f3787696 | Sofia Papagiannaki | for i in range(len(objects))) |
85 | f3787696 | Sofia Papagiannaki | |
86 | 78bd53a7 | Sofia Papagiannaki | def test_get_container_meta_until(self): |
87 | 78bd53a7 | Sofia Papagiannaki | self.create_container('apples') |
88 | 78bd53a7 | Sofia Papagiannaki | |
89 | 78bd53a7 | Sofia Papagiannaki | # populate with objects
|
90 | 78bd53a7 | Sofia Papagiannaki | objects = {} |
91 | 78bd53a7 | Sofia Papagiannaki | metalist = [] |
92 | 78bd53a7 | Sofia Papagiannaki | for i in range(random.randint(1, 100)): |
93 | 78bd53a7 | Sofia Papagiannaki | # upload object
|
94 | 78bd53a7 | Sofia Papagiannaki | metakey = 'foo%s' % i
|
95 | 78bd53a7 | Sofia Papagiannaki | meta = {metakey: 'bar'}
|
96 | 78bd53a7 | Sofia Papagiannaki | name, data, resp = self.upload_object('apples', **meta) |
97 | 78bd53a7 | Sofia Papagiannaki | objects[name] = data |
98 | 78bd53a7 | Sofia Papagiannaki | metalist.append(metakey) |
99 | 78bd53a7 | Sofia Papagiannaki | |
100 | 78bd53a7 | Sofia Papagiannaki | self.update_container_meta('apples', {'foo': 'bar'}) |
101 | 78bd53a7 | Sofia Papagiannaki | |
102 | 78bd53a7 | Sofia Papagiannaki | container_info = self.get_container_info('apples') |
103 | 78bd53a7 | Sofia Papagiannaki | t = datetime.datetime.strptime(container_info['Last-Modified'],
|
104 | 78bd53a7 | Sofia Papagiannaki | DATE_FORMATS[2])
|
105 | 78bd53a7 | Sofia Papagiannaki | t1 = t + datetime.timedelta(seconds=1)
|
106 | 78bd53a7 | Sofia Papagiannaki | until = int(_time.mktime(t1.timetuple()))
|
107 | 78bd53a7 | Sofia Papagiannaki | |
108 | 78bd53a7 | Sofia Papagiannaki | _time.sleep(2)
|
109 | 78bd53a7 | Sofia Papagiannaki | |
110 | 78bd53a7 | Sofia Papagiannaki | for i in range(random.randint(1, 100)): |
111 | 78bd53a7 | Sofia Papagiannaki | # upload object
|
112 | 78bd53a7 | Sofia Papagiannaki | meta = {'foo%s' % i: 'bar'} |
113 | 78bd53a7 | Sofia Papagiannaki | self.upload_object('apples', **meta) |
114 | 78bd53a7 | Sofia Papagiannaki | |
115 | 78bd53a7 | Sofia Papagiannaki | self.update_container_meta('apples', {'quality': 'AAA'}) |
116 | 78bd53a7 | Sofia Papagiannaki | |
117 | 78bd53a7 | Sofia Papagiannaki | container_info = self.get_container_info('apples') |
118 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Meta-Quality' in container_info) |
119 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Meta-Foo' in container_info) |
120 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Object-Count' in container_info) |
121 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue(int(container_info['X-Container-Object-Count']) > len(objects)) |
122 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Bytes-Used' in container_info) |
123 | 78bd53a7 | Sofia Papagiannaki | |
124 | 78bd53a7 | Sofia Papagiannaki | t = datetime.datetime.strptime(container_info['Last-Modified'],
|
125 | 78bd53a7 | Sofia Papagiannaki | DATE_FORMATS[-1])
|
126 | 78bd53a7 | Sofia Papagiannaki | last_modified = int(_time.mktime(t.timetuple()))
|
127 | 78bd53a7 | Sofia Papagiannaki | assert until < last_modified
|
128 | 78bd53a7 | Sofia Papagiannaki | |
129 | 78bd53a7 | Sofia Papagiannaki | container_info = self.get_container_info('apples', until=until) |
130 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Meta-Quality' not in container_info) |
131 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Meta-Foo' in container_info) |
132 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Until-Timestamp' in container_info) |
133 | 78bd53a7 | Sofia Papagiannaki | t = datetime.datetime.strptime( |
134 | 78bd53a7 | Sofia Papagiannaki | container_info['X-Container-Until-Timestamp'], DATE_FORMATS[2]) |
135 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue(int(_time.mktime(t1.timetuple())) <= until) |
136 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Object-Count' in container_info) |
137 | 78bd53a7 | Sofia Papagiannaki | self.assertEqual(int(container_info['X-Container-Object-Count']), len(objects)) |
138 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Bytes-Used' in container_info) |
139 | 78bd53a7 | Sofia Papagiannaki | self.assertEqual(int(container_info['X-Container-Bytes-Used']), |
140 | 78bd53a7 | Sofia Papagiannaki | sum([len(data) for data in objects.values()])) |
141 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue('X-Container-Object-Meta' in container_info) |
142 | 78bd53a7 | Sofia Papagiannaki | self.assertEqual(container_info['X-Container-Object-Meta'], |
143 | 78bd53a7 | Sofia Papagiannaki | metalist) |
144 | 78bd53a7 | Sofia Papagiannaki | |
145 | f3787696 | Sofia Papagiannaki | |
146 | f3787696 | Sofia Papagiannaki | class ContainerGet(PithosAPITest): |
147 | f3787696 | Sofia Papagiannaki | def setUp(self): |
148 | f3787696 | Sofia Papagiannaki | PithosAPITest.setUp(self)
|
149 | f3787696 | Sofia Papagiannaki | |
150 | f3787696 | Sofia Papagiannaki | self.cnames = ['pears', 'apples'] |
151 | f3787696 | Sofia Papagiannaki | self.objects = {}
|
152 | f3787696 | Sofia Papagiannaki | for c in self.cnames: |
153 | f3787696 | Sofia Papagiannaki | self.create_container(c)
|
154 | f3787696 | Sofia Papagiannaki | |
155 | f3787696 | Sofia Papagiannaki | self.objects['pears'] = {} |
156 | f3787696 | Sofia Papagiannaki | for o in o_names[:8]: |
157 | f3787696 | Sofia Papagiannaki | name, data, resp = self.upload_object('pears', o) |
158 | f3787696 | Sofia Papagiannaki | self.objects['pears'][name] = data |
159 | f3787696 | Sofia Papagiannaki | self.objects['apples'] = {} |
160 | f3787696 | Sofia Papagiannaki | for o in o_names[8:]: |
161 | f3787696 | Sofia Papagiannaki | name, data, resp = self.upload_object('apples', o) |
162 | f3787696 | Sofia Papagiannaki | self.objects['apples'][name] = data |
163 | f3787696 | Sofia Papagiannaki | |
164 | 78bd53a7 | Sofia Papagiannaki | def test_list_until(self): |
165 | 78bd53a7 | Sofia Papagiannaki | account_info = self.get_account_info()
|
166 | 78bd53a7 | Sofia Papagiannaki | t = datetime.datetime.strptime(account_info['Last-Modified'],
|
167 | 78bd53a7 | Sofia Papagiannaki | DATE_FORMATS[2])
|
168 | 78bd53a7 | Sofia Papagiannaki | t1 = t + datetime.timedelta(seconds=1)
|
169 | 78bd53a7 | Sofia Papagiannaki | until = int(_time.mktime(t1.timetuple()))
|
170 | 78bd53a7 | Sofia Papagiannaki | |
171 | 78bd53a7 | Sofia Papagiannaki | _time.sleep(2)
|
172 | 78bd53a7 | Sofia Papagiannaki | |
173 | 78bd53a7 | Sofia Papagiannaki | cname = self.cnames[0] |
174 | 78bd53a7 | Sofia Papagiannaki | self.upload_object(cname)
|
175 | 78bd53a7 | Sofia Papagiannaki | |
176 | 78bd53a7 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
177 | 78bd53a7 | Sofia Papagiannaki | r = self.get('%s?until=%s' % (url, until)) |
178 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue(r.status_code, 200) |
179 | 78bd53a7 | Sofia Papagiannaki | objects = r.content.split('\n')
|
180 | 78bd53a7 | Sofia Papagiannaki | if '' in objects: |
181 | 78bd53a7 | Sofia Papagiannaki | objects.remove('')
|
182 | 78bd53a7 | Sofia Papagiannaki | self.assertEqual(objects,
|
183 | 78bd53a7 | Sofia Papagiannaki | sorted(self.objects[cname].keys())) |
184 | 78bd53a7 | Sofia Papagiannaki | |
185 | 78bd53a7 | Sofia Papagiannaki | r = self.get('%s?until=%s&format=json' % (url, until)) |
186 | 78bd53a7 | Sofia Papagiannaki | self.assertTrue(r.status_code, 200) |
187 | 78bd53a7 | Sofia Papagiannaki | try:
|
188 | 78bd53a7 | Sofia Papagiannaki | objects = json.loads(r.content) |
189 | 78bd53a7 | Sofia Papagiannaki | except:
|
190 | 78bd53a7 | Sofia Papagiannaki | self.fail('json format expected') |
191 | 78bd53a7 | Sofia Papagiannaki | self.assertEqual([o['name'] for o in objects], |
192 | 78bd53a7 | Sofia Papagiannaki | sorted(self.objects[cname].keys())) |
193 | 78bd53a7 | Sofia Papagiannaki | |
194 | f3787696 | Sofia Papagiannaki | def test_list_shared(self): |
195 | f3787696 | Sofia Papagiannaki | # share an object
|
196 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
197 | f3787696 | Sofia Papagiannaki | onames = self.objects[cname].keys()
|
198 | f3787696 | Sofia Papagiannaki | oname = onames.pop() |
199 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname, oname) |
200 | d6a92fa0 | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_SHARING='read=*') |
201 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
202 | f3787696 | Sofia Papagiannaki | |
203 | f3787696 | Sofia Papagiannaki | # publish another object
|
204 | f3787696 | Sofia Papagiannaki | other = onames.pop() |
205 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname, other) |
206 | d6a92fa0 | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_PUBLIC='true') |
207 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
208 | f3787696 | Sofia Papagiannaki | |
209 | f3787696 | Sofia Papagiannaki | # list shared and assert only the shared object is returned
|
210 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
211 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?shared=' % url) |
212 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
213 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
214 | 3a19e99b | Sofia Papagiannaki | if '' in objects: |
215 | 3a19e99b | Sofia Papagiannaki | objects.remove('')
|
216 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], objects)
|
217 | f3787696 | Sofia Papagiannaki | |
218 | f3787696 | Sofia Papagiannaki | # list detailed shared and assert only the shared object is returned
|
219 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
220 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?shared=&format=json' % url) |
221 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
222 | f3787696 | Sofia Papagiannaki | try:
|
223 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
224 | f3787696 | Sofia Papagiannaki | except:
|
225 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
226 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], [o['name'] for o in objects]) |
227 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in objects[0]) |
228 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_public' not in objects[0]) |
229 | f3787696 | Sofia Papagiannaki | |
230 | f3787696 | Sofia Papagiannaki | # publish the shared object and assert it is still listed in the
|
231 | f3787696 | Sofia Papagiannaki | # shared objects
|
232 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname, oname) |
233 | d6a92fa0 | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_PUBLIC='true') |
234 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
235 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
236 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?shared=&format=json' % url) |
237 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
238 | f3787696 | Sofia Papagiannaki | try:
|
239 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
240 | f3787696 | Sofia Papagiannaki | except:
|
241 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
242 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], [o['name'] for o in objects]) |
243 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in objects[0]) |
244 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('x_object_public' in objects[0]) |
245 | f3787696 | Sofia Papagiannaki | |
246 | f3787696 | Sofia Papagiannaki | # create child object
|
247 | f3787696 | Sofia Papagiannaki | descendant = strnextling(oname) |
248 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
249 | f3787696 | Sofia Papagiannaki | # request shared and assert child obejct is not listed
|
250 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
251 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?shared=' % url) |
252 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
253 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
254 | 3a19e99b | Sofia Papagiannaki | if '' in objects: |
255 | 3a19e99b | Sofia Papagiannaki | objects.remove('')
|
256 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
257 | f3787696 | Sofia Papagiannaki | self.assertTrue(descendant not in objects) |
258 | f3787696 | Sofia Papagiannaki | |
259 | f3787696 | Sofia Papagiannaki | # check folder inheritance
|
260 | f3787696 | Sofia Papagiannaki | oname, _ = self.create_folder(cname, HTTP_X_OBJECT_SHARING='read=*') |
261 | f3787696 | Sofia Papagiannaki | # create child object
|
262 | bc4f25c0 | Sofia Papagiannaki | descendant = '%s/%s' % (oname, get_random_name())
|
263 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
264 | f3787696 | Sofia Papagiannaki | # request shared
|
265 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
266 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?shared=' % url) |
267 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
268 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
269 | 3a19e99b | Sofia Papagiannaki | if '' in objects: |
270 | 3a19e99b | Sofia Papagiannaki | objects.remove('')
|
271 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
272 | f3787696 | Sofia Papagiannaki | self.assertTrue(descendant in objects) |
273 | f3787696 | Sofia Papagiannaki | |
274 | f3787696 | Sofia Papagiannaki | def test_list_public(self): |
275 | f3787696 | Sofia Papagiannaki | # publish an object
|
276 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
277 | f3787696 | Sofia Papagiannaki | onames = self.objects[cname].keys()
|
278 | f3787696 | Sofia Papagiannaki | oname = onames.pop() |
279 | 3a19e99b | Sofia Papagiannaki | other = onames.pop() |
280 | 3a19e99b | Sofia Papagiannaki | |
281 | 3a19e99b | Sofia Papagiannaki | # publish an object
|
282 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname, oname) |
283 | d6a92fa0 | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_PUBLIC='true') |
284 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
285 | f3787696 | Sofia Papagiannaki | |
286 | f3787696 | Sofia Papagiannaki | # share another
|
287 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname, other) |
288 | d6a92fa0 | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_SHARING='read=alice') |
289 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
290 | f3787696 | Sofia Papagiannaki | |
291 | f3787696 | Sofia Papagiannaki | # list public and assert only the public object is returned
|
292 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
293 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?public=' % url) |
294 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
295 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
296 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in r.content.split('\n')) |
297 | 3a19e99b | Sofia Papagiannaki | (self.assertTrue(object not in objects) for object in o_names[1:]) |
298 | f3787696 | Sofia Papagiannaki | |
299 | f3787696 | Sofia Papagiannaki | # list detailed public and assert only the public object is returned
|
300 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
301 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?public=&format=json' % url) |
302 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
303 | f3787696 | Sofia Papagiannaki | try:
|
304 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
305 | f3787696 | Sofia Papagiannaki | except:
|
306 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
307 | 3a19e99b | Sofia Papagiannaki | self.assertEqual([oname], [obj['name'] for obj in objects]) |
308 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' not in objects[0]) |
309 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_public' in objects[0]) |
310 | f3787696 | Sofia Papagiannaki | |
311 | f3787696 | Sofia Papagiannaki | # share the public object and assert it is still listed in the
|
312 | f3787696 | Sofia Papagiannaki | # public objects
|
313 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname, oname) |
314 | d6a92fa0 | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_SHARING='read=alice') |
315 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
316 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
317 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?public=&format=json' % url) |
318 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
319 | f3787696 | Sofia Papagiannaki | try:
|
320 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
321 | f3787696 | Sofia Papagiannaki | except:
|
322 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
323 | 3a19e99b | Sofia Papagiannaki | self.assertEqual([oname], [obj['name'] for obj in objects]) |
324 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in objects[0]) |
325 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_public' in objects[0]) |
326 | f3787696 | Sofia Papagiannaki | |
327 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
328 | d6a92fa0 | Sofia Papagiannaki | |
329 | f3787696 | Sofia Papagiannaki | # Assert listing the container public contents is forbidden to not
|
330 | f3787696 | Sofia Papagiannaki | # shared users
|
331 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?public=&format=json' % url, user='bob') |
332 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
333 | f3787696 | Sofia Papagiannaki | |
334 | 3a19e99b | Sofia Papagiannaki | # Assert forbidden public object listing to shared users
|
335 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?public=&format=json' % url, user='alice') |
336 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
337 | f3787696 | Sofia Papagiannaki | |
338 | f3787696 | Sofia Papagiannaki | # create child object
|
339 | f3787696 | Sofia Papagiannaki | descendant = strnextling(oname) |
340 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
341 | f3787696 | Sofia Papagiannaki | # request public and assert child obejct is not listed
|
342 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?public=' % url) |
343 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
344 | 3a19e99b | Sofia Papagiannaki | if '' in objects: |
345 | 3a19e99b | Sofia Papagiannaki | objects.remove('')
|
346 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
347 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
348 | f3787696 | Sofia Papagiannaki | (self.assertTrue(o not in objects) for o in o_names[1:]) |
349 | f3787696 | Sofia Papagiannaki | |
350 | f3787696 | Sofia Papagiannaki | # test folder inheritance
|
351 | f3787696 | Sofia Papagiannaki | oname, _ = self.create_folder(cname, HTTP_X_OBJECT_PUBLIC='true') |
352 | f3787696 | Sofia Papagiannaki | # create child object
|
353 | bc4f25c0 | Sofia Papagiannaki | descendant = '%s/%s' % (oname, get_random_name())
|
354 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
355 | f3787696 | Sofia Papagiannaki | # request public
|
356 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?public=' % url) |
357 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
358 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
359 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
360 | f3787696 | Sofia Papagiannaki | self.assertTrue(descendant not in objects) |
361 | f3787696 | Sofia Papagiannaki | |
362 | 3a19e99b | Sofia Papagiannaki | def test_list_shared_public(self): |
363 | 3a19e99b | Sofia Papagiannaki | # publish an object
|
364 | 3a19e99b | Sofia Papagiannaki | cname = self.cnames[0] |
365 | 3a19e99b | Sofia Papagiannaki | container_url = join_urls(self.pithos_path, self.user, cname) |
366 | 3a19e99b | Sofia Papagiannaki | onames = self.objects[cname].keys()
|
367 | 3a19e99b | Sofia Papagiannaki | oname = onames.pop() |
368 | 3a19e99b | Sofia Papagiannaki | url = join_urls(container_url, oname) |
369 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_PUBLIC='true') |
370 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
371 | 3a19e99b | Sofia Papagiannaki | |
372 | 3a19e99b | Sofia Papagiannaki | # share another
|
373 | 3a19e99b | Sofia Papagiannaki | other = onames.pop() |
374 | 3a19e99b | Sofia Papagiannaki | url = join_urls(container_url, other) |
375 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_SHARING='read=alice') |
376 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
377 | 3a19e99b | Sofia Papagiannaki | |
378 | 3a19e99b | Sofia Papagiannaki | # list shared and public objects and assert object is listed
|
379 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?shared=&public=&format=json' % container_url) |
380 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
381 | 3a19e99b | Sofia Papagiannaki | objects = json.loads(r.content) |
382 | 3a19e99b | Sofia Papagiannaki | self.assertEqual([o['name'] for o in objects], sorted([oname, other])) |
383 | 3a19e99b | Sofia Papagiannaki | for o in objects: |
384 | 3a19e99b | Sofia Papagiannaki | if o['name'] == oname: |
385 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('x_object_public' in o.keys()) |
386 | 3a19e99b | Sofia Papagiannaki | elif o['name'] == other: |
387 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in o.keys()) |
388 | 3a19e99b | Sofia Papagiannaki | |
389 | 3a19e99b | Sofia Papagiannaki | # assert not listing shared and public to a not shared user
|
390 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?shared=&public=&format=json' % container_url, |
391 | 3a19e99b | Sofia Papagiannaki | user='bob')
|
392 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
393 | 3a19e99b | Sofia Papagiannaki | |
394 | 3a19e99b | Sofia Papagiannaki | # assert not listing public to a shared user
|
395 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?shared=&public=&format=json' % container_url, |
396 | 3a19e99b | Sofia Papagiannaki | user='alice')
|
397 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
398 | 3a19e99b | Sofia Papagiannaki | |
399 | 3a19e99b | Sofia Papagiannaki | # create child object
|
400 | 3a19e99b | Sofia Papagiannaki | descendant = strnextling(oname) |
401 | 3a19e99b | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
402 | 3a19e99b | Sofia Papagiannaki | # request public and assert child obejct is not listed
|
403 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?shared=&public=' % container_url) |
404 | 3a19e99b | Sofia Papagiannaki | objects = r.content.split('\n')
|
405 | 3a19e99b | Sofia Papagiannaki | if '' in objects: |
406 | 3a19e99b | Sofia Papagiannaki | objects.remove('')
|
407 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
408 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(oname in objects) |
409 | 3a19e99b | Sofia Papagiannaki | (self.assertTrue(o not in objects) for o in o_names[1:]) |
410 | 3a19e99b | Sofia Papagiannaki | |
411 | 3a19e99b | Sofia Papagiannaki | # test folder inheritance
|
412 | 3a19e99b | Sofia Papagiannaki | oname, _ = self.create_folder(cname, HTTP_X_OBJECT_PUBLIC='true') |
413 | 3a19e99b | Sofia Papagiannaki | # create child object
|
414 | bc4f25c0 | Sofia Papagiannaki | descendant = '%s/%s' % (oname, get_random_name())
|
415 | 3a19e99b | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
416 | 3a19e99b | Sofia Papagiannaki | # request public
|
417 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?shared=&public=' % container_url) |
418 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
419 | 3a19e99b | Sofia Papagiannaki | objects = r.content.split('\n')
|
420 | 3a19e99b | Sofia Papagiannaki | if '' in objects: |
421 | 3a19e99b | Sofia Papagiannaki | objects.remove('')
|
422 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(oname in objects) |
423 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(descendant not in objects) |
424 | 3a19e99b | Sofia Papagiannaki | |
425 | f3787696 | Sofia Papagiannaki | def test_list_objects(self): |
426 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
427 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
428 | d6a92fa0 | Sofia Papagiannaki | r = self.get(url)
|
429 | f3787696 | Sofia Papagiannaki | self.assertTrue(r.status_code, 200) |
430 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
431 | f3787696 | Sofia Papagiannaki | if '' in objects: |
432 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
433 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, sorted(self.objects[cname].keys())) |
434 | f3787696 | Sofia Papagiannaki | |
435 | f3787696 | Sofia Papagiannaki | def test_list_objects_containing_slash(self): |
436 | f3787696 | Sofia Papagiannaki | self.create_container('test') |
437 | 3a19e99b | Sofia Papagiannaki | self.upload_object('test', quote('/objectname', '')) |
438 | f3787696 | Sofia Papagiannaki | |
439 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'test') |
440 | d6a92fa0 | Sofia Papagiannaki | |
441 | d6a92fa0 | Sofia Papagiannaki | r = self.get(url)
|
442 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
443 | f3787696 | Sofia Papagiannaki | if '' in objects: |
444 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
445 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, ['/objectname']) |
446 | f3787696 | Sofia Papagiannaki | |
447 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?format=json' % url) |
448 | f3787696 | Sofia Papagiannaki | try:
|
449 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
450 | f3787696 | Sofia Papagiannaki | except:
|
451 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
452 | f3787696 | Sofia Papagiannaki | self.assertEqual([o['name'] for o in objects], ['/objectname']) |
453 | f3787696 | Sofia Papagiannaki | |
454 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?format=xml' % url) |
455 | f3787696 | Sofia Papagiannaki | try:
|
456 | f3787696 | Sofia Papagiannaki | objects = minidom.parseString(r.content) |
457 | f3787696 | Sofia Papagiannaki | except:
|
458 | f3787696 | Sofia Papagiannaki | self.fail('xml format expected') |
459 | f3787696 | Sofia Papagiannaki | self.assertEqual(
|
460 | f3787696 | Sofia Papagiannaki | [n.firstChild.data for n in objects.getElementsByTagName('name')], |
461 | f3787696 | Sofia Papagiannaki | ['/objectname'])
|
462 | f3787696 | Sofia Papagiannaki | |
463 | f3787696 | Sofia Papagiannaki | def test_list_objects_with_limit_marker(self): |
464 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
465 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
466 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?limit=qwert' % url) |
467 | f3787696 | Sofia Papagiannaki | self.assertTrue(r.status_code != 500) |
468 | f3787696 | Sofia Papagiannaki | |
469 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?limit=2' % url) |
470 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
471 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
472 | f3787696 | Sofia Papagiannaki | if '' in objects: |
473 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
474 | f3787696 | Sofia Papagiannaki | |
475 | f3787696 | Sofia Papagiannaki | onames = sorted(self.objects[cname].keys()) |
476 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, onames[:2]) |
477 | f3787696 | Sofia Papagiannaki | |
478 | f3787696 | Sofia Papagiannaki | markers = ['How To Win Friends And Influence People.pdf',
|
479 | f3787696 | Sofia Papagiannaki | 'moms_birthday.jpg']
|
480 | f3787696 | Sofia Papagiannaki | limit = 4
|
481 | f3787696 | Sofia Papagiannaki | for m in markers: |
482 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?limit=%s&marker=%s' % (url, limit, m)) |
483 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
484 | f3787696 | Sofia Papagiannaki | if '' in objects: |
485 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
486 | f3787696 | Sofia Papagiannaki | start = onames.index(m) + 1
|
487 | f3787696 | Sofia Papagiannaki | end = start + limit |
488 | f3787696 | Sofia Papagiannaki | end = end if len(onames) >= end else len(onames) |
489 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, onames[start:end])
|
490 | f3787696 | Sofia Papagiannaki | |
491 | f3787696 | Sofia Papagiannaki | @pithos_test_settings(API_LIST_LIMIT=10) |
492 | f3787696 | Sofia Papagiannaki | def test_list_limit_exceeds(self): |
493 | f3787696 | Sofia Papagiannaki | self.create_container('container') |
494 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'container') |
495 | f3787696 | Sofia Papagiannaki | |
496 | f3787696 | Sofia Papagiannaki | for _ in range(pithos_settings.API_LIST_LIMIT + 1): |
497 | f3787696 | Sofia Papagiannaki | self.upload_object('container') |
498 | f3787696 | Sofia Papagiannaki | |
499 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?format=json' % url) |
500 | f3787696 | Sofia Papagiannaki | try:
|
501 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
502 | f3787696 | Sofia Papagiannaki | except:
|
503 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
504 | f3787696 | Sofia Papagiannaki | self.assertEqual(pithos_settings.API_LIST_LIMIT,
|
505 | f3787696 | Sofia Papagiannaki | len(objects))
|
506 | f3787696 | Sofia Papagiannaki | |
507 | f3787696 | Sofia Papagiannaki | def test_list_pseudo_hierarchical_folders(self): |
508 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'apples') |
509 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?prefix=photos&delimiter=/' % url) |
510 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
511 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
512 | f3787696 | Sofia Papagiannaki | if '' in objects: |
513 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
514 | f3787696 | Sofia Papagiannaki | self.assertEquals(
|
515 | f3787696 | Sofia Papagiannaki | ['photos/animals/', 'photos/me.jpg', 'photos/plants/'], |
516 | f3787696 | Sofia Papagiannaki | objects) |
517 | f3787696 | Sofia Papagiannaki | |
518 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?prefix=photos/animals&delimiter=/' % url) |
519 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
520 | f3787696 | Sofia Papagiannaki | if '' in objects: |
521 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
522 | f3787696 | Sofia Papagiannaki | self.assertEquals(
|
523 | f3787696 | Sofia Papagiannaki | ['photos/animals/cats/', 'photos/animals/dogs/'], objects) |
524 | f3787696 | Sofia Papagiannaki | |
525 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?path=photos' % url) |
526 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
527 | f3787696 | Sofia Papagiannaki | if '' in objects: |
528 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
529 | f3787696 | Sofia Papagiannaki | self.assertEquals(['photos/me.jpg'], objects) |
530 | f3787696 | Sofia Papagiannaki | |
531 | f3787696 | Sofia Papagiannaki | def test_extended_list_json(self): |
532 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'apples') |
533 | f3787696 | Sofia Papagiannaki | params = {'format': 'json', 'limit': 2, 'prefix': 'photos/animals', |
534 | f3787696 | Sofia Papagiannaki | 'delimiter': '/'} |
535 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?%s' % (url, urlencode(params))) |
536 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
537 | f3787696 | Sofia Papagiannaki | try:
|
538 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
539 | f3787696 | Sofia Papagiannaki | except:
|
540 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
541 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects[0]['subdir'], 'photos/animals/cats/') |
542 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects[1]['subdir'], 'photos/animals/dogs/') |
543 | f3787696 | Sofia Papagiannaki | |
544 | f3787696 | Sofia Papagiannaki | def test_extended_list_xml(self): |
545 | d6a92fa0 | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'apples') |
546 | f3787696 | Sofia Papagiannaki | params = {'format': 'xml', 'limit': 4, 'prefix': 'photos', |
547 | f3787696 | Sofia Papagiannaki | 'delimiter': '/'} |
548 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?%s' % (url, urlencode(params))) |
549 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
550 | f3787696 | Sofia Papagiannaki | try:
|
551 | f3787696 | Sofia Papagiannaki | xml = minidom.parseString(r.content) |
552 | f3787696 | Sofia Papagiannaki | except:
|
553 | f3787696 | Sofia Papagiannaki | self.fail('xml format expected') |
554 | f3787696 | Sofia Papagiannaki | self.assert_extended(xml, 'xml', 'object', size=4) |
555 | f3787696 | Sofia Papagiannaki | dirs = xml.getElementsByTagName('subdir')
|
556 | f3787696 | Sofia Papagiannaki | self.assertEqual(len(dirs), 2) |
557 | f3787696 | Sofia Papagiannaki | self.assertEqual(dirs[0].attributes['name'].value, 'photos/animals/') |
558 | f3787696 | Sofia Papagiannaki | self.assertEqual(dirs[1].attributes['name'].value, 'photos/plants/') |
559 | f3787696 | Sofia Papagiannaki | |
560 | f3787696 | Sofia Papagiannaki | objects = xml.getElementsByTagName('name')
|
561 | f3787696 | Sofia Papagiannaki | self.assertEqual(len(objects), 1) |
562 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects[0].childNodes[0].data, 'photos/me.jpg') |
563 | f3787696 | Sofia Papagiannaki | |
564 | f3787696 | Sofia Papagiannaki | def test_list_meta_double_matching(self): |
565 | f3787696 | Sofia Papagiannaki | # update object meta
|
566 | f3787696 | Sofia Papagiannaki | cname = 'apples'
|
567 | d6a92fa0 | Sofia Papagiannaki | container_url = join_urls(self.pithos_path, self.user, cname) |
568 | f3787696 | Sofia Papagiannaki | oname = self.objects[cname].keys().pop()
|
569 | f3787696 | Sofia Papagiannaki | meta = {'quality': 'aaa', 'stock': 'true'} |
570 | f3787696 | Sofia Papagiannaki | headers = dict(('HTTP_X_OBJECT_META_%s' % k.upper(), v) |
571 | f3787696 | Sofia Papagiannaki | for k, v in meta.iteritems()) |
572 | d6a92fa0 | Sofia Papagiannaki | object_url = join_urls(container_url, oname) |
573 | d6a92fa0 | Sofia Papagiannaki | self.post(object_url, content_type='', **headers) |
574 | f3787696 | Sofia Papagiannaki | |
575 | f3787696 | Sofia Papagiannaki | # list objects that satisfy the criteria
|
576 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?meta=Quality,Stock' % container_url) |
577 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
578 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
579 | f3787696 | Sofia Papagiannaki | if '' in objects: |
580 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
581 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, [oname])
|
582 | f3787696 | Sofia Papagiannaki | |
583 | f3787696 | Sofia Papagiannaki | def test_list_using_meta(self): |
584 | f3787696 | Sofia Papagiannaki | # update object meta
|
585 | f3787696 | Sofia Papagiannaki | cname = 'apples'
|
586 | d6a92fa0 | Sofia Papagiannaki | container_url = join_urls(self.pithos_path, self.user, cname) |
587 | d6a92fa0 | Sofia Papagiannaki | |
588 | 3a19e99b | Sofia Papagiannaki | onames = self.objects[cname].keys()
|
589 | 3a19e99b | Sofia Papagiannaki | url = join_urls(container_url, onames[0])
|
590 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_META_QUALITY='aaa') |
591 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
592 | d6a92fa0 | Sofia Papagiannaki | |
593 | 3a19e99b | Sofia Papagiannaki | url = join_urls(container_url, onames[1])
|
594 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_META_QUALITY='ab') |
595 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
596 | f3787696 | Sofia Papagiannaki | |
597 | 3a19e99b | Sofia Papagiannaki | url = join_urls(container_url, onames[2])
|
598 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_META_STOCK='100') |
599 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
600 | d6a92fa0 | Sofia Papagiannaki | |
601 | 3a19e99b | Sofia Papagiannaki | url = join_urls(container_url, onames[3])
|
602 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_X_OBJECT_META_STOCK='200') |
603 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
604 | f3787696 | Sofia Papagiannaki | |
605 | f3787696 | Sofia Papagiannaki | # test multiple existence criteria matches
|
606 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?meta=Quality,Stock' % container_url) |
607 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
608 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
609 | f3787696 | Sofia Papagiannaki | if '' in objects: |
610 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
611 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, sorted(onames)) |
612 | f3787696 | Sofia Papagiannaki | |
613 | f3787696 | Sofia Papagiannaki | # list objects that satisfy the existence criteria
|
614 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?meta=Stock' % container_url) |
615 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
616 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
617 | f3787696 | Sofia Papagiannaki | if '' in objects: |
618 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
619 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, sorted(onames[2:])) |
620 | f3787696 | Sofia Papagiannaki | |
621 | f3787696 | Sofia Papagiannaki | # test case insensitive existence criteria matching
|
622 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?meta=quality' % container_url) |
623 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
624 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
625 | f3787696 | Sofia Papagiannaki | if '' in objects: |
626 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
627 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, sorted(onames[:2])) |
628 | f3787696 | Sofia Papagiannaki | |
629 | f3787696 | Sofia Papagiannaki | # test do not all existencecriteria match
|
630 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?meta=Quality,Foo' % container_url) |
631 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
632 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
633 | f3787696 | Sofia Papagiannaki | if '' in objects: |
634 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
635 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, sorted(onames[:2])) |
636 | f3787696 | Sofia Papagiannaki | |
637 | f3787696 | Sofia Papagiannaki | # test equals criteria
|
638 | d6a92fa0 | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (container_url, quote('Quality=aaa'))) |
639 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
640 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
641 | f3787696 | Sofia Papagiannaki | if '' in objects: |
642 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
643 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, [onames[0]]) |
644 | f3787696 | Sofia Papagiannaki | |
645 | f3787696 | Sofia Papagiannaki | # test not equals criteria
|
646 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (container_url, quote('Quality!=aaa'))) |
647 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
648 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
649 | f3787696 | Sofia Papagiannaki | if '' in objects: |
650 | 3a19e99b | Sofia Papagiannaki | objects.remove('')
|
651 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, [onames[1]]) |
652 | f3787696 | Sofia Papagiannaki | |
653 | f3787696 | Sofia Papagiannaki | # test lte criteria
|
654 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (container_url, quote('Stock<=120'))) |
655 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
656 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
657 | f3787696 | Sofia Papagiannaki | if '' in objects: |
658 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
659 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, [onames[2]]) |
660 | f3787696 | Sofia Papagiannaki | |
661 | f3787696 | Sofia Papagiannaki | # test gte criteria
|
662 | 3a19e99b | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (container_url, quote('Stock>=200'))) |
663 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
664 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
665 | f3787696 | Sofia Papagiannaki | if '' in objects: |
666 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
667 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(objects, [onames[3]]) |
668 | f3787696 | Sofia Papagiannaki | |
669 | 3a19e99b | Sofia Papagiannaki | def test_if_modified_since(self): |
670 | 3a19e99b | Sofia Papagiannaki | cname = 'apples'
|
671 | 3a19e99b | Sofia Papagiannaki | container_info = self.get_container_info(cname)
|
672 | 3a19e99b | Sofia Papagiannaki | last_modified = container_info['Last-Modified']
|
673 | 3a19e99b | Sofia Papagiannaki | t1 = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
|
674 | 3a19e99b | Sofia Papagiannaki | t1_formats = map(t1.strftime, DATE_FORMATS)
|
675 | 3a19e99b | Sofia Papagiannaki | |
676 | 3a19e99b | Sofia Papagiannaki | # Check not modified
|
677 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
678 | 3a19e99b | Sofia Papagiannaki | for t in t1_formats: |
679 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_MODIFIED_SINCE=t)
|
680 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 304) |
681 | 3a19e99b | Sofia Papagiannaki | |
682 | 3a19e99b | Sofia Papagiannaki | # modify account: add container
|
683 | 3a19e99b | Sofia Papagiannaki | _time.sleep(1)
|
684 | 3a19e99b | Sofia Papagiannaki | oname = self.upload_object(cname)[0] |
685 | 3a19e99b | Sofia Papagiannaki | |
686 | 3a19e99b | Sofia Papagiannaki | # Check modified
|
687 | 3a19e99b | Sofia Papagiannaki | objects = self.objects[cname].keys()
|
688 | 3a19e99b | Sofia Papagiannaki | objects.append(oname) |
689 | 3a19e99b | Sofia Papagiannaki | for t in t1_formats: |
690 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_MODIFIED_SINCE=t)
|
691 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
692 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.content.split('\n')[:-1], sorted(objects)) |
693 | 3a19e99b | Sofia Papagiannaki | |
694 | 3a19e99b | Sofia Papagiannaki | container_info = self.get_container_info(cname)
|
695 | 3a19e99b | Sofia Papagiannaki | last_modified = container_info['Last-Modified']
|
696 | 3a19e99b | Sofia Papagiannaki | t2 = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
|
697 | 3a19e99b | Sofia Papagiannaki | t2_formats = map(t2.strftime, DATE_FORMATS)
|
698 | 3a19e99b | Sofia Papagiannaki | |
699 | 3a19e99b | Sofia Papagiannaki | # modify account: update account meta
|
700 | 3a19e99b | Sofia Papagiannaki | _time.sleep(1)
|
701 | 3a19e99b | Sofia Papagiannaki | self.update_container_meta(cname, {'foo': 'bar'}) |
702 | 3a19e99b | Sofia Papagiannaki | |
703 | 3a19e99b | Sofia Papagiannaki | # Check modified
|
704 | 3a19e99b | Sofia Papagiannaki | for t in t2_formats: |
705 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_MODIFIED_SINCE=t)
|
706 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
707 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.content.split('\n')[:-1], sorted(objects)) |
708 | 3a19e99b | Sofia Papagiannaki | |
709 | 3a19e99b | Sofia Papagiannaki | def test_if_modified_since_invalid_date(self): |
710 | 3a19e99b | Sofia Papagiannaki | cname = 'apples'
|
711 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
712 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_MODIFIED_SINCE='Monday') |
713 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
714 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.content.split('\n')[:-1], |
715 | 3a19e99b | Sofia Papagiannaki | sorted(self.objects['apples'].keys())) |
716 | 3a19e99b | Sofia Papagiannaki | |
717 | 3a19e99b | Sofia Papagiannaki | def test_if_not_modified_since(self): |
718 | 3a19e99b | Sofia Papagiannaki | cname = 'apples'
|
719 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
720 | 3a19e99b | Sofia Papagiannaki | container_info = self.get_container_info(cname)
|
721 | 3a19e99b | Sofia Papagiannaki | last_modified = container_info['Last-Modified']
|
722 | 3a19e99b | Sofia Papagiannaki | t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
|
723 | 3a19e99b | Sofia Papagiannaki | |
724 | 3a19e99b | Sofia Papagiannaki | # Check unmodified
|
725 | 3a19e99b | Sofia Papagiannaki | t1 = t + datetime.timedelta(seconds=1)
|
726 | 3a19e99b | Sofia Papagiannaki | t1_formats = map(t1.strftime, DATE_FORMATS)
|
727 | 3a19e99b | Sofia Papagiannaki | for t in t1_formats: |
728 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=t)
|
729 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
730 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(
|
731 | 3a19e99b | Sofia Papagiannaki | r.content.split('\n')[:-1], |
732 | 3a19e99b | Sofia Papagiannaki | sorted(self.objects['apples'])) |
733 | 3a19e99b | Sofia Papagiannaki | |
734 | 3a19e99b | Sofia Papagiannaki | # modify account: add container
|
735 | 3a19e99b | Sofia Papagiannaki | _time.sleep(2)
|
736 | 3a19e99b | Sofia Papagiannaki | self.upload_object(cname)
|
737 | 3a19e99b | Sofia Papagiannaki | |
738 | 3a19e99b | Sofia Papagiannaki | container_info = self.get_container_info(cname)
|
739 | 3a19e99b | Sofia Papagiannaki | last_modified = container_info['Last-Modified']
|
740 | 3a19e99b | Sofia Papagiannaki | t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
|
741 | 3a19e99b | Sofia Papagiannaki | t2 = t - datetime.timedelta(seconds=1)
|
742 | 3a19e99b | Sofia Papagiannaki | t2_formats = map(t2.strftime, DATE_FORMATS)
|
743 | 3a19e99b | Sofia Papagiannaki | |
744 | 3a19e99b | Sofia Papagiannaki | # Check modified
|
745 | 3a19e99b | Sofia Papagiannaki | for t in t2_formats: |
746 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=t)
|
747 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 412) |
748 | 3a19e99b | Sofia Papagiannaki | |
749 | 3a19e99b | Sofia Papagiannaki | # modify account: update account meta
|
750 | 3a19e99b | Sofia Papagiannaki | _time.sleep(1)
|
751 | 3a19e99b | Sofia Papagiannaki | self.update_container_meta(cname, {'foo': 'bar'}) |
752 | 3a19e99b | Sofia Papagiannaki | |
753 | 3a19e99b | Sofia Papagiannaki | container_info = self.get_container_info(cname)
|
754 | 3a19e99b | Sofia Papagiannaki | last_modified = container_info['Last-Modified']
|
755 | 3a19e99b | Sofia Papagiannaki | t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
|
756 | 3a19e99b | Sofia Papagiannaki | t3 = t - datetime.timedelta(seconds=1)
|
757 | 3a19e99b | Sofia Papagiannaki | t3_formats = map(t3.strftime, DATE_FORMATS)
|
758 | 3a19e99b | Sofia Papagiannaki | |
759 | 3a19e99b | Sofia Papagiannaki | # Check modified
|
760 | 3a19e99b | Sofia Papagiannaki | for t in t3_formats: |
761 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=t)
|
762 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 412) |
763 | 3a19e99b | Sofia Papagiannaki | |
764 | 3a19e99b | Sofia Papagiannaki | def test_if_unmodified_since(self): |
765 | 3a19e99b | Sofia Papagiannaki | cname = 'apples'
|
766 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
767 | 3a19e99b | Sofia Papagiannaki | container_info = self.get_container_info(cname)
|
768 | 3a19e99b | Sofia Papagiannaki | last_modified = container_info['Last-Modified']
|
769 | 3a19e99b | Sofia Papagiannaki | t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
|
770 | 3a19e99b | Sofia Papagiannaki | t = t + datetime.timedelta(seconds=1)
|
771 | 3a19e99b | Sofia Papagiannaki | t_formats = map(t.strftime, DATE_FORMATS)
|
772 | 3a19e99b | Sofia Papagiannaki | |
773 | 3a19e99b | Sofia Papagiannaki | for tf in t_formats: |
774 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=tf)
|
775 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
776 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(
|
777 | 3a19e99b | Sofia Papagiannaki | r.content.split('\n')[:-1], |
778 | 3a19e99b | Sofia Papagiannaki | sorted(self.objects['apples'])) |
779 | 3a19e99b | Sofia Papagiannaki | |
780 | 3a19e99b | Sofia Papagiannaki | def test_if_unmodified_since_precondition_failed(self): |
781 | 3a19e99b | Sofia Papagiannaki | cname = 'apples'
|
782 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
783 | 3a19e99b | Sofia Papagiannaki | container_info = self.get_container_info(cname)
|
784 | 3a19e99b | Sofia Papagiannaki | last_modified = container_info['Last-Modified']
|
785 | 3a19e99b | Sofia Papagiannaki | t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
|
786 | 3a19e99b | Sofia Papagiannaki | t = t - datetime.timedelta(seconds=1)
|
787 | 3a19e99b | Sofia Papagiannaki | t_formats = map(t.strftime, DATE_FORMATS)
|
788 | 3a19e99b | Sofia Papagiannaki | |
789 | 3a19e99b | Sofia Papagiannaki | for tf in t_formats: |
790 | 3a19e99b | Sofia Papagiannaki | r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=tf)
|
791 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 412) |
792 | 3a19e99b | Sofia Papagiannaki | |
793 | 3a19e99b | Sofia Papagiannaki | |
794 | 3a19e99b | Sofia Papagiannaki | class ContainerPut(PithosAPITest): |
795 | 3a19e99b | Sofia Papagiannaki | def test_create(self): |
796 | 3a19e99b | Sofia Papagiannaki | self.create_container('c1') |
797 | 3a19e99b | Sofia Papagiannaki | self.list_containers()
|
798 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('c1' in self.list_containers(format=None)) |
799 | 3a19e99b | Sofia Papagiannaki | |
800 | 3a19e99b | Sofia Papagiannaki | def test_create_twice(self): |
801 | 3a19e99b | Sofia Papagiannaki | self.create_container('c1') |
802 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('c1' in self.list_containers(format=None)) |
803 | 2a194295 | Sofia Papagiannaki | r = self.create_container('c1')[-1] |
804 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
805 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('c1' in self.list_containers(format=None)) |
806 | 3a19e99b | Sofia Papagiannaki | |
807 | 3a19e99b | Sofia Papagiannaki | |
808 | 3a19e99b | Sofia Papagiannaki | class ContainerPost(PithosAPITest): |
809 | 3a19e99b | Sofia Papagiannaki | def test_update_meta(self): |
810 | 3a19e99b | Sofia Papagiannaki | cname = 'apples'
|
811 | 3a19e99b | Sofia Papagiannaki | self.create_container(cname)
|
812 | 3a19e99b | Sofia Papagiannaki | meta = {'test': 'test33', 'tost': 'tost22'} |
813 | 3a19e99b | Sofia Papagiannaki | self.update_container_meta(cname, meta)
|
814 | 3a19e99b | Sofia Papagiannaki | info = self.get_container_info(cname)
|
815 | 3a19e99b | Sofia Papagiannaki | for k, v in meta.items(): |
816 | 3a19e99b | Sofia Papagiannaki | k = 'x-container-meta-%s' % k
|
817 | 3a19e99b | Sofia Papagiannaki | self.assertTrue(k in info) |
818 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(info[k], v)
|
819 | 3a19e99b | Sofia Papagiannaki | |
820 | 3a19e99b | Sofia Papagiannaki | def test_quota(self): |
821 | 3a19e99b | Sofia Papagiannaki | self.create_container('c1') |
822 | 3a19e99b | Sofia Papagiannaki | |
823 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'c1') |
824 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, HTTP_X_CONTAINER_POLICY_QUOTA='100') |
825 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
826 | 3a19e99b | Sofia Papagiannaki | |
827 | 3a19e99b | Sofia Papagiannaki | info = self.get_container_info('c1') |
828 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('x-container-policy-quota' in info) |
829 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(info['x-container-policy-quota'], '100') |
830 | 3a19e99b | Sofia Papagiannaki | |
831 | 3a19e99b | Sofia Papagiannaki | r = self.upload_object('c1', length=101, verify=False)[2] |
832 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 413) |
833 | 3a19e99b | Sofia Papagiannaki | |
834 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'c1') |
835 | 3a19e99b | Sofia Papagiannaki | r = self.post(url, HTTP_X_CONTAINER_POLICY_QUOTA='0') |
836 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
837 | 3a19e99b | Sofia Papagiannaki | |
838 | 3a19e99b | Sofia Papagiannaki | r = self.upload_object('c1', length=1) |
839 | 3a19e99b | Sofia Papagiannaki | |
840 | 3a19e99b | Sofia Papagiannaki | |
841 | 3a19e99b | Sofia Papagiannaki | class ContainerDelete(PithosAPITest): |
842 | 3a19e99b | Sofia Papagiannaki | def setUp(self): |
843 | 3a19e99b | Sofia Papagiannaki | PithosAPITest.setUp(self)
|
844 | 3a19e99b | Sofia Papagiannaki | cnames = ['c1', 'c2'] |
845 | 3a19e99b | Sofia Papagiannaki | |
846 | 3a19e99b | Sofia Papagiannaki | for c in cnames: |
847 | 3a19e99b | Sofia Papagiannaki | self.create_container(c)
|
848 | 3a19e99b | Sofia Papagiannaki | |
849 | 3a19e99b | Sofia Papagiannaki | def test_delete(self): |
850 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'c1') |
851 | 3a19e99b | Sofia Papagiannaki | r = self.delete(url)
|
852 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 204) |
853 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('c1' not in self.list_containers(format=None)) |
854 | 3a19e99b | Sofia Papagiannaki | |
855 | 3a19e99b | Sofia Papagiannaki | def test_delete_non_empty(self): |
856 | 3a19e99b | Sofia Papagiannaki | self.upload_object('c1') |
857 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'c1') |
858 | 3a19e99b | Sofia Papagiannaki | r = self.delete(url)
|
859 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 409) |
860 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('c1' in self.list_containers(format=None)) |
861 | 3a19e99b | Sofia Papagiannaki | |
862 | 3a19e99b | Sofia Papagiannaki | def test_delete_invalid(self): |
863 | 3a19e99b | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'c3') |
864 | 3a19e99b | Sofia Papagiannaki | r = self.delete(url)
|
865 | 3a19e99b | Sofia Papagiannaki | self.assertEqual(r.status_code, 404) |
866 | 3a19e99b | Sofia Papagiannaki | |
867 | 3a19e99b | Sofia Papagiannaki | def test_delete_contents(self): |
868 | 3a19e99b | Sofia Papagiannaki | folder = self.create_folder('c1')[0] |
869 | 3a19e99b | Sofia Papagiannaki | descendant = strnextling(folder) |
870 | 3a19e99b | Sofia Papagiannaki | self.upload_object('c1', descendant) |
871 | 3a19e99b | Sofia Papagiannaki | self.create_folder('c1', '%s/%s' % (folder, get_random_data(5)))[0] |
872 | 3a19e99b | Sofia Papagiannaki | |
873 | 3a19e99b | Sofia Papagiannaki | self.delete('%s?delimiter=/' % join_urls( |
874 | 3a19e99b | Sofia Papagiannaki | self.pithos_path, self.user, 'c1')) |
875 | 3a19e99b | Sofia Papagiannaki | self.assertEqual([], self.list_objects('c1')) |
876 | 3a19e99b | Sofia Papagiannaki | self.assertTrue('c1' in self.list_containers(format=None)) |