Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (9.9 kB)

1
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from pithos.api.test import PithosAPITest
35

    
36
from synnefo.lib import join_urls
37

    
38
import django.utils.simplejson as json
39

    
40

    
41
class ListSharing(PithosAPITest):
42
    def _build_structure(self, user=None):
43
        user = user or self.user
44
        for i in range(2):
45
            cname = 'c%d' % i
46
            self.create_container(cname, user=user)
47
            self.upload_object(cname, 'obj', user=user)
48
            self.create_folder(cname, 'f1', user=user)
49
            self.create_folder(cname, 'f1/f2', user=user)
50
            self.create_folder(cname, 'f1/f2/f3', user=user)
51
            self.upload_object(cname, 'f1/f2/f3/obj', user=user)
52

    
53
        # share /c0/f1 path for read
54
        url = join_urls(self.pithos_path, user, 'c0', 'f1')
55
        r = self.post(url, user=user, content_type='',
56
                      HTTP_CONTENT_RANGE='bytes */*',
57
                      HTTP_X_OBJECT_SHARING='read=*')
58
        self.assertEqual(r.status_code, 202)
59

    
60
        # share /c0/f1/f2 path for write
61
        url = join_urls(self.pithos_path, user, 'c0', 'f1/f2')
62
        r = self.post(url, user=user, content_type='',
63
                      HTTP_CONTENT_RANGE='bytes */*',
64
                      HTTP_X_OBJECT_SHARING='write=*')
65
        self.assertEqual(r.status_code, 202)
66

    
67
    def test_list_share_with_me(self):
68
        self._build_structure('alice')
69
        url = join_urls(self.pithos_path, '/')
70
        r = self.get(url)
71
        self.assertEqual(r.status_code, 200)
72
        allowed_accounts = r.content.split('\n')
73
        if '' in allowed_accounts:
74
            allowed_accounts.remove('')
75
        self.assertEqual(allowed_accounts, ['alice'])
76

    
77
        r = self.get('%s?format=json' % url)
78
        self.assertEqual(r.status_code, 200)
79
        allowed_accounts = json.loads(r.content)
80
        self.assertEqual([i['name'] for i in allowed_accounts], ['alice'])
81

    
82
        url = join_urls(url, 'alice')
83
        r = self.get(url)
84
        self.assertEqual(r.status_code, 200)
85
        allowed_containers = r.content.split('\n')
86
        if '' in allowed_containers:
87
            allowed_containers.remove('')
88
        self.assertEqual(allowed_containers, ['c0'])
89

    
90
        r = self.get('%s?format=json' % url)
91
        self.assertEqual(r.status_code, 200)
92
        allowed_containers = json.loads(r.content)
93
        self.assertEqual([i['name'] for i in allowed_containers], ['c0'])
94

    
95
        url = join_urls(url, 'c0')
96
        r = self.get('%s?delimiter=/&shared=&' % url)
97
        self.assertEqual(r.status_code, 200)
98
        shared_objects = r.content.split('\n')
99
        if '' in shared_objects:
100
            shared_objects.remove('')
101
        self.assertEqual(shared_objects, ['f1', 'f1/'])
102

    
103
        r = self.get('%s?delimiter=/&shared=&format=json' % url)
104
        self.assertEqual(r.status_code, 200)
105
        shared_objects = json.loads(r.content)
106
        self.assertEqual([o.get('name', o.get('subdir')) for
107
                          o in shared_objects],
108
                         ['f1', 'f1/'])
109
        folder = (o for o in shared_objects if o['name'] == 'f1').next()
110
        self.assertTrue('x_object_sharing' in folder)
111
        self.assertTrue(folder['x_object_sharing'] == 'read=*')
112

    
113
        r = self.get('%s?delimiter=/&prefix=f1&shared=&' % url)
114
        self.assertEqual(r.status_code, 200)
115
        shared_objects = r.content.split('\n')
116
        if '' in shared_objects:
117
            shared_objects.remove('')
118
        self.assertEqual(shared_objects, ['f1/f2', 'f1/f2/'])
119

    
120
        r = self.get('%s?delimiter=/&prefix=f1&shared=&format=json' % url)
121
        self.assertEqual(r.status_code, 200)
122
        shared_objects = json.loads(r.content)
123
        self.assertEqual([o.get('name', o.get('subdir')) for
124
                          o in shared_objects],
125
                         ['f1/f2', 'f1/f2/'])
126
        folder = (o for o in shared_objects if o['name'] == 'f1/f2').next()
127
        self.assertTrue('x_object_sharing' in folder)
