root / pithos / backends / tests.py @ 58a6c894
History | View | Annotate | Download (17.3 kB)
1 | 5635f9ef | Antony Chazapis | # Copyright 2011 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 5635f9ef | Antony Chazapis | #
|
3 | 5635f9ef | Antony Chazapis | # Redistribution and use in source and binary forms, with or
|
4 | 5635f9ef | Antony Chazapis | # without modification, are permitted provided that the following
|
5 | 5635f9ef | Antony Chazapis | # conditions are met:
|
6 | 5635f9ef | Antony Chazapis | #
|
7 | 5635f9ef | Antony Chazapis | # 1. Redistributions of source code must retain the above
|
8 | 5635f9ef | Antony Chazapis | # copyright notice, this list of conditions and the following
|
9 | 5635f9ef | Antony Chazapis | # disclaimer.
|
10 | 5635f9ef | Antony Chazapis | #
|
11 | 5635f9ef | Antony Chazapis | # 2. Redistributions in binary form must reproduce the above
|
12 | 5635f9ef | Antony Chazapis | # copyright notice, this list of conditions and the following
|
13 | 5635f9ef | Antony Chazapis | # disclaimer in the documentation and/or other materials
|
14 | 5635f9ef | Antony Chazapis | # provided with the distribution.
|
15 | 5635f9ef | Antony Chazapis | #
|
16 | 5635f9ef | Antony Chazapis | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 5635f9ef | Antony Chazapis | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 5635f9ef | Antony Chazapis | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 5635f9ef | Antony Chazapis | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 5635f9ef | Antony Chazapis | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 5635f9ef | Antony Chazapis | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 5635f9ef | Antony Chazapis | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 5635f9ef | Antony Chazapis | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 5635f9ef | Antony Chazapis | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 5635f9ef | Antony Chazapis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 5635f9ef | Antony Chazapis | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 5635f9ef | Antony Chazapis | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 5635f9ef | Antony Chazapis | #
|
29 | 5635f9ef | Antony Chazapis | # The views and conclusions contained in the software and
|
30 | 5635f9ef | Antony Chazapis | # documentation are those of the authors and should not be
|
31 | 5635f9ef | Antony Chazapis | # interpreted as representing official policies, either expressed
|
32 | 5635f9ef | Antony Chazapis | # or implied, of GRNET S.A.
|
33 | 5635f9ef | Antony Chazapis | |
34 | 9df6ed1f | Sofia Papagiannaki | import unittest |
35 | 9df6ed1f | Sofia Papagiannaki | import os |
36 | 9df6ed1f | Sofia Papagiannaki | import types |
37 | 9df6ed1f | Sofia Papagiannaki | import json |
38 | 9df6ed1f | Sofia Papagiannaki | |
39 | 9df6ed1f | Sofia Papagiannaki | from simple import SimpleBackend |
40 | 9df6ed1f | Sofia Papagiannaki | |
41 | 9df6ed1f | Sofia Papagiannaki | |
42 | 9df6ed1f | Sofia Papagiannaki | class TestAccount(unittest.TestCase): |
43 | 9df6ed1f | Sofia Papagiannaki | def setUp(self): |
44 | 9df6ed1f | Sofia Papagiannaki | self.basepath = './test/content' |
45 | 9df6ed1f | Sofia Papagiannaki | self.b = SimpleBackend(self.basepath) |
46 | 9df6ed1f | Sofia Papagiannaki | self.account = 'account1' |
47 | 9df6ed1f | Sofia Papagiannaki | |
48 | 9df6ed1f | Sofia Papagiannaki | def tearDown(self): |
49 | 58a6c894 | Antony Chazapis | containers = [x[0] for x in self.b.list_containers(self.account)] |
50 | 9df6ed1f | Sofia Papagiannaki | for container in containers: |
51 | 9df6ed1f | Sofia Papagiannaki | try:
|
52 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_container(self.account, container) |
53 | 9df6ed1f | Sofia Papagiannaki | except IndexError: |
54 | 9df6ed1f | Sofia Papagiannaki | # container not empty
|
55 | 58a6c894 | Antony Chazapis | for obj in [x[0] for x in self.b.list_objects(self.account, container)]: |
56 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_object(self.account, container, obj) |
57 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_container(self.account, container) |
58 | 9df6ed1f | Sofia Papagiannaki | |
59 | 9df6ed1f | Sofia Papagiannaki | def test_list_containers(self): |
60 | 9df6ed1f | Sofia Papagiannaki | l1 = ['images', 'movies', 'documents', 'backups'] |
61 | 9df6ed1f | Sofia Papagiannaki | for item in l1: |
62 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, item) |
63 | 58a6c894 | Antony Chazapis | l2 = [x[0] for x in self.b.list_containers(self.account)] |
64 | 9df6ed1f | Sofia Papagiannaki | l1.sort() |
65 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(l1, l2)
|
66 | 9df6ed1f | Sofia Papagiannaki | |
67 | 9df6ed1f | Sofia Papagiannaki | def test_list_containers_with_limit_marker(self): |
68 | 9df6ed1f | Sofia Papagiannaki | l1 = ['apples', 'bananas', 'kiwis', 'oranges', 'pears'] |
69 | 9df6ed1f | Sofia Papagiannaki | for item in l1: |
70 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, item) |
71 | 58a6c894 | Antony Chazapis | l2 = [x[0] for x in self.b.list_containers(self.account, limit=2)] |
72 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(len(l2), 2) |
73 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(l1[:2], l2) |
74 | 9df6ed1f | Sofia Papagiannaki | |
75 | 58a6c894 | Antony Chazapis | l2 = [x[0] for x in self.b.list_containers(self.account, limit=2, marker='bananas')] |
76 | 9df6ed1f | Sofia Papagiannaki | self.assertTrue(len(l2) <= 2) |
77 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(l1[2:4], l2) |
78 | 9df6ed1f | Sofia Papagiannaki | |
79 | 58a6c894 | Antony Chazapis | l2 = [x[0] for x in self.b.list_containers(self.account, limit=2, marker='oranges')] |
80 | 9df6ed1f | Sofia Papagiannaki | self.assertTrue(len(l2) <= 2) |
81 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(l1[4:], l2) |
82 | 9df6ed1f | Sofia Papagiannaki | |
83 | 9df6ed1f | Sofia Papagiannaki | def test_get_account_meta(self): |
84 | 9df6ed1f | Sofia Papagiannaki | meta = { |
85 | 9df6ed1f | Sofia Papagiannaki | "name": "account1", |
86 | 9df6ed1f | Sofia Papagiannaki | "username": "aaitest@uth.gr", |
87 | 9df6ed1f | Sofia Papagiannaki | "email": "aaitest@uth.gr", |
88 | 9df6ed1f | Sofia Papagiannaki | "fileroot": "http://hostname/gss/rest/aaitest@uth.gr/files", |
89 | 9df6ed1f | Sofia Papagiannaki | "trash": "http://hostname/gss/rest/aaitest@uth.gr/trash", |
90 | 9df6ed1f | Sofia Papagiannaki | "shared": "http://hostname/gss/rest/aaitest@uth.gr/shared", |
91 | 9df6ed1f | Sofia Papagiannaki | "others": "http://hostname/gss/rest/aaitest@uth.gr/others", |
92 | 9df6ed1f | Sofia Papagiannaki | "tags": "http://hostname/gss/rest/aaitest@uth.gr/tags", |
93 | 9df6ed1f | Sofia Papagiannaki | "groups": "http://hostname/gss/rest/aaitest@uth.gr/groups", |
94 | 9df6ed1f | Sofia Papagiannaki | "creationDate": 1223372769275, |
95 | 9df6ed1f | Sofia Papagiannaki | "modificationDate": 1223372769275, |
96 | 9df6ed1f | Sofia Papagiannaki | "lastLogin": 1223372769275} |
97 | 9df6ed1f | Sofia Papagiannaki | self.b.update_account_meta(self.account, meta) |
98 | 9df6ed1f | Sofia Papagiannaki | d = self.b.get_account_meta(self.account) |
99 | 9df6ed1f | Sofia Papagiannaki | for k,v in meta.iteritems(): |
100 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(unicode(v), d[k]) |
101 | 9df6ed1f | Sofia Papagiannaki | |
102 | 9df6ed1f | Sofia Papagiannaki | def test_get_non_existing_account_meta(self): |
103 | 9df6ed1f | Sofia Papagiannaki | meta = self.b.get_account_meta('account2') |
104 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(meta, {'name': 'account2', 'count': 0, 'bytes': 0}) |
105 | 9df6ed1f | Sofia Papagiannaki | |
106 | 9df6ed1f | Sofia Papagiannaki | def test_update_account_meta(self): |
107 | 9df6ed1f | Sofia Papagiannaki | meta = { |
108 | 9df6ed1f | Sofia Papagiannaki | "name": "account1", |
109 | 9df6ed1f | Sofia Papagiannaki | "username": "aaitest@uth.gr", |
110 | 9df6ed1f | Sofia Papagiannaki | "email": "aaitest@uth.gr", |
111 | 9df6ed1f | Sofia Papagiannaki | "fileroot": "http://hostname/gss/rest/aaitest@uth.gr/files", |
112 | 9df6ed1f | Sofia Papagiannaki | "trash": "http://hostname/gss/rest/aaitest@uth.gr/trash", |
113 | 9df6ed1f | Sofia Papagiannaki | "shared": "http://hostname/gss/rest/aaitest@uth.gr/shared", |
114 | 9df6ed1f | Sofia Papagiannaki | "others": "http://hostname/gss/rest/aaitest@uth.gr/others", |
115 | 9df6ed1f | Sofia Papagiannaki | "tags": "http://hostname/gss/rest/aaitest@uth.gr/tags", |
116 | 9df6ed1f | Sofia Papagiannaki | "groups": "http://hostname/gss/rest/aaitest@uth.gr/groups", |
117 | 9df6ed1f | Sofia Papagiannaki | "creationDate": 1223372769275, |
118 | 9df6ed1f | Sofia Papagiannaki | "modificationDate": 1223372769275, |
119 | 9df6ed1f | Sofia Papagiannaki | "lastLogin": 1223372769275} |
120 | 9df6ed1f | Sofia Papagiannaki | self.b.update_account_meta(self.account, meta) |
121 | 9df6ed1f | Sofia Papagiannaki | p = os.path.join(self.basepath, self.account) |
122 | 9df6ed1f | Sofia Papagiannaki | |
123 | 9df6ed1f | Sofia Papagiannaki | db_meta = self.b.get_account_meta(self.account) |
124 | 9df6ed1f | Sofia Papagiannaki | for k,v in meta.iteritems(): |
125 | 9df6ed1f | Sofia Papagiannaki | self.assertTrue(k in db_meta) |
126 | 9df6ed1f | Sofia Papagiannaki | db_value = db_meta[k] |
127 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(unicode(v), db_value) |
128 | 9df6ed1f | Sofia Papagiannaki | |
129 | 9df6ed1f | Sofia Papagiannaki | class TestContainer(unittest.TestCase): |
130 | 9df6ed1f | Sofia Papagiannaki | def setUp(self): |
131 | 9df6ed1f | Sofia Papagiannaki | self.basepath = './test/content' |
132 | 9df6ed1f | Sofia Papagiannaki | self.b = SimpleBackend(self.basepath) |
133 | 9df6ed1f | Sofia Papagiannaki | self.account = 'account1' |
134 | 9df6ed1f | Sofia Papagiannaki | |
135 | 9df6ed1f | Sofia Papagiannaki | def tearDown(self): |
136 | 58a6c894 | Antony Chazapis | containers = [x[0] for x in self.b.list_containers(self.account)] |
137 | 9df6ed1f | Sofia Papagiannaki | for container in containers: |
138 | 9df6ed1f | Sofia Papagiannaki | try:
|
139 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_container(self.account, container) |
140 | 9df6ed1f | Sofia Papagiannaki | except IndexError: # container not empty |
141 | 58a6c894 | Antony Chazapis | for obj in [x[0] for x in self.b.list_objects(self.account, container)]: |
142 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_object(self.account, container, obj) |
143 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_container(self.account, container) |
144 | 9df6ed1f | Sofia Papagiannaki | |
145 | 9df6ed1f | Sofia Papagiannaki | def test_list_non_existing_account_objects(self): |
146 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, self.b.list_objects, 'account2', 'container1') |
147 | 9df6ed1f | Sofia Papagiannaki | |
148 | 9df6ed1f | Sofia Papagiannaki | def test_list_objects(self): |
149 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, 'container1') |
150 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container1')] |
151 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(len([]), len(objects)) |
152 | 9df6ed1f | Sofia Papagiannaki | l = [ |
153 | 9df6ed1f | Sofia Papagiannaki | {'name':'kate_beckinsale.jpg'}, |
154 | 9df6ed1f | Sofia Papagiannaki | {'name':'How To Win Friends And Influence People.pdf'}, |
155 | 9df6ed1f | Sofia Papagiannaki | {'name':'moms_birthday.jpg'}, |
156 | 9df6ed1f | Sofia Papagiannaki | {'name':'poodle_strut.mov'}, |
157 | 9df6ed1f | Sofia Papagiannaki | {'name':'Disturbed - Down With The Sickness.mp3'}, |
158 | 9df6ed1f | Sofia Papagiannaki | {'name':'army_of_darkness.avi'}, |
159 | 9df6ed1f | Sofia Papagiannaki | {'name':'the_mad.avi'} |
160 | 9df6ed1f | Sofia Papagiannaki | ] |
161 | 9df6ed1f | Sofia Papagiannaki | for item in l: |
162 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, 'container1', item['name'], 0, []) |
163 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container1')] |
164 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(len(l), len(objects)) |
165 | 9df6ed1f | Sofia Papagiannaki | |
166 | 9df6ed1f | Sofia Papagiannaki | def test_list_objects_with_limit_marker(self): |
167 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, 'container1') |
168 | 9df6ed1f | Sofia Papagiannaki | l = ['gala', 'grannysmith', 'honeycrisp', 'jonagold', 'reddelicious'] |
169 | 9df6ed1f | Sofia Papagiannaki | for item in l: |
170 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, 'container1', item, 0, []) |
171 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container1', limit=2)] |
172 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(l[:2], objects) |
173 | 9df6ed1f | Sofia Papagiannaki | |
174 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container1', limit=2, marker='grannysmith')] |
175 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(l[2:4], objects) |
176 | 9df6ed1f | Sofia Papagiannaki | |
177 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container1', limit=2, marker='jonagold')] |
178 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(l[4:], objects) |
179 | 9df6ed1f | Sofia Papagiannaki | |
180 | 9df6ed1f | Sofia Papagiannaki | def test_list_pseudo_hierarchical_folders(self): |
181 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, 'container1') |
182 | 9df6ed1f | Sofia Papagiannaki | l = ['photos/animals/dogs/poodle.jpg',
|
183 | 9df6ed1f | Sofia Papagiannaki | 'photos/animals/dogs/terrier.jpg',
|
184 | 9df6ed1f | Sofia Papagiannaki | 'photos/animals/cats/persian.jpg',
|
185 | 9df6ed1f | Sofia Papagiannaki | 'photos/animals/cats/siamese.jpg',
|
186 | 9df6ed1f | Sofia Papagiannaki | 'photos/plants/fern.jpg',
|
187 | 9df6ed1f | Sofia Papagiannaki | 'photos/plants/rose.jpg',
|
188 | 9df6ed1f | Sofia Papagiannaki | 'photos/me.jpg'
|
189 | 9df6ed1f | Sofia Papagiannaki | ] |
190 | 9df6ed1f | Sofia Papagiannaki | for item in l: |
191 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, 'container1', item, 0, []) |
192 | 9df6ed1f | Sofia Papagiannaki | |
193 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container1', prefix='photos/', delimiter='/')] |
194 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(['photos/animals/', 'photos/me.jpg', 'photos/plants/'], objects) |
195 | 9df6ed1f | Sofia Papagiannaki | |
196 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container1', prefix='photos/animals/', delimiter='/')] |
197 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(['photos/animals/cats/', 'photos/animals/dogs/'], objects) |
198 | 9df6ed1f | Sofia Papagiannaki | |
199 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, 'container2') |
200 | 9df6ed1f | Sofia Papagiannaki | l = ['photos/photo1', 'photos/photo2', 'movieobject', 'videos', 'videos/movieobj4'] |
201 | 9df6ed1f | Sofia Papagiannaki | for item in l: |
202 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, 'container2', item, 0, []) |
203 | 58a6c894 | Antony Chazapis | objects = [x[0] for x in self.b.list_objects(self.account, 'container2', delimiter='/')] |
204 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(['movieobject', 'photos/', 'videos', 'videos/'], objects) |
205 | 9df6ed1f | Sofia Papagiannaki | |
206 | 22dab079 | Antony Chazapis | def test_put_container(self): |
207 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
208 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
209 | 58a6c894 | Antony Chazapis | self.assertTrue(cname in [x[0] for x in self.b.list_containers(self.account)]) |
210 | 9df6ed1f | Sofia Papagiannaki | |
211 | 22dab079 | Antony Chazapis | def test_put_container_twice(self): |
212 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
213 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
214 | 22dab079 | Antony Chazapis | self.assertRaises(NameError, self.b.put_container, self.account, cname) |
215 | 9df6ed1f | Sofia Papagiannaki | |
216 | 9df6ed1f | Sofia Papagiannaki | def test_delete_container(self): |
217 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
218 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
219 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_container(self.account, cname) |
220 | 58a6c894 | Antony Chazapis | self.assertTrue(cname not in [x[0] for x in self.b.list_containers(self.account)]) |
221 | 9df6ed1f | Sofia Papagiannaki | |
222 | 9df6ed1f | Sofia Papagiannaki | def test_delete_non_exisitng_container(self): |
223 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
224 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, self.b.delete_container, self.account, cname) |
225 | 9df6ed1f | Sofia Papagiannaki | |
226 | 9df6ed1f | Sofia Papagiannaki | def test_delete_non_empty_container(self): |
227 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
228 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
229 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, cname, 'object1', 0, []) |
230 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(IndexError, self.b.delete_container, self.account, cname) |
231 | 9df6ed1f | Sofia Papagiannaki | |
232 | 9df6ed1f | Sofia Papagiannaki | def test_get_container_meta(self): |
233 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
234 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
235 | 9df6ed1f | Sofia Papagiannaki | meta = self.b.get_container_meta(self.account, cname) |
236 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(meta['count'], 0) |
237 | 9df6ed1f | Sofia Papagiannaki | |
238 | 9df6ed1f | Sofia Papagiannaki | l = ['photos/photo1', 'photos/photo2', 'movieobject', 'videos/movieobj4'] |
239 | 9df6ed1f | Sofia Papagiannaki | for item in l: |
240 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, cname, item, 0, []) |
241 | 9df6ed1f | Sofia Papagiannaki | meta = self.b.get_container_meta(self.account, cname) |
242 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(meta['count'], 4) |
243 | 9df6ed1f | Sofia Papagiannaki | |
244 | 9df6ed1f | Sofia Papagiannaki | class TestObject(unittest.TestCase): |
245 | 9df6ed1f | Sofia Papagiannaki | def setUp(self): |
246 | 9df6ed1f | Sofia Papagiannaki | self.basepath = './test/content' |
247 | 9df6ed1f | Sofia Papagiannaki | self.b = SimpleBackend(self.basepath) |
248 | 9df6ed1f | Sofia Papagiannaki | self.account = 'account1' |
249 | 9df6ed1f | Sofia Papagiannaki | |
250 | 9df6ed1f | Sofia Papagiannaki | def tearDown(self): |
251 | 58a6c894 | Antony Chazapis | containers = [x[0] for x in self.b.list_containers(self.account)] |
252 | 9df6ed1f | Sofia Papagiannaki | for container in containers: |
253 | 9df6ed1f | Sofia Papagiannaki | try:
|
254 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_container(self.account, container) |
255 | 9df6ed1f | Sofia Papagiannaki | except IndexError: # container not empty |
256 | 58a6c894 | Antony Chazapis | for obj in [x[0] for x in self.b.list_objects(self.account, container)]: |
257 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_object(self.account, container, obj) |
258 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_container(self.account, container) |
259 | 9df6ed1f | Sofia Papagiannaki | |
260 | 9df6ed1f | Sofia Papagiannaki | def test_get_non_existing_object(self): |
261 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
262 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
263 | 22dab079 | Antony Chazapis | self.assertRaises(NameError, self.b.get_object_hashmap, self.account, 'cname', 'testobj') |
264 | 22dab079 | Antony Chazapis | self.assertRaises(NameError, self.b.get_object_hashmap, self.account, cname, 'testobj') |
265 | 9df6ed1f | Sofia Papagiannaki | |
266 | 9df6ed1f | Sofia Papagiannaki | def test_get_object(self): |
267 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
268 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
269 | 9df6ed1f | Sofia Papagiannaki | input = {'name':'kate_beckinsale.jpg'} |
270 | 22dab079 | Antony Chazapis | data = json.dumps(input)
|
271 | 22dab079 | Antony Chazapis | hash = self.b.put_block(data)
|
272 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, cname, input['name'], len(data), [hash]) |
273 | 22dab079 | Antony Chazapis | size, hashmap = self.b.get_object_hashmap(self.account, cname, 'kate_beckinsale.jpg') |
274 | 22dab079 | Antony Chazapis | self.assertEquals(len(data), size) |
275 | 22dab079 | Antony Chazapis | self.assertEquals(hash, hashmap[0]) |
276 | 22dab079 | Antony Chazapis | self.assertEquals(input, json.loads(self.b.get_block(hash))) |
277 | 9df6ed1f | Sofia Papagiannaki | |
278 | 22dab079 | Antony Chazapis | # def test_update_object(self):
|
279 | 22dab079 | Antony Chazapis | # cname = 'container1'
|
280 | 22dab079 | Antony Chazapis | # self.b.put_container(self.account, cname)
|
281 | 22dab079 | Antony Chazapis | # input = {'name':'kate_beckinsale.jpg'}
|
282 | 22dab079 | Antony Chazapis | # self.b.update_object(self.account, cname, input['name'], json.dumps(input))
|
283 | 22dab079 | Antony Chazapis | # meta = self.b.get_object_meta(self.account, cname, input['name'])
|
284 | 9df6ed1f | Sofia Papagiannaki | |
285 | 9df6ed1f | Sofia Papagiannaki | def test_copy_object(self): |
286 | 9df6ed1f | Sofia Papagiannaki | src_cname = 'container1'
|
287 | 9df6ed1f | Sofia Papagiannaki | src_obj = 'photos/me.jpg'
|
288 | 9df6ed1f | Sofia Papagiannaki | dest_cname = 'container2'
|
289 | 9df6ed1f | Sofia Papagiannaki | dest_obj = 'photos/personal/myself.jpg'
|
290 | 9df6ed1f | Sofia Papagiannaki | |
291 | 9df6ed1f | Sofia Papagiannaki | # non existing source account
|
292 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, |
293 | 9df6ed1f | Sofia Papagiannaki | self.b.copy_object,
|
294 | 9df6ed1f | Sofia Papagiannaki | 'account',
|
295 | 9df6ed1f | Sofia Papagiannaki | src_cname, |
296 | 9df6ed1f | Sofia Papagiannaki | src_obj, |
297 | 9df6ed1f | Sofia Papagiannaki | dest_cname, |
298 | 9df6ed1f | Sofia Papagiannaki | dest_obj) |
299 | 9df6ed1f | Sofia Papagiannaki | # non existing source container
|
300 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, |
301 | 9df6ed1f | Sofia Papagiannaki | self.b.copy_object,
|
302 | 9df6ed1f | Sofia Papagiannaki | self.account,
|
303 | 9df6ed1f | Sofia Papagiannaki | src_cname, |
304 | 9df6ed1f | Sofia Papagiannaki | src_obj, |
305 | 9df6ed1f | Sofia Papagiannaki | dest_cname, |
306 | 9df6ed1f | Sofia Papagiannaki | dest_obj) |
307 | 9df6ed1f | Sofia Papagiannaki | |
308 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, src_cname) |
309 | 9df6ed1f | Sofia Papagiannaki | # non existing source object
|
310 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, |
311 | 9df6ed1f | Sofia Papagiannaki | self.b.copy_object,
|
312 | 9df6ed1f | Sofia Papagiannaki | self.account,
|
313 | 9df6ed1f | Sofia Papagiannaki | src_cname, |
314 | 9df6ed1f | Sofia Papagiannaki | src_obj, |
315 | 9df6ed1f | Sofia Papagiannaki | dest_cname, |
316 | 9df6ed1f | Sofia Papagiannaki | dest_obj) |
317 | 9df6ed1f | Sofia Papagiannaki | |
318 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, src_cname, src_obj, 0, []) |
319 | 9df6ed1f | Sofia Papagiannaki | # non existing destination container
|
320 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, |
321 | 9df6ed1f | Sofia Papagiannaki | self.b.copy_object,
|
322 | 9df6ed1f | Sofia Papagiannaki | self.account,
|
323 | 9df6ed1f | Sofia Papagiannaki | src_cname, |
324 | 9df6ed1f | Sofia Papagiannaki | src_obj, |
325 | 9df6ed1f | Sofia Papagiannaki | dest_cname, |
326 | 9df6ed1f | Sofia Papagiannaki | dest_obj) |
327 | 9df6ed1f | Sofia Papagiannaki | |
328 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, dest_cname) |
329 | 9df6ed1f | Sofia Papagiannaki | self.b.update_object_meta(self.account, src_cname, src_obj, {'tag':'sfsfssf'}) |
330 | 9df6ed1f | Sofia Papagiannaki | self.b.copy_object(self.account, src_cname, src_obj, dest_cname, dest_obj) |
331 | 58a6c894 | Antony Chazapis | self.assertTrue(dest_obj in [x[0] for x in self.b.list_objects(self.account, |
332 | 58a6c894 | Antony Chazapis | dest_cname, |
333 | 58a6c894 | Antony Chazapis | prefix='photos/personal/',
|
334 | 58a6c894 | Antony Chazapis | delimiter='/')])
|
335 | 9df6ed1f | Sofia Papagiannaki | # TODO: test metadata changes
|
336 | 9df6ed1f | Sofia Papagiannaki | meta_tag = self.b.get_object_meta(self.account, dest_cname, dest_obj)['tag'] |
337 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(meta_tag, unicode('sfsfssf')) |
338 | 9df6ed1f | Sofia Papagiannaki | |
339 | 9df6ed1f | Sofia Papagiannaki | def test_delete_non_existing_object(self): |
340 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
341 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
342 | 9df6ed1f | Sofia Papagiannaki | name = 'kate_beckinsale.jpg'
|
343 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, self.b.delete_object, self.account, cname, name) |
344 | 9df6ed1f | Sofia Papagiannaki | |
345 | 9df6ed1f | Sofia Papagiannaki | def test_delete_object(self): |
346 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
347 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
348 | 9df6ed1f | Sofia Papagiannaki | name = 'kate_beckinsale.jpg'
|
349 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, cname, name, 0, []) |
350 | 58a6c894 | Antony Chazapis | self.assertTrue(name in [x[0] for x in self.b.list_objects(self.account, cname)]) |
351 | 9df6ed1f | Sofia Papagiannaki | |
352 | 9df6ed1f | Sofia Papagiannaki | self.b.delete_object(self.account, cname, name) |
353 | 58a6c894 | Antony Chazapis | self.assertTrue(name not in [x[0] for x in self.b.list_objects(self.account, cname)]) |
354 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, self.b.delete_object, self.account, cname, name) |
355 | 9df6ed1f | Sofia Papagiannaki | |
356 | 9df6ed1f | Sofia Papagiannaki | def test_get_non_existing_object_meta(self): |
357 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
358 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
359 | 9df6ed1f | Sofia Papagiannaki | name = 'kate_beckinsale.jpg'
|
360 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, self.b.get_object_meta, self.account, cname, name) |
361 | 9df6ed1f | Sofia Papagiannaki | |
362 | 9df6ed1f | Sofia Papagiannaki | def test_get_update_object_meta(self): |
363 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
364 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
365 | 9df6ed1f | Sofia Papagiannaki | name = 'kate_beckinsale.jpg'
|
366 | 22dab079 | Antony Chazapis | self.b.update_object_hashmap(self.account, cname, name, 0, []) |
367 | 9df6ed1f | Sofia Papagiannaki | |
368 | 9df6ed1f | Sofia Papagiannaki | m1 = {'X-Object-Meta-Meat': 'Bacon', |
369 | 9df6ed1f | Sofia Papagiannaki | 'X-Object-Meta-Fruit': 'Bacon', |
370 | 9df6ed1f | Sofia Papagiannaki | 'X-Object-Meta-Dairy': 'Bacon'} |
371 | 9df6ed1f | Sofia Papagiannaki | self.b.update_object_meta(self.account, cname, name, m1) |
372 | 9df6ed1f | Sofia Papagiannaki | meta = self.b.get_object_meta(self.account, cname, name) |
373 | 9df6ed1f | Sofia Papagiannaki | for k,v in m1.iteritems(): |
374 | 9df6ed1f | Sofia Papagiannaki | self.assertTrue(k in meta) |
375 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(unicode(v), meta[k]) |
376 | 9df6ed1f | Sofia Papagiannaki | |
377 | 9df6ed1f | Sofia Papagiannaki | m2 = {'X-Object-Meta-Meat': 'Bacon', |
378 | 9df6ed1f | Sofia Papagiannaki | 'X-Object-Meta-Fruit': 'Bacon', |
379 | 9df6ed1f | Sofia Papagiannaki | 'X-Object-Meta-Veggie': 'Bacon', |
380 | 9df6ed1f | Sofia Papagiannaki | 'X-Object-Meta-Dairy': 'Chicken'} |
381 | 9df6ed1f | Sofia Papagiannaki | self.b.update_object_meta(self.account, cname, name, m2) |
382 | 9df6ed1f | Sofia Papagiannaki | meta = self.b.get_object_meta(self.account, cname, name) |
383 | 9df6ed1f | Sofia Papagiannaki | m1.update(m2) |
384 | 9df6ed1f | Sofia Papagiannaki | for k,v in m1.iteritems(): |
385 | 9df6ed1f | Sofia Papagiannaki | self.assertTrue(k in meta) |
386 | 9df6ed1f | Sofia Papagiannaki | self.assertEquals(unicode(v), meta[k]) |
387 | 9df6ed1f | Sofia Papagiannaki | |
388 | 9df6ed1f | Sofia Papagiannaki | def test_update_non_existing_object_meta(self): |
389 | 9df6ed1f | Sofia Papagiannaki | cname = 'container1'
|
390 | 22dab079 | Antony Chazapis | self.b.put_container(self.account, cname) |
391 | 9df6ed1f | Sofia Papagiannaki | name = 'kate_beckinsale.jpg'
|
392 | 9df6ed1f | Sofia Papagiannaki | self.assertRaises(NameError, self.b.update_object_meta, self.account, cname, name, {}) |
393 | 9df6ed1f | Sofia Papagiannaki | |
394 | 9df6ed1f | Sofia Papagiannaki | if __name__ == "__main__": |
395 | 9df6ed1f | Sofia Papagiannaki | unittest.main() |