Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / test / accounts.py @ d6a92fa0

History | View | Annotate | Download (18 kB)

1 f3787696 Sofia Papagiannaki
#!/usr/bin/env python
2 f3787696 Sofia Papagiannaki
#coding=utf8
3 f3787696 Sofia Papagiannaki
4 f3787696 Sofia Papagiannaki
# Copyright 2011-2013 GRNET S.A. All rights reserved.
5 f3787696 Sofia Papagiannaki
#
6 f3787696 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
7 f3787696 Sofia Papagiannaki
# without modification, are permitted provided that the following
8 f3787696 Sofia Papagiannaki
# conditions are met:
9 f3787696 Sofia Papagiannaki
#
10 f3787696 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
11 f3787696 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
12 f3787696 Sofia Papagiannaki
#      disclaimer.
13 f3787696 Sofia Papagiannaki
#
14 f3787696 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
15 f3787696 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
16 f3787696 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
17 f3787696 Sofia Papagiannaki
#      provided with the distribution.
18 f3787696 Sofia Papagiannaki
#
19 f3787696 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
20 f3787696 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 f3787696 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 f3787696 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
23 f3787696 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 f3787696 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 f3787696 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 f3787696 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 f3787696 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 f3787696 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 f3787696 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 f3787696 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
31 f3787696 Sofia Papagiannaki
#
32 f3787696 Sofia Papagiannaki
# The views and conclusions contained in the software and
33 f3787696 Sofia Papagiannaki
# documentation are those of the authors and should not be
34 f3787696 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
35 f3787696 Sofia Papagiannaki
# or implied, of GRNET S.A.
36 f3787696 Sofia Papagiannaki
37 f3787696 Sofia Papagiannaki
from pithos.api.test import PithosAPITest, AssertMappingInvariant,\
38 f3787696 Sofia Papagiannaki
    DATE_FORMATS
39 f3787696 Sofia Papagiannaki
40 d6a92fa0 Sofia Papagiannaki
from synnefo.lib import join_urls
41 d6a92fa0 Sofia Papagiannaki
42 f3787696 Sofia Papagiannaki
import time as _time
43 f3787696 Sofia Papagiannaki
import datetime
44 f3787696 Sofia Papagiannaki
45 f3787696 Sofia Papagiannaki
46 f3787696 Sofia Papagiannaki
class AccountHead(PithosAPITest):
47 f3787696 Sofia Papagiannaki
    def test_get_account_meta(self):
48 f3787696 Sofia Papagiannaki
        cnames = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
49 f3787696 Sofia Papagiannaki
50 f3787696 Sofia Papagiannaki
        # create containers
51 f3787696 Sofia Papagiannaki
        uploaded_bytes = 0
52 f3787696 Sofia Papagiannaki
        for cname in cnames:
53 f3787696 Sofia Papagiannaki
            self.create_container(cname)
54 f3787696 Sofia Papagiannaki
55 f3787696 Sofia Papagiannaki
            # upload object
56 f3787696 Sofia Papagiannaki
            name, data, resp = self.upload_object(cname)
57 f3787696 Sofia Papagiannaki
            uploaded_bytes += len(data)
58 f3787696 Sofia Papagiannaki
59 f3787696 Sofia Papagiannaki
        # set account meta
60 f3787696 Sofia Papagiannaki
        self.update_account_meta({'foo': 'bar'})
61 f3787696 Sofia Papagiannaki
62 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
63 f3787696 Sofia Papagiannaki
        self.assertTrue('X-Account-Meta-Foo' in account_info)
64 f3787696 Sofia Papagiannaki
        self.assertEqual(account_info['X-Account-Meta-Foo'], 'bar')
65 f3787696 Sofia Papagiannaki
66 f3787696 Sofia Papagiannaki
        # list containers
67 f3787696 Sofia Papagiannaki
        containers = self.list_containers()
68 f3787696 Sofia Papagiannaki
        self.assertEqual(int(account_info['X-Account-Container-Count']),
69 f3787696 Sofia Papagiannaki
                         len(containers))
70 f3787696 Sofia Papagiannaki
        usage = 0
71 f3787696 Sofia Papagiannaki
        for c in containers:
72 f3787696 Sofia Papagiannaki
            # list objects
73 f3787696 Sofia Papagiannaki
            objects = self.list_objects(c['name'])
74 f3787696 Sofia Papagiannaki
            self.assertEqual(c['count'], len(objects))
