root / snf-pithos-app / pithos / api / test / unicode.py @ 7e402b46
History | View | Annotate | Download (17.6 kB)
1 | ee7a28be | Sofia Papagiannaki | #!/usr/bin/env python
|
---|---|---|---|
2 | ee7a28be | Sofia Papagiannaki | #coding=utf8
|
3 | ee7a28be | Sofia Papagiannaki | |
4 | ee7a28be | Sofia Papagiannaki | # Copyright 2011-2013 GRNET S.A. All rights reserved.
|
5 | ee7a28be | Sofia Papagiannaki | #
|
6 | ee7a28be | Sofia Papagiannaki | # Redistribution and use in source and binary forms, with or
|
7 | ee7a28be | Sofia Papagiannaki | # without modification, are permitted provided that the following
|
8 | ee7a28be | Sofia Papagiannaki | # conditions are met:
|
9 | ee7a28be | Sofia Papagiannaki | #
|
10 | ee7a28be | Sofia Papagiannaki | # 1. Redistributions of source code must retain the above
|
11 | ee7a28be | Sofia Papagiannaki | # copyright notice, this list of conditions and the following
|
12 | ee7a28be | Sofia Papagiannaki | # disclaimer.
|
13 | ee7a28be | Sofia Papagiannaki | #
|
14 | ee7a28be | Sofia Papagiannaki | # 2. Redistributions in binary form must reproduce the above
|
15 | ee7a28be | Sofia Papagiannaki | # copyright notice, this list of conditions and the following
|
16 | ee7a28be | Sofia Papagiannaki | # disclaimer in the documentation and/or other materials
|
17 | ee7a28be | Sofia Papagiannaki | # provided with the distribution.
|
18 | ee7a28be | Sofia Papagiannaki | #
|
19 | ee7a28be | Sofia Papagiannaki | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
20 | ee7a28be | Sofia Papagiannaki | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21 | ee7a28be | Sofia Papagiannaki | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
22 | ee7a28be | Sofia Papagiannaki | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
23 | ee7a28be | Sofia Papagiannaki | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
24 | ee7a28be | Sofia Papagiannaki | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25 | ee7a28be | Sofia Papagiannaki | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
26 | ee7a28be | Sofia Papagiannaki | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
27 | ee7a28be | Sofia Papagiannaki | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
28 | ee7a28be | Sofia Papagiannaki | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
29 | ee7a28be | Sofia Papagiannaki | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
30 | ee7a28be | Sofia Papagiannaki | # POSSIBILITY OF SUCH DAMAGE.
|
31 | ee7a28be | Sofia Papagiannaki | #
|
32 | ee7a28be | Sofia Papagiannaki | # The views and conclusions contained in the software and
|
33 | ee7a28be | Sofia Papagiannaki | # documentation are those of the authors and should not be
|
34 | ee7a28be | Sofia Papagiannaki | # interpreted as representing official policies, either expressed
|
35 | ee7a28be | Sofia Papagiannaki | # or implied, of GRNET S.A.
|
36 | ee7a28be | Sofia Papagiannaki | |
37 | ee7a28be | Sofia Papagiannaki | from pithos.api.test import PithosAPITest, TEST_BLOCK_SIZE |
38 | ee7a28be | Sofia Papagiannaki | from pithos.api.test.util import get_random_data |
39 | ee7a28be | Sofia Papagiannaki | |
40 | ee7a28be | Sofia Papagiannaki | from synnefo.lib import join_urls |
41 | ee7a28be | Sofia Papagiannaki | |
42 | ee7a28be | Sofia Papagiannaki | from urllib import quote |
43 | ee7a28be | Sofia Papagiannaki | |
44 | ee7a28be | Sofia Papagiannaki | import random |
45 | ee7a28be | Sofia Papagiannaki | |
46 | ee7a28be | Sofia Papagiannaki | |
47 | ee7a28be | Sofia Papagiannaki | class TestUnicode(PithosAPITest): |
48 | ee7a28be | Sofia Papagiannaki | #def setUp(self):
|
49 | ee7a28be | Sofia Papagiannaki | # super(TestUnicode, self).setUp()
|
50 | ee7a28be | Sofia Papagiannaki | # self.user = 'χρήστης'
|
51 | ee7a28be | Sofia Papagiannaki | |
52 | ee7a28be | Sofia Papagiannaki | def test_create_container(self): |
53 | ee7a28be | Sofia Papagiannaki | cname = 'φάκελος'
|
54 | ee7a28be | Sofia Papagiannaki | self.create_container(cname)
|
55 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
56 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
57 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 204) |
58 | ee7a28be | Sofia Papagiannaki | |
59 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user) |
60 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
61 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
62 | ee7a28be | Sofia Papagiannaki | containers = r.content.split('\n')
|
63 | ee7a28be | Sofia Papagiannaki | self.assertTrue('φάκελος' in containers) |
64 | ee7a28be | Sofia Papagiannaki | |
65 | ee7a28be | Sofia Papagiannaki | def test_create_object(self): |
66 | ee7a28be | Sofia Papagiannaki | cname = 'φάκελος'
|
67 | ee7a28be | Sofia Papagiannaki | oname = 'αντικείμενο'
|
68 | ee7a28be | Sofia Papagiannaki | self.create_container(cname)
|
69 | ee7a28be | Sofia Papagiannaki | odata = self.upload_object(cname, oname)[1] |
70 | ee7a28be | Sofia Papagiannaki | |
71 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname, oname) |
72 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
73 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
74 | ee7a28be | Sofia Papagiannaki | |
75 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
76 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
77 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.content, odata)
|
78 | ee7a28be | Sofia Papagiannaki | |
79 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, cname) |
80 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
81 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
82 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
83 | ee7a28be | Sofia Papagiannaki | self.assertTrue('αντικείμενο' in objects) |
84 | ee7a28be | Sofia Papagiannaki | |
85 | ee7a28be | Sofia Papagiannaki | def test_copy_object(self): |
86 | ee7a28be | Sofia Papagiannaki | src_container = 'φάκελος'
|
87 | ee7a28be | Sofia Papagiannaki | src_object = 'αντικείμενο'
|
88 | ee7a28be | Sofia Papagiannaki | dest_container = 'αντίγραφα'
|
89 | ee7a28be | Sofia Papagiannaki | dest_object = 'ασφαλές-αντίγραφο'
|
90 | ee7a28be | Sofia Papagiannaki | |
91 | ee7a28be | Sofia Papagiannaki | self.create_container(src_container)
|
92 | ee7a28be | Sofia Papagiannaki | self.upload_object(src_container, src_object)
|
93 | ee7a28be | Sofia Papagiannaki | |
94 | ee7a28be | Sofia Papagiannaki | self.create_container(dest_container)
|
95 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, dest_container, |
96 | ee7a28be | Sofia Papagiannaki | dest_object) |
97 | ee7a28be | Sofia Papagiannaki | self.put(url, data='', |
98 | ee7a28be | Sofia Papagiannaki | HTTP_X_COPY_FROM='/%s/%s' % (src_container, src_object))
|
99 | ee7a28be | Sofia Papagiannaki | |
100 | ee7a28be | Sofia Papagiannaki | # assert destination object exists
|
101 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
102 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
103 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
104 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
105 | ee7a28be | Sofia Papagiannaki | |
106 | ee7a28be | Sofia Papagiannaki | # assert source object exists
|
107 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, src_container, |
108 | ee7a28be | Sofia Papagiannaki | src_object) |
109 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
110 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
111 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
112 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
113 | ee7a28be | Sofia Papagiannaki | |
114 | ee7a28be | Sofia Papagiannaki | # list source container objects
|
115 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, src_container) |
116 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
117 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
118 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
119 | ee7a28be | Sofia Papagiannaki | self.assertTrue(src_object in objects) |
120 | ee7a28be | Sofia Papagiannaki | self.assertTrue(dest_object not in objects) |
121 | ee7a28be | Sofia Papagiannaki | |
122 | ee7a28be | Sofia Papagiannaki | # list destination container objects
|
123 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, dest_container) |
124 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
125 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
126 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
127 | ee7a28be | Sofia Papagiannaki | self.assertTrue(src_object not in objects) |
128 | ee7a28be | Sofia Papagiannaki | self.assertTrue(dest_object in objects) |
129 | ee7a28be | Sofia Papagiannaki | |
130 | ee7a28be | Sofia Papagiannaki | def test_move_object(self): |
131 | ee7a28be | Sofia Papagiannaki | src_container = 'φάκελος'
|
132 | ee7a28be | Sofia Papagiannaki | src_object = 'αντικείμενο'
|
133 | ee7a28be | Sofia Papagiannaki | dest_container = 'αντίγραα'
|
134 | ee7a28be | Sofia Papagiannaki | dest_object = 'ασφαλές-αντίγραφο'
|
135 | ee7a28be | Sofia Papagiannaki | |
136 | ee7a28be | Sofia Papagiannaki | self.create_container(src_container)
|
137 | ee7a28be | Sofia Papagiannaki | self.upload_object(src_container, src_object)
|
138 | ee7a28be | Sofia Papagiannaki | |
139 | ee7a28be | Sofia Papagiannaki | self.create_container(dest_container)
|
140 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, dest_container, |
141 | ee7a28be | Sofia Papagiannaki | dest_object) |
142 | ee7a28be | Sofia Papagiannaki | self.put(url, data='', |
143 | ee7a28be | Sofia Papagiannaki | HTTP_X_MOVE_FROM='/%s/%s' % (src_container, src_object))
|
144 | ee7a28be | Sofia Papagiannaki | |
145 | ee7a28be | Sofia Papagiannaki | # assert destination object exists
|
146 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
147 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
148 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
149 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
150 | ee7a28be | Sofia Papagiannaki | |
151 | ee7a28be | Sofia Papagiannaki | # assert source object does not exist
|
152 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, src_container, |
153 | ee7a28be | Sofia Papagiannaki | src_object) |
154 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
155 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 404) |
156 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
157 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 404) |
158 | ee7a28be | Sofia Papagiannaki | |
159 | ee7a28be | Sofia Papagiannaki | # list source container objects
|
160 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, src_container) |
161 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
162 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 204) |
163 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
164 | ee7a28be | Sofia Papagiannaki | self.assertTrue(src_object not in objects) |
165 | ee7a28be | Sofia Papagiannaki | self.assertTrue(dest_object not in objects) |
166 | ee7a28be | Sofia Papagiannaki | |
167 | ee7a28be | Sofia Papagiannaki | # list destination container objects
|
168 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, dest_container) |
169 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
170 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
171 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
172 | ee7a28be | Sofia Papagiannaki | self.assertTrue(src_object not in objects) |
173 | ee7a28be | Sofia Papagiannaki | self.assertTrue(dest_object in objects) |
174 | ee7a28be | Sofia Papagiannaki | |
175 | ee7a28be | Sofia Papagiannaki | def test_delete_object(self): |
176 | ee7a28be | Sofia Papagiannaki | self.create_container('φάκελος') |
177 | ee7a28be | Sofia Papagiannaki | self.upload_object('φάκελος', 'αντικείμενο') |
178 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
179 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
180 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
181 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
182 | ee7a28be | Sofia Papagiannaki | self.assertTrue('αντικείμενο' in objects) |
183 | ee7a28be | Sofia Papagiannaki | |
184 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'αντικείμενο') |
185 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
186 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
187 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
188 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
189 | ee7a28be | Sofia Papagiannaki | |
190 | ee7a28be | Sofia Papagiannaki | r = self.delete(url)
|
191 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
192 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 404) |
193 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
194 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 404) |
195 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
196 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
197 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
198 | ee7a28be | Sofia Papagiannaki | self.assertTrue('αντικείμενο' not in objects) |
199 | ee7a28be | Sofia Papagiannaki | |
200 | ee7a28be | Sofia Papagiannaki | def test_delete_container(self): |
201 | ee7a28be | Sofia Papagiannaki | self.create_container('φάκελος') |
202 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user) |
203 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
204 | ee7a28be | Sofia Papagiannaki | containers = r.content.split('\n')
|
205 | ee7a28be | Sofia Papagiannaki | self.assertTrue('φάκελος' in containers) |
206 | ee7a28be | Sofia Papagiannaki | |
207 | ee7a28be | Sofia Papagiannaki | self.upload_object('φάκελος', 'αντικείμενο') |
208 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
209 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
210 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
211 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
212 | ee7a28be | Sofia Papagiannaki | self.assertTrue('αντικείμενο' in objects) |
213 | ee7a28be | Sofia Papagiannaki | |
214 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'αντικείμενο') |
215 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
216 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
217 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
218 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
219 | ee7a28be | Sofia Papagiannaki | |
220 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
221 | ee7a28be | Sofia Papagiannaki | r = self.delete(url)
|
222 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 409) |
223 | ee7a28be | Sofia Papagiannaki | |
224 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'αντικείμενο') |
225 | ee7a28be | Sofia Papagiannaki | r = self.delete(url)
|
226 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
227 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 404) |
228 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
229 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 404) |
230 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
231 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
232 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
233 | ee7a28be | Sofia Papagiannaki | self.assertTrue('αντικείμενο' not in objects) |
234 | ee7a28be | Sofia Papagiannaki | |
235 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
236 | ee7a28be | Sofia Papagiannaki | r = self.delete(url)
|
237 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 204) |
238 | ee7a28be | Sofia Papagiannaki | |
239 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user) |
240 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
241 | ee7a28be | Sofia Papagiannaki | containers = r.content.split('\n')
|
242 | ee7a28be | Sofia Papagiannaki | self.assertTrue('φάκελος' not in containers) |
243 | ee7a28be | Sofia Papagiannaki | |
244 | ee7a28be | Sofia Papagiannaki | def test_account_meta(self): |
245 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user) |
246 | ee7a28be | Sofia Papagiannaki | headers = {'HTTP_X_ACCOUNT_META_Ποιότητα': 'Ααα'} |
247 | ee7a28be | Sofia Papagiannaki | r = self.post(url, content_type='', **headers) |
248 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
249 | ee7a28be | Sofia Papagiannaki | |
250 | ee7a28be | Sofia Papagiannaki | meta = self.get_account_meta()
|
251 | ee7a28be | Sofia Papagiannaki | self.assertTrue('Ποιότητα' in meta) |
252 | ee7a28be | Sofia Papagiannaki | self.assertEqual(meta['Ποιότητα'], 'Ααα') |
253 | ee7a28be | Sofia Papagiannaki | |
254 | ee7a28be | Sofia Papagiannaki | def test_container_meta(self): |
255 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
256 | ee7a28be | Sofia Papagiannaki | headers = {'HTTP_X_CONTAINER_META_Ποιότητα': 'Ααα'} |
257 | ee7a28be | Sofia Papagiannaki | r = self.put(url, data='', **headers) |
258 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 201) |
259 | ee7a28be | Sofia Papagiannaki | |
260 | ee7a28be | Sofia Papagiannaki | meta = self.get_container_meta('φάκελος') |
261 | ee7a28be | Sofia Papagiannaki | self.assertTrue('Ποιότητα' in meta) |
262 | ee7a28be | Sofia Papagiannaki | self.assertEqual(meta['Ποιότητα'], 'Ααα') |
263 | ee7a28be | Sofia Papagiannaki | |
264 | ee7a28be | Sofia Papagiannaki | def test_object_meta(self): |
265 | ee7a28be | Sofia Papagiannaki | self.create_container('φάκελος') |
266 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'αντικείμενο') |
267 | ee7a28be | Sofia Papagiannaki | headers = {'HTTP_X_OBJECT_META_Ποιότητα': 'Ααα'} |
268 | ee7a28be | Sofia Papagiannaki | r = self.put(url, data=get_random_data(), **headers)
|
269 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 201) |
270 | ee7a28be | Sofia Papagiannaki | |
271 | ee7a28be | Sofia Papagiannaki | meta = self.get_object_meta('φάκελος', 'αντικείμενο') |
272 | ee7a28be | Sofia Papagiannaki | self.assertTrue('Ποιότητα' in meta) |
273 | ee7a28be | Sofia Papagiannaki | self.assertEqual(meta['Ποιότητα'], 'Ααα') |
274 | ee7a28be | Sofia Papagiannaki | |
275 | ee7a28be | Sofia Papagiannaki | def test_list_meta_filtering(self): |
276 | ee7a28be | Sofia Papagiannaki | self.create_container('φάκελος') |
277 | ee7a28be | Sofia Papagiannaki | meta = {'ποιότητα': 'Ααα'} |
278 | ee7a28be | Sofia Papagiannaki | self.upload_object('φάκελος', 'ο1', **meta) |
279 | ee7a28be | Sofia Papagiannaki | self.upload_object('φάκελος', 'ο2') |
280 | ee7a28be | Sofia Papagiannaki | self.upload_object('φάκελος', 'ο3') |
281 | ee7a28be | Sofia Papagiannaki | |
282 | ee7a28be | Sofia Papagiannaki | meta = {'ποσότητα': 'μεγάλη'} |
283 | ee7a28be | Sofia Papagiannaki | self.update_object_meta('φάκελος', 'ο2', meta) |
284 | ee7a28be | Sofia Papagiannaki | |
285 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος') |
286 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('ποιότητα, ποσότητα'))) |
287 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
288 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
289 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
290 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
291 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο1', 'ο2']) |
292 | ee7a28be | Sofia Papagiannaki | |
293 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('!ποιότητα'))) |
294 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
295 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
296 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
297 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
298 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο2', 'ο3']) |
299 | ee7a28be | Sofia Papagiannaki | |
300 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('!ποιότητα, !ποσότητα'))) |
301 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
302 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
303 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
304 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
305 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο3']) |
306 | ee7a28be | Sofia Papagiannaki | |
307 | ee7a28be | Sofia Papagiannaki | meta = {'ποιότητα': 'ΑΒ'} |
308 | ee7a28be | Sofia Papagiannaki | self.update_object_meta('φάκελος', 'ο2', meta) |
309 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('ποιότητα=Ααα'))) |
310 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
311 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
312 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
313 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
314 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο1']) |
315 | ee7a28be | Sofia Papagiannaki | |
316 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('ποιότητα!=Ααα'))) |
317 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
318 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
319 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
320 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
321 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο2']) |
322 | ee7a28be | Sofia Papagiannaki | |
323 | ee7a28be | Sofia Papagiannaki | meta = {'έτος': '2011'} |
324 | ee7a28be | Sofia Papagiannaki | self.update_object_meta('φάκελος', 'ο3', meta) |
325 | ee7a28be | Sofia Papagiannaki | meta = {'έτος': '2012'} |
326 | ee7a28be | Sofia Papagiannaki | self.update_object_meta('φάκελος', 'ο2', meta) |
327 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('έτος<2012'))) |
328 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
329 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
330 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
331 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
332 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο3']) |
333 | ee7a28be | Sofia Papagiannaki | |
334 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('έτος<=2012'))) |
335 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
336 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
337 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
338 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
339 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο2', 'ο3']) |
340 | ee7a28be | Sofia Papagiannaki | |
341 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('έτος<=2012, έτος!=2011'))) |
342 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
343 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
344 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
345 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
346 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, ['ο2']) |
347 | ee7a28be | Sofia Papagiannaki | |
348 | ee7a28be | Sofia Papagiannaki | r = self.get('%s?meta=%s' % (url, quote('έτος<2012, έτος!=2011'))) |
349 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 204) |
350 | ee7a28be | Sofia Papagiannaki | objects = r.content.split('\n')
|
351 | ee7a28be | Sofia Papagiannaki | if '' in objects: |
352 | ee7a28be | Sofia Papagiannaki | objects.remove('')
|
353 | ee7a28be | Sofia Papagiannaki | self.assertEquals(objects, [])
|
354 | ee7a28be | Sofia Papagiannaki | |
355 | ee7a28be | Sofia Papagiannaki | def test_groups(self): |
356 | ee7a28be | Sofia Papagiannaki | # create a group
|
357 | ee7a28be | Sofia Papagiannaki | headers = {'HTTP_X_ACCOUNT_GROUP_γκρουπ': 'chazapis,διογένης'} |
358 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user) |
359 | ee7a28be | Sofia Papagiannaki | r = self.post(url, **headers)
|
360 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
361 | ee7a28be | Sofia Papagiannaki | |
362 | ee7a28be | Sofia Papagiannaki | groups = self.get_account_groups()
|
363 | ee7a28be | Sofia Papagiannaki | self.assertTrue('γκρουπ' in groups) |
364 | ee7a28be | Sofia Papagiannaki | self.assertEqual(groups['γκρουπ'], 'chazapis,διογένης') |
365 | ee7a28be | Sofia Papagiannaki | |
366 | ee7a28be | Sofia Papagiannaki | # check read access
|
367 | ee7a28be | Sofia Papagiannaki | self.create_container('φάκελος') |
368 | ee7a28be | Sofia Papagiannaki | odata = self.upload_object('φάκελος', 'ο1')[1] |
369 | ee7a28be | Sofia Papagiannaki | |
370 | ee7a28be | Sofia Papagiannaki | r = self.head(url, user='διογένης') |
371 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
372 | ee7a28be | Sofia Papagiannaki | r = self.get(url, user='διογένης') |
373 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
374 | ee7a28be | Sofia Papagiannaki | |
375 | ee7a28be | Sofia Papagiannaki | # share for read
|
376 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'ο1') |
377 | ee7a28be | Sofia Papagiannaki | r = self.post(url, content_type='', |
378 | ee7a28be | Sofia Papagiannaki | HTTP_X_OBJECT_SHARING='read=%s:γκρουπ' % self.user) |
379 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
380 | ee7a28be | Sofia Papagiannaki | |
381 | ee7a28be | Sofia Papagiannaki | r = self.head(url, user='διογένης') |
382 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
383 | ee7a28be | Sofia Papagiannaki | r = self.get(url, user='διογένης') |
384 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
385 | ee7a28be | Sofia Papagiannaki | |
386 | ee7a28be | Sofia Papagiannaki | # check write access
|
387 | ee7a28be | Sofia Papagiannaki | appended_data = get_random_data() |
388 | ee7a28be | Sofia Papagiannaki | r = self.post(url, user='διογένης', data=appended_data, |
389 | ee7a28be | Sofia Papagiannaki | content_type='application/octet-stream',
|
390 | ee7a28be | Sofia Papagiannaki | HTTP_CONTENT_LENGTH=str(len(appended_data)), |
391 | ee7a28be | Sofia Papagiannaki | HTTP_CONTENT_RANGE='bytes */*')
|
392 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 403) |
393 | ee7a28be | Sofia Papagiannaki | |
394 | ee7a28be | Sofia Papagiannaki | # share for write
|
395 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'ο1') |
396 | ee7a28be | Sofia Papagiannaki | r = self.post(url, content_type='', |
397 | ee7a28be | Sofia Papagiannaki | HTTP_X_OBJECT_SHARING='write=%s:γκρουπ' % self.user) |
398 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 202) |
399 | ee7a28be | Sofia Papagiannaki | |
400 | ee7a28be | Sofia Papagiannaki | r = self.post(url, user='διογένης', data=appended_data, |
401 | ee7a28be | Sofia Papagiannaki | content_type='application/octet-stream',
|
402 | ee7a28be | Sofia Papagiannaki | HTTP_CONTENT_LENGTH=str(len(appended_data)), |
403 | ee7a28be | Sofia Papagiannaki | HTTP_CONTENT_RANGE='bytes */*')
|
404 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 204) |
405 | ee7a28be | Sofia Papagiannaki | |
406 | ee7a28be | Sofia Papagiannaki | r = self.get(url, user='διογένης') |
407 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
408 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.content, odata + appended_data)
|
409 | ee7a28be | Sofia Papagiannaki | |
410 | ee7a28be | Sofia Papagiannaki | def test_manifestation(self): |
411 | ee7a28be | Sofia Papagiannaki | self.create_container('κουβάς') |
412 | ee7a28be | Sofia Papagiannaki | prefix = 'μέρη/'
|
413 | ee7a28be | Sofia Papagiannaki | data = ''
|
414 | ee7a28be | Sofia Papagiannaki | for i in range(5): |
415 | ee7a28be | Sofia Papagiannaki | part = '%s%d' % (prefix, i)
|
416 | ee7a28be | Sofia Papagiannaki | data += self.upload_object('κουβάς', part)[1] |
417 | ee7a28be | Sofia Papagiannaki | |
418 | ee7a28be | Sofia Papagiannaki | self.create_container('φάκελος') |
419 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'άπαντα') |
420 | ee7a28be | Sofia Papagiannaki | r = self.put(url, data='', HTTP_X_OBJECT_MANIFEST='κουβάς/%s' % prefix) |
421 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 201) |
422 | ee7a28be | Sofia Papagiannaki | |
423 | ee7a28be | Sofia Papagiannaki | r = self.head(url)
|
424 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
425 | ee7a28be | Sofia Papagiannaki | |
426 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
427 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
428 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.content, data)
|
429 | ee7a28be | Sofia Papagiannaki | |
430 | ee7a28be | Sofia Papagiannaki | # wrong manifestation
|
431 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'φάκελος', 'άπαντα') |
432 | ee7a28be | Sofia Papagiannaki | r = self.put(url, data='', HTTP_X_OBJECT_MANIFEST='κουβάς/λάθος') |
433 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 201) |
434 | ee7a28be | Sofia Papagiannaki | |
435 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
436 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
437 | ee7a28be | Sofia Papagiannaki | self.assertTrue(r.content != data)
|
438 | ee7a28be | Sofia Papagiannaki | |
439 | ee7a28be | Sofia Papagiannaki | def test_update_from_another_object(self): |
440 | ee7a28be | Sofia Papagiannaki | self.create_container('κουβάς') |
441 | ee7a28be | Sofia Papagiannaki | initial_data = self.upload_object('κουβάς', 'νέο')[1] |
442 | ee7a28be | Sofia Papagiannaki | length = TEST_BLOCK_SIZE + random.randint(1, TEST_BLOCK_SIZE - 1) |
443 | ee7a28be | Sofia Papagiannaki | src_data = self.upload_object('κουβάς', 'πηγή', length=length)[1] |
444 | ee7a28be | Sofia Papagiannaki | |
445 | ee7a28be | Sofia Papagiannaki | url = join_urls(self.pithos_path, self.user, 'κουβάς', 'νέο') |
446 | ee7a28be | Sofia Papagiannaki | r = self.post(url, content_type='', HTTP_CONTENT_RANGE='bytes */*', |
447 | ee7a28be | Sofia Papagiannaki | HTTP_X_SOURCE_OBJECT='/κουβάς/πηγή')
|
448 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 204) |
449 | ee7a28be | Sofia Papagiannaki | |
450 | ee7a28be | Sofia Papagiannaki | r = self.get(url)
|
451 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.status_code, 200) |
452 | ee7a28be | Sofia Papagiannaki | self.assertEqual(r.content, initial_data + src_data) |