Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / test / listing.py @ 54b7d9b0

History | View | Annotate | Download (9.9 kB)

1 6e0f3e65 Sofia Papagiannaki
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2 6e0f3e65 Sofia Papagiannaki
#
3 6e0f3e65 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 6e0f3e65 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 6e0f3e65 Sofia Papagiannaki
# conditions are met:
6 6e0f3e65 Sofia Papagiannaki
#
7 6e0f3e65 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 6e0f3e65 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 6e0f3e65 Sofia Papagiannaki
#      disclaimer.
10 6e0f3e65 Sofia Papagiannaki
#
11 6e0f3e65 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 6e0f3e65 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 6e0f3e65 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 6e0f3e65 Sofia Papagiannaki
#      provided with the distribution.
15 6e0f3e65 Sofia Papagiannaki
#
16 6e0f3e65 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 6e0f3e65 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 6e0f3e65 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 6e0f3e65 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 6e0f3e65 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 6e0f3e65 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 6e0f3e65 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 6e0f3e65 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 6e0f3e65 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 6e0f3e65 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 6e0f3e65 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 6e0f3e65 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 6e0f3e65 Sofia Papagiannaki
#
29 6e0f3e65 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 6e0f3e65 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 6e0f3e65 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 6e0f3e65 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 6e0f3e65 Sofia Papagiannaki
34 6e0f3e65 Sofia Papagiannaki
from pithos.api.test import PithosAPITest
35 6e0f3e65 Sofia Papagiannaki
36 6e0f3e65 Sofia Papagiannaki
from synnefo.lib import join_urls
37 6e0f3e65 Sofia Papagiannaki
38 6e0f3e65 Sofia Papagiannaki
import django.utils.simplejson as json
39 6e0f3e65 Sofia Papagiannaki
40 f53483d8 Sofia Papagiannaki
41 6e0f3e65 Sofia Papagiannaki
class ListSharing(PithosAPITest):
42 6e0f3e65 Sofia Papagiannaki
    def _build_structure(self, user=None):
43 6e0f3e65 Sofia Papagiannaki
        user = user or self.user
44 6e0f3e65 Sofia Papagiannaki
        for i in range(2):
45 6e0f3e65 Sofia Papagiannaki
            cname = 'c%d' % i
46 6e0f3e65 Sofia Papagiannaki
            self.create_container(cname, user=user)
47 6e0f3e65 Sofia Papagiannaki
            self.upload_object(cname, 'obj', user=user)
48 6e0f3e65 Sofia Papagiannaki
            self.create_folder(cname, 'f1', user=user)
49 6e0f3e65 Sofia Papagiannaki
            self.create_folder(cname, 'f1/f2', user=user)
50 e161c24f Sofia Papagiannaki
            self.create_folder(cname, 'f1/f2/f3', user=user)
51 e161c24f Sofia Papagiannaki
            self.upload_object(cname, 'f1/f2/f3/obj', user=user)
52 6e0f3e65 Sofia Papagiannaki
53 84c67d8e Sofia Papagiannaki
        # share /c0/f1 path for read
54 6e0f3e65 Sofia Papagiannaki
        url = join_urls(self.pithos_path, user, 'c0', 'f1')
55 6e0f3e65 Sofia Papagiannaki
        r = self.post(url, user=user, content_type='',
56 6e0f3e65 Sofia Papagiannaki
                      HTTP_CONTENT_RANGE='bytes */*',
57 6e0f3e65 Sofia Papagiannaki
                      HTTP_X_OBJECT_SHARING='read=*')
58 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 202)
59 84c67d8e Sofia Papagiannaki
60 84c67d8e Sofia Papagiannaki
        # share /c0/f1/f2 path for write
61 84c67d8e Sofia Papagiannaki
        url = join_urls(self.pithos_path, user, 'c0', 'f1/f2')
62 84c67d8e Sofia Papagiannaki
        r = self.post(url, user=user, content_type='',
63 84c67d8e Sofia Papagiannaki
                      HTTP_CONTENT_RANGE='bytes */*',
64 84c67d8e Sofia Papagiannaki
                      HTTP_X_OBJECT_SHARING='write=*')
65 84c67d8e Sofia Papagiannaki
        self.assertEqual(r.status_code, 202)
66 6e0f3e65 Sofia Papagiannaki
67 6e0f3e65 Sofia Papagiannaki
    def test_list_share_with_me(self):
68 6e0f3e65 Sofia Papagiannaki
        self._build_structure('alice')
69 5775b7fb Sofia Papagiannaki
        url = join_urls(self.pithos_path, '/')
70 6e0f3e65 Sofia Papagiannaki
        r = self.get(url)