75 f3787696 Sofia Papagiannaki
            csum = sum([o['bytes'] for o in objects])
76 f3787696 Sofia Papagiannaki
            self.assertEqual(int(c['bytes']), csum)
77 f3787696 Sofia Papagiannaki
            usage += int(c['bytes'])
78 f3787696 Sofia Papagiannaki
79 f3787696 Sofia Papagiannaki
        self.assertEqual(
80 f3787696 Sofia Papagiannaki
            int(account_info['x-account-bytes-used']) + uploaded_bytes,
81 f3787696 Sofia Papagiannaki
            usage)
82 f3787696 Sofia Papagiannaki
83 f3787696 Sofia Papagiannaki
    def test_get_account_meta_until(self):
84 f3787696 Sofia Papagiannaki
        self.update_account_meta({'foo': 'bar'})
85 f3787696 Sofia Papagiannaki
86 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
87 f3787696 Sofia Papagiannaki
        t = datetime.datetime.strptime(account_info['Last-Modified'],
88 f3787696 Sofia Papagiannaki
                                       DATE_FORMATS[2])
89 f3787696 Sofia Papagiannaki
        t1 = t + datetime.timedelta(seconds=1)
90 f3787696 Sofia Papagiannaki
        until = int(_time.mktime(t1.timetuple()))
91 f3787696 Sofia Papagiannaki
92 f3787696 Sofia Papagiannaki
        _time.sleep(2)
93 f3787696 Sofia Papagiannaki
        self.update_account_meta({'quality': 'AAA'})
94 f3787696 Sofia Papagiannaki
95 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
96 f3787696 Sofia Papagiannaki
        t = datetime.datetime.strptime(account_info['Last-Modified'],
97 f3787696 Sofia Papagiannaki
                                       DATE_FORMATS[-1])
98 f3787696 Sofia Papagiannaki
        last_modified = int(_time.mktime(t.timetuple()))
99 f3787696 Sofia Papagiannaki
        assert until < last_modified
100 f3787696 Sofia Papagiannaki
101 f3787696 Sofia Papagiannaki
        self.assertTrue('X-Account-Meta-Quality' in account_info)
102 f3787696 Sofia Papagiannaki
        self.assertTrue('X-Account-Meta-Foo' in account_info)
103 f3787696 Sofia Papagiannaki
104 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info(until=until)
105 f3787696 Sofia Papagiannaki
        self.assertTrue('X-Account-Meta-Quality' not in account_info)
106 f3787696 Sofia Papagiannaki
        self.assertTrue('X-Account-Meta-Foo' in account_info)
107 f3787696 Sofia Papagiannaki
        self.assertTrue('X-Account-Until-Timestamp' in account_info)
108 f3787696 Sofia Papagiannaki
        t = datetime.datetime.strptime(
109 f3787696 Sofia Papagiannaki
            account_info['X-Account-Until-Timestamp'], DATE_FORMATS[2])
110 f3787696 Sofia Papagiannaki
        self.assertTrue(int(_time.mktime(t1.timetuple())) <= until)
111 f3787696 Sofia Papagiannaki
112 f3787696 Sofia Papagiannaki
    def test_get_account_meta_until_invalid_date(self):
113 f3787696 Sofia Papagiannaki
        self.update_account_meta({'quality': 'AAA'})
114 f3787696 Sofia Papagiannaki
        meta = self.get_account_meta(until='-1')
115 f3787696 Sofia Papagiannaki
        self.assertTrue('X-Account-Meta-Quality' in meta)
116 f3787696 Sofia Papagiannaki
117 f3787696 Sofia Papagiannaki
118 f3787696 Sofia Papagiannaki
class AccountGet(PithosAPITest):
119 f3787696 Sofia Papagiannaki
    def setUp(self):
120 f3787696 Sofia Papagiannaki
        PithosAPITest.setUp(self)
121 f3787696 Sofia Papagiannaki
        cnames = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
122 f3787696 Sofia Papagiannaki
123 f3787696 Sofia Papagiannaki
        # create containers
124 f3787696 Sofia Papagiannaki
        uploaded_bytes = 0
125 f3787696 Sofia Papagiannaki
        for cname in cnames:
126 f3787696 Sofia Papagiannaki
            self.create_container(cname)
127 f3787696 Sofia Papagiannaki
128 f3787696 Sofia Papagiannaki
            # upload object
