root / snf-pithos-app / pithos / api / test / containers.py @ f3787696
History | View | Annotate | Download (26.6 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 | f3787696 | Sofia Papagiannaki | from pithos.api.test import PithosAPITest, DATE_FORMATS, o_names,\ |
38 | f3787696 | Sofia Papagiannaki | strnextling, pithos_settings, pithos_test_settings |
39 | f3787696 | Sofia Papagiannaki | from pithos.backends.random_word import get_random_word |
40 | f3787696 | Sofia Papagiannaki | |
41 | f3787696 | Sofia Papagiannaki | import django.utils.simplejson as json |
42 | f3787696 | Sofia Papagiannaki | from django.http import urlencode |
43 | f3787696 | Sofia Papagiannaki | |
44 | f3787696 | Sofia Papagiannaki | from xml.dom import minidom |
45 | f3787696 | Sofia Papagiannaki | from urllib import quote |
46 | f3787696 | Sofia Papagiannaki | |
47 | f3787696 | Sofia Papagiannaki | import random |
48 | f3787696 | Sofia Papagiannaki | import datetime |
49 | f3787696 | Sofia Papagiannaki | |
50 | f3787696 | Sofia Papagiannaki | |
51 | f3787696 | Sofia Papagiannaki | class ContainerHead(PithosAPITest): |
52 | f3787696 | Sofia Papagiannaki | def test_get_meta(self): |
53 | f3787696 | Sofia Papagiannaki | self.create_container('apples') |
54 | f3787696 | Sofia Papagiannaki | |
55 | f3787696 | Sofia Papagiannaki | # populate with objects
|
56 | f3787696 | Sofia Papagiannaki | objects = {} |
57 | f3787696 | Sofia Papagiannaki | for i in range(random.randint(1, 100)): |
58 | f3787696 | Sofia Papagiannaki | |
59 | f3787696 | Sofia Papagiannaki | # upload object
|
60 | f3787696 | Sofia Papagiannaki | meta = {'foo%s' % i: 'bar'} |
61 | f3787696 | Sofia Papagiannaki | name, data, resp = self.upload_object('apples', **meta) |
62 | f3787696 | Sofia Papagiannaki | objects[name] = data |
63 | f3787696 | Sofia Papagiannaki | |
64 | f3787696 | Sofia Papagiannaki | t1 = datetime.datetime.utcnow() |
65 | f3787696 | Sofia Papagiannaki | r = self.head('/v1/%s/apples' % self.user) |
66 | f3787696 | Sofia Papagiannaki | self.assertEqual(int(r['X-Container-Object-Count']), len(objects)) |
67 | f3787696 | Sofia Papagiannaki | self.assertEqual(int(r['X-Container-Bytes-Used']), |
68 | f3787696 | Sofia Papagiannaki | sum([len(i) for i in objects.values()])) |
69 | f3787696 | Sofia Papagiannaki | self.assertTrue('X-Container-Block-Size' in r) |
70 | f3787696 | Sofia Papagiannaki | self.assertTrue('X-Container-Block-Hash' in r) |
71 | f3787696 | Sofia Papagiannaki | self.assertTrue('X-Container-Until-Timestamp' not in r) |
72 | f3787696 | Sofia Papagiannaki | self.assertEqual(r['X-Container-Policy-Versioning'], 'auto') |
73 | f3787696 | Sofia Papagiannaki | self.assertEqual(int(r['X-Container-Policy-Quota']), 0) |
74 | f3787696 | Sofia Papagiannaki | t2 = datetime.datetime.strptime(r['Last-Modified'], DATE_FORMATS[2]) |
75 | f3787696 | Sofia Papagiannaki | delta = (t2 - t1) |
76 | f3787696 | Sofia Papagiannaki | threashold = datetime.timedelta(seconds=1)
|
77 | f3787696 | Sofia Papagiannaki | self.assertTrue(delta < threashold)
|
78 | f3787696 | Sofia Papagiannaki | self.assertTrue(r['X-Container-Object-Meta']) |
79 | f3787696 | Sofia Papagiannaki | (self.assertTrue('foo%s' % i in r['X-Container-Object-Meta']) |
80 | f3787696 | Sofia Papagiannaki | for i in range(len(objects))) |
81 | f3787696 | Sofia Papagiannaki | |
82 | f3787696 | Sofia Papagiannaki | |
83 | f3787696 | Sofia Papagiannaki | class ContainerGet(PithosAPITest): |
84 | f3787696 | Sofia Papagiannaki | def setUp(self): |
85 | f3787696 | Sofia Papagiannaki | PithosAPITest.setUp(self)
|
86 | f3787696 | Sofia Papagiannaki | |
87 | f3787696 | Sofia Papagiannaki | self.cnames = ['pears', 'apples'] |
88 | f3787696 | Sofia Papagiannaki | self.objects = {}
|
89 | f3787696 | Sofia Papagiannaki | for c in self.cnames: |
90 | f3787696 | Sofia Papagiannaki | self.create_container(c)
|
91 | f3787696 | Sofia Papagiannaki | |
92 | f3787696 | Sofia Papagiannaki | self.objects['pears'] = {} |
93 | f3787696 | Sofia Papagiannaki | for o in o_names[:8]: |
94 | f3787696 | Sofia Papagiannaki | name, data, resp = self.upload_object('pears', o) |
95 | f3787696 | Sofia Papagiannaki | self.objects['pears'][name] = data |
96 | f3787696 | Sofia Papagiannaki | self.objects['apples'] = {} |
97 | f3787696 | Sofia Papagiannaki | for o in o_names[8:]: |
98 | f3787696 | Sofia Papagiannaki | name, data, resp = self.upload_object('apples', o) |
99 | f3787696 | Sofia Papagiannaki | self.objects['apples'][name] = data |
100 | f3787696 | Sofia Papagiannaki | |
101 | f3787696 | Sofia Papagiannaki | def test_list_shared(self): |
102 | f3787696 | Sofia Papagiannaki | # share an object
|
103 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
104 | f3787696 | Sofia Papagiannaki | onames = self.objects[cname].keys()
|
105 | f3787696 | Sofia Papagiannaki | oname = onames.pop() |
106 | f3787696 | Sofia Papagiannaki | r = self.post('/v1/%s/%s/%s' % (self.user, cname, oname), |
107 | f3787696 | Sofia Papagiannaki | content_type='',
|
108 | f3787696 | Sofia Papagiannaki | HTTP_X_OBJECT_SHARING='read=*')
|
109 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
110 | f3787696 | Sofia Papagiannaki | |
111 | f3787696 | Sofia Papagiannaki | # publish another object
|
112 | f3787696 | Sofia Papagiannaki | other = onames.pop() |
113 | f3787696 | Sofia Papagiannaki | r = self.post('/v1/%s/%s/%s' % (self.user, cname, other), |
114 | f3787696 | Sofia Papagiannaki | content_type='',
|
115 | f3787696 | Sofia Papagiannaki | HTTP_X_OBJECT_PUBLIC='true')
|
116 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
117 | f3787696 | Sofia Papagiannaki | |
118 | f3787696 | Sofia Papagiannaki | # list shared and assert only the shared object is returned
|
119 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?shared=' % (self.user, cname)) |
120 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
121 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
122 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
123 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], objects)
|
124 | f3787696 | Sofia Papagiannaki | |
125 | f3787696 | Sofia Papagiannaki | # list detailed shared and assert only the shared object is returned
|
126 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?shared=&format=json' % (self.user, cname)) |
127 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
128 | f3787696 | Sofia Papagiannaki | try:
|
129 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
130 | f3787696 | Sofia Papagiannaki | except:
|
131 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
132 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], [o['name'] for o in objects]) |
133 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in objects[0]) |
134 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_public' not in objects[0]) |
135 | f3787696 | Sofia Papagiannaki | |
136 | f3787696 | Sofia Papagiannaki | # publish the shared object and assert it is still listed in the
|
137 | f3787696 | Sofia Papagiannaki | # shared objects
|
138 | f3787696 | Sofia Papagiannaki | r = self.post('/v1/%s/%s/%s' % (self.user, cname, oname), |
139 | f3787696 | Sofia Papagiannaki | content_type='',
|
140 | f3787696 | Sofia Papagiannaki | HTTP_X_OBJECT_PUBLIC='true')
|
141 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
142 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?shared=&format=json' % (self.user, cname)) |
143 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
144 | f3787696 | Sofia Papagiannaki | try:
|
145 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
146 | f3787696 | Sofia Papagiannaki | except:
|
147 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
148 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], [o['name'] for o in objects]) |
149 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in objects[0]) |
150 | f3787696 | Sofia Papagiannaki | # TODO
|
151 | f3787696 | Sofia Papagiannaki | #self.assertTrue('x_object_public' in objects[0])
|
152 | f3787696 | Sofia Papagiannaki | |
153 | f3787696 | Sofia Papagiannaki | # create child object
|
154 | f3787696 | Sofia Papagiannaki | descendant = strnextling(oname) |
155 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
156 | f3787696 | Sofia Papagiannaki | # request shared and assert child obejct is not listed
|
157 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?shared=' % (self.user, cname)) |
158 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
159 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
160 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
161 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
162 | f3787696 | Sofia Papagiannaki | self.assertTrue(descendant not in objects) |
163 | f3787696 | Sofia Papagiannaki | |
164 | f3787696 | Sofia Papagiannaki | # check folder inheritance
|
165 | f3787696 | Sofia Papagiannaki | oname, _ = self.create_folder(cname, HTTP_X_OBJECT_SHARING='read=*') |
166 | f3787696 | Sofia Papagiannaki | # create child object
|
167 | f3787696 | Sofia Papagiannaki | descendant = '%s/%s' % (oname, get_random_word(8)) |
168 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
169 | f3787696 | Sofia Papagiannaki | # request shared
|
170 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?shared=' % (self.user, cname)) |
171 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
172 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
173 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
174 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
175 | f3787696 | Sofia Papagiannaki | self.assertTrue(descendant in objects) |
176 | f3787696 | Sofia Papagiannaki | |
177 | f3787696 | Sofia Papagiannaki | def test_list_public(self): |
178 | f3787696 | Sofia Papagiannaki | # publish an object
|
179 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
180 | f3787696 | Sofia Papagiannaki | onames = self.objects[cname].keys()
|
181 | f3787696 | Sofia Papagiannaki | oname = onames.pop() |
182 | f3787696 | Sofia Papagiannaki | r = self.post('/v1/%s/%s/%s' % (self.user, cname, oname), |
183 | f3787696 | Sofia Papagiannaki | content_type='',
|
184 | f3787696 | Sofia Papagiannaki | HTTP_X_OBJECT_PUBLIC='true')
|
185 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
186 | f3787696 | Sofia Papagiannaki | |
187 | f3787696 | Sofia Papagiannaki | # share another
|
188 | f3787696 | Sofia Papagiannaki | other = onames.pop() |
189 | f3787696 | Sofia Papagiannaki | r = self.post('/v1/%s/%s/%s' % (self.user, cname, other), |
190 | f3787696 | Sofia Papagiannaki | content_type='',
|
191 | f3787696 | Sofia Papagiannaki | HTTP_X_OBJECT_SHARING='read=alice')
|
192 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
193 | f3787696 | Sofia Papagiannaki | |
194 | f3787696 | Sofia Papagiannaki | # list public and assert only the public object is returned
|
195 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?public=' % (self.user, cname)) |
196 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
197 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
198 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in r.content.split('\n')) |
199 | f3787696 | Sofia Papagiannaki | (self.assertTrue(o not in objects) for o in o_names[1:]) |
200 | f3787696 | Sofia Papagiannaki | |
201 | f3787696 | Sofia Papagiannaki | # list detailed public and assert only the public object is returned
|
202 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?public=&format=json' % (self.user, cname)) |
203 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
204 | f3787696 | Sofia Papagiannaki | try:
|
205 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
206 | f3787696 | Sofia Papagiannaki | except:
|
207 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
208 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], [o['name'] for o in objects]) |
209 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' not in objects[0]) |
210 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_public' in objects[0]) |
211 | f3787696 | Sofia Papagiannaki | |
212 | f3787696 | Sofia Papagiannaki | # share the public object and assert it is still listed in the
|
213 | f3787696 | Sofia Papagiannaki | # public objects
|
214 | f3787696 | Sofia Papagiannaki | r = self.post('/v1/%s/%s/%s' % (self.user, cname, oname), |
215 | f3787696 | Sofia Papagiannaki | content_type='',
|
216 | f3787696 | Sofia Papagiannaki | HTTP_X_OBJECT_SHARING='read=alice')
|
217 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
218 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?public=&format=json' % (self.user, cname)) |
219 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
220 | f3787696 | Sofia Papagiannaki | try:
|
221 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
222 | f3787696 | Sofia Papagiannaki | except:
|
223 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
224 | f3787696 | Sofia Papagiannaki | self.assertEqual([oname], [o['name'] for o in objects]) |
225 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in objects[0]) |
226 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_public' in objects[0]) |
227 | f3787696 | Sofia Papagiannaki | |
228 | f3787696 | Sofia Papagiannaki | # Assert listing the container public contents is forbidden to not
|
229 | f3787696 | Sofia Papagiannaki | # shared users
|
230 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?public=&format=json' % ( |
231 | f3787696 | Sofia Papagiannaki | self.user, cname), user='bob') |
232 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
233 | f3787696 | Sofia Papagiannaki | |
234 | f3787696 | Sofia Papagiannaki | # Assert listing the container public contents to shared users
|
235 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?public=&format=json' % ( |
236 | f3787696 | Sofia Papagiannaki | self.user, cname), user='alice') |
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 | # TODO
|
243 | f3787696 | Sofia Papagiannaki | #self.assertEqual([oname], [o['name'] for o in objects])
|
244 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_sharing' in objects[0]) |
245 | f3787696 | Sofia Papagiannaki | # assert public is not returned though
|
246 | f3787696 | Sofia Papagiannaki | self.assertTrue('x_object_public' not in objects[0]) |
247 | f3787696 | Sofia Papagiannaki | |
248 | f3787696 | Sofia Papagiannaki | # create child object
|
249 | f3787696 | Sofia Papagiannaki | descendant = strnextling(oname) |
250 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
251 | f3787696 | Sofia Papagiannaki | # request public and assert child obejct is not listed
|
252 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?public=' % (self.user, cname)) |
253 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
254 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
255 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
256 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
257 | f3787696 | Sofia Papagiannaki | (self.assertTrue(o not in objects) for o in o_names[1:]) |
258 | f3787696 | Sofia Papagiannaki | |
259 | f3787696 | Sofia Papagiannaki | # test folder inheritance
|
260 | f3787696 | Sofia Papagiannaki | oname, _ = self.create_folder(cname, HTTP_X_OBJECT_PUBLIC='true') |
261 | f3787696 | Sofia Papagiannaki | # create child object
|
262 | f3787696 | Sofia Papagiannaki | descendant = '%s/%s' % (oname, get_random_word(8)) |
263 | f3787696 | Sofia Papagiannaki | self.upload_object(cname, descendant)
|
264 | f3787696 | Sofia Papagiannaki | # request public
|
265 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?public=' % (self.user, cname)) |
266 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
267 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
268 | f3787696 | Sofia Papagiannaki | self.assertTrue(oname in objects) |
269 | f3787696 | Sofia Papagiannaki | self.assertTrue(descendant not in objects) |
270 | f3787696 | Sofia Papagiannaki | |
271 | f3787696 | Sofia Papagiannaki | # def test_list_shared_public(self):
|
272 | f3787696 | Sofia Papagiannaki | # # publish an object
|
273 | f3787696 | Sofia Papagiannaki | # cname = self.cnames[0]
|
274 | f3787696 | Sofia Papagiannaki | # onames = self.objects[cname].keys()
|
275 | f3787696 | Sofia Papagiannaki | # oname = onames.pop()
|
276 | f3787696 | Sofia Papagiannaki | # r = self.post('/v1/%s/%s/%s' % (self.user, cname, oname),
|
277 | f3787696 | Sofia Papagiannaki | # content_type='',
|
278 | f3787696 | Sofia Papagiannaki | # HTTP_X_OBJECT_PUBLIC='true')
|
279 | f3787696 | Sofia Papagiannaki | # self.assertEqual(r.status_code, 202)
|
280 | f3787696 | Sofia Papagiannaki | #
|
281 | f3787696 | Sofia Papagiannaki | # # share another
|
282 | f3787696 | Sofia Papagiannaki | # other = onames.pop()
|
283 | f3787696 | Sofia Papagiannaki | # r = self.post('/v1/%s/%s/%s' % (self.user, cname, other),
|
284 | f3787696 | Sofia Papagiannaki | # content_type='',
|
285 | f3787696 | Sofia Papagiannaki | # HTTP_X_OBJECT_SHARING='read=alice')
|
286 | f3787696 | Sofia Papagiannaki | # self.assertEqual(r.status_code, 202)
|
287 | f3787696 | Sofia Papagiannaki | #
|
288 | f3787696 | Sofia Papagiannaki | # # list shared and public objects and assert object is listed
|
289 | f3787696 | Sofia Papagiannaki | # r = self.get('/v1/%s/%s?shared=&public=&format=json' % (
|
290 | f3787696 | Sofia Papagiannaki | # self.user, cname))
|
291 | f3787696 | Sofia Papagiannaki | # self.assertEqual(r.status_code, 200)
|
292 | f3787696 | Sofia Papagiannaki | # objects = json.loads(r.content)
|
293 | f3787696 | Sofia Papagiannaki | # self.assertEqual([o['name'] for o in objects], sorted([oname, other]))
|
294 | f3787696 | Sofia Papagiannaki | # for o in objects:
|
295 | f3787696 | Sofia Papagiannaki | # if o['name'] == oname:
|
296 | f3787696 | Sofia Papagiannaki | # self.assertTrue('x_object_public' in objects[0])
|
297 | f3787696 | Sofia Papagiannaki | # elif o['name'] == other:
|
298 | f3787696 | Sofia Papagiannaki | # self.assertTrue('x_object_sharing' in objects[1])
|
299 | f3787696 | Sofia Papagiannaki | #
|
300 | f3787696 | Sofia Papagiannaki | # # assert not listing shared and public to a not shared user
|
301 | f3787696 | Sofia Papagiannaki | # r = self.get('/v1/%s/%s?shared=&public=&format=json' % (
|
302 | f3787696 | Sofia Papagiannaki | # self.user, cname), user='bob')
|
303 | f3787696 | Sofia Papagiannaki | # self.assertEqual(r.status_code, 403)
|
304 | f3787696 | Sofia Papagiannaki | #
|
305 | f3787696 | Sofia Papagiannaki | # # assert listing shared and public to a shared user
|
306 | f3787696 | Sofia Papagiannaki | # r = self.get('/v1/%s/%s?shared=&public=&format=json' % (
|
307 | f3787696 | Sofia Papagiannaki | # self.user, cname), user='alice')
|
308 | f3787696 | Sofia Papagiannaki | # self.assertEqual(r.status_code, 200)
|
309 | f3787696 | Sofia Papagiannaki | # try:
|
310 | f3787696 | Sofia Papagiannaki | # objects = json.loads(r.content)
|
311 | f3787696 | Sofia Papagiannaki | # except:
|
312 | f3787696 | Sofia Papagiannaki | # self.fail('json format expected')
|
313 | f3787696 | Sofia Papagiannaki | # self.assertEqual([o['name'] for o in objects], sorted([oname, other]))
|
314 | f3787696 | Sofia Papagiannaki | #
|
315 | f3787696 | Sofia Papagiannaki | # # create child object
|
316 | f3787696 | Sofia Papagiannaki | # descentant1 = strnextling(oname)
|
317 | f3787696 | Sofia Papagiannaki | # self.upload_object(cname, descendant1)
|
318 | f3787696 | Sofia Papagiannaki | # descentant2 = strnextling(other)
|
319 | f3787696 | Sofia Papagiannaki | # self.upload_object(cname, descendant2)
|
320 | f3787696 | Sofia Papagiannaki | # r = self.get('/v1/%s/%s?shared=&public=&format=json' % (
|
321 | f3787696 | Sofia Papagiannaki | # self.user, cname), user='alice')
|
322 | f3787696 | Sofia Papagiannaki | # self.assertEqual(r.status_code, 200)
|
323 | f3787696 | Sofia Papagiannaki | # try:
|
324 | f3787696 | Sofia Papagiannaki | # objects = json.loads(r.content)
|
325 | f3787696 | Sofia Papagiannaki | # except:
|
326 | f3787696 | Sofia Papagiannaki | # self.fail('json format expected')
|
327 | f3787696 | Sofia Papagiannaki | # self.assertEqual([o['name'] for o in objects], [oname])
|
328 | f3787696 | Sofia Papagiannaki | #
|
329 | f3787696 | Sofia Papagiannaki | # # test inheritance
|
330 | f3787696 | Sofia Papagiannaki | # oname1, _ = self.create_folder(cname,
|
331 | f3787696 | Sofia Papagiannaki | # HTTP_X_OBJECT_SHARING='read=alice')
|
332 | f3787696 | Sofia Papagiannaki | # # create child object
|
333 | f3787696 | Sofia Papagiannaki | # descendant1 = '%s/%s' % (oname, get_random_word(8))
|
334 | f3787696 | Sofia Papagiannaki | # self.upload_object(cname, descendant1)
|
335 | f3787696 | Sofia Papagiannaki | #
|
336 | f3787696 | Sofia Papagiannaki | # oname2, _ = self.create_folder(cname,
|
337 | f3787696 | Sofia Papagiannaki | # HTTP_X_OBJECT_PUBLIC='true')
|
338 | f3787696 | Sofia Papagiannaki | # # create child object
|
339 | f3787696 | Sofia Papagiannaki | # descendant2 = '%s/%s' % (oname, get_random_word(8))
|
340 | f3787696 | Sofia Papagiannaki | # self.upload_object(cname, descendant2)
|
341 | f3787696 | Sofia Papagiannaki | #
|
342 | f3787696 | Sofia Papagiannaki | #
|
343 | f3787696 | Sofia Papagiannaki | # o = self.upload_random_data(self.container[1], 'folder2/object')
|
344 | f3787696 | Sofia Papagiannaki | # objs = self.client.list_objects(self.container[1], shared=True, public=True)
|
345 | f3787696 | Sofia Papagiannaki | # self.assertEqual(objs, ['folder1', 'folder1/object', 'folder2'])
|
346 | f3787696 | Sofia Papagiannaki | # objs = cl.list_objects(
|
347 | f3787696 | Sofia Papagiannaki | # self.container[1], shared=True, public=True, account=get_user()
|
348 | f3787696 | Sofia Papagiannaki | # )
|
349 | f3787696 | Sofia Papagiannaki | # self.assertEqual(objs, ['folder1', 'folder1/object'])
|
350 | f3787696 | Sofia Papagiannaki | #
|
351 | f3787696 | Sofia Papagiannaki | def test_list_objects(self): |
352 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
353 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s' % (self.user, cname)) |
354 | f3787696 | Sofia Papagiannaki | self.assertTrue(r.status_code, 200) |
355 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
356 | f3787696 | Sofia Papagiannaki | if '' in objects: |
357 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
358 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, sorted(self.objects[cname].keys())) |
359 | f3787696 | Sofia Papagiannaki | |
360 | f3787696 | Sofia Papagiannaki | def test_list_objects_containing_slash(self): |
361 | f3787696 | Sofia Papagiannaki | self.create_container('test') |
362 | f3787696 | Sofia Papagiannaki | self.upload_object('test', '/objectname') |
363 | f3787696 | Sofia Papagiannaki | |
364 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/test' % self.user) |
365 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
366 | f3787696 | Sofia Papagiannaki | if '' in objects: |
367 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
368 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, ['/objectname']) |
369 | f3787696 | Sofia Papagiannaki | |
370 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/test?format=json' % self.user) |
371 | f3787696 | Sofia Papagiannaki | try:
|
372 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
373 | f3787696 | Sofia Papagiannaki | except:
|
374 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
375 | f3787696 | Sofia Papagiannaki | self.assertEqual([o['name'] for o in objects], ['/objectname']) |
376 | f3787696 | Sofia Papagiannaki | |
377 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/test?format=xml' % self.user) |
378 | f3787696 | Sofia Papagiannaki | try:
|
379 | f3787696 | Sofia Papagiannaki | objects = minidom.parseString(r.content) |
380 | f3787696 | Sofia Papagiannaki | except:
|
381 | f3787696 | Sofia Papagiannaki | self.fail('xml format expected') |
382 | f3787696 | Sofia Papagiannaki | self.assertEqual(
|
383 | f3787696 | Sofia Papagiannaki | [n.firstChild.data for n in objects.getElementsByTagName('name')], |
384 | f3787696 | Sofia Papagiannaki | ['/objectname'])
|
385 | f3787696 | Sofia Papagiannaki | |
386 | f3787696 | Sofia Papagiannaki | def test_list_objects_with_limit_marker(self): |
387 | f3787696 | Sofia Papagiannaki | cname = self.cnames[0] |
388 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?limit=qwert' % (self.user, cname)) |
389 | f3787696 | Sofia Papagiannaki | self.assertTrue(r.status_code != 500) |
390 | f3787696 | Sofia Papagiannaki | |
391 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?limit=2' % (self.user, cname)) |
392 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
393 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
394 | f3787696 | Sofia Papagiannaki | if '' in objects: |
395 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
396 | f3787696 | Sofia Papagiannaki | |
397 | f3787696 | Sofia Papagiannaki | onames = sorted(self.objects[cname].keys()) |
398 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, onames[:2]) |
399 | f3787696 | Sofia Papagiannaki | |
400 | f3787696 | Sofia Papagiannaki | markers = ['How To Win Friends And Influence People.pdf',
|
401 | f3787696 | Sofia Papagiannaki | 'moms_birthday.jpg']
|
402 | f3787696 | Sofia Papagiannaki | limit = 4
|
403 | f3787696 | Sofia Papagiannaki | for m in markers: |
404 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?limit=%s&marker=%s' % ( |
405 | f3787696 | Sofia Papagiannaki | self.user, cname, limit, m))
|
406 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
407 | f3787696 | Sofia Papagiannaki | if '' in objects: |
408 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
409 | f3787696 | Sofia Papagiannaki | start = onames.index(m) + 1
|
410 | f3787696 | Sofia Papagiannaki | end = start + limit |
411 | f3787696 | Sofia Papagiannaki | end = end if len(onames) >= end else len(onames) |
412 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, onames[start:end])
|
413 | f3787696 | Sofia Papagiannaki | |
414 | f3787696 | Sofia Papagiannaki | @pithos_test_settings(API_LIST_LIMIT=10) |
415 | f3787696 | Sofia Papagiannaki | def test_list_limit_exceeds(self): |
416 | f3787696 | Sofia Papagiannaki | self.create_container('container') |
417 | f3787696 | Sofia Papagiannaki | |
418 | f3787696 | Sofia Papagiannaki | for _ in range(pithos_settings.API_LIST_LIMIT + 1): |
419 | f3787696 | Sofia Papagiannaki | self.upload_object('container') |
420 | f3787696 | Sofia Papagiannaki | |
421 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/container?format=json' % self.user) |
422 | f3787696 | Sofia Papagiannaki | try:
|
423 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
424 | f3787696 | Sofia Papagiannaki | except:
|
425 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
426 | f3787696 | Sofia Papagiannaki | self.assertEqual(pithos_settings.API_LIST_LIMIT,
|
427 | f3787696 | Sofia Papagiannaki | len(objects))
|
428 | f3787696 | Sofia Papagiannaki | |
429 | f3787696 | Sofia Papagiannaki | def test_list_pseudo_hierarchical_folders(self): |
430 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/apples?prefix=photos&delimiter=/' % self.user) |
431 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
432 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
433 | f3787696 | Sofia Papagiannaki | if '' in objects: |
434 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
435 | f3787696 | Sofia Papagiannaki | self.assertEquals(
|
436 | f3787696 | Sofia Papagiannaki | ['photos/animals/', 'photos/me.jpg', 'photos/plants/'], |
437 | f3787696 | Sofia Papagiannaki | objects) |
438 | f3787696 | Sofia Papagiannaki | |
439 | f3787696 | Sofia Papagiannaki | r = self.get(
|
440 | f3787696 | Sofia Papagiannaki | '/v1/%s/apples?prefix=photos/animals&delimiter=/' % self.user) |
441 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
442 | f3787696 | Sofia Papagiannaki | if '' in objects: |
443 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
444 | f3787696 | Sofia Papagiannaki | self.assertEquals(
|
445 | f3787696 | Sofia Papagiannaki | ['photos/animals/cats/', 'photos/animals/dogs/'], objects) |
446 | f3787696 | Sofia Papagiannaki | |
447 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/apples?path=photos' % self.user) |
448 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
449 | f3787696 | Sofia Papagiannaki | if '' in objects: |
450 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
451 | f3787696 | Sofia Papagiannaki | self.assertEquals(['photos/me.jpg'], objects) |
452 | f3787696 | Sofia Papagiannaki | |
453 | f3787696 | Sofia Papagiannaki | def test_extended_list_json(self): |
454 | f3787696 | Sofia Papagiannaki | params = {'format': 'json', 'limit': 2, 'prefix': 'photos/animals', |
455 | f3787696 | Sofia Papagiannaki | 'delimiter': '/'} |
456 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/apples?%s' % (self.user, urlencode(params))) |
457 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
458 | f3787696 | Sofia Papagiannaki | try:
|
459 | f3787696 | Sofia Papagiannaki | objects = json.loads(r.content) |
460 | f3787696 | Sofia Papagiannaki | except:
|
461 | f3787696 | Sofia Papagiannaki | self.fail('json format expected') |
462 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects[0]['subdir'], 'photos/animals/cats/') |
463 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects[1]['subdir'], 'photos/animals/dogs/') |
464 | f3787696 | Sofia Papagiannaki | |
465 | f3787696 | Sofia Papagiannaki | def test_extended_list_xml(self): |
466 | f3787696 | Sofia Papagiannaki | params = {'format': 'xml', 'limit': 4, 'prefix': 'photos', |
467 | f3787696 | Sofia Papagiannaki | 'delimiter': '/'} |
468 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/apples?%s' % (self.user, urlencode(params))) |
469 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
470 | f3787696 | Sofia Papagiannaki | try:
|
471 | f3787696 | Sofia Papagiannaki | xml = minidom.parseString(r.content) |
472 | f3787696 | Sofia Papagiannaki | except:
|
473 | f3787696 | Sofia Papagiannaki | self.fail('xml format expected') |
474 | f3787696 | Sofia Papagiannaki | self.assert_extended(xml, 'xml', 'object', size=4) |
475 | f3787696 | Sofia Papagiannaki | dirs = xml.getElementsByTagName('subdir')
|
476 | f3787696 | Sofia Papagiannaki | self.assertEqual(len(dirs), 2) |
477 | f3787696 | Sofia Papagiannaki | self.assertEqual(dirs[0].attributes['name'].value, 'photos/animals/') |
478 | f3787696 | Sofia Papagiannaki | self.assertEqual(dirs[1].attributes['name'].value, 'photos/plants/') |
479 | f3787696 | Sofia Papagiannaki | |
480 | f3787696 | Sofia Papagiannaki | objects = xml.getElementsByTagName('name')
|
481 | f3787696 | Sofia Papagiannaki | self.assertEqual(len(objects), 1) |
482 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects[0].childNodes[0].data, 'photos/me.jpg') |
483 | f3787696 | Sofia Papagiannaki | |
484 | f3787696 | Sofia Papagiannaki | def test_list_meta_double_matching(self): |
485 | f3787696 | Sofia Papagiannaki | # update object meta
|
486 | f3787696 | Sofia Papagiannaki | cname = 'apples'
|
487 | f3787696 | Sofia Papagiannaki | oname = self.objects[cname].keys().pop()
|
488 | f3787696 | Sofia Papagiannaki | meta = {'quality': 'aaa', 'stock': 'true'} |
489 | f3787696 | Sofia Papagiannaki | headers = dict(('HTTP_X_OBJECT_META_%s' % k.upper(), v) |
490 | f3787696 | Sofia Papagiannaki | for k, v in meta.iteritems()) |
491 | f3787696 | Sofia Papagiannaki | self.post('/v1/%s/%s/%s' % (self.user, cname, oname), |
492 | f3787696 | Sofia Papagiannaki | content_type='', **headers)
|
493 | f3787696 | Sofia Papagiannaki | |
494 | f3787696 | Sofia Papagiannaki | # list objects that satisfy the criteria
|
495 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=Quality,Stock' % (self.user, cname)) |
496 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
497 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
498 | f3787696 | Sofia Papagiannaki | if '' in objects: |
499 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
500 | f3787696 | Sofia Papagiannaki | self.assertEqual(objects, [oname])
|
501 | f3787696 | Sofia Papagiannaki | |
502 | f3787696 | Sofia Papagiannaki | def tearDown(self): |
503 | f3787696 | Sofia Papagiannaki | pass
|
504 | f3787696 | Sofia Papagiannaki | |
505 | f3787696 | Sofia Papagiannaki | def test_list_using_meta(self): |
506 | f3787696 | Sofia Papagiannaki | # update object meta
|
507 | f3787696 | Sofia Papagiannaki | cname = 'apples'
|
508 | f3787696 | Sofia Papagiannaki | oname1 = self.objects[cname].keys().pop()
|
509 | f3787696 | Sofia Papagiannaki | self.post('/v1/%s/%s/%s' % (self.user, cname, oname1), |
510 | f3787696 | Sofia Papagiannaki | content_type='', HTTP_X_OBJECT_META_QUALITY='aaa') |
511 | f3787696 | Sofia Papagiannaki | oname2 = self.objects[cname].keys().pop()
|
512 | f3787696 | Sofia Papagiannaki | self.post('/v1/%s/%s/%s' % (self.user, cname, oname2), |
513 | f3787696 | Sofia Papagiannaki | content_type='', HTTP_X_OBJECT_META_QUALITY='ab') |
514 | f3787696 | Sofia Papagiannaki | |
515 | f3787696 | Sofia Papagiannaki | oname3 = self.objects[cname].keys().pop()
|
516 | f3787696 | Sofia Papagiannaki | self.post('/v1/%s/%s/%s' % (self.user, cname, oname3), |
517 | f3787696 | Sofia Papagiannaki | content_type='', HTTP_X_OBJECT_META_STOCK='100') |
518 | f3787696 | Sofia Papagiannaki | oname4 = self.objects[cname].keys().pop()
|
519 | f3787696 | Sofia Papagiannaki | self.post('/v1/%s/%s/%s' % (self.user, cname, oname4), |
520 | f3787696 | Sofia Papagiannaki | content_type='', HTTP_X_OBJECT_META_STOCK='200') |
521 | f3787696 | Sofia Papagiannaki | |
522 | f3787696 | Sofia Papagiannaki | # test multiple existence criteria matches
|
523 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=Quality,Stock' % (self.user, cname)) |
524 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
525 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
526 | f3787696 | Sofia Papagiannaki | if '' in objects: |
527 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
528 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, sorted([oname1, oname2, oname3, oname4])) |
529 | f3787696 | Sofia Papagiannaki | |
530 | f3787696 | Sofia Papagiannaki | # list objects that satisfy the existence criteria
|
531 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=Stock' % (self.user, cname)) |
532 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
533 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
534 | f3787696 | Sofia Papagiannaki | if '' in objects: |
535 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
536 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, sorted([oname3, oname4])) |
537 | f3787696 | Sofia Papagiannaki | |
538 | f3787696 | Sofia Papagiannaki | # test case insensitive existence criteria matching
|
539 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=quality' % (self.user, cname)) |
540 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
541 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
542 | f3787696 | Sofia Papagiannaki | if '' in objects: |
543 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
544 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, sorted([oname1, oname2])) |
545 | f3787696 | Sofia Papagiannaki | |
546 | f3787696 | Sofia Papagiannaki | # test do not all existencecriteria match
|
547 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=Quality,Foo' % (self.user, cname)) |
548 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
549 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
550 | f3787696 | Sofia Papagiannaki | if '' in objects: |
551 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
552 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, sorted([oname1, oname2])) |
553 | f3787696 | Sofia Papagiannaki | |
554 | f3787696 | Sofia Papagiannaki | # test equals criteria
|
555 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=%s' % (self.user, cname, |
556 | f3787696 | Sofia Papagiannaki | quote('Quality=aaa')))
|
557 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
558 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
559 | f3787696 | Sofia Papagiannaki | if '' in objects: |
560 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
561 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, [oname1])
|
562 | f3787696 | Sofia Papagiannaki | |
563 | f3787696 | Sofia Papagiannaki | # test not equals criteria
|
564 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=%s' % (self.user, cname, |
565 | f3787696 | Sofia Papagiannaki | urlencode('Quality!=aaa')))
|
566 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
567 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
568 | f3787696 | Sofia Papagiannaki | if '' in objects: |
569 | f3787696 | Sofia Papagiannaki | objects.remove() |
570 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, [oname2])
|
571 | f3787696 | Sofia Papagiannaki | |
572 | f3787696 | Sofia Papagiannaki | # test lte criteria
|
573 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=%s' % (self.user, cname, |
574 | f3787696 | Sofia Papagiannaki | urlencode('Stock<=120')))
|
575 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
576 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
577 | f3787696 | Sofia Papagiannaki | if '' in objects: |
578 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
579 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, [oname3])
|
580 | f3787696 | Sofia Papagiannaki | |
581 | f3787696 | Sofia Papagiannaki | # test gte criteria
|
582 | f3787696 | Sofia Papagiannaki | r = self.get('/v1/%s/%s?meta=%s' % (self.user, cname, |
583 | f3787696 | Sofia Papagiannaki | urlencode('Stock>=200')))
|
584 | f3787696 | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
585 | f3787696 | Sofia Papagiannaki | objects = r.content.split('\n')
|
586 | f3787696 | Sofia Papagiannaki | if '' in objects: |
587 | f3787696 | Sofia Papagiannaki | objects.remove('')
|
588 | f3787696 | Sofia Papagiannaki | self.assertTrue(objects, [oname4])
|
589 | f3787696 | Sofia Papagiannaki | |
590 | f3787696 | Sofia Papagiannaki | #
|
591 | f3787696 | Sofia Papagiannaki | # def test_if_modified_since(self):
|
592 | f3787696 | Sofia Papagiannaki | # t = datetime.datetime.utcnow()
|
593 | f3787696 | Sofia Papagiannaki | # t2 = t - datetime.timedelta(minutes=10)
|
594 | f3787696 | Sofia Papagiannaki | #
|
595 | f3787696 | Sofia Papagiannaki | # #add a new object
|
596 | f3787696 | Sofia Papagiannaki | # self.upload_random_data(self.container[0], o_names[0])
|
597 | f3787696 | Sofia Papagiannaki | #
|
598 | f3787696 | Sofia Papagiannaki | # for f in DATE_FORMATS:
|
599 | f3787696 | Sofia Papagiannaki | # past = t2.strftime(f)
|
600 | f3787696 | Sofia Papagiannaki | # try:
|
601 | f3787696 | Sofia Papagiannaki | # o = self.client.list_objects(self.container[0],
|
602 | f3787696 | Sofia Papagiannaki | # if_modified_since=past)
|
603 | f3787696 | Sofia Papagiannaki | # self.assertEqual(o,
|
604 | f3787696 | Sofia Papagiannaki | # self.client.list_objects(self.container[0]))
|
605 | f3787696 | Sofia Papagiannaki | # except Fault, f:
|
606 | f3787696 | Sofia Papagiannaki | # self.failIf(f.status == 304) #fail if not modified
|
607 | f3787696 | Sofia Papagiannaki | #
|
608 | f3787696 | Sofia Papagiannaki | # def test_if_modified_since_invalid_date(self):
|
609 | f3787696 | Sofia Papagiannaki | # headers = {'if-modified-since':''}
|
610 | f3787696 | Sofia Papagiannaki | # o = self.client.list_objects(self.container[0], if_modified_since='')
|
611 | f3787696 | Sofia Papagiannaki | # self.assertEqual(o, self.client.list_objects(self.container[0]))
|
612 | f3787696 | Sofia Papagiannaki | #
|
613 | f3787696 | Sofia Papagiannaki | # def test_if_not_modified_since(self):
|
614 | f3787696 | Sofia Papagiannaki | # now = datetime.datetime.utcnow()
|
615 | f3787696 | Sofia Papagiannaki | # since = now + datetime.timedelta(1)
|
616 | f3787696 | Sofia Papagiannaki | #
|
617 | f3787696 | Sofia Papagiannaki | # for f in DATE_FORMATS:
|
618 | f3787696 | Sofia Papagiannaki | # args = {'if_modified_since':'%s' %since.strftime(f)}
|
619 | f3787696 | Sofia Papagiannaki | #
|
620 | f3787696 | Sofia Papagiannaki | # #assert not modified
|
621 | f3787696 | Sofia Papagiannaki | # self.assert_raises_fault(304, self.client.list_objects,
|
622 | f3787696 | Sofia Papagiannaki | # self.container[0], **args)
|
623 | f3787696 | Sofia Papagiannaki | #
|
624 | f3787696 | Sofia Papagiannaki | # def test_if_unmodified_since(self):
|
625 | f3787696 | Sofia Papagiannaki | # now = datetime.datetime.utcnow()
|
626 | f3787696 | Sofia Papagiannaki | # since = now + datetime.timedelta(1)
|
627 | f3787696 | Sofia Papagiannaki | #
|
628 | f3787696 | Sofia Papagiannaki | # for f in DATE_FORMATS:
|
629 | f3787696 | Sofia Papagiannaki | # obj = self.client.list_objects(self.container[0],
|
630 | f3787696 | Sofia Papagiannaki | # if_unmodified_since=since.strftime(f))
|
631 | f3787696 | Sofia Papagiannaki | #
|
632 | f3787696 | Sofia Papagiannaki | # #assert unmodified
|
633 | f3787696 | Sofia Papagiannaki | # self.assertEqual(obj, self.client.list_objects(self.container[0]))
|
634 | f3787696 | Sofia Papagiannaki | #
|
635 | f3787696 | Sofia Papagiannaki | # def test_if_unmodified_since_precondition_failed(self):
|
636 | f3787696 | Sofia Papagiannaki | # t = datetime.datetime.utcnow()
|
637 | f3787696 | Sofia Papagiannaki | # t2 = t - datetime.timedelta(minutes=10)
|
638 | f3787696 | Sofia Papagiannaki | #
|
639 | f3787696 | Sofia Papagiannaki | # #add a new container
|
640 | f3787696 | Sofia Papagiannaki | # self.client.create_container('dummy')
|
641 | f3787696 | Sofia Papagiannaki | #
|
642 | f3787696 | Sofia Papagiannaki | # for f in DATE_FORMATS:
|
643 | f3787696 | Sofia Papagiannaki | # past = t2.strftime(f)
|
644 | f3787696 | Sofia Papagiannaki | #
|
645 | f3787696 | Sofia Papagiannaki | # args = {'if_unmodified_since':'%s' %past}
|
646 | f3787696 | Sofia Papagiannaki | #
|
647 | f3787696 | Sofia Papagiannaki | # #assert precondition failed
|
648 | f3787696 | Sofia Papagiannaki | # self.assert_raises_fault(412, self.client.list_objects,
|
649 | f3787696 | Sofia Papagiannaki | # self.container[0], **args)
|
650 | f3787696 | Sofia Papagiannaki | #
|
651 | f3787696 | Sofia Papagiannaki | #class ContainerPut(BaseTestCase):
|
652 | f3787696 | Sofia Papagiannaki | # def setUp(self):
|
653 | f3787696 | Sofia Papagiannaki | # BaseTestCase.setUp(self)
|
654 | f3787696 | Sofia Papagiannaki | # self.containers = list(set(self.initial_containers + ['c1', 'c2']))
|
655 | f3787696 | Sofia Papagiannaki | # self.containers.sort()
|
656 | f3787696 | Sofia Papagiannaki | #
|
657 | f3787696 | Sofia Papagiannaki | # def test_create(self):
|
658 | f3787696 | Sofia Papagiannaki | # self.client.create_container(self.containers[0])
|
659 | f3787696 | Sofia Papagiannaki | # containers = self.client.list_containers()
|
660 | f3787696 | Sofia Papagiannaki | # self.assertTrue(self.containers[0] in containers)
|
661 | f3787696 | Sofia Papagiannaki | # self.assert_container_exists(self.containers[0])
|
662 | f3787696 | Sofia Papagiannaki | #
|
663 | f3787696 | Sofia Papagiannaki | # def test_create_twice(self):
|
664 | f3787696 | Sofia Papagiannaki | # self.client.create_container(self.containers[0])
|
665 | f3787696 | Sofia Papagiannaki | # self.assertTrue(not self.client.create_container(self.containers[0]))
|
666 | f3787696 | Sofia Papagiannaki | #
|
667 | f3787696 | Sofia Papagiannaki | # def test_quota(self):
|
668 | f3787696 | Sofia Papagiannaki | # self.client.create_container(self.containers[0])
|
669 | f3787696 | Sofia Papagiannaki | #
|
670 | f3787696 | Sofia Papagiannaki | # policy = {'quota':100}
|
671 | f3787696 | Sofia Papagiannaki | # self.client.set_container_policies(self.containers[0], **policy)
|
672 | f3787696 | Sofia Papagiannaki | #
|
673 | f3787696 | Sofia Papagiannaki | # meta = self.client.retrieve_container_metadata(self.containers[0])
|
674 | f3787696 | Sofia Papagiannaki | # self.assertTrue('x-container-policy-quota' in meta)
|
675 | f3787696 | Sofia Papagiannaki | # self.assertEqual(meta['x-container-policy-quota'], '100')
|
676 | f3787696 | Sofia Papagiannaki | #
|
677 | f3787696 | Sofia Papagiannaki | # args = [self.containers[0], 'o1']
|
678 | f3787696 | Sofia Papagiannaki | # kwargs = {'length':101}
|
679 | f3787696 | Sofia Papagiannaki | # self.assert_raises_fault(413, self.upload_random_data, *args, **kwargs)
|
680 | f3787696 | Sofia Papagiannaki | #
|
681 | f3787696 | Sofia Papagiannaki | # #reset quota
|
682 | f3787696 | Sofia Papagiannaki | # policy = {'quota':0}
|
683 | f3787696 | Sofia Papagiannaki | # self.client.set_container_policies(self.containers[0], **policy) |