71 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
72 6e0f3e65 Sofia Papagiannaki
        allowed_accounts = r.content.split('\n')
73 6e0f3e65 Sofia Papagiannaki
        if '' in allowed_accounts:
74 6e0f3e65 Sofia Papagiannaki
            allowed_accounts.remove('')
75 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(allowed_accounts, ['alice'])
76 6e0f3e65 Sofia Papagiannaki
77 6e0f3e65 Sofia Papagiannaki
        r = self.get('%s?format=json' % url)
78 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
79 6e0f3e65 Sofia Papagiannaki
        allowed_accounts = json.loads(r.content)
80 6e0f3e65 Sofia Papagiannaki
        self.assertEqual([i['name'] for i in allowed_accounts], ['alice'])
81 6e0f3e65 Sofia Papagiannaki
82 6e0f3e65 Sofia Papagiannaki
        url = join_urls(url, 'alice')
83 6e0f3e65 Sofia Papagiannaki
        r = self.get(url)
84 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
85 6e0f3e65 Sofia Papagiannaki
        allowed_containers = r.content.split('\n')
86 6e0f3e65 Sofia Papagiannaki
        if '' in allowed_containers:
87 6e0f3e65 Sofia Papagiannaki
            allowed_containers.remove('')
88 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(allowed_containers, ['c0'])
89 6e0f3e65 Sofia Papagiannaki
90 6e0f3e65 Sofia Papagiannaki
        r = self.get('%s?format=json' % url)
91 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
92 6e0f3e65 Sofia Papagiannaki
        allowed_containers = json.loads(r.content)
93 6e0f3e65 Sofia Papagiannaki
        self.assertEqual([i['name'] for i in allowed_containers], ['c0'])
94 6e0f3e65 Sofia Papagiannaki
95 6e0f3e65 Sofia Papagiannaki
        url = join_urls(url, 'c0')
96 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&shared=&' % url)
97 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
98 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
99 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
100 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
101 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1', 'f1/'])
102 6e0f3e65 Sofia Papagiannaki
103 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&shared=&format=json' % url)
104 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
105 e161c24f Sofia Papagiannaki
        shared_objects = json.loads(r.content)
106 e161c24f Sofia Papagiannaki
        self.assertEqual([o.get('name', o.get('subdir')) for
107 e161c24f Sofia Papagiannaki
                          o in shared_objects],
108 e161c24f Sofia Papagiannaki
                         ['f1', 'f1/'])
109 e161c24f Sofia Papagiannaki
        folder = (o for o in shared_objects if o['name'] == 'f1').next()
110 e161c24f Sofia Papagiannaki
        self.assertTrue('x_object_sharing' in folder)
111 e161c24f Sofia Papagiannaki
        self.assertTrue(folder['x_object_sharing'] == 'read=*')
112 e161c24f Sofia Papagiannaki
113 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1&shared=&' % url)
114 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
115 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
116 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
117 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
118 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2', 'f1/f2/'])
119 e161c24f Sofia Papagiannaki
120 6e0f3e65 Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1&shared=&format=json' % url)
121 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
122 e161c24f Sofia Papagiannaki
        shared_objects = json.loads(r.content)
123 e161c24f Sofia Papagiannaki
        self.assertEqual([o.get('name', o.get('subdir')) for
124 e161c24f Sofia Papagiannaki
                          o in shared_objects],
125 e161c24f Sofia Papagiannaki
                         ['f1/f2', 'f1/f2/'])
126 e161c24f Sofia Papagiannaki
        folder = (o for o in shared_objects if o['name'] == 'f1/f2').next()
127 e161c24f Sofia Papagiannaki
        self.assertTrue('x_object_sharing' in folder)
128 e161c24f Sofia Papagiannaki
        self.assertTrue(folder['x_object_sharing'] == 'write=*')
129 e161c24f Sofia Papagiannaki
130 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&' % url)
131 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
132 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
133 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
134 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
135 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
136 e161c24f Sofia Papagiannaki
137 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&format=json' % url)
138 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
139 6e0f3e65 Sofia Papagiannaki
        shared_objects = [i.get('name', i.get('subdir')) for i in
140 6e0f3e65 Sofia Papagiannaki
                          json.loads(r.content)]
141 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
142 6e0f3e65 Sofia Papagiannaki
143 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&' % url)
144 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
145 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
146 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
147 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
148 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])
149 e161c24f Sofia Papagiannaki
150 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&format=json' %
151 e161c24f Sofia Papagiannaki
                     url)
152 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
153 6e0f3e65 Sofia Papagiannaki
        shared_objects = [i.get('name', i.get('subdir')) for i in
154 6e0f3e65 Sofia Papagiannaki
                          json.loads(r.content)]