129 f3787696 Sofia Papagiannaki
            name, data, resp = self.upload_object(cname)
130 f3787696 Sofia Papagiannaki
            uploaded_bytes += len(data)
131 f3787696 Sofia Papagiannaki
132 f3787696 Sofia Papagiannaki
    def test_list(self):
133 f3787696 Sofia Papagiannaki
        #list containers: row format
134 f3787696 Sofia Papagiannaki
        containers = self.list_containers(format=None)
135 f3787696 Sofia Papagiannaki
        self.assertEquals(containers,
136 f3787696 Sofia Papagiannaki
                          ['apples', 'bananas', 'kiwis', 'oranges', 'pears'])
137 f3787696 Sofia Papagiannaki
138 f3787696 Sofia Papagiannaki
    def test_list_with_limit(self):
139 f3787696 Sofia Papagiannaki
        containers = self.list_containers(format=None, limit=2)
140 f3787696 Sofia Papagiannaki
        self.assertEquals(len(containers), 2)
141 f3787696 Sofia Papagiannaki
        self.assertEquals(containers, ['apples', 'bananas'])
142 f3787696 Sofia Papagiannaki
143 f3787696 Sofia Papagiannaki
    def test_list_with_marker(self):
144 f3787696 Sofia Papagiannaki
        containers = self.list_containers(format=None, limit=2,
145 f3787696 Sofia Papagiannaki
                                          marker='bananas')
146 f3787696 Sofia Papagiannaki
        self.assertEquals(containers, ['kiwis', 'oranges'])
147 f3787696 Sofia Papagiannaki
148 f3787696 Sofia Papagiannaki
        containers = self.list_containers(format=None, limit=2,
149 f3787696 Sofia Papagiannaki
                                          marker='oranges')
150 f3787696 Sofia Papagiannaki
        self.assertEquals(containers, ['pears'])
151 f3787696 Sofia Papagiannaki
152 f3787696 Sofia Papagiannaki
    def test_list_json_with_marker(self):
153 f3787696 Sofia Papagiannaki
        containers = self.list_containers(format='json', limit=2,
154 f3787696 Sofia Papagiannaki
                                          marker='bananas')
155 f3787696 Sofia Papagiannaki
        self.assert_extended(containers, 'json', 'container', 2)
156 f3787696 Sofia Papagiannaki
        self.assertEqual(containers[0]['name'], 'kiwis')
157 f3787696 Sofia Papagiannaki
        self.assertEqual(containers[1]['name'], 'oranges')
158 f3787696 Sofia Papagiannaki
159 f3787696 Sofia Papagiannaki
        containers = self.list_containers(format='json', limit=2,
160 f3787696 Sofia Papagiannaki
                                          marker='oranges')
161 f3787696 Sofia Papagiannaki
        self.assert_extended(containers, 'json', 'container', 1)
162 f3787696 Sofia Papagiannaki
        self.assertEqual(containers[0]['name'], 'pears')
163 f3787696 Sofia Papagiannaki
164 f3787696 Sofia Papagiannaki
    def test_list_xml_with_marker(self):
165 f3787696 Sofia Papagiannaki
        xml = self.list_containers(format='xml', limit=2, marker='bananas')
166 f3787696 Sofia Papagiannaki
        self.assert_extended(xml, 'xml', 'container', 2)
167 f3787696 Sofia Papagiannaki
        nodes = xml.getElementsByTagName('name')
168 f3787696 Sofia Papagiannaki
        self.assertTrue(len(nodes) <= 2)
169 f3787696 Sofia Papagiannaki
        names = [n.childNodes[0].data for n in nodes]
170 f3787696 Sofia Papagiannaki
        self.assertEqual(names, ['kiwis', 'oranges'])
171 f3787696 Sofia Papagiannaki
172 f3787696 Sofia Papagiannaki
        xml = self.list_containers(format='xml', limit=2, marker='oranges')
173 f3787696 Sofia Papagiannaki
        self.assert_extended(xml, 'xml', 'container', 1)
174 f3787696 Sofia Papagiannaki
        nodes = xml.getElementsByTagName('name')
175 f3787696 Sofia Papagiannaki
        self.assertTrue(len(nodes) <= 2)
176 f3787696 Sofia Papagiannaki
        names = [n.childNodes[0].data for n in nodes]
177 f3787696 Sofia Papagiannaki
        self.assertEqual(names, ['pears'])
