Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (6.1 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.upload_object(cname, 'f1/f2/obj', user=user)
51

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

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

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

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

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

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

    
94
        url = join_urls(url, 'c0')
95
        r = self.get('%s?delimiter=/&shared=&format=json' % url)
96
        self.assertEqual(r.status_code, 200)
97
        shared_objects = [i.get('name', i.get('subdir')) for i in
98
                          json.loads(r.content)]
99
        self.assertEqual(shared_objects, ['f1', 'f1/'])
100

    
101
        r = self.get('%s?delimiter=/&prefix=f1&shared=&format=json' % url)
102
        self.assertEqual(r.status_code, 200)
103
        shared_objects = [i.get('name', i.get('subdir')) for i in
104
                          json.loads(r.content)]
105
        self.assertEqual(shared_objects, ['f1/f2', 'f1/f2/'])
106

    
107
        r = self.get('%s?delimiter=/&prefix=f1/f2&shared=&format=json' % url)
108
        self.assertEqual(r.status_code, 200)
109
        shared_objects = [i.get('name', i.get('subdir')) for i in
110
                          json.loads(r.content)]
111
        self.assertEqual(shared_objects, ['f1/f2/obj'])
112

    
113
    def test_list_shared_by_me(self):
114
        self._build_structure()
115
        url = join_urls(self.pithos_path, self.user)
116
        r = self.get('%s?shared=' % url)
117
        self.assertEqual(r.status_code, 200)
118
        shared_containers = r.content.split('\n')
119
        if '' in shared_containers:
120
            shared_containers.remove('')
121
        self.assertEqual(shared_containers, ['c0'])
122

    
123
        r = self.get('%s?shared=&format=json' % url)
124
        self.assertEqual(r.status_code, 200)
125
        shared_containers = json.loads(r.content)
126
        self.assertEqual([i['name'] for i in shared_containers], ['c0'])
127

    
128
        url = join_urls(url, 'c0')
129
        r = self.get('%s?delimiter=/&shared=&format=json' % url)
130
        self.assertEqual(r.status_code, 200)
131
        shared_objects = [i.get('name', i.get('subdir')) for i in
132
                          json.loads(r.content)]
133
        self.assertEqual(shared_objects, ['f1', 'f1/'])
134

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

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