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