178 f3787696 Sofia Papagiannaki
179 f3787696 Sofia Papagiannaki
    def test_if_modified_since(self):
180 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
181 f3787696 Sofia Papagiannaki
        last_modified = account_info['Last-Modified']
182 f3787696 Sofia Papagiannaki
        t1 = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
183 f3787696 Sofia Papagiannaki
        t1_formats = map(t1.strftime, DATE_FORMATS)
184 f3787696 Sofia Papagiannaki
185 f3787696 Sofia Papagiannaki
        # Check not modified
186 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
187 f3787696 Sofia Papagiannaki
        for t in t1_formats:
188 d6a92fa0 Sofia Papagiannaki
            r = self.get(url, HTTP_IF_MODIFIED_SINCE=t)
189 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 304)
190 f3787696 Sofia Papagiannaki
191 f3787696 Sofia Papagiannaki
        # modify account: add container
192 f3787696 Sofia Papagiannaki
        _time.sleep(1)
193 f3787696 Sofia Papagiannaki
        self.create_container('c1')
194 f3787696 Sofia Papagiannaki
195 f3787696 Sofia Papagiannaki
        # Check modified
196 f3787696 Sofia Papagiannaki
        for t in t1_formats:
197 d6a92fa0 Sofia Papagiannaki
            r = self.get('%s' % url, HTTP_IF_MODIFIED_SINCE=t)
198 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 200)
199 f3787696 Sofia Papagiannaki
            self.assertEqual(
200 f3787696 Sofia Papagiannaki
                r.content.split('\n')[:-1],
201 f3787696 Sofia Papagiannaki
                ['apples', 'bananas', 'c1', 'kiwis', 'oranges', 'pears'])
202 f3787696 Sofia Papagiannaki
203 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
204 f3787696 Sofia Papagiannaki
        last_modified = account_info['Last-Modified']
205 f3787696 Sofia Papagiannaki
        t2 = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
206 f3787696 Sofia Papagiannaki
        t2_formats = map(t2.strftime, DATE_FORMATS)
207 f3787696 Sofia Papagiannaki
208 f3787696 Sofia Papagiannaki
        # modify account: update account meta
209 f3787696 Sofia Papagiannaki
        _time.sleep(1)
210 f3787696 Sofia Papagiannaki
        self.update_account_meta({'foo': 'bar'})
211 f3787696 Sofia Papagiannaki
212 f3787696 Sofia Papagiannaki
        # Check modified
213 f3787696 Sofia Papagiannaki
        for t in t2_formats:
214 d6a92fa0 Sofia Papagiannaki
            r = self.get('%s' % url, HTTP_IF_MODIFIED_SINCE=t)
215 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 200)
216 f3787696 Sofia Papagiannaki
            self.assertEqual(
217 f3787696 Sofia Papagiannaki
                r.content.split('\n')[:-1],
218 f3787696 Sofia Papagiannaki
                ['apples', 'bananas', 'c1', 'kiwis', 'oranges', 'pears'])
219 f3787696 Sofia Papagiannaki
220 f3787696 Sofia Papagiannaki
    def test_if_modified_since_invalid_date(self):
221 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
222 d6a92fa0 Sofia Papagiannaki
        r = self.get('%s' % url, HTTP_IF_MODIFIED_SINCE='Monday')
223 f3787696 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
224 f3787696 Sofia Papagiannaki
        self.assertEqual(
225 f3787696 Sofia Papagiannaki
            r.content.split('\n')[:-1],
226 f3787696 Sofia Papagiannaki
            ['apples', 'bananas', 'kiwis', 'oranges', 'pears'])
227 f3787696 Sofia Papagiannaki
228 f3787696 Sofia Papagiannaki
    def test_if_not_modified_since(self):
229 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
230 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
231 f3787696 Sofia Papagiannaki
        last_modified = account_info['Last-Modified']
232 f3787696 Sofia Papagiannaki
        t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
233 f3787696 Sofia Papagiannaki
234 f3787696 Sofia Papagiannaki
        # Check unmodified
235 f3787696 Sofia Papagiannaki
        t1 = t + datetime.timedelta(seconds=1)
236 f3787696 Sofia Papagiannaki
        t1_formats = map(t1.strftime, DATE_FORMATS)
237 f3787696 Sofia Papagiannaki
        for t in t1_formats:
238 d6a92fa0 Sofia Papagiannaki
            r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=t)
