Statistics
| Branch: | Tag: | Revision:

root / snf-tools / synnefo_tools / burnin / pithos_tests.py @ fe81ddd7

History | View | Annotate | Download (18.4 kB)

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

37 79a5c431 Ilias Tsitsimpis
"""
38 79a5c431 Ilias Tsitsimpis
39 3e5bbd85 Ilias Tsitsimpis
import os
40 79a5c431 Ilias Tsitsimpis
import random
41 79a5c431 Ilias Tsitsimpis
import tempfile
42 5d9987a5 Stavros Sachtouris
from datetime import datetime
43 79a5c431 Ilias Tsitsimpis
44 d11c80c0 Ilias Tsitsimpis
from synnefo_tools.burnin.common import BurninTests, Proper
45 6a6aba0b Stavros Sachtouris
from kamaki.clients import ClientError
46 79a5c431 Ilias Tsitsimpis
47 79a5c431 Ilias Tsitsimpis
48 79a5c431 Ilias Tsitsimpis
# Too many public methods. pylint: disable-msg=R0904
49 d11c80c0 Ilias Tsitsimpis
class PithosTestSuite(BurninTests):
50 79a5c431 Ilias Tsitsimpis
    """Test Pithos functionality"""
51 d11c80c0 Ilias Tsitsimpis
    containers = Proper(value=None)
52 d11c80c0 Ilias Tsitsimpis
    created_container = Proper(value=None)
53 5d9987a5 Stavros Sachtouris
    now_unformated = Proper(value=datetime.utcnow())
54 be53c2d9 Stavros Sachtouris
    obj_metakey = Proper(value=None)
55 79a5c431 Ilias Tsitsimpis
56 5d9987a5 Stavros Sachtouris
    def test_005_account_head(self):
57 5d9987a5 Stavros Sachtouris
        """HEAD on pithos account"""
58 79a5c431 Ilias Tsitsimpis
        self._set_pithos_account(self._get_uuid())
59 5d9987a5 Stavros Sachtouris
        pithos = self.clients.pithos
60 5d9987a5 Stavros Sachtouris
        r = pithos.account_head()
61 5d9987a5 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
62 5d9987a5 Stavros Sachtouris
        self.info('Returns 204')
63 5d9987a5 Stavros Sachtouris
64 5d9987a5 Stavros Sachtouris
        r = pithos.account_head(until='1000000000')
65 5d9987a5 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
66 5d9987a5 Stavros Sachtouris
        datestring = unicode(r.headers['x-account-until-timestamp'])
67 5d9987a5 Stavros Sachtouris
        self.assertEqual(u'Sun, 09 Sep 2001 01:46:40 GMT', datestring)
68 5d9987a5 Stavros Sachtouris
        self.assertTrue('x-account-policy-quota' in r.headers)
69 5d9987a5 Stavros Sachtouris
        self.info('Until and policy quota exist')
70 5d9987a5 Stavros Sachtouris
71 5d9987a5 Stavros Sachtouris
        for format in pithos.DATE_FORMATS:
72 5d9987a5 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
73 5d9987a5 Stavros Sachtouris
            r1 = pithos.account_head(
74 5d9987a5 Stavros Sachtouris
                if_modified_since=now_formated, success=(204, 304, 412))
75 5d9987a5 Stavros Sachtouris
            r2 = pithos.account_head(
76 5d9987a5 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(204, 304, 412))
77 5d9987a5 Stavros Sachtouris
            self.assertNotEqual(r1.status_code, r2.status_code)
78 5d9987a5 Stavros Sachtouris
        self.info('If_(un)modified_since is OK')
79 5d9987a5 Stavros Sachtouris
80 5d9987a5 Stavros Sachtouris
    def test_010_account_get(self):
81 5d9987a5 Stavros Sachtouris
        """Test account_get"""
82 5d9987a5 Stavros Sachtouris
        self.info('Preparation')
83 5d9987a5 Stavros Sachtouris
        pithos = self.clients.pithos
84 5d9987a5 Stavros Sachtouris
        for i in range(1, 3):
85 5d9987a5 Stavros Sachtouris
            cont_name = "cont%s_%s%s" % (
86 1ff50540 Stavros Sachtouris
                i, self.run_id or 0, random.randint(1000, 9999))
87 5d9987a5 Stavros Sachtouris
            self._create_pithos_container(cont_name)
88 5d9987a5 Stavros Sachtouris
        pithos.container, obj = cont_name, 'shared_file'
89 5d9987a5 Stavros Sachtouris
        pithos.create_object(obj)
90 5d9987a5 Stavros Sachtouris
        pithos.set_object_sharing(obj, read_permission='*')
91 5d9987a5 Stavros Sachtouris
        self.info('Created object /%s/%s' % (cont_name, obj))
92 5d9987a5 Stavros Sachtouris
93 5d9987a5 Stavros Sachtouris
        r = pithos.list_containers()
94 5d9987a5 Stavros Sachtouris
        fullLen = len(r)
95 5d9987a5 Stavros Sachtouris
        self.assertTrue(fullLen > 2)
96 5d9987a5 Stavros Sachtouris
        self.info('Normal use is OK')
97 5d9987a5 Stavros Sachtouris
98 5d9987a5 Stavros Sachtouris
        r = pithos.account_get(limit=1)
99 5d9987a5 Stavros Sachtouris
        self.assertEqual(len(r.json), 1)
100 5d9987a5 Stavros Sachtouris
        self.info('Limit works')
101 5d9987a5 Stavros Sachtouris
102 5d9987a5 Stavros Sachtouris
        r = pithos.account_get(marker='cont')
103 5d9987a5 Stavros Sachtouris
        cont1, cont3 = r.json[0], r.json[2]
104 5d9987a5 Stavros Sachtouris
        self.info('Marker works')
105 5d9987a5 Stavros Sachtouris
106 5d9987a5 Stavros Sachtouris
        r = pithos.account_get(limit=2, marker='cont')
107 5d9987a5 Stavros Sachtouris
        conames = [container['name'] for container in r.json if (
108 5d9987a5 Stavros Sachtouris
            container['name'].lower().startswith('cont'))]
109 5d9987a5 Stavros Sachtouris
        self.assertTrue(cont1['name'] in conames)
110 5d9987a5 Stavros Sachtouris
        self.assertFalse(cont3['name'] in conames)
111 5d9987a5 Stavros Sachtouris
        self.info('Marker-limit combination works')
112 5d9987a5 Stavros Sachtouris
113 5d9987a5 Stavros Sachtouris
        r = pithos.account_get(show_only_shared=True)
114 5d9987a5 Stavros Sachtouris
        self.assertTrue(cont_name in [c['name'] for c in r.json])
115 5d9987a5 Stavros Sachtouris
        self.info('Show-only-shared works')
116 5d9987a5 Stavros Sachtouris
117 5d9987a5 Stavros Sachtouris
        r = pithos.account_get(until=1342609206.0)
118 5d9987a5 Stavros Sachtouris
        self.assertTrue(len(r.json) <= fullLen)
119 5d9987a5 Stavros Sachtouris
        self.info('Until works')
120 5d9987a5 Stavros Sachtouris
121 5d9987a5 Stavros Sachtouris
        for format in pithos.DATE_FORMATS:
122 5d9987a5 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
123 5d9987a5 Stavros Sachtouris
            r1 = pithos.account_get(
124 5d9987a5 Stavros Sachtouris
                if_modified_since=now_formated, success=(200, 304, 412))
125 5d9987a5 Stavros Sachtouris
            r2 = pithos.account_get(
126 5d9987a5 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(200, 304, 412))
127 5d9987a5 Stavros Sachtouris
            self.assertNotEqual(r1.status_code, r2.status_code)
128 5d9987a5 Stavros Sachtouris
        self.info('If_(un)modified_since is OK')
129 5d9987a5 Stavros Sachtouris
130 6a6aba0b Stavros Sachtouris
    def test_015_account_post(self):
131 6a6aba0b Stavros Sachtouris
        """Test account_post"""
132 6a6aba0b Stavros Sachtouris
        pithos = self.clients.pithos
133 6a6aba0b Stavros Sachtouris
        r = pithos.account_post()
134 6a6aba0b Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
135 6a6aba0b Stavros Sachtouris
        self.info('Status code is OK')
136 6a6aba0b Stavros Sachtouris
137 6a6aba0b Stavros Sachtouris
        rand_num = '%s%s' % (self.run_id or 0, random.randint(1000, 9999))
138 6a6aba0b Stavros Sachtouris
        grpName = 'grp%s' % rand_num
139 6a6aba0b Stavros Sachtouris
140 6a6aba0b Stavros Sachtouris
        u1, u2 = pithos.account, 'invalid-user-uuid-%s' % rand_num
141 6a6aba0b Stavros Sachtouris
        self.assertRaises(
142 6a6aba0b Stavros Sachtouris
            ClientError, pithos.set_account_group, grpName, [u1, u2])
143 6a6aba0b Stavros Sachtouris
        self.info('Invalid uuid is handled correctly')
144 6a6aba0b Stavros Sachtouris
145 6a6aba0b Stavros Sachtouris
        pithos.set_account_group(grpName, [u1])
146 6a6aba0b Stavros Sachtouris
        r = pithos.get_account_group()
147 6a6aba0b Stavros Sachtouris
        self.assertEqual(r['x-account-group-' + grpName], '%s' % u1)
148 6a6aba0b Stavros Sachtouris
        self.info('Account group is OK')
149 6a6aba0b Stavros Sachtouris
        pithos.del_account_group(grpName)
150 6a6aba0b Stavros Sachtouris
        r = pithos.get_account_group()
151 6a6aba0b Stavros Sachtouris
        self.assertTrue('x-account-group-' + grpName not in r)
152 6a6aba0b Stavros Sachtouris
        self.info('Removed account group')
153 6a6aba0b Stavros Sachtouris
154 6a6aba0b Stavros Sachtouris
        mprefix = 'meta%s' % rand_num
155 6a6aba0b Stavros Sachtouris
        pithos.set_account_meta({
156 6a6aba0b Stavros Sachtouris
            mprefix + '1': 'v1', mprefix + '2': 'v2'})
157 6a6aba0b Stavros Sachtouris
        r = pithos.get_account_meta()
158 6a6aba0b Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '1'], 'v1')
159 6a6aba0b Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '2'], 'v2')
160 6a6aba0b Stavros Sachtouris
        self.info('Account meta is OK')
161 6a6aba0b Stavros Sachtouris
162 6a6aba0b Stavros Sachtouris
        pithos.del_account_meta(mprefix + '1')
163 6a6aba0b Stavros Sachtouris
        r = pithos.get_account_meta()
164 6a6aba0b Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '1' not in r)
165 6a6aba0b Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '2' in r)
166 6a6aba0b Stavros Sachtouris
        self.info('Selective removal of account meta is OK')
167 6a6aba0b Stavros Sachtouris
168 6a6aba0b Stavros Sachtouris
        pithos.del_account_meta(mprefix + '2')
169 6a6aba0b Stavros Sachtouris
        r = pithos.get_account_meta()
170 6a6aba0b Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '2' not in r)
171 6a6aba0b Stavros Sachtouris
        self.info('Temporary account meta are removed')
172 6a6aba0b Stavros Sachtouris
173 1ff50540 Stavros Sachtouris
    def test_020_container_head(self):
174 1ff50540 Stavros Sachtouris
        """Test container HEAD"""
175 1ff50540 Stavros Sachtouris
        pithos = self.clients.pithos
176 1ff50540 Stavros Sachtouris
        r = pithos.container_head()
177 1ff50540 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
178 1ff50540 Stavros Sachtouris
        self.info('Status code is OK')
179 1ff50540 Stavros Sachtouris
180 1ff50540 Stavros Sachtouris
        r = pithos.container_head(until=1000000, success=(204, 404))
181 1ff50540 Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
182 1ff50540 Stavros Sachtouris
        self.info('Until works')
183 1ff50540 Stavros Sachtouris
184 1ff50540 Stavros Sachtouris
        for format in pithos.DATE_FORMATS:
185 1ff50540 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
186 1ff50540 Stavros Sachtouris
            r1 = pithos.container_head(
187 1ff50540 Stavros Sachtouris
                if_modified_since=now_formated, success=(204, 304, 412))
188 1ff50540 Stavros Sachtouris
            r2 = pithos.container_head(
189 1ff50540 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(204, 304, 412))
190 1ff50540 Stavros Sachtouris
            self.assertNotEqual(r1.status_code, r2.status_code)
191 1ff50540 Stavros Sachtouris
192 1ff50540 Stavros Sachtouris
        k = 'metakey%s' % random.randint(1000, 9999)
193 1ff50540 Stavros Sachtouris
        pithos.set_container_meta({k: 'our value'})
194 1ff50540 Stavros Sachtouris
        r = pithos.get_container_meta()
195 1ff50540 Stavros Sachtouris
        k = 'x-container-meta-%s' % k
196 1ff50540 Stavros Sachtouris
        self.assertIn(k, r)
197 1ff50540 Stavros Sachtouris
        self.assertEqual('our value', r[k])
198 1ff50540 Stavros Sachtouris
        self.info('Container meta exists')
199 1ff50540 Stavros Sachtouris
200 be53c2d9 Stavros Sachtouris
        self.obj_metakey = 'metakey%s' % random.randint(1000, 9999)
201 fe81ddd7 Stavros Sachtouris
        obj = 'object_with_meta'
202 be53c2d9 Stavros Sachtouris
        pithos.create_object(obj)
203 be53c2d9 Stavros Sachtouris
        pithos.set_object_meta(obj, {self.obj_metakey: 'our value'})
204 be53c2d9 Stavros Sachtouris
        r = pithos.get_container_object_meta()
205 be53c2d9 Stavros Sachtouris
        self.assertIn('x-container-object-meta', r)
206 be53c2d9 Stavros Sachtouris
        self.assertIn(
207 be53c2d9 Stavros Sachtouris
            self.obj_metakey, r['x-container-object-meta'].lower())
208 be53c2d9 Stavros Sachtouris
        self.info('Container object meta exists')
209 be53c2d9 Stavros Sachtouris
210 be53c2d9 Stavros Sachtouris
    def test_025_container_get(self):
211 be53c2d9 Stavros Sachtouris
        """Test container GET"""
212 be53c2d9 Stavros Sachtouris
        pithos = self.clients.pithos
213 be53c2d9 Stavros Sachtouris
214 be53c2d9 Stavros Sachtouris
        r = pithos.container_get()
215 be53c2d9 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
216 be53c2d9 Stavros Sachtouris
        self.info('Status code is OK')
217 be53c2d9 Stavros Sachtouris
218 be53c2d9 Stavros Sachtouris
        fullLen = len(r.json)
219 be53c2d9 Stavros Sachtouris
        obj1 = 'test%s' % random.randint(1000, 9999)
220 be53c2d9 Stavros Sachtouris
        pithos.create_object(obj1)
221 be53c2d9 Stavros Sachtouris
        obj2 = 'test%s' % random.randint(1000, 9999)
222 be53c2d9 Stavros Sachtouris
        pithos.create_object(obj2)
223 be53c2d9 Stavros Sachtouris
        obj3 = 'another%s.test' % random.randint(1000, 9999)
224 be53c2d9 Stavros Sachtouris
        pithos.create_object(obj3)
225 be53c2d9 Stavros Sachtouris
226 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(prefix='test')
227 be53c2d9 Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
228 be53c2d9 Stavros Sachtouris
        test_objects = [o for o in r.json if o['name'].startswith('test')]
229 be53c2d9 Stavros Sachtouris
        self.assertEqual(len(r.json), len(test_objects))
230 be53c2d9 Stavros Sachtouris
        self.info('Prefix is OK')
231 be53c2d9 Stavros Sachtouris
232 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(limit=1)
233 be53c2d9 Stavros Sachtouris
        self.assertEqual(len(r.json), 1)
234 be53c2d9 Stavros Sachtouris
        self.info('Limit is OK')
235 be53c2d9 Stavros Sachtouris
236 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(marker=obj3[:-5])
237 be53c2d9 Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
238 be53c2d9 Stavros Sachtouris
        aoobjects = [obj for obj in r.json if obj['name'] > obj3[:-5]]
239 be53c2d9 Stavros Sachtouris
        self.assertEqual(len(r.json), len(aoobjects))
240 be53c2d9 Stavros Sachtouris
        self.info('Marker is OK')
241 be53c2d9 Stavros Sachtouris
242 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(prefix=obj3, delimiter='.')
243 be53c2d9 Stavros Sachtouris
        self.assertTrue(fullLen > len(r.json))
244 be53c2d9 Stavros Sachtouris
        self.info('Delimiter is OK')
245 be53c2d9 Stavros Sachtouris
246 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(path='/')
247 be53c2d9 Stavros Sachtouris
        fullLen += 3
248 be53c2d9 Stavros Sachtouris
        self.assertEqual(fullLen, len(r.json))
249 be53c2d9 Stavros Sachtouris
        self.info('Path is OK')
250 be53c2d9 Stavros Sachtouris
251 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(format='xml')
252 be53c2d9 Stavros Sachtouris
        self.assertEqual(r.text.split()[4], 'name="' + pithos.container + '">')
253 be53c2d9 Stavros Sachtouris
        self.info('Format is OK')
254 be53c2d9 Stavros Sachtouris
255 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(meta=[self.obj_metakey, ])
256 be53c2d9 Stavros Sachtouris
        self.assertTrue(len(r.json) > 0)
257 be53c2d9 Stavros Sachtouris
        self.info('Meta is OK')
258 be53c2d9 Stavros Sachtouris
259 be53c2d9 Stavros Sachtouris
        r = pithos.container_get(show_only_shared=True)
260 be53c2d9 Stavros Sachtouris
        self.assertTrue(len(r.json) < fullLen)
261 be53c2d9 Stavros Sachtouris
        self.info('Show-only-shared is OK')
262 be53c2d9 Stavros Sachtouris
263 be53c2d9 Stavros Sachtouris
        try:
264 be53c2d9 Stavros Sachtouris
            r = pithos.container_get(until=1000000000)
265 be53c2d9 Stavros Sachtouris
            datestring = unicode(r.headers['x-account-until-timestamp'])
266 be53c2d9 Stavros Sachtouris
            self.assertEqual(u'Sun, 09 Sep 2001 01:46:40 GMT', datestring)
267 be53c2d9 Stavros Sachtouris
            self.info('Until is OK')
268 be53c2d9 Stavros Sachtouris
        except ClientError:
269 be53c2d9 Stavros Sachtouris
            pass
270 be53c2d9 Stavros Sachtouris
271 fe81ddd7 Stavros Sachtouris
    def test_030_container_put(self):
272 fe81ddd7 Stavros Sachtouris
        """Test container PUT"""
273 fe81ddd7 Stavros Sachtouris
        pithos = self.clients.pithos
274 fe81ddd7 Stavros Sachtouris
        pithos.container = 'cont%s%s' % (
275 fe81ddd7 Stavros Sachtouris
            self.run_id or 0, random.randint(1000, 9999))
276 fe81ddd7 Stavros Sachtouris
        self.temp_containers.append(pithos.container)
277 fe81ddd7 Stavros Sachtouris
278 fe81ddd7 Stavros Sachtouris
        r = pithos.create_container()
279 fe81ddd7 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
280 fe81ddd7 Stavros Sachtouris
281 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_limit(pithos.container)
282 fe81ddd7 Stavros Sachtouris
        cquota = r.values()[0]
283 fe81ddd7 Stavros Sachtouris
        newquota = 2 * int(cquota)
284 fe81ddd7 Stavros Sachtouris
        self.info('Limit is OK')
285 fe81ddd7 Stavros Sachtouris
        pithos.del_container()
286 fe81ddd7 Stavros Sachtouris
287 fe81ddd7 Stavros Sachtouris
        r = pithos.create_container(sizelimit=newquota)
288 fe81ddd7 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
289 fe81ddd7 Stavros Sachtouris
290 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_limit(pithos.container)
291 fe81ddd7 Stavros Sachtouris
        xquota = int(r.values()[0])
292 fe81ddd7 Stavros Sachtouris
        self.assertEqual(newquota, xquota)
293 fe81ddd7 Stavros Sachtouris
        self.info('Can set container limit')
294 fe81ddd7 Stavros Sachtouris
        pithos.del_container()
295 fe81ddd7 Stavros Sachtouris
296 fe81ddd7 Stavros Sachtouris
        r = pithos.create_container(versioning='auto')
297 fe81ddd7 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
298 fe81ddd7 Stavros Sachtouris
299 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_versioning(pithos.container)
300 fe81ddd7 Stavros Sachtouris
        nvers = r.values()[0]
301 fe81ddd7 Stavros Sachtouris
        self.assertEqual('auto', nvers)
302 fe81ddd7 Stavros Sachtouris
        self.info('Versioning=auto is OK')
303 fe81ddd7 Stavros Sachtouris
        pithos.del_container()
304 fe81ddd7 Stavros Sachtouris
305 fe81ddd7 Stavros Sachtouris
        r = pithos.container_put(versioning='none')
306 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
307 fe81ddd7 Stavros Sachtouris
308 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_versioning(pithos.container)
309 fe81ddd7 Stavros Sachtouris
        nvers = r.values()[0]
310 fe81ddd7 Stavros Sachtouris
        self.assertEqual('none', nvers)
311 fe81ddd7 Stavros Sachtouris
        self.info('Versioning=none is OK')
312 fe81ddd7 Stavros Sachtouris
        pithos.del_container()
313 fe81ddd7 Stavros Sachtouris
314 fe81ddd7 Stavros Sachtouris
        r = pithos.create_container(metadata={'m1': 'v1', 'm2': 'v2'})
315 fe81ddd7 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
316 fe81ddd7 Stavros Sachtouris
317 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_meta(pithos.container)
318 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
319 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
320 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
321 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
322 fe81ddd7 Stavros Sachtouris
323 fe81ddd7 Stavros Sachtouris
        r = pithos.container_put(metadata={'m1': '', 'm2': 'v2a'})
324 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
325 fe81ddd7 Stavros Sachtouris
326 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_meta(pithos.container)
327 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
328 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
329 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
330 fe81ddd7 Stavros Sachtouris
        self.info('Container meta is OK')
331 fe81ddd7 Stavros Sachtouris
332 fe81ddd7 Stavros Sachtouris
        pithos.del_container_meta(pithos.container)
333 fe81ddd7 Stavros Sachtouris
334 fe81ddd7 Stavros Sachtouris
    def test_035_container_post(self):
335 fe81ddd7 Stavros Sachtouris
        """Test container POST"""
336 fe81ddd7 Stavros Sachtouris
        pithos = self.clients.pithos
337 fe81ddd7 Stavros Sachtouris
338 fe81ddd7 Stavros Sachtouris
        r = pithos.container_post()
339 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
340 fe81ddd7 Stavros Sachtouris
        self.info('Status is OK')
341 fe81ddd7 Stavros Sachtouris
342 fe81ddd7 Stavros Sachtouris
        pithos.set_container_meta({'m1': 'v1', 'm2': 'v2'})
343 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_meta(pithos.container)
344 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
345 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
346 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
347 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
348 fe81ddd7 Stavros Sachtouris
        self.info('Set metadata works')
349 fe81ddd7 Stavros Sachtouris
350 fe81ddd7 Stavros Sachtouris
        r = pithos.del_container_meta('m1')
351 fe81ddd7 Stavros Sachtouris
        r = pithos.set_container_meta({'m2': 'v2a'})
352 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_meta(pithos.container)
353 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
354 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
355 fe81ddd7 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
356 fe81ddd7 Stavros Sachtouris
        self.info('Delete metadata works')
357 fe81ddd7 Stavros Sachtouris
358 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_limit(pithos.container)
359 fe81ddd7 Stavros Sachtouris
        cquota = r.values()[0]
360 fe81ddd7 Stavros Sachtouris
        newquota = 2 * int(cquota)
361 fe81ddd7 Stavros Sachtouris
        r = pithos.set_container_limit(newquota)
362 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_limit(pithos.container)
363 fe81ddd7 Stavros Sachtouris
        xquota = int(r.values()[0])
364 fe81ddd7 Stavros Sachtouris
        self.assertEqual(newquota, xquota)
365 fe81ddd7 Stavros Sachtouris
        self.info('Set quota works')
366 fe81ddd7 Stavros Sachtouris
367 fe81ddd7 Stavros Sachtouris
        pithos.set_container_versioning('auto')
368 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_versioning(pithos.container)
369 fe81ddd7 Stavros Sachtouris
        nvers = r.values()[0]
370 fe81ddd7 Stavros Sachtouris
        self.assertEqual('auto', nvers)
371 fe81ddd7 Stavros Sachtouris
        pithos.set_container_versioning('none')
372 fe81ddd7 Stavros Sachtouris
        r = pithos.get_container_versioning(pithos.container)
373 fe81ddd7 Stavros Sachtouris
        nvers = r.values()[0]
374 fe81ddd7 Stavros Sachtouris
        self.assertEqual('none', nvers)
375 fe81ddd7 Stavros Sachtouris
        self.info('Set versioning works')
376 fe81ddd7 Stavros Sachtouris
377 fe81ddd7 Stavros Sachtouris
        f = self._create_large_file(1024 * 1024 * 100)
378 fe81ddd7 Stavros Sachtouris
        self.info('Created file %s of 100 MB' % f.name)
379 fe81ddd7 Stavros Sachtouris
380 fe81ddd7 Stavros Sachtouris
        pithos.create_directory('dir')
381 fe81ddd7 Stavros Sachtouris
        r = pithos.upload_object('/dir/sample.file', f)
382 fe81ddd7 Stavros Sachtouris
        for term in ('content-length', 'content-type', 'x-object-version'):
383 fe81ddd7 Stavros Sachtouris
            self.assertTrue(term in r)
384 fe81ddd7 Stavros Sachtouris
        r = pithos.get_object_info('/dir/sample.file')
385 fe81ddd7 Stavros Sachtouris
        self.assertTrue(int(r['content-length']) > 100000000)
386 fe81ddd7 Stavros Sachtouris
        self.info('Made remote directory /dir and object /dir/sample.file')
387 fe81ddd7 Stavros Sachtouris
388 fe81ddd7 Stavros Sachtouris
        """What is tranfer_encoding? What should I check about it? """
389 fe81ddd7 Stavros Sachtouris
        #TODO
390 fe81ddd7 Stavros Sachtouris
391 fe81ddd7 Stavros Sachtouris
        obj = 'object_with_meta'
392 fe81ddd7 Stavros Sachtouris
        pithos.container = self.temp_containers[-2]
393 fe81ddd7 Stavros Sachtouris
        r = pithos.object_post(
394 fe81ddd7 Stavros Sachtouris
            obj, update='False', metadata={'newmeta': 'newval'})
395 fe81ddd7 Stavros Sachtouris
396 fe81ddd7 Stavros Sachtouris
        r = pithos.get_object_info(obj)
397 fe81ddd7 Stavros Sachtouris
        self.assertTrue('x-object-meta-newmeta' in r)
398 fe81ddd7 Stavros Sachtouris
        self.assertFalse('x-object-meta-%s' % self.obj_metakey not in r)
399 fe81ddd7 Stavros Sachtouris
        self.info('Metadata with update=False works')
400 fe81ddd7 Stavros Sachtouris
401 fe81ddd7 Stavros Sachtouris
    def test_050_stop_test(self):
402 fe81ddd7 Stavros Sachtouris
        """STOP TESTING ALREADY"""
403 fe81ddd7 Stavros Sachtouris
        self.assertTrue(False)
404 6a6aba0b Stavros Sachtouris
405 5d9987a5 Stavros Sachtouris
    def test_051_list_containers(self):
406 5d9987a5 Stavros Sachtouris
        """Test container list actually returns containers"""
407 d11c80c0 Ilias Tsitsimpis
        self.containers = self._get_list_of_containers()
408 79a5c431 Ilias Tsitsimpis
        self.assertGreater(len(self.containers), 0)
409 5d9987a5 Stavros Sachtouris
        self.lala = 1
410 79a5c431 Ilias Tsitsimpis
411 5d9987a5 Stavros Sachtouris
    def test_052_unique_containers(self):
412 79a5c431 Ilias Tsitsimpis
        """Test if containers have unique names"""
413 79a5c431 Ilias Tsitsimpis
        names = [n['name'] for n in self.containers]
414 79a5c431 Ilias Tsitsimpis
        names = sorted(names)
415 79a5c431 Ilias Tsitsimpis
        self.assertEqual(sorted(list(set(names))), names)
416 79a5c431 Ilias Tsitsimpis
417 5d9987a5 Stavros Sachtouris
    def test_054_upload_file(self):
418 79a5c431 Ilias Tsitsimpis
        """Test uploading a txt file to Pithos"""
419 79a5c431 Ilias Tsitsimpis
        # Create a tmp file
420 24d1788b Ilias Tsitsimpis
        with tempfile.TemporaryFile(dir=self.temp_directory) as fout:
421 79a5c431 Ilias Tsitsimpis
            fout.write("This is a temp file")
422 79a5c431 Ilias Tsitsimpis
            fout.seek(0, 0)
423 79a5c431 Ilias Tsitsimpis
            # Upload the file,
424 79a5c431 Ilias Tsitsimpis
            # The container is the one choosen during the `create_container'
425 79a5c431 Ilias Tsitsimpis
            self.clients.pithos.upload_object("test.txt", fout)
426 3e5bbd85 Ilias Tsitsimpis
            # Verify quotas
427 3e5bbd85 Ilias Tsitsimpis
            self._check_quotas(diskspace=+os.fstat(fout.fileno()).st_size)
428 79a5c431 Ilias Tsitsimpis
429 5d9987a5 Stavros Sachtouris
    def test_055_download_file(self):
430 79a5c431 Ilias Tsitsimpis
        """Test downloading the file from Pithos"""
431 79a5c431 Ilias Tsitsimpis
        # Create a tmp directory to save the file
432 24d1788b Ilias Tsitsimpis
        with tempfile.TemporaryFile(dir=self.temp_directory) as fout:
433 79a5c431 Ilias Tsitsimpis
            self.clients.pithos.download_object("test.txt", fout)
434 79a5c431 Ilias Tsitsimpis
            # Now read the file
435 79a5c431 Ilias Tsitsimpis
            fout.seek(0, 0)
436 79a5c431 Ilias Tsitsimpis
            contents = fout.read()
437 79a5c431 Ilias Tsitsimpis
            # Compare results
438 79a5c431 Ilias Tsitsimpis
            self.info("Comparing contents with the uploaded file")
439 79a5c431 Ilias Tsitsimpis
            self.assertEqual(contents, "This is a temp file")
440 79a5c431 Ilias Tsitsimpis
441 5d9987a5 Stavros Sachtouris
    def test_056_remove(self):
442 79a5c431 Ilias Tsitsimpis
        """Test removing files and containers from Pithos"""
443 79a5c431 Ilias Tsitsimpis
        self.info("Removing the file %s from container %s",
444 79a5c431 Ilias Tsitsimpis
                  "test.txt", self.created_container)
445 79a5c431 Ilias Tsitsimpis
        # The container is the one choosen during the `create_container'
446 3e5bbd85 Ilias Tsitsimpis
        content_length = \
447 3e5bbd85 Ilias Tsitsimpis
            self.clients.pithos.get_object_info("test.txt")['content-length']
448 79a5c431 Ilias Tsitsimpis
        self.clients.pithos.del_object("test.txt")
449 79a5c431 Ilias Tsitsimpis
450 3e5bbd85 Ilias Tsitsimpis
        # Verify quotas
451 3e5bbd85 Ilias Tsitsimpis
        self._check_quotas(diskspace=-int(content_length))
452 3e5bbd85 Ilias Tsitsimpis
453 79a5c431 Ilias Tsitsimpis
        self.info("Removing the container %s", self.created_container)
454 79a5c431 Ilias Tsitsimpis
        self.clients.pithos.purge_container()
455 79a5c431 Ilias Tsitsimpis
456 79a5c431 Ilias Tsitsimpis
        # List containers
457 79a5c431 Ilias Tsitsimpis
        containers = self._get_list_of_containers()
458 79a5c431 Ilias Tsitsimpis
        self.info("Check that the container %s has been deleted",
459 79a5c431 Ilias Tsitsimpis
                  self.created_container)
460 79a5c431 Ilias Tsitsimpis
        names = [n['name'] for n in containers]
461 79a5c431 Ilias Tsitsimpis
        self.assertNotIn(self.created_container, names)
462 79a5c431 Ilias Tsitsimpis
        # We successfully deleted our container, no need to do it
463 79a5c431 Ilias Tsitsimpis
        # in our clean up phase
464 d11c80c0 Ilias Tsitsimpis
        self.created_container = None
465 79a5c431 Ilias Tsitsimpis
466 79a5c431 Ilias Tsitsimpis
    @classmethod
467 79a5c431 Ilias Tsitsimpis
    def tearDownClass(cls):  # noqa
468 79a5c431 Ilias Tsitsimpis
        """Clean up"""
469 be53c2d9 Stavros Sachtouris
        from kamaki.cli.logger import deactivate
470 be53c2d9 Stavros Sachtouris
        deactivate('kamaki.clients.send')
471 be53c2d9 Stavros Sachtouris
        deactivate('kamaki.clients.recv')
472 49517b8a Stavros Sachtouris
        pithos = cls.clients.pithos
473 49517b8a Stavros Sachtouris
        for c in getattr(cls, 'temp_containers', []):
474 49517b8a Stavros Sachtouris
            pithos.container = c
475 49517b8a Stavros Sachtouris
            try:
476 49517b8a Stavros Sachtouris
                pithos.del_container(delimiter='/')
477 49517b8a Stavros Sachtouris
                pithos.purge_container(c)
478 49517b8a Stavros Sachtouris
            except ClientError as ce:
479 49517b8a Stavros Sachtouris
                print ('Failed to destroy container (%s)' % ce)