128
        self.assertTrue(folder['x_object_sharing'] == 'write=*')
129

    
130
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&' % url)
131
        self.assertEqual(r.status_code, 200)
132
        shared_objects = r.content.split('\n')
133
        if '' in shared_objects:
134
            shared_objects.remove('')
135
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
136

    
137
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&format=json' % url)
138
        self.assertEqual(r.status_code, 200)
139
        shared_objects = [i.get('name', i.get('subdir')) for i in
140
                          json.loads(r.content)]
141
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
142

    
143
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&' % url)
144
        self.assertEqual(r.status_code, 200)
145
        shared_objects = r.content.split('\n')
146
        if '' in shared_objects:
147
            shared_objects.remove('')
148
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])
149

    
150
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&format=json' %
151
                     url)
152
        self.assertEqual(r.status_code, 200)
153
        shared_objects = [i.get('name', i.get('subdir')) for i in
154
                          json.loads(r.content)]
155
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])
156

    
157
    def test_list_shared_by_me(self):
158
        self._build_structure()
159
        url = join_urls(self.pithos_path, self.user)
160
        r = self.get('%s?shared=' % url)
161
        self.assertEqual(r.status_code, 200)
162
        shared_containers = r.content.split('\n')
163
        if '' in shared_containers:
164
            shared_containers.remove('')
165
        self.assertEqual(shared_containers, ['c0'])
166

    
167
        r = self.get('%s?shared=&format=json' % url)
168
        self.assertEqual(r.status_code, 200)
169
        shared_containers = json.loads(r.content)
170
        self.assertEqual([i['name'] for i in shared_containers], ['c0'])
171

    
172
        url = join_urls(url, 'c0')
173
        r = self.get('%s?delimiter=/&shared=&' % url)
174
        self.assertEqual(r.status_code, 200)
175
        shared_objects = r.content.split('\n')
176
        if '' in shared_objects:
177
            shared_objects.remove('')
178
        self.assertEqual(shared_objects, ['f1', 'f1/'])
179

    
180
        r = self.get('%s?delimiter=/&shared=&format=json' % url)
181
        self.assertEqual(r.status_code, 200)
182
        shared_objects = json.loads(r.content)
183
        self.assertEqual([o.get('name', o.get('subdir')) for
184
                          o in shared_objects],
185
                         ['f1', 'f1/'])
186
        folder = (o for o in shared_objects if o['name'] == 'f1').next()
187
        self.assertTrue('x_object_sharing' in folder)
188
        self.assertTrue(folder['x_object_sharing'] == 'read=*')
189

    
190
        r = self.get('%s?delimiter=/&prefix=f1&shared=&' % url)
191
        self.assertEqual(r.status_code, 200)
192
        shared_objects = r.content.split('\n')
193
        if '' in shared_objects:
194
            shared_objects.remove('')
195
        self.assertEqual(shared_objects, ['f1/f2', 'f1/f2/'])
196

    
197
        r = self.get('%s?delimiter=/&prefix=f1&shared=&format=json' % url)
198
        self.assertEqual(r.status_code, 200)
199
        shared_objects = json.loads(r.content)
200
        self.assertEqual([o.get('name', o.get('subdir')) for
201
                          o in shared_objects],
202
                         ['f1/f2', 'f1/f2/'])
203
        folder = (o for o in shared_objects if o['name'] == 'f1/f2').next()
204
        self.assertTrue('x_object_sharing' in folder)
205
        self.assertTrue(folder['x_object_sharing'] == 'write=*')
206

    
207
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&' % url)
208
        self.assertEqual(r.status_code, 200)
209
        shared_objects = r.content.split('\n')
210
        if '' in shared_objects:
211
            shared_objects.remove('')
212
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
213

    
214
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&format=json' % url)
215
        self.assertEqual(r.status_code, 200)
216
        shared_objects = [i.get('name', i.get('subdir')) for i in
217
                          json.loads(r.content)]
218
        self.assertEqual(shared_objects, ['f1/f2/f3', 'f1/f2/f3/'])
219

    
220
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&' % url)
221
        self.assertEqual(r.status_code, 200)
222
        shared_objects = r.content.split('\n')
223
        if '' in shared_objects:
224
            shared_objects.remove('')
225
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])
226

    
227
        r = self.get('%s?delimiter=/&prefix=f1/f2/f3&shared=&format=json' %
228
                     url)
229
        self.assertEqual(r.status_code, 200)
230
        shared_objects = [i.get('name', i.get('subdir')) for i in
231
                          json.loads(r.content)]
232
        self.assertEqual(shared_objects, ['f1/f2/f3/obj'])