239 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 200)
240 f3787696 Sofia Papagiannaki
            self.assertEqual(
241 f3787696 Sofia Papagiannaki
                r.content.split('\n')[:-1],
242 f3787696 Sofia Papagiannaki
                ['apples', 'bananas', 'kiwis', 'oranges', 'pears'])
243 f3787696 Sofia Papagiannaki
244 f3787696 Sofia Papagiannaki
        # modify account: add container
245 f3787696 Sofia Papagiannaki
        _time.sleep(2)
246 f3787696 Sofia Papagiannaki
        self.create_container('c1')
247 f3787696 Sofia Papagiannaki
248 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
249 f3787696 Sofia Papagiannaki
        last_modified = account_info['Last-Modified']
250 f3787696 Sofia Papagiannaki
        t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
251 f3787696 Sofia Papagiannaki
        t2 = t - datetime.timedelta(seconds=1)
252 f3787696 Sofia Papagiannaki
        t2_formats = map(t2.strftime, DATE_FORMATS)
253 f3787696 Sofia Papagiannaki
254 f3787696 Sofia Papagiannaki
        # Check modified
255 f3787696 Sofia Papagiannaki
        for t in t2_formats:
256 d6a92fa0 Sofia Papagiannaki
            r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=t)
257 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 412)
258 f3787696 Sofia Papagiannaki
259 f3787696 Sofia Papagiannaki
        # modify account: update account meta
260 f3787696 Sofia Papagiannaki
        _time.sleep(1)
261 f3787696 Sofia Papagiannaki
        self.update_account_meta({'foo': 'bar'})
262 f3787696 Sofia Papagiannaki
263 f3787696 Sofia Papagiannaki
        account_info = self.get_account_info()
264 f3787696 Sofia Papagiannaki
        last_modified = account_info['Last-Modified']
265 f3787696 Sofia Papagiannaki
        t = datetime.datetime.strptime(last_modified, DATE_FORMATS[-1])
266 f3787696 Sofia Papagiannaki
        t3 = t - datetime.timedelta(seconds=1)
267 f3787696 Sofia Papagiannaki
        t3_formats = map(t3.strftime, DATE_FORMATS)
268 f3787696 Sofia Papagiannaki
269 f3787696 Sofia Papagiannaki
        # Check modified
270 f3787696 Sofia Papagiannaki
        for t in t3_formats:
271 d6a92fa0 Sofia Papagiannaki
            r = self.get(url, HTTP_IF_UNMODIFIED_SINCE=t)
272 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 412)
273 f3787696 Sofia Papagiannaki
274 f3787696 Sofia Papagiannaki
    def test_if_unmodified_since_invalid_date(self):
275 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
276 d6a92fa0 Sofia Papagiannaki
        r = self.get(url, HTTP_IF_UNMODIFIED_SINCE='Monday')
277 f3787696 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
278 f3787696 Sofia Papagiannaki
        self.assertEqual(
279 f3787696 Sofia Papagiannaki
            r.content.split('\n')[:-1],
280 f3787696 Sofia Papagiannaki
            ['apples', 'bananas', 'kiwis', 'oranges', 'pears'])
281 f3787696 Sofia Papagiannaki
282 f3787696 Sofia Papagiannaki
283 f3787696 Sofia Papagiannaki
class AccountPost(PithosAPITest):
284 f3787696 Sofia Papagiannaki
    def setUp(self):
285 f3787696 Sofia Papagiannaki
        PithosAPITest.setUp(self)
286 f3787696 Sofia Papagiannaki
        cnames = ['apples', 'bananas', 'kiwis', 'oranges', 'pears']
287 f3787696 Sofia Papagiannaki
288 f3787696 Sofia Papagiannaki
        # create containers
289 f3787696 Sofia Papagiannaki
        uploaded_bytes = 0
290 f3787696 Sofia Papagiannaki
        for cname in cnames:
291 f3787696 Sofia Papagiannaki
            self.create_container(cname)
292 f3787696 Sofia Papagiannaki
293 f3787696 Sofia Papagiannaki
            # upload object
294 f3787696 Sofia Papagiannaki
            name, data, resp = self.upload_object(cname)
295 f3787696 Sofia Papagiannaki
            uploaded_bytes += len(data)
296 f3787696 Sofia Papagiannaki
297 f3787696 Sofia Papagiannaki
        # set account meta
298 f3787696 Sofia Papagiannaki
        self.update_account_meta({'foo': 'bar'})
299 f3787696 Sofia Papagiannaki
300 f3787696 Sofia Papagiannaki
    def test_update_meta(self):
301 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
302 f3787696 Sofia Papagiannaki
        with AssertMappingInvariant(self.get_account_groups):
303 f3787696 Sofia Papagiannaki
            initial = self.get_account_meta()
304 f3787696 Sofia Papagiannaki
305 f3787696 Sofia Papagiannaki
            meta = {'test': 'tost', 'ping': 'pong'}
306 f3787696 Sofia Papagiannaki
            kwargs = dict(('HTTP_X_ACCOUNT_META_%s' % k, str(v))
307 f3787696 Sofia Papagiannaki
                          for k, v in meta.items())
308 d6a92fa0 Sofia Papagiannaki
            r = self.post('%s?update=' % url, **kwargs)
309 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
310 f3787696 Sofia Papagiannaki
311 f3787696 Sofia Papagiannaki
            meta.update(initial)
312 f3787696 Sofia Papagiannaki
            account_meta = self.get_account_meta()
313 f3787696 Sofia Papagiannaki
            (self.assertTrue('X-Account-Meta-%s' % k in account_meta) for
314 f3787696 Sofia Papagiannaki
                k in meta.keys())
315 f3787696 Sofia Papagiannaki
            (self.assertEqual(account_meta['X-Account-Meta-%s' % k], v) for
316 f3787696 Sofia Papagiannaki
                k, v in meta.items())
317 f3787696 Sofia Papagiannaki
318 f3787696 Sofia Papagiannaki
    def test_reset_meta(self):
319 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
320 f3787696 Sofia Papagiannaki
        with AssertMappingInvariant(self.get_account_groups):
321 f3787696 Sofia Papagiannaki
            meta = {'test': 'tost', 'ping': 'pong'}
322 f3787696 Sofia Papagiannaki
            self.update_account_meta(meta)
323 f3787696 Sofia Papagiannaki
324 f3787696 Sofia Papagiannaki
            new_meta = {'test': 'test33'}
325 f3787696 Sofia Papagiannaki
            kwargs = dict((
326 f3787696 Sofia Papagiannaki
                'HTTP_X_ACCOUNT_META_%s' % k, str(v)
327 f3787696 Sofia Papagiannaki
            ) for k, v in new_meta.items())
328 d6a92fa0 Sofia Papagiannaki
            r = self.post(url, **kwargs)
329 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
330 f3787696 Sofia Papagiannaki
331 f3787696 Sofia Papagiannaki
            account_meta = self.get_account_meta()
332 f3787696 Sofia Papagiannaki
            (self.assertTrue('X-Account-Meta-%s' % k in account_meta) for
333 f3787696 Sofia Papagiannaki
                k in new_meta.keys())
334 f3787696 Sofia Papagiannaki
            (self.assertEqual(account_meta['X-Account-Meta-%s' % k], v) for
335 f3787696 Sofia Papagiannaki
                k, v in new_meta.items())
336 f3787696 Sofia Papagiannaki
337 f3787696 Sofia Papagiannaki
            (self.assertTrue('X-Account-Meta-%s' % k not in account_meta) for
338 f3787696 Sofia Papagiannaki
                k in meta.keys())
339 f3787696 Sofia Papagiannaki
340 f3787696 Sofia Papagiannaki
    def test_delete_meta(self):
341 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
342 f3787696 Sofia Papagiannaki
        with AssertMappingInvariant(self.get_account_groups):
343 f3787696 Sofia Papagiannaki
            meta = {'test': 'tost', 'ping': 'pong'}
344 f3787696 Sofia Papagiannaki
            self.update_account_meta(meta)
345 f3787696 Sofia Papagiannaki
346 f3787696 Sofia Papagiannaki
            kwargs = dict(
347 f3787696 Sofia Papagiannaki
                ('HTTP_X_ACCOUNT_META_%s' % k, '') for k, v in meta.items())
348 d6a92fa0 Sofia Papagiannaki
            r = self.post('%s?update=' % url, **kwargs)
349 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
350 f3787696 Sofia Papagiannaki
351 f3787696 Sofia Papagiannaki
            account_meta = self.get_account_meta()
352 f3787696 Sofia Papagiannaki
353 f3787696 Sofia Papagiannaki
            (self.assertTrue('X-Account-Meta-%s' % k not in account_meta) for
354 f3787696 Sofia Papagiannaki
                k in meta.keys())
355 f3787696 Sofia Papagiannaki
356 f3787696 Sofia Papagiannaki
    def test_set_account_groups(self):
357 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
358 f3787696 Sofia Papagiannaki
        with AssertMappingInvariant(self.get_account_meta):
359 f3787696 Sofia Papagiannaki
            pithosdevs = ['verigak', 'gtsouk', 'chazapis']
360 d6a92fa0 Sofia Papagiannaki
            r = self.post('%s?update=' % url,
361 d6a92fa0 Sofia Papagiannaki
                          HTTP_X_ACCOUNT_GROUP_PITHOSDEV=','.join(pithosdevs))
362 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
363 f3787696 Sofia Papagiannaki
364 f3787696 Sofia Papagiannaki
            account_groups = self.get_account_groups()
365 f3787696 Sofia Papagiannaki
            self.assertTrue(
366 f3787696 Sofia Papagiannaki
                'X-Account-Group-Pithosdev' in self.get_account_groups())
367 f3787696 Sofia Papagiannaki
            self.assertEqual(
368 f3787696 Sofia Papagiannaki
                account_groups['X-Account-Group-Pithosdev'],
369 f3787696 Sofia Papagiannaki
                ','.join(sorted(pithosdevs)))
370 f3787696 Sofia Papagiannaki
371 f3787696 Sofia Papagiannaki
            clientdevs = ['pkanavos', 'mvasilak']
372 d6a92fa0 Sofia Papagiannaki
            r = self.post('%s?update=' % url,
373 d6a92fa0 Sofia Papagiannaki
                          HTTP_X_ACCOUNT_GROUP_CLIENTSDEV=','.join(clientdevs))
374 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
375 f3787696 Sofia Papagiannaki
376 f3787696 Sofia Papagiannaki
            account_groups = self.get_account_groups()
377 f3787696 Sofia Papagiannaki
            self.assertTrue(
378 f3787696 Sofia Papagiannaki
                'X-Account-Group-Pithosdev' in account_groups)
379 f3787696 Sofia Papagiannaki
            self.assertTrue(
380 f3787696 Sofia Papagiannaki
                'X-Account-Group-Clientsdev' in account_groups)
381 f3787696 Sofia Papagiannaki
            self.assertEqual(
382 f3787696 Sofia Papagiannaki
                account_groups['X-Account-Group-Pithosdev'],
383 f3787696 Sofia Papagiannaki
                ','.join(sorted(pithosdevs)))
384 f3787696 Sofia Papagiannaki
            self.assertEqual(
385 f3787696 Sofia Papagiannaki
                account_groups['X-Account-Group-Clientsdev'],
386 f3787696 Sofia Papagiannaki
                ','.join(sorted(clientdevs)))
387 f3787696 Sofia Papagiannaki
388 f3787696 Sofia Papagiannaki
            clientdevs = ['mvasilak']
389 d6a92fa0 Sofia Papagiannaki
            r = self.post('%s?update=' % url,
390 d6a92fa0 Sofia Papagiannaki
                          HTTP_X_ACCOUNT_GROUP_CLIENTSDEV=''.join(clientdevs))
391 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
392 f3787696 Sofia Papagiannaki
393 f3787696 Sofia Papagiannaki
            account_groups = self.get_account_groups()
394 f3787696 Sofia Papagiannaki
            self.assertTrue(
395 f3787696 Sofia Papagiannaki
                'X-Account-Group-Pithosdev' in account_groups)
396 f3787696 Sofia Papagiannaki
            self.assertTrue(
397 f3787696 Sofia Papagiannaki
                'X-Account-Group-Clientsdev' in account_groups)
398 f3787696 Sofia Papagiannaki
            self.assertEqual(
399 f3787696 Sofia Papagiannaki
                account_groups['X-Account-Group-Pithosdev'],
400 f3787696 Sofia Papagiannaki
                ','.join(sorted(pithosdevs)))
401 f3787696 Sofia Papagiannaki
            self.assertEqual(
402 f3787696 Sofia Papagiannaki
                account_groups['X-Account-Group-Clientsdev'],
403 f3787696 Sofia Papagiannaki
                ','.join(sorted(clientdevs)))
404 f3787696 Sofia Papagiannaki
405 f3787696 Sofia Papagiannaki
    def test_reset_account_groups(self):
406 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
407 f3787696 Sofia Papagiannaki
        with AssertMappingInvariant(self.get_account_meta):
408 f3787696 Sofia Papagiannaki
            groups = {'pithosdev': ['verigak', 'gtsouk', 'chazapis'],
409 f3787696 Sofia Papagiannaki
                      'clientsdev': ['pkanavos', 'mvasilak']}
410 f3787696 Sofia Papagiannaki
            headers = dict(('HTTP_X_ACCOUNT_GROUP_%s' % k, ','.join(v))
411 f3787696 Sofia Papagiannaki
                           for k, v in groups.iteritems())
412 d6a92fa0 Sofia Papagiannaki
            r = self.post('%s?update=' % url, **headers)
413 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
414 f3787696 Sofia Papagiannaki
415 f3787696 Sofia Papagiannaki
            groups = {'pithosdev': ['verigak',
416 f3787696 Sofia Papagiannaki
                                    'gtsouk',
417 f3787696 Sofia Papagiannaki
                                    'chazapis',
418 f3787696 Sofia Papagiannaki
                                    'papagian']}
419 f3787696 Sofia Papagiannaki
            headers = dict(('HTTP_X_ACCOUNT_GROUP_%s' % k, ','.join(v))
420 f3787696 Sofia Papagiannaki
                           for k, v in groups.iteritems())
421 f3787696 Sofia Papagiannaki
            account_meta = self.get_account_meta()
422 f3787696 Sofia Papagiannaki
            headers.update(dict(('HTTP_%s' % k.upper().replace('-', '_'), v)
423 f3787696 Sofia Papagiannaki
                           for k, v in account_meta.iteritems()))
424 d6a92fa0 Sofia Papagiannaki
            r = self.post(url, **headers)
425 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
426 f3787696 Sofia Papagiannaki
427 f3787696 Sofia Papagiannaki
            account_groups = self.get_account_groups()
428 f3787696 Sofia Papagiannaki
            self.assertTrue(
429 f3787696 Sofia Papagiannaki
                'X-Account-Group-Pithosdev' in account_groups)
430 f3787696 Sofia Papagiannaki
            self.assertTrue(
431 f3787696 Sofia Papagiannaki
                'X-Account-Group-Clientsdev' not in account_groups)
432 f3787696 Sofia Papagiannaki
            self.assertEqual(
433 f3787696 Sofia Papagiannaki
                account_groups['X-Account-Group-Pithosdev'],
434 f3787696 Sofia Papagiannaki
                ','.join(sorted(groups['pithosdev'])))
435 f3787696 Sofia Papagiannaki
436 f3787696 Sofia Papagiannaki
    def test_delete_account_groups(self):
437 d6a92fa0 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
438 f3787696 Sofia Papagiannaki
        with AssertMappingInvariant(self.get_account_meta):
439 f3787696 Sofia Papagiannaki
            groups = {'pithosdev': ['verigak', 'gtsouk', 'chazapis'],
440 f3787696 Sofia Papagiannaki
                      'clientsdev': ['pkanavos', 'mvasilak']}
441 f3787696 Sofia Papagiannaki
            headers = dict(('HTTP_X_ACCOUNT_GROUP_%s' % k, ','.join(v))
442 f3787696 Sofia Papagiannaki
                           for k, v in groups.iteritems())
443 d6a92fa0 Sofia Papagiannaki
            self.post('%s?update=' % url, **headers)
444 f3787696 Sofia Papagiannaki
445 f3787696 Sofia Papagiannaki
            kwargs = dict(('HTTP_X_ACCOUNT_GROUP_%s' % k, '')
446 f3787696 Sofia Papagiannaki
                          for k, v in groups.items())
447 d6a92fa0 Sofia Papagiannaki
            r = self.post('%s?update=' % url, **kwargs)
448 f3787696 Sofia Papagiannaki
            self.assertEqual(r.status_code, 202)
449 f3787696 Sofia Papagiannaki
450 f3787696 Sofia Papagiannaki
            account_groups = self.get_account_groups()
451 f3787696 Sofia Papagiannaki
            self.assertTrue(
452 f3787696 Sofia Papagiannaki
                'X-Account-Group-Pithosdev' not in account_groups)
453 f3787696 Sofia Papagiannaki
            self.assertTrue(
454 f3787696 Sofia Papagiannaki
                'X-Account-Group-Clientsdev' not in account_groups)