Statistics
| Branch: | Tag: | Revision:

root / pithos / backends / tests.py @ d6c6f6c7

History | View | Annotate | Download (18.2 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 02c0c3fa Antony Chazapis
        self.account = 'test'
47 9df6ed1f Sofia Papagiannaki
    
48 9df6ed1f Sofia Papagiannaki
    def tearDown(self):
49 83dd59c5 Antony Chazapis
        containers = [x[0] for x in self.b.list_containers('test', self.account)]
50 9df6ed1f Sofia Papagiannaki
        for container in containers:
51 9df6ed1f Sofia Papagiannaki
            try:
52 83dd59c5 Antony Chazapis
                self.b.delete_container('test', self.account, container)
53 9df6ed1f Sofia Papagiannaki
            except IndexError:
54 9df6ed1f Sofia Papagiannaki
                # container not empty
55 83dd59c5 Antony Chazapis
                for obj in [x[0] for x in self.b.list_objects('test', self.account, container)]:
56 83dd59c5 Antony Chazapis
                    self.b.delete_object('test', self.account, container, obj)
57 83dd59c5 Antony Chazapis
                self.b.delete_container('test', 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 83dd59c5 Antony Chazapis
            self.b.put_container('test', self.account, item)
63 83dd59c5 Antony Chazapis
        l2 = [x[0] for x in self.b.list_containers('test', 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 83dd59c5 Antony Chazapis
            self.b.put_container('test', self.account, item)
71 83dd59c5 Antony Chazapis
        l2 = [x[0] for x in self.b.list_containers('test', 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 83dd59c5 Antony Chazapis
        l2 = [x[0] for x in self.b.list_containers('test', 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 83dd59c5 Antony Chazapis
        l2 = [x[0] for x in self.b.list_containers('test', 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 02c0c3fa Antony Chazapis
            "name": "test",
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 83dd59c5 Antony Chazapis
        self.b.update_account_meta('test', self.account, meta)
98 83dd59c5 Antony Chazapis
        d = self.b.get_account_meta('test', 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 02c0c3fa Antony Chazapis
        meta = self.b.get_account_meta('account1', 'account1')
104 02c0c3fa Antony Chazapis
        self.assertEquals(meta, {'name': 'account1', 'count': 0, 'bytes': 0})
105 9df6ed1f Sofia Papagiannaki
    
106 9df6ed1f Sofia Papagiannaki
    def test_update_account_meta(self):
107 9df6ed1f Sofia Papagiannaki
        meta = {
108 02c0c3fa Antony Chazapis
            "name": "test",
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 83dd59c5 Antony Chazapis
        self.b.update_account_meta('test', self.account, meta)
121 f7667baf Antony Chazapis
        p = '/'.join((self.basepath, self.account))
122 9df6ed1f Sofia Papagiannaki
        
123 83dd59c5 Antony Chazapis
        db_meta = self.b.get_account_meta('test', 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 02c0c3fa Antony Chazapis
        self.account = 'test'
134 9df6ed1f Sofia Papagiannaki
    
135 9df6ed1f Sofia Papagiannaki
    def tearDown(self):
136 83dd59c5 Antony Chazapis
        containers = [x[0] for x in self.b.list_containers('test', self.account)]
137 9df6ed1f Sofia Papagiannaki
        for container in containers:
138 9df6ed1f Sofia Papagiannaki
            try:
139 83dd59c5 Antony Chazapis
                self.b.delete_container('test', self.account, container)
140 9df6ed1f Sofia Papagiannaki
            except IndexError: # container not empty
141 83dd59c5 Antony Chazapis
                for obj in [x[0] for x in self.b.list_objects('test', self.account, container)]:
142 83dd59c5 Antony Chazapis
                    self.b.delete_object('test', self.account, container, obj)
143 83dd59c5 Antony Chazapis
                self.b.delete_container('test', self.account, container)
144 9df6ed1f Sofia Papagiannaki
    
145 9df6ed1f Sofia Papagiannaki
    def test_list_non_existing_account_objects(self):
146 02c0c3fa Antony Chazapis
        self.assertRaises(NameError, self.b.list_objects, 'test', 'test', 'container1')
147 9df6ed1f Sofia Papagiannaki
    
148 9df6ed1f Sofia Papagiannaki
    def test_list_objects(self):
149 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, 'container1')
150 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', 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 83dd59c5 Antony Chazapis
            self.b.update_object_hashmap('test', self.account, 'container1', item['name'], 0, [])
163 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', 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 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, 'container1')
168 9df6ed1f Sofia Papagiannaki
        l = ['gala', 'grannysmith', 'honeycrisp', 'jonagold', 'reddelicious']
169 9df6ed1f Sofia Papagiannaki
        for item in l:
170 83dd59c5 Antony Chazapis
            self.b.update_object_hashmap('test', self.account, 'container1', item, 0, [])
171 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', self.account, 'container1', limit=2)]
172 9df6ed1f Sofia Papagiannaki
        self.assertEquals(l[:2], objects)
173 9df6ed1f Sofia Papagiannaki
        
174 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', self.account, 'container1', limit=2, marker='grannysmith')]
175 9df6ed1f Sofia Papagiannaki
        self.assertEquals(l[2:4], objects)
176 9df6ed1f Sofia Papagiannaki
        
177 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', 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 83dd59c5 Antony Chazapis
        self.b.put_container('test', 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 83dd59c5 Antony Chazapis
            self.b.update_object_hashmap('test', self.account, 'container1', item, 0, [])
192 9df6ed1f Sofia Papagiannaki
        
193 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', 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 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', 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 83dd59c5 Antony Chazapis
        self.b.put_container('test', 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 83dd59c5 Antony Chazapis
            self.b.update_object_hashmap('test', self.account, 'container2', item, 0, [])
203 83dd59c5 Antony Chazapis
        objects = [x[0] for x in self.b.list_objects('test', 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 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
209 83dd59c5 Antony Chazapis
        self.assertTrue(cname in [x[0] for x in self.b.list_containers('test', self.account)])
210 9df6ed1f Sofia Papagiannaki
    
211 22dab079 Antony Chazapis
    def test_put_container_twice(self):
212 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
213 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
214 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.put_container, 'test', self.account, cname)
215 9df6ed1f Sofia Papagiannaki
    
216 9df6ed1f Sofia Papagiannaki
    def test_delete_container(self):
217 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
218 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
219 83dd59c5 Antony Chazapis
        self.b.delete_container('test', self.account, cname)
220 83dd59c5 Antony Chazapis
        self.assertTrue(cname not in [x[0] for x in self.b.list_containers('test', self.account)])
221 9df6ed1f Sofia Papagiannaki
    
222 9df6ed1f Sofia Papagiannaki
    def test_delete_non_exisitng_container(self):
223 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
224 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.delete_container, 'test', 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 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
229 83dd59c5 Antony Chazapis
        self.b.update_object_hashmap('test', self.account, cname, 'object1', 0, [])
230 83dd59c5 Antony Chazapis
        self.assertRaises(IndexError, self.b.delete_container, 'test', self.account, cname)
231 9df6ed1f Sofia Papagiannaki
    
232 9df6ed1f Sofia Papagiannaki
    def test_get_container_meta(self):
233 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
234 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
235 83dd59c5 Antony Chazapis
        meta = self.b.get_container_meta('test', 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 83dd59c5 Antony Chazapis
            self.b.update_object_hashmap('test', self.account, cname, item, 0, [])
241 83dd59c5 Antony Chazapis
        meta = self.b.get_container_meta('test', 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 02c0c3fa Antony Chazapis
        self.account = 'test'
249 9df6ed1f Sofia Papagiannaki
    
250 9df6ed1f Sofia Papagiannaki
    def tearDown(self):
251 83dd59c5 Antony Chazapis
        containers = [x[0] for x in self.b.list_containers('test', self.account)]
252 9df6ed1f Sofia Papagiannaki
        for container in containers:
253 9df6ed1f Sofia Papagiannaki
            try:
254 83dd59c5 Antony Chazapis
                self.b.delete_container('test', self.account, container)
255 9df6ed1f Sofia Papagiannaki
            except IndexError: # container not empty
256 83dd59c5 Antony Chazapis
                for obj in [x[0] for x in self.b.list_objects('test', self.account, container)]:
257 83dd59c5 Antony Chazapis
                    self.b.delete_object('test', self.account, container, obj)
258 83dd59c5 Antony Chazapis
                self.b.delete_container('test', 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 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
263 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.get_object_hashmap, 'test', self.account, 'cname', 'testobj')
264 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.get_object_hashmap, 'test', self.account, cname, 'testobj')
265 9df6ed1f Sofia Papagiannaki
    
266 9df6ed1f Sofia Papagiannaki
    def test_get_object(self):
267 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
268 83dd59c5 Antony Chazapis
        self.b.put_container('test', 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 83dd59c5 Antony Chazapis
        self.b.update_object_hashmap('test', self.account, cname, input['name'], len(data), [hash])
273 83dd59c5 Antony Chazapis
        size, hashmap = self.b.get_object_hashmap('test', 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 83dd59c5 Antony Chazapis
#         self.b.put_container('test', self.account, cname)
281 22dab079 Antony Chazapis
#         input = {'name':'kate_beckinsale.jpg'}
282 83dd59c5 Antony Chazapis
#         self.b.update_object('test', self.account, cname, input['name'], json.dumps(input))
283 83dd59c5 Antony Chazapis
#         meta = self.b.get_object_meta('test', 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 83dd59c5 Antony Chazapis
                          'test',
295 02c0c3fa Antony Chazapis
                          'test',
296 9df6ed1f Sofia Papagiannaki
                          src_cname,
297 9df6ed1f Sofia Papagiannaki
                          src_obj,
298 9df6ed1f Sofia Papagiannaki
                          dest_cname,
299 9df6ed1f Sofia Papagiannaki
                          dest_obj)
300 9df6ed1f Sofia Papagiannaki
        # non existing source container
301 9df6ed1f Sofia Papagiannaki
        self.assertRaises(NameError,
302 9df6ed1f Sofia Papagiannaki
                          self.b.copy_object,
303 83dd59c5 Antony Chazapis
                          'test',
304 9df6ed1f Sofia Papagiannaki
                          self.account,
305 9df6ed1f Sofia Papagiannaki
                          src_cname,
306 9df6ed1f Sofia Papagiannaki
                          src_obj,
307 9df6ed1f Sofia Papagiannaki
                          dest_cname,
308 9df6ed1f Sofia Papagiannaki
                          dest_obj)
309 9df6ed1f Sofia Papagiannaki
        
310 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, src_cname)
311 9df6ed1f Sofia Papagiannaki
        # non existing source object
312 9df6ed1f Sofia Papagiannaki
        self.assertRaises(NameError,
313 9df6ed1f Sofia Papagiannaki
                          self.b.copy_object,
314 83dd59c5 Antony Chazapis
                          'test',
315 9df6ed1f Sofia Papagiannaki
                          self.account,
316 9df6ed1f Sofia Papagiannaki
                          src_cname,
317 9df6ed1f Sofia Papagiannaki
                          src_obj,
318 9df6ed1f Sofia Papagiannaki
                          dest_cname,
319 9df6ed1f Sofia Papagiannaki
                          dest_obj)
320 9df6ed1f Sofia Papagiannaki
        
321 83dd59c5 Antony Chazapis
        self.b.update_object_hashmap('test', self.account, src_cname, src_obj, 0, [])
322 9df6ed1f Sofia Papagiannaki
        # non existing destination container
323 9df6ed1f Sofia Papagiannaki
        self.assertRaises(NameError,
324 9df6ed1f Sofia Papagiannaki
                          self.b.copy_object,
325 83dd59c5 Antony Chazapis
                          'test',
326 9df6ed1f Sofia Papagiannaki
                          self.account,
327 9df6ed1f Sofia Papagiannaki
                          src_cname,
328 9df6ed1f Sofia Papagiannaki
                          src_obj,
329 9df6ed1f Sofia Papagiannaki
                          dest_cname,
330 9df6ed1f Sofia Papagiannaki
                          dest_obj)
331 9df6ed1f Sofia Papagiannaki
        
332 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, dest_cname)
333 83dd59c5 Antony Chazapis
        self.b.update_object_meta('test', self.account, src_cname, src_obj, {'tag':'sfsfssf'})
334 83dd59c5 Antony Chazapis
        self.b.copy_object('test', self.account, src_cname, src_obj, dest_cname, dest_obj)
335 83dd59c5 Antony Chazapis
        self.assertTrue(dest_obj in [x[0] for x in self.b.list_objects('test',
336 83dd59c5 Antony Chazapis
                                                                        self.account,
337 58a6c894 Antony Chazapis
                                                                        dest_cname,
338 58a6c894 Antony Chazapis
                                                                        prefix='photos/personal/',
339 58a6c894 Antony Chazapis
                                                                        delimiter='/')])
340 9df6ed1f Sofia Papagiannaki
        # TODO: test metadata changes
341 83dd59c5 Antony Chazapis
        meta_tag = self.b.get_object_meta('test', self.account, dest_cname, dest_obj)['tag']
342 9df6ed1f Sofia Papagiannaki
        self.assertEquals(meta_tag, unicode('sfsfssf'))
343 9df6ed1f Sofia Papagiannaki
    
344 9df6ed1f Sofia Papagiannaki
    def test_delete_non_existing_object(self):
345 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
346 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
347 9df6ed1f Sofia Papagiannaki
        name = 'kate_beckinsale.jpg'
348 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.delete_object, 'test', self.account, cname, name)
349 9df6ed1f Sofia Papagiannaki
    
350 9df6ed1f Sofia Papagiannaki
    def test_delete_object(self):
351 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
352 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
353 9df6ed1f Sofia Papagiannaki
        name = 'kate_beckinsale.jpg'
354 83dd59c5 Antony Chazapis
        self.b.update_object_hashmap('test', self.account, cname, name, 0, [])
355 83dd59c5 Antony Chazapis
        self.assertTrue(name in [x[0] for x in self.b.list_objects('test', self.account, cname)])
356 9df6ed1f Sofia Papagiannaki
        
357 83dd59c5 Antony Chazapis
        self.b.delete_object('test', self.account, cname, name)
358 83dd59c5 Antony Chazapis
        self.assertTrue(name not in [x[0] for x in self.b.list_objects('test', self.account, cname)])
359 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.delete_object, 'test', self.account, cname, name)
360 9df6ed1f Sofia Papagiannaki
    
361 9df6ed1f Sofia Papagiannaki
    def test_get_non_existing_object_meta(self):
362 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
363 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
364 9df6ed1f Sofia Papagiannaki
        name = 'kate_beckinsale.jpg'
365 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.get_object_meta, 'test', self.account, cname, name)
366 9df6ed1f Sofia Papagiannaki
    
367 9df6ed1f Sofia Papagiannaki
    def test_get_update_object_meta(self):
368 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
369 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
370 9df6ed1f Sofia Papagiannaki
        name = 'kate_beckinsale.jpg'
371 83dd59c5 Antony Chazapis
        self.b.update_object_hashmap('test', self.account, cname, name, 0, [])
372 9df6ed1f Sofia Papagiannaki
        
373 9df6ed1f Sofia Papagiannaki
        m1 = {'X-Object-Meta-Meat': 'Bacon',
374 9df6ed1f Sofia Papagiannaki
             'X-Object-Meta-Fruit': 'Bacon',
375 9df6ed1f Sofia Papagiannaki
             'X-Object-Meta-Dairy': 'Bacon'}
376 83dd59c5 Antony Chazapis
        self.b.update_object_meta('test', self.account, cname, name, m1)
377 83dd59c5 Antony Chazapis
        meta = self.b.get_object_meta('test', self.account, cname, name)
378 9df6ed1f Sofia Papagiannaki
        for k,v in m1.iteritems():
379 9df6ed1f Sofia Papagiannaki
            self.assertTrue(k in meta)
380 9df6ed1f Sofia Papagiannaki
            self.assertEquals(unicode(v), meta[k])
381 9df6ed1f Sofia Papagiannaki
        
382 9df6ed1f Sofia Papagiannaki
        m2 = {'X-Object-Meta-Meat': 'Bacon',
383 9df6ed1f Sofia Papagiannaki
             'X-Object-Meta-Fruit': 'Bacon',
384 9df6ed1f Sofia Papagiannaki
             'X-Object-Meta-Veggie': 'Bacon',
385 9df6ed1f Sofia Papagiannaki
             'X-Object-Meta-Dairy': 'Chicken'}
386 83dd59c5 Antony Chazapis
        self.b.update_object_meta('test', self.account, cname, name, m2)
387 83dd59c5 Antony Chazapis
        meta = self.b.get_object_meta('test', self.account, cname, name)
388 9df6ed1f Sofia Papagiannaki
        m1.update(m2)
389 9df6ed1f Sofia Papagiannaki
        for k,v in m1.iteritems():
390 9df6ed1f Sofia Papagiannaki
            self.assertTrue(k in meta)
391 9df6ed1f Sofia Papagiannaki
            self.assertEquals(unicode(v), meta[k])
392 9df6ed1f Sofia Papagiannaki
    
393 9df6ed1f Sofia Papagiannaki
    def test_update_non_existing_object_meta(self):
394 9df6ed1f Sofia Papagiannaki
        cname = 'container1'
395 83dd59c5 Antony Chazapis
        self.b.put_container('test', self.account, cname)
396 9df6ed1f Sofia Papagiannaki
        name = 'kate_beckinsale.jpg'
397 83dd59c5 Antony Chazapis
        self.assertRaises(NameError, self.b.update_object_meta, 'test', self.account, cname, name, {})
398 9df6ed1f Sofia Papagiannaki
399 9df6ed1f Sofia Papagiannaki
if __name__ == "__main__":
400 9df6ed1f Sofia Papagiannaki
    unittest.main()