155 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])
156 6e0f3e65 Sofia Papagiannaki
157 6e0f3e65 Sofia Papagiannaki
    def test_list_shared_by_me(self):
158 6e0f3e65 Sofia Papagiannaki
        self._build_structure()
159 6e0f3e65 Sofia Papagiannaki
        url = join_urls(self.pithos_path, self.user)
160 6e0f3e65 Sofia Papagiannaki
        r = self.get('%s?shared=' % url)
161 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
162 6e0f3e65 Sofia Papagiannaki
        shared_containers = r.content.split('\n')
163 6e0f3e65 Sofia Papagiannaki
        if '' in shared_containers:
164 6e0f3e65 Sofia Papagiannaki
            shared_containers.remove('')
165 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(shared_containers, ['c0'])
166 6e0f3e65 Sofia Papagiannaki
167 6e0f3e65 Sofia Papagiannaki
        r = self.get('%s?shared=&format=json' % url)
168 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
169 6e0f3e65 Sofia Papagiannaki
        shared_containers = json.loads(r.content)
170 6e0f3e65 Sofia Papagiannaki
        self.assertEqual([i['name'] for i in shared_containers], ['c0'])
171 6e0f3e65 Sofia Papagiannaki
172 6e0f3e65 Sofia Papagiannaki
        url = join_urls(url, 'c0')
173 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&shared=&' % url)
174 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
175 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
176 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
177 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
178 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1', 'f1/'])
179 6e0f3e65 Sofia Papagiannaki
180 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&shared=&format=json' % url)
181 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
182 e161c24f Sofia Papagiannaki
        shared_objects = json.loads(r.content)
183 e161c24f Sofia Papagiannaki
        self.assertEqual([o.get('name', o.get('subdir')) for
184 e161c24f Sofia Papagiannaki
                          o in shared_objects],
185 e161c24f Sofia Papagiannaki
                         ['f1', 'f1/'])
186 e161c24f Sofia Papagiannaki
        folder = (o for o in shared_objects if o['name'] == 'f1').next()
187 e161c24f Sofia Papagiannaki
        self.assertTrue('x_object_sharing' in folder)
188 e161c24f Sofia Papagiannaki
        self.assertTrue(folder['x_object_sharing'] == 'read=*')
189 e161c24f Sofia Papagiannaki
190 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1&shared=&' % url)
191 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
192 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
193 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
194 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
195 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2', 'f1/f2/'])
196 e161c24f Sofia Papagiannaki
197 6e0f3e65 Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1&shared=&format=json' % url)
198 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
199 e161c24f Sofia Papagiannaki
        shared_objects = json.loads(r.content)
200 e161c24f Sofia Papagiannaki
        self.assertEqual([o.get('name', o.get('subdir')) for
201 e161c24f Sofia Papagiannaki
                          o in shared_objects],
202 e161c24f Sofia Papagiannaki
                         ['f1/f2', 'f1/f2/'])
203 e161c24f Sofia Papagiannaki
        folder = (o for o in shared_objects if o['name'] == 'f1/f2').next()
204 e161c24f Sofia Papagiannaki
        self.assertTrue('x_object_sharing' in folder)
205 e161c24f Sofia Papagiannaki
        self.assertTrue(folder['x_object_sharing'] == 'write=*')
206 e161c24f Sofia Papagiannaki
207 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&' % url)
208 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
209 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
210 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
211 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
212 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
213 e161c24f Sofia Papagiannaki
214 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&format=json' % url)
215 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
216 6e0f3e65 Sofia Papagiannaki
        shared_objects = [i.get('name', i.get('subdir')) for i in
217 6e0f3e65 Sofia Papagiannaki
                          json.loads(r.content)]
218 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
219 6e0f3e65 Sofia Papagiannaki
220 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&' % url)
221 e161c24f Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
222 e161c24f Sofia Papagiannaki
        shared_objects = r.content.split('\n')
223 e161c24f Sofia Papagiannaki
        if '' in shared_objects:
224 e161c24f Sofia Papagiannaki
            shared_objects.remove('')
225 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])
226 e161c24f Sofia Papagiannaki
227 e161c24f Sofia Papagiannaki
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&format=json' %
228 e161c24f Sofia Papagiannaki
                     url)
229 6e0f3e65 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
230 6e0f3e65 Sofia Papagiannaki
        shared_objects = [i.get('name', i.get('subdir')) for i in
231 6e0f3e65 Sofia Papagiannaki
                          json.loads(r.content)]
232 e161c24f Sofia Papagiannaki
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])