Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / livetest / pithos.py @ 058ee9a8

History | View | Annotate | Download (46.2 kB)

1 a3bca46c Stavros Sachtouris
# Copyright 2012-2013 GRNET S.A. All rights reserved.
2 a3bca46c Stavros Sachtouris
#
3 a3bca46c Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 a3bca46c Stavros Sachtouris
# without modification, are permitted provided that the following
5 a3bca46c Stavros Sachtouris
# conditions are met:
6 a3bca46c Stavros Sachtouris
#
7 a3bca46c Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 a3bca46c Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 a3bca46c Stavros Sachtouris
#      disclaimer.
10 a3bca46c Stavros Sachtouris
#
11 a3bca46c Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 a3bca46c Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 a3bca46c Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 a3bca46c Stavros Sachtouris
#      provided with the distribution.
15 a3bca46c Stavros Sachtouris
#
16 a3bca46c Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 a3bca46c Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 a3bca46c Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 a3bca46c Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 a3bca46c Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 a3bca46c Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 a3bca46c Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 a3bca46c Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 a3bca46c Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 a3bca46c Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 a3bca46c Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 a3bca46c Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 a3bca46c Stavros Sachtouris
#
29 a3bca46c Stavros Sachtouris
# The views and conclusions contained in the software and
30 a3bca46c Stavros Sachtouris
# documentation are those of the authors and should not be
31 a3bca46c Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 a3bca46c Stavros Sachtouris
# or implied, of GRNET S.A.
33 a3bca46c Stavros Sachtouris
34 a3bca46c Stavros Sachtouris
import time
35 a3bca46c Stavros Sachtouris
import datetime
36 773d61ca Stavros Sachtouris
from os import urandom
37 773d61ca Stavros Sachtouris
from tempfile import NamedTemporaryFile
38 d187ba37 Stavros Sachtouris
from string import ascii_letters
39 a3bca46c Stavros Sachtouris
40 f5f2dc53 Stavros Sachtouris
from kamaki.clients import livetest, ClientError
41 a3bca46c Stavros Sachtouris
from kamaki.clients.pithos import PithosClient
42 1f5debf7 Stavros Sachtouris
from kamaki.clients.astakos import AstakosClient
43 a3bca46c Stavros Sachtouris
44 a3bca46c Stavros Sachtouris
45 d187ba37 Stavros Sachtouris
def chargen():
46 d187ba37 Stavros Sachtouris
    """10 + 2 * 26 + 26 = 88"""
47 d187ba37 Stavros Sachtouris
    while True:
48 d187ba37 Stavros Sachtouris
        for CH in xrange(10):
49 d187ba37 Stavros Sachtouris
            yield '%s' % CH
50 d187ba37 Stavros Sachtouris
        for CH in ascii_letters:
51 d187ba37 Stavros Sachtouris
            yield CH
52 d187ba37 Stavros Sachtouris
        for CH in '~!@#$%^&*()_+`-=:";|<>?,./':
53 d187ba37 Stavros Sachtouris
            yield CH
54 d187ba37 Stavros Sachtouris
55 d187ba37 Stavros Sachtouris
56 d187ba37 Stavros Sachtouris
def sample_block(f, block):
57 d187ba37 Stavros Sachtouris
    block_size = 4 * 1024 * 1024
58 d187ba37 Stavros Sachtouris
    f.seek(block * block_size)
59 d187ba37 Stavros Sachtouris
    ch = [f.read(1)]
60 d187ba37 Stavros Sachtouris
    f.seek(block_size / 2, 1)
61 d187ba37 Stavros Sachtouris
    ch.append(f.read(1))
62 d187ba37 Stavros Sachtouris
    f.seek((block + 1) * block_size - 1)
63 d187ba37 Stavros Sachtouris
    ch.append(f.read(1))
64 d187ba37 Stavros Sachtouris
    return ch
65 d187ba37 Stavros Sachtouris
66 d187ba37 Stavros Sachtouris
67 f5f2dc53 Stavros Sachtouris
class Pithos(livetest.Generic):
68 a3bca46c Stavros Sachtouris
69 773d61ca Stavros Sachtouris
    files = []
70 a3bca46c Stavros Sachtouris
71 a3bca46c Stavros Sachtouris
    def setUp(self):
72 2feb9477 Stavros Sachtouris
        self.cloud = 'cloud.%s' % self['testcloud']
73 2feb9477 Stavros Sachtouris
        aurl, self.token = self[self.cloud, 'url'], self[self.cloud, 'token']
74 9b745324 Stavros Sachtouris
        self.auth_base = AstakosClient(aurl, self.token)
75 9b745324 Stavros Sachtouris
        purl = self.auth_base.get_service_endpoints(
76 9b745324 Stavros Sachtouris
            'object-store')['publicURL']
77 9b745324 Stavros Sachtouris
        self.uuid = self.auth_base.user_term('id')
78 9b745324 Stavros Sachtouris
        self.client = PithosClient(purl, self.token, self.uuid)
79 a3bca46c Stavros Sachtouris
80 a3bca46c Stavros Sachtouris
        self.now = time.mktime(time.gmtime())
81 a3bca46c Stavros Sachtouris
        self.now_unformated = datetime.datetime.utcnow()
82 a3bca46c Stavros Sachtouris
        self._init_data()
83 a3bca46c Stavros Sachtouris
84 a3bca46c Stavros Sachtouris
        """Prepare an object to be shared - also its container"""
85 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
86 7ae842c2 Stavros Sachtouris
        self.client.object_post(
87 7ae842c2 Stavros Sachtouris
            'test',
88 a3bca46c Stavros Sachtouris
            update=True,
89 1f5debf7 Stavros Sachtouris
            permissions={'read': [self.client.account]})
90 a3bca46c Stavros Sachtouris
91 a3bca46c Stavros Sachtouris
        self.create_remote_object(self.c1, 'another.test')
92 a3bca46c Stavros Sachtouris
93 a3bca46c Stavros Sachtouris
    def _init_data(self):
94 a3bca46c Stavros Sachtouris
        self.c1 = 'c1_' + unicode(self.now)
95 a3bca46c Stavros Sachtouris
        self.c2 = 'c2_' + unicode(self.now)
96 a3bca46c Stavros Sachtouris
        self.c3 = 'c3_' + unicode(self.now)
97 7f87da8b Stavros Sachtouris
        try:
98 7f87da8b Stavros Sachtouris
            self.client.create_container(self.c2)
99 7f87da8b Stavros Sachtouris
        except ClientError:
100 7f87da8b Stavros Sachtouris
            pass
101 7f87da8b Stavros Sachtouris
        try:
102 7f87da8b Stavros Sachtouris
            self.client.create_container(self.c1)
103 7f87da8b Stavros Sachtouris
        except ClientError:
104 7f87da8b Stavros Sachtouris
            pass
105 7f87da8b Stavros Sachtouris
        try:
106 7f87da8b Stavros Sachtouris
            self.client.create_container(self.c3)
107 7f87da8b Stavros Sachtouris
        except ClientError:
108 7f87da8b Stavros Sachtouris
            pass
109 a3bca46c Stavros Sachtouris
110 a3bca46c Stavros Sachtouris
        self.create_remote_object(self.c1, 'test')
111 a3bca46c Stavros Sachtouris
        self.create_remote_object(self.c2, 'test')
112 a3bca46c Stavros Sachtouris
        self.create_remote_object(self.c1, 'test1')
113 a3bca46c Stavros Sachtouris
        self.create_remote_object(self.c2, 'test1')
114 a3bca46c Stavros Sachtouris
115 a3bca46c Stavros Sachtouris
    def create_remote_object(self, container, obj):
116 a3bca46c Stavros Sachtouris
        self.client.container = container
117 24ff0a35 Stavros Sachtouris
        self.client.object_put(
118 24ff0a35 Stavros Sachtouris
            obj,
119 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
120 a3bca46c Stavros Sachtouris
            data='file %s that lives in %s' % (obj, container),
121 a3bca46c Stavros Sachtouris
            metadata={'incontainer': container})
122 a3bca46c Stavros Sachtouris
123 a3bca46c Stavros Sachtouris
    def forceDeleteContainer(self, container):
124 a3bca46c Stavros Sachtouris
        self.client.container = container
125 a3bca46c Stavros Sachtouris
        try:
126 a3bca46c Stavros Sachtouris
            r = self.client.list_objects()
127 a3bca46c Stavros Sachtouris
        except ClientError:
128 a3bca46c Stavros Sachtouris
            return
129 a3bca46c Stavros Sachtouris
        for obj in r:
130 a3bca46c Stavros Sachtouris
            name = obj['name']
131 a3bca46c Stavros Sachtouris
            self.client.del_object(name)
132 a3bca46c Stavros Sachtouris
        r = self.client.container_delete()
133 a3bca46c Stavros Sachtouris
        self.container = ''
134 a3bca46c Stavros Sachtouris
135 a3bca46c Stavros Sachtouris
    def tearDown(self):
136 a3bca46c Stavros Sachtouris
        """Destroy test cases"""
137 773d61ca Stavros Sachtouris
        for f in self.files:
138 773d61ca Stavros Sachtouris
            f.close()
139 a3bca46c Stavros Sachtouris
        self.forceDeleteContainer(self.c1)
140 a3bca46c Stavros Sachtouris
        self.forceDeleteContainer(self.c2)
141 a3bca46c Stavros Sachtouris
        try:
142 a3bca46c Stavros Sachtouris
            self.forceDeleteContainer(self.c3)
143 a3bca46c Stavros Sachtouris
        except ClientError:
144 a3bca46c Stavros Sachtouris
            pass
145 a3bca46c Stavros Sachtouris
        self.client.container = ''
146 a3bca46c Stavros Sachtouris
147 a3bca46c Stavros Sachtouris
    def test_000(self):
148 a3bca46c Stavros Sachtouris
        """Prepare a full Pithos+ test"""
149 a3bca46c Stavros Sachtouris
        print('')
150 a3bca46c Stavros Sachtouris
        super(self.__class__, self).test_000()
151 a3bca46c Stavros Sachtouris
152 a3bca46c Stavros Sachtouris
    def test_account_head(self):
153 a3bca46c Stavros Sachtouris
        """Test account_HEAD"""
154 a3bca46c Stavros Sachtouris
        self._test_0010_account_head()
155 a3bca46c Stavros Sachtouris
156 a3bca46c Stavros Sachtouris
    def _test_0010_account_head(self):
157 a3bca46c Stavros Sachtouris
        r = self.client.account_head()
158 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
159 a3bca46c Stavros Sachtouris
160 a3bca46c Stavros Sachtouris
        r = self.client.account_head(until='1000000000')
161 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
162 a3bca46c Stavros Sachtouris
163 a3bca46c Stavros Sachtouris
        r = self.client.get_account_info(until='1000000000')
164 a3bca46c Stavros Sachtouris
        datestring = unicode(r['x-account-until-timestamp'])
165 a3bca46c Stavros Sachtouris
        self.assertEqual(u'Sun, 09 Sep 2001 01:46:40 GMT', datestring)
166 a3bca46c Stavros Sachtouris
167 a3bca46c Stavros Sachtouris
        r = self.client.get_account_quota()
168 a3bca46c Stavros Sachtouris
        self.assertTrue('x-account-policy-quota' in r)
169 a3bca46c Stavros Sachtouris
170 df0045d8 Stavros Sachtouris
        #r = self.client.get_account_versioning()
171 df0045d8 Stavros Sachtouris
        #self.assertTrue('x-account-policy-versioning' in r)
172 a3bca46c Stavros Sachtouris
173 a3bca46c Stavros Sachtouris
        """Check if(un)modified_since"""
174 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
175 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
176 24ff0a35 Stavros Sachtouris
            r1 = self.client.account_head(
177 1e1d6f27 Stavros Sachtouris
                if_modified_since=now_formated, success=(204, 304, 412))
178 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
179 24ff0a35 Stavros Sachtouris
            r2 = self.client.account_head(
180 1e1d6f27 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(204, 304, 412))
181 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
182 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
183 a3bca46c Stavros Sachtouris
184 a3bca46c Stavros Sachtouris
    def test_account_get(self):
185 a3bca46c Stavros Sachtouris
        """Test account_GET"""
186 a3bca46c Stavros Sachtouris
        self._test_0020_account_get()
187 a3bca46c Stavros Sachtouris
188 a3bca46c Stavros Sachtouris
    def _test_0020_account_get(self):
189 a3bca46c Stavros Sachtouris
        #r = self.client.account_get()
190 a3bca46c Stavros Sachtouris
        #self.assertEqual(r.status_code, 200)
191 a3bca46c Stavros Sachtouris
        r = self.client.list_containers()
192 a3bca46c Stavros Sachtouris
        fullLen = len(r)
193 a3bca46c Stavros Sachtouris
        self.assertTrue(fullLen > 2)
194 a3bca46c Stavros Sachtouris
195 a3bca46c Stavros Sachtouris
        r = self.client.account_get(limit=1)
196 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.json), 1)
197 a3bca46c Stavros Sachtouris
198 a3bca46c Stavros Sachtouris
        r = self.client.account_get(marker='c2_')
199 a3bca46c Stavros Sachtouris
        temp_c0 = r.json[0]['name']
200 a3bca46c Stavros Sachtouris
        temp_c2 = r.json[2]['name']
201 a3bca46c Stavros Sachtouris
202 a3bca46c Stavros Sachtouris
        r = self.client.account_get(limit=2, marker='c2_')
203 24ff0a35 Stavros Sachtouris
        conames = [container['name'] for container in r.json if (
204 24ff0a35 Stavros Sachtouris
            container['name'].lower().startswith('c2_'))]
205 a3bca46c Stavros Sachtouris
        self.assertTrue(temp_c0 in conames)
206 a3bca46c Stavros Sachtouris
        self.assertFalse(temp_c2 in conames)
207 a3bca46c Stavros Sachtouris
208 a3bca46c Stavros Sachtouris
        r = self.client.account_get(show_only_shared=True)
209 a3bca46c Stavros Sachtouris
        self.assertTrue(self.c1 in [c['name'] for c in r.json])
210 a3bca46c Stavros Sachtouris
211 3e02e714 Stavros Sachtouris
        r = self.client.account_get(until=1342609206.0)
212 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) <= fullLen)
213 a3bca46c Stavros Sachtouris
214 a3bca46c Stavros Sachtouris
        """Check if(un)modified_since"""
215 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
216 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
217 24ff0a35 Stavros Sachtouris
            r1 = self.client.account_get(
218 1e1d6f27 Stavros Sachtouris
                if_modified_since=now_formated, success=(200, 304, 412))
219 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
220 24ff0a35 Stavros Sachtouris
            r2 = self.client.account_get(
221 1e1d6f27 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(200, 304, 412))
222 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
223 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
224 a3bca46c Stavros Sachtouris
225 a3bca46c Stavros Sachtouris
        """Check sharing_accounts"""
226 a3bca46c Stavros Sachtouris
        r = self.client.get_sharing_accounts()
227 45a3721b Stavros Sachtouris
        try:
228 45a3721b Stavros Sachtouris
            self.assertTrue(len(r) > 0)
229 45a3721b Stavros Sachtouris
        except AssertionError as e:
230 45a3721b Stavros Sachtouris
            print '\n\tWARNING: Are there any sharers to your account?'
231 45a3721b Stavros Sachtouris
            self.assertEqual(len(r), 0)
232 45a3721b Stavros Sachtouris
            print '\tIf there are, this (%s) is an error, else it is OK' % e
233 a3bca46c Stavros Sachtouris
234 a3bca46c Stavros Sachtouris
    def test_account_post(self):
235 a3bca46c Stavros Sachtouris
        """Test account_POST"""
236 a3bca46c Stavros Sachtouris
        self._test_0030_account_post()
237 a3bca46c Stavros Sachtouris
238 a3bca46c Stavros Sachtouris
    def _test_0030_account_post(self):
239 a3bca46c Stavros Sachtouris
        r = self.client.account_post()
240 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
241 a3bca46c Stavros Sachtouris
        grpName = 'grp' + unicode(self.now)
242 a3bca46c Stavros Sachtouris
243 a3bca46c Stavros Sachtouris
        """Method set/del_account_meta and set_account_groupcall use
244 a3bca46c Stavros Sachtouris
            account_post internally
245 a3bca46c Stavros Sachtouris
        """
246 494fb220 Stavros Sachtouris
        u1 = self.client.account
247 fb674626 Stavros Sachtouris
        #  Invalid display name
248 023230b5 Stavros Sachtouris
        u2 = '1nc0r3c7-d15p14y-n4m3'
249 023230b5 Stavros Sachtouris
        self.assertRaises(
250 023230b5 Stavros Sachtouris
            ClientError,
251 023230b5 Stavros Sachtouris
            self.client.set_account_group,
252 023230b5 Stavros Sachtouris
            grpName, [u1, u2])
253 023230b5 Stavros Sachtouris
        self.client.set_account_group(grpName, [u1])
254 a3bca46c Stavros Sachtouris
        r = self.client.get_account_group()
255 023230b5 Stavros Sachtouris
        self.assertEqual(r['x-account-group-' + grpName], '%s' % u1)
256 a3bca46c Stavros Sachtouris
        self.client.del_account_group(grpName)
257 a3bca46c Stavros Sachtouris
        r = self.client.get_account_group()
258 a3bca46c Stavros Sachtouris
        self.assertTrue('x-account-group-' + grpName not in r)
259 a3bca46c Stavros Sachtouris
260 a3bca46c Stavros Sachtouris
        mprefix = 'meta' + unicode(self.now)
261 24ff0a35 Stavros Sachtouris
        self.client.set_account_meta({
262 1e1d6f27 Stavros Sachtouris
            mprefix + '1': 'v1', mprefix + '2': 'v2'})
263 a3bca46c Stavros Sachtouris
        r = self.client.get_account_meta()
264 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '1'], 'v1')
265 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '2'], 'v2')
266 a3bca46c Stavros Sachtouris
267 a3bca46c Stavros Sachtouris
        self.client.del_account_meta(mprefix + '1')
268 a3bca46c Stavros Sachtouris
        r = self.client.get_account_meta()
269 a3bca46c Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '1' not in r)
270 a3bca46c Stavros Sachtouris
271 a3bca46c Stavros Sachtouris
        self.client.del_account_meta(mprefix + '2')
272 a3bca46c Stavros Sachtouris
        r = self.client.get_account_meta()
273 a3bca46c Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '2' not in r)
274 a3bca46c Stavros Sachtouris
275 a3bca46c Stavros Sachtouris
        """Missing testing for quota, versioning, because normally
276 a3bca46c Stavros Sachtouris
        you don't have permissions to modify those at account level
277 a3bca46c Stavros Sachtouris
        """
278 a3bca46c Stavros Sachtouris
279 3ed6dbde Stavros Sachtouris
        #newquota = 1000000
280 3ed6dbde Stavros Sachtouris
        #self.client.set_account_quota(newquota)
281 a3bca46c Stavros Sachtouris
        #r = self.client.get_account_info()
282 a3bca46c Stavros Sachtouris
        #print(unicode(r))
283 a3bca46c Stavros Sachtouris
        #r = self.client.get_account_quota()
284 a3bca46c Stavros Sachtouris
        #self.assertEqual(r['x-account-policy-quota'], newquota)
285 df0045d8 Stavros Sachtouris
        #self.client.set_account_versioning('auto')
286 a3bca46c Stavros Sachtouris
287 a3bca46c Stavros Sachtouris
    def test_container_head(self):
288 a3bca46c Stavros Sachtouris
        """Test container_HEAD"""
289 a3bca46c Stavros Sachtouris
        self._test_0040_container_head()
290 a3bca46c Stavros Sachtouris
291 a3bca46c Stavros Sachtouris
    def _test_0040_container_head(self):
292 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
293 a3bca46c Stavros Sachtouris
294 a3bca46c Stavros Sachtouris
        r = self.client.container_head()
295 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
296 a3bca46c Stavros Sachtouris
297 a3bca46c Stavros Sachtouris
        """Check until"""
298 a3bca46c Stavros Sachtouris
        r = self.client.container_head(until=1000000, success=(204, 404))
299 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
300 a3bca46c Stavros Sachtouris
301 a3bca46c Stavros Sachtouris
        """Check and if(un)modified_since"""
302 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
303 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
304 24ff0a35 Stavros Sachtouris
            r1 = self.client.container_head(
305 1e1d6f27 Stavros Sachtouris
                if_modified_since=now_formated, success=(204, 304, 412))
306 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
307 24ff0a35 Stavros Sachtouris
            r2 = self.client.container_head(
308 1e1d6f27 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(204, 304, 412))
309 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
310 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
311 a3bca46c Stavros Sachtouris
312 a3bca46c Stavros Sachtouris
        """Check container object meta"""
313 a3bca46c Stavros Sachtouris
        r = self.client.get_container_object_meta()
314 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-object-meta'], 'Incontainer')
315 a3bca46c Stavros Sachtouris
316 a3bca46c Stavros Sachtouris
    def test_container_get(self):
317 a3bca46c Stavros Sachtouris
        """Test container_GET"""
318 a3bca46c Stavros Sachtouris
        self._test_0050_container_get()
319 a3bca46c Stavros Sachtouris
320 a3bca46c Stavros Sachtouris
    def _test_0050_container_get(self):
321 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
322 a3bca46c Stavros Sachtouris
323 a3bca46c Stavros Sachtouris
        r = self.client.container_get()
324 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
325 a3bca46c Stavros Sachtouris
        fullLen = len(r.json)
326 a3bca46c Stavros Sachtouris
327 a3bca46c Stavros Sachtouris
        r = self.client.container_get(prefix='test')
328 a3bca46c Stavros Sachtouris
        lalobjects = [obj for obj in r.json if obj['name'].startswith('test')]
329 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
330 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.json), len(lalobjects))
331 a3bca46c Stavros Sachtouris
332 a3bca46c Stavros Sachtouris
        r = self.client.container_get(limit=1)
333 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.json), 1)
334 a3bca46c Stavros Sachtouris
335 a3bca46c Stavros Sachtouris
        r = self.client.container_get(marker='another')
336 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
337 a3bca46c Stavros Sachtouris
        neobjects = [obj for obj in r.json if obj['name'] > 'another']
338 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.json), len(neobjects))
339 a3bca46c Stavros Sachtouris
340 a3bca46c Stavros Sachtouris
        r = self.client.container_get(prefix='another.test', delimiter='.')
341 a3bca46c Stavros Sachtouris
        self.assertTrue(fullLen > len(r.json))
342 a3bca46c Stavros Sachtouris
343 a3bca46c Stavros Sachtouris
        r = self.client.container_get(path='/')
344 a3bca46c Stavros Sachtouris
        self.assertEqual(fullLen, len(r.json))
345 a3bca46c Stavros Sachtouris
346 a3bca46c Stavros Sachtouris
        r = self.client.container_get(format='xml')
347 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text.split()[4], 'name="' + self.c1 + '">')
348 a3bca46c Stavros Sachtouris
349 a3bca46c Stavros Sachtouris
        r = self.client.container_get(meta=['incontainer'])
350 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) > 0)
351 a3bca46c Stavros Sachtouris
352 a3bca46c Stavros Sachtouris
        r = self.client.container_get(show_only_shared=True)
353 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) < fullLen)
354 a3bca46c Stavros Sachtouris
355 a3bca46c Stavros Sachtouris
        try:
356 a3bca46c Stavros Sachtouris
            r = self.client.container_get(until=1000000000)
357 a3bca46c Stavros Sachtouris
            datestring = unicode(r.headers['x-account-until-timestamp'])
358 a3bca46c Stavros Sachtouris
            self.assertEqual(u'Sun, 09 Sep 2001 01:46:40 GMT', datestring)
359 a3bca46c Stavros Sachtouris
360 a3bca46c Stavros Sachtouris
        except ClientError:
361 a3bca46c Stavros Sachtouris
362 a3bca46c Stavros Sachtouris
            pass
363 a3bca46c Stavros Sachtouris
364 a3bca46c Stavros Sachtouris
        """Check and if un/modified_since"""
365 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
366 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
367 24ff0a35 Stavros Sachtouris
            r1 = self.client.container_get(
368 1e1d6f27 Stavros Sachtouris
                if_modified_since=now_formated, success=(200, 304, 412))
369 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
370 24ff0a35 Stavros Sachtouris
            r2 = self.client.container_get(
371 1e1d6f27 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(200, 304, 412))
372 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
373 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
374 a3bca46c Stavros Sachtouris
375 a3bca46c Stavros Sachtouris
    def test_container_put(self):
376 a3bca46c Stavros Sachtouris
        """Test container_PUT"""
377 a3bca46c Stavros Sachtouris
        self._test_0050_container_put()
378 a3bca46c Stavros Sachtouris
379 a3bca46c Stavros Sachtouris
    def _test_0050_container_put(self):
380 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
381 a3bca46c Stavros Sachtouris
382 5655d560 Stavros Sachtouris
        r = self.client.create_container()
383 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
384 a3bca46c Stavros Sachtouris
385 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
386 a3bca46c Stavros Sachtouris
        cquota = r.values()[0]
387 a3bca46c Stavros Sachtouris
        newquota = 2 * int(cquota)
388 a3bca46c Stavros Sachtouris
389 5655d560 Stavros Sachtouris
        r = self.client.create_container(sizelimit=newquota)
390 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
391 a3bca46c Stavros Sachtouris
392 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
393 a3bca46c Stavros Sachtouris
        xquota = int(r.values()[0])
394 a3bca46c Stavros Sachtouris
        self.assertEqual(newquota, xquota)
395 a3bca46c Stavros Sachtouris
396 5655d560 Stavros Sachtouris
        r = self.client.create_container(versioning='auto')
397 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
398 a3bca46c Stavros Sachtouris
399 a3bca46c Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
400 a3bca46c Stavros Sachtouris
        nvers = r.values()[0]
401 a3bca46c Stavros Sachtouris
        self.assertEqual('auto', nvers)
402 a3bca46c Stavros Sachtouris
403 a3bca46c Stavros Sachtouris
        r = self.client.container_put(versioning='none')
404 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
405 a3bca46c Stavros Sachtouris
406 a3bca46c Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
407 a3bca46c Stavros Sachtouris
        nvers = r.values()[0]
408 a3bca46c Stavros Sachtouris
        self.assertEqual('none', nvers)
409 a3bca46c Stavros Sachtouris
410 5655d560 Stavros Sachtouris
        r = self.client.create_container(metadata={'m1': 'v1', 'm2': 'v2'})
411 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
412 a3bca46c Stavros Sachtouris
413 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
414 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
415 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
416 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
417 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
418 a3bca46c Stavros Sachtouris
419 a3bca46c Stavros Sachtouris
        r = self.client.container_put(metadata={'m1': '', 'm2': 'v2a'})
420 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
421 a3bca46c Stavros Sachtouris
422 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
423 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
424 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
425 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
426 a3bca46c Stavros Sachtouris
427 a3bca46c Stavros Sachtouris
        self.client.del_container_meta(self.client.container)
428 a3bca46c Stavros Sachtouris
429 a3bca46c Stavros Sachtouris
    def test_container_post(self):
430 a3bca46c Stavros Sachtouris
        """Test container_POST"""
431 a3bca46c Stavros Sachtouris
        self._test_0060_container_post()
432 a3bca46c Stavros Sachtouris
433 a3bca46c Stavros Sachtouris
    def _test_0060_container_post(self):
434 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
435 a3bca46c Stavros Sachtouris
436 a3bca46c Stavros Sachtouris
        """Simple post"""
437 a3bca46c Stavros Sachtouris
        r = self.client.container_post()
438 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
439 a3bca46c Stavros Sachtouris
440 a3bca46c Stavros Sachtouris
        """post meta"""
441 a3bca46c Stavros Sachtouris
        self.client.set_container_meta({'m1': 'v1', 'm2': 'v2'})
442 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
443 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
444 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
445 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
446 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
447 a3bca46c Stavros Sachtouris
448 a3bca46c Stavros Sachtouris
        """post/2del meta"""
449 a3bca46c Stavros Sachtouris
        r = self.client.del_container_meta('m1')
450 a3bca46c Stavros Sachtouris
        r = self.client.set_container_meta({'m2': 'v2a'})
451 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
452 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
453 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
454 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
455 a3bca46c Stavros Sachtouris
456 a3bca46c Stavros Sachtouris
        """check quota"""
457 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
458 a3bca46c Stavros Sachtouris
        cquota = r.values()[0]
459 a3bca46c Stavros Sachtouris
        newquota = 2 * int(cquota)
460 3ed6dbde Stavros Sachtouris
        r = self.client.set_container_limit(newquota)
461 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
462 a3bca46c Stavros Sachtouris
        xquota = int(r.values()[0])
463 a3bca46c Stavros Sachtouris
        self.assertEqual(newquota, xquota)
464 3ed6dbde Stavros Sachtouris
        r = self.client.set_container_limit(cquota)
465 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
466 a3bca46c Stavros Sachtouris
        xquota = r.values()[0]
467 a3bca46c Stavros Sachtouris
        self.assertEqual(cquota, xquota)
468 a3bca46c Stavros Sachtouris
469 a3bca46c Stavros Sachtouris
        """Check versioning"""
470 a3bca46c Stavros Sachtouris
        self.client.set_container_versioning('auto')
471 a3bca46c Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
472 a3bca46c Stavros Sachtouris
        nvers = r.values()[0]
473 a3bca46c Stavros Sachtouris
        self.assertEqual('auto', nvers)
474 a3bca46c Stavros Sachtouris
        self.client.set_container_versioning('none')
475 a3bca46c Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
476 a3bca46c Stavros Sachtouris
        nvers = r.values()[0]
477 a3bca46c Stavros Sachtouris
        self.assertEqual('none', nvers)
478 a3bca46c Stavros Sachtouris
479 a3bca46c Stavros Sachtouris
        """put_block uses content_type and content_length to
480 a3bca46c Stavros Sachtouris
        post blocks of data 2 container. All that in upload_object"""
481 a3bca46c Stavros Sachtouris
        """Change a file at fs"""
482 773d61ca Stavros Sachtouris
        f = self.create_large_file(1024 * 1024 * 100)
483 a3bca46c Stavros Sachtouris
        """Upload it at a directory in container"""
484 a3bca46c Stavros Sachtouris
        self.client.create_directory('dir')
485 cb010e3e Stavros Sachtouris
        r = self.client.upload_object('/dir/sample.file', f)
486 cb010e3e Stavros Sachtouris
        for term in ('content-length', 'content-type', 'x-object-version'):
487 cb010e3e Stavros Sachtouris
            self.assertTrue(term in r)
488 a3bca46c Stavros Sachtouris
        """Check if file has been uploaded"""
489 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info('/dir/sample.file')
490 a3bca46c Stavros Sachtouris
        self.assertTrue(int(r['content-length']) > 100000000)
491 a3bca46c Stavros Sachtouris
492 a3bca46c Stavros Sachtouris
        """What is tranfer_encoding? What should I check about it? """
493 a3bca46c Stavros Sachtouris
        #TODO
494 a3bca46c Stavros Sachtouris
495 a3bca46c Stavros Sachtouris
        """Check update=False"""
496 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
497 24ff0a35 Stavros Sachtouris
            'test',
498 a3bca46c Stavros Sachtouris
            update=False,
499 a3bca46c Stavros Sachtouris
            metadata={'newmeta': 'newval'})
500 a3bca46c Stavros Sachtouris
501 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info('test')
502 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-meta-newmeta' in r)
503 a3bca46c Stavros Sachtouris
        self.assertFalse('x-object-meta-incontainer' in r)
504 a3bca46c Stavros Sachtouris
505 a3bca46c Stavros Sachtouris
        r = self.client.del_container_meta('m2')
506 a3bca46c Stavros Sachtouris
507 a3bca46c Stavros Sachtouris
    def test_container_delete(self):
508 a3bca46c Stavros Sachtouris
        """Test container_DELETE"""
509 a3bca46c Stavros Sachtouris
        self._test_0070_container_delete()
510 a3bca46c Stavros Sachtouris
511 a3bca46c Stavros Sachtouris
    def _test_0070_container_delete(self):
512 a3bca46c Stavros Sachtouris
513 a3bca46c Stavros Sachtouris
        """Fail to delete a non-empty container"""
514 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
515 a3bca46c Stavros Sachtouris
        r = self.client.container_delete(success=409)
516 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 409)
517 a3bca46c Stavros Sachtouris
518 a3bca46c Stavros Sachtouris
        """Fail to delete c3 (empty) container"""
519 a3bca46c Stavros Sachtouris
        self.client.container = self.c3
520 a3bca46c Stavros Sachtouris
        r = self.client.container_delete(until='1000000000')
521 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
522 a3bca46c Stavros Sachtouris
523 a3bca46c Stavros Sachtouris
        """Delete c3 (empty) container"""
524 a3bca46c Stavros Sachtouris
        r = self.client.container_delete()
525 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
526 a3bca46c Stavros Sachtouris
527 a3bca46c Stavros Sachtouris
        """Purge container(empty a container), check versionlist"""
528 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
529 a3bca46c Stavros Sachtouris
        r = self.client.object_head('test', success=(200, 404))
530 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
531 a3bca46c Stavros Sachtouris
        self.client.del_container(delimiter='/')
532 a3bca46c Stavros Sachtouris
        r = self.client.object_head('test', success=(200, 404))
533 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
534 a3bca46c Stavros Sachtouris
        r = self.client.get_object_versionlist('test')
535 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r) > 0)
536 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r[0]) > 1)
537 a3bca46c Stavros Sachtouris
        self.client.purge_container()
538 24ff0a35 Stavros Sachtouris
        self.assertRaises(
539 1e1d6f27 Stavros Sachtouris
            ClientError, self.client.get_object_versionlist, 'test')
540 a3bca46c Stavros Sachtouris
541 a3bca46c Stavros Sachtouris
    def _test_0080_recreate_deleted_data(self):
542 a3bca46c Stavros Sachtouris
        self._init_data()
543 a3bca46c Stavros Sachtouris
544 a3bca46c Stavros Sachtouris
    def test_object_head(self):
545 a3bca46c Stavros Sachtouris
        """Test object_HEAD"""
546 a3bca46c Stavros Sachtouris
        self._test_0090_object_head()
547 a3bca46c Stavros Sachtouris
548 a3bca46c Stavros Sachtouris
    def _test_0090_object_head(self):
549 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
550 a3bca46c Stavros Sachtouris
        obj = 'test'
551 a3bca46c Stavros Sachtouris
552 a3bca46c Stavros Sachtouris
        r = self.client.object_head(obj)
553 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
554 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
555 776b275c Stavros Sachtouris
        real_version = r.headers['x-object-version']
556 a3bca46c Stavros Sachtouris
557 776b275c Stavros Sachtouris
        self.assertRaises(
558 776b275c Stavros Sachtouris
            ClientError, self.client.object_head, obj, version=-10)
559 776b275c Stavros Sachtouris
        r = self.client.object_head(obj, version=real_version)
560 776b275c Stavros Sachtouris
        self.assertEqual(r.headers['x-object-version'], real_version)
561 a3bca46c Stavros Sachtouris
562 a3bca46c Stavros Sachtouris
        r = self.client.object_head(obj, if_etag_match=etag)
563 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
564 a3bca46c Stavros Sachtouris
565 24ff0a35 Stavros Sachtouris
        r = self.client.object_head(
566 1e1d6f27 Stavros Sachtouris
            obj, if_etag_not_match=etag, success=(200, 412, 304))
567 a3bca46c Stavros Sachtouris
        self.assertNotEqual(r.status_code, 200)
568 a3bca46c Stavros Sachtouris
569 24ff0a35 Stavros Sachtouris
        r = self.client.object_head(
570 776b275c Stavros Sachtouris
            obj, version=real_version, if_etag_match=etag, success=200)
571 776b275c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
572 a3bca46c Stavros Sachtouris
573 a3bca46c Stavros Sachtouris
        """Check and if(un)modified_since"""
574 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
575 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
576 24ff0a35 Stavros Sachtouris
            r1 = self.client.object_head(
577 1e1d6f27 Stavros Sachtouris
                obj, if_modified_since=now_formated, success=(200, 304, 412))
578 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
579 24ff0a35 Stavros Sachtouris
            r2 = self.client.object_head(
580 1e1d6f27 Stavros Sachtouris
                obj, if_unmodified_since=now_formated, success=(200, 304, 412))
581 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
582 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
583 a3bca46c Stavros Sachtouris
584 a3bca46c Stavros Sachtouris
    def test_object_get(self):
585 a3bca46c Stavros Sachtouris
        """Test object_GET"""
586 a3bca46c Stavros Sachtouris
        self._test_0100_object_get()
587 a3bca46c Stavros Sachtouris
588 a3bca46c Stavros Sachtouris
    def _test_0100_object_get(self):
589 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
590 a3bca46c Stavros Sachtouris
        obj = 'test'
591 a3bca46c Stavros Sachtouris
592 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
593 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
594 a3bca46c Stavros Sachtouris
595 a3bca46c Stavros Sachtouris
        osize = int(r.headers['content-length'])
596 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
597 a3bca46c Stavros Sachtouris
598 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, hashmap=True)
599 24ff0a35 Stavros Sachtouris
        for term in ('hashes', 'block_hash', 'block_hash', 'bytes'):
600 24ff0a35 Stavros Sachtouris
            self.assertTrue(term in r.json)
601 a3bca46c Stavros Sachtouris
602 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, format='xml', hashmap=True)
603 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.text.split('hash>')), 3)
604 a3bca46c Stavros Sachtouris
605 a3bca46c Stavros Sachtouris
        rangestr = 'bytes=%s-%s' % (osize / 3, osize / 2)
606 24ff0a35 Stavros Sachtouris
        r = self.client.object_get(
607 1e1d6f27 Stavros Sachtouris
            obj, data_range=rangestr, success=(200, 206))
608 a3bca46c Stavros Sachtouris
        partsize = int(r.headers['content-length'])
609 a3bca46c Stavros Sachtouris
        self.assertTrue(0 < partsize and partsize <= 1 + osize / 3)
610 a3bca46c Stavros Sachtouris
611 a3bca46c Stavros Sachtouris
        rangestr = 'bytes=%s-%s' % (osize / 3, osize / 2)
612 24ff0a35 Stavros Sachtouris
        r = self.client.object_get(
613 1e1d6f27 Stavros Sachtouris
            obj, data_range=rangestr, if_range=True, success=(200, 206))
614 a3bca46c Stavros Sachtouris
        partsize = int(r.headers['content-length'])
615 a3bca46c Stavros Sachtouris
        self.assertTrue(0 < partsize and partsize <= 1 + osize / 3)
616 a3bca46c Stavros Sachtouris
617 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, if_etag_match=etag)
618 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
619 a3bca46c Stavros Sachtouris
620 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, if_etag_not_match=etag + 'LALALA')
621 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
622 a3bca46c Stavros Sachtouris
623 a3bca46c Stavros Sachtouris
        """Check and if(un)modified_since"""
624 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
625 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
626 24ff0a35 Stavros Sachtouris
            r1 = self.client.object_get(
627 1e1d6f27 Stavros Sachtouris
                obj, if_modified_since=now_formated, success=(200, 304, 412))
628 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
629 24ff0a35 Stavros Sachtouris
            r2 = self.client.object_get(
630 1e1d6f27 Stavros Sachtouris
                obj, if_unmodified_since=now_formated, success=(200, 304, 412))
631 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
632 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
633 a3bca46c Stavros Sachtouris
634 a3bca46c Stavros Sachtouris
        """Upload an object to download"""
635 14c72dbd Stavros Sachtouris
        container_info_cache = dict()
636 a3bca46c Stavros Sachtouris
        trg_fname = 'remotefile_%s' % self.now
637 a3bca46c Stavros Sachtouris
        f_size = 59247824
638 773d61ca Stavros Sachtouris
        src_f = self.create_large_file(f_size)
639 a3bca46c Stavros Sachtouris
        print('\tUploading...')
640 14c72dbd Stavros Sachtouris
        r = self.client.upload_object(
641 1e1d6f27 Stavros Sachtouris
            trg_fname, src_f, container_info_cache=container_info_cache)
642 a3bca46c Stavros Sachtouris
        print('\tDownloading...')
643 773d61ca Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
644 773d61ca Stavros Sachtouris
        dnl_f = self.files[-1]
645 a3bca46c Stavros Sachtouris
        self.client.download_object(trg_fname, dnl_f)
646 a3bca46c Stavros Sachtouris
647 a3bca46c Stavros Sachtouris
        print('\tCheck if files match...')
648 49cc29b2 Stavros Sachtouris
        for pos in (0, f_size / 2, f_size - 128):
649 a3bca46c Stavros Sachtouris
            src_f.seek(pos)
650 a3bca46c Stavros Sachtouris
            dnl_f.seek(pos)
651 49cc29b2 Stavros Sachtouris
            self.assertEqual(src_f.read(64), dnl_f.read(64))
652 49cc29b2 Stavros Sachtouris
653 49cc29b2 Stavros Sachtouris
        print('\tDownload KiBs to string and check again...')
654 49cc29b2 Stavros Sachtouris
        for pos in (0, f_size / 2, f_size - 256):
655 49cc29b2 Stavros Sachtouris
            src_f.seek(pos)
656 49cc29b2 Stavros Sachtouris
            tmp_s = self.client.download_to_string(
657 1e1d6f27 Stavros Sachtouris
                trg_fname, range_str='%s-%s' % (pos, (pos + 128)))
658 49cc29b2 Stavros Sachtouris
            self.assertEqual(tmp_s, src_f.read(len(tmp_s)))
659 9d502497 Stavros Sachtouris
        print('\tUploading KiBs as strings...')
660 9d502497 Stavros Sachtouris
        trg_fname = 'fromString_%s' % self.now
661 9d502497 Stavros Sachtouris
        src_size = 2 * 1024
662 9d502497 Stavros Sachtouris
        src_f.seek(0)
663 9d502497 Stavros Sachtouris
        src_str = src_f.read(src_size)
664 9d502497 Stavros Sachtouris
        self.client.upload_from_string(trg_fname, src_str)
665 9d502497 Stavros Sachtouris
        print('\tDownload as string and check...')
666 9d502497 Stavros Sachtouris
        tmp_s = self.client.download_to_string(trg_fname)
667 9d502497 Stavros Sachtouris
        self.assertEqual(tmp_s, src_str)
668 9d502497 Stavros Sachtouris
669 d187ba37 Stavros Sachtouris
        """Upload a boring file"""
670 d187ba37 Stavros Sachtouris
        trg_fname = 'boringfile_%s' % self.now
671 d187ba37 Stavros Sachtouris
        src_f = self.create_boring_file(42)
672 d187ba37 Stavros Sachtouris
        print('\tUploading boring file...')
673 14c72dbd Stavros Sachtouris
        self.client.upload_object(
674 1e1d6f27 Stavros Sachtouris
            trg_fname, src_f, container_info_cache=container_info_cache)
675 d187ba37 Stavros Sachtouris
        print('\tDownloading boring file...')
676 d187ba37 Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
677 d187ba37 Stavros Sachtouris
        dnl_f = self.files[-1]
678 d187ba37 Stavros Sachtouris
        self.client.download_object(trg_fname, dnl_f)
679 d187ba37 Stavros Sachtouris
680 d187ba37 Stavros Sachtouris
        print('\tCheck if files match...')
681 d187ba37 Stavros Sachtouris
        for i in range(42):
682 d187ba37 Stavros Sachtouris
            self.assertEqual(sample_block(src_f, i), sample_block(dnl_f, i))
683 d187ba37 Stavros Sachtouris
684 a3bca46c Stavros Sachtouris
    def test_object_put(self):
685 a3bca46c Stavros Sachtouris
        """Test object_PUT"""
686 9684f569 Stavros Sachtouris
        self._test_0150_object_put()
687 a3bca46c Stavros Sachtouris
688 9684f569 Stavros Sachtouris
    def _test_0150_object_put(self):
689 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
690 a3bca46c Stavros Sachtouris
        obj = 'another.test'
691 a3bca46c Stavros Sachtouris
692 a3bca46c Stavros Sachtouris
        self.client.create_object(obj + '.FAKE')
693 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj + '.FAKE')
694 a3bca46c Stavros Sachtouris
        self.assertEqual(r['content-type'], 'application/octet-stream')
695 a3bca46c Stavros Sachtouris
696 a3bca46c Stavros Sachtouris
        """create the object"""
697 2005b18e Stavros Sachtouris
        r = self.client.object_put(
698 2005b18e Stavros Sachtouris
            obj,
699 a3bca46c Stavros Sachtouris
            data='a',
700 a3bca46c Stavros Sachtouris
            content_type='application/octer-stream',
701 24ff0a35 Stavros Sachtouris
            permissions=dict(
702 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
703 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']),
704 24ff0a35 Stavros Sachtouris
            metadata=dict(key1='val1', key2='val2'),
705 a3bca46c Stavros Sachtouris
            content_encoding='UTF-8',
706 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
707 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
708 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
709 a3bca46c Stavros Sachtouris
710 a3bca46c Stavros Sachtouris
        """Check content-disposition"""
711 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
712 a3bca46c Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
713 a3bca46c Stavros Sachtouris
714 a3bca46c Stavros Sachtouris
        """Check permissions"""
715 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
716 a3bca46c Stavros Sachtouris
        self.assertTrue('accx:groupa' in r['read'])
717 a3bca46c Stavros Sachtouris
        self.assertTrue('u1' in r['read'])
718 a3bca46c Stavros Sachtouris
        self.assertTrue('u2' in r['write'])
719 a3bca46c Stavros Sachtouris
        self.assertTrue('u3' in r['write'])
720 a3bca46c Stavros Sachtouris
721 a3bca46c Stavros Sachtouris
        """Check metadata"""
722 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
723 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-key1'], 'val1')
724 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-key2'], 'val2')
725 a3bca46c Stavros Sachtouris
726 a3bca46c Stavros Sachtouris
        """Check public and if_etag_match"""
727 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
728 24ff0a35 Stavros Sachtouris
            obj,
729 24ff0a35 Stavros Sachtouris
            if_etag_match=etag,
730 24ff0a35 Stavros Sachtouris
            data='b',
731 24ff0a35 Stavros Sachtouris
            content_type='application/octet-stream',
732 24ff0a35 Stavros Sachtouris
            public=True)
733 a3bca46c Stavros Sachtouris
734 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
735 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r.headers)
736 a3bca46c Stavros Sachtouris
        vers2 = int(r.headers['x-object-version'])
737 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
738 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, 'b')
739 a3bca46c Stavros Sachtouris
740 a3bca46c Stavros Sachtouris
        """Check if_etag_not_match"""
741 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
742 24ff0a35 Stavros Sachtouris
            obj,
743 24ff0a35 Stavros Sachtouris
            if_etag_not_match=etag,
744 24ff0a35 Stavros Sachtouris
            data='c',
745 24ff0a35 Stavros Sachtouris
            content_type='application/octet-stream',
746 24ff0a35 Stavros Sachtouris
            success=(201, 412))
747 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 412)
748 a3bca46c Stavros Sachtouris
749 a3bca46c Stavros Sachtouris
        """Check content_type and content_length"""
750 a3bca46c Stavros Sachtouris
        tmpdir = 'dir' + unicode(self.now)
751 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
752 1e1d6f27 Stavros Sachtouris
            tmpdir, content_type='application/directory', content_length=0)
753 a3bca46c Stavros Sachtouris
754 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(tmpdir)
755 a3bca46c Stavros Sachtouris
        self.assertEqual(r['content-type'], 'application/directory')
756 a3bca46c Stavros Sachtouris
757 a3bca46c Stavros Sachtouris
        """Check copy_from, content_encoding"""
758 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
759 24ff0a35 Stavros Sachtouris
            '%s/%s' % (tmpdir, obj),
760 a3bca46c Stavros Sachtouris
            format=None,
761 a3bca46c Stavros Sachtouris
            copy_from='/%s/%s' % (self.client.container, obj),
762 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
763 a3bca46c Stavros Sachtouris
            source_account=self.client.account,
764 24ff0a35 Stavros Sachtouris
            content_length=0,
765 24ff0a35 Stavros Sachtouris
            success=201)
766 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
767 a3bca46c Stavros Sachtouris
768 a3bca46c Stavros Sachtouris
        """Test copy_object for cross-conctainer copy"""
769 24ff0a35 Stavros Sachtouris
        self.client.copy_object(
770 24ff0a35 Stavros Sachtouris
            src_container=self.c2,
771 a3bca46c Stavros Sachtouris
            src_object='%s/%s' % (tmpdir, obj),
772 a3bca46c Stavros Sachtouris
            dst_container=self.c1,
773 a3bca46c Stavros Sachtouris
            dst_object=obj)
774 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
775 a3bca46c Stavros Sachtouris
        r1 = self.client.get_object_info(obj)
776 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
777 a3bca46c Stavros Sachtouris
        r2 = self.client.get_object_info('%s/%s' % (tmpdir, obj))
778 a3bca46c Stavros Sachtouris
        self.assertEqual(r1['x-object-hash'], r2['x-object-hash'])
779 a3bca46c Stavros Sachtouris
780 a3bca46c Stavros Sachtouris
        """Check cross-container copy_from, content_encoding"""
781 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
782 a3bca46c Stavros Sachtouris
        fromstr = '/%s/%s/%s' % (self.c2, tmpdir, obj)
783 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
784 24ff0a35 Stavros Sachtouris
            obj,
785 a3bca46c Stavros Sachtouris
            format=None,
786 a3bca46c Stavros Sachtouris
            copy_from=fromstr,
787 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
788 a3bca46c Stavros Sachtouris
            source_account=self.client.account,
789 24ff0a35 Stavros Sachtouris
            content_length=0,
790 24ff0a35 Stavros Sachtouris
            success=201)
791 a3bca46c Stavros Sachtouris
792 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
793 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
794 a3bca46c Stavros Sachtouris
        self.assertEqual(r['etag'], etag)
795 a3bca46c Stavros Sachtouris
796 a3bca46c Stavros Sachtouris
        """Check source_account"""
797 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
798 a3bca46c Stavros Sachtouris
        fromstr = '/%s/%s' % (self.c1, obj)
799 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
800 24ff0a35 Stavros Sachtouris
            '%sv2' % obj,
801 a3bca46c Stavros Sachtouris
            format=None,
802 a3bca46c Stavros Sachtouris
            move_from=fromstr,
803 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
804 a3bca46c Stavros Sachtouris
            source_account='nonExistendAddress@NeverLand.com',
805 a3bca46c Stavros Sachtouris
            content_length=0,
806 a3bca46c Stavros Sachtouris
            success=(201, 403))
807 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
808 a3bca46c Stavros Sachtouris
809 a3bca46c Stavros Sachtouris
        """Check cross-container move_from"""
810 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
811 a3bca46c Stavros Sachtouris
        r1 = self.client.get_object_info(obj)
812 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
813 24ff0a35 Stavros Sachtouris
        self.client.move_object(
814 24ff0a35 Stavros Sachtouris
            src_container=self.c1,
815 a3bca46c Stavros Sachtouris
            src_object=obj,
816 a3bca46c Stavros Sachtouris
            dst_container=self.c2,
817 a3bca46c Stavros Sachtouris
            dst_object=obj + 'v0')
818 a3bca46c Stavros Sachtouris
        r0 = self.client.get_object_info(obj + 'v0')
819 a3bca46c Stavros Sachtouris
        self.assertEqual(r1['x-object-hash'], r0['x-object-hash'])
820 a3bca46c Stavros Sachtouris
821 a3bca46c Stavros Sachtouris
        """Check move_from"""
822 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
823 24ff0a35 Stavros Sachtouris
            '%sv1' % obj,
824 a3bca46c Stavros Sachtouris
            format=None,
825 a3bca46c Stavros Sachtouris
            move_from='/%s/%s' % (self.c2, obj),
826 a3bca46c Stavros Sachtouris
            source_version=vers2,
827 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
828 a3bca46c Stavros Sachtouris
            content_length=0, success=201)
829 a3bca46c Stavros Sachtouris
830 a3bca46c Stavros Sachtouris
        """Check manifest"""
831 a3bca46c Stavros Sachtouris
        mobj = 'manifest.test'
832 a3bca46c Stavros Sachtouris
        txt = ''
833 a3bca46c Stavros Sachtouris
        for i in range(10):
834 a3bca46c Stavros Sachtouris
            txt += '%s' % i
835 24ff0a35 Stavros Sachtouris
            r = self.client.object_put(
836 24ff0a35 Stavros Sachtouris
                '%s/%s' % (mobj, i),
837 a3bca46c Stavros Sachtouris
                data='%s' % i,
838 a3bca46c Stavros Sachtouris
                content_length=1,
839 a3bca46c Stavros Sachtouris
                success=201,
840 a3bca46c Stavros Sachtouris
                content_type='application/octet-stream',
841 a3bca46c Stavros Sachtouris
                content_encoding='application/octet-stream')
842 a3bca46c Stavros Sachtouris
843 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
844 24ff0a35 Stavros Sachtouris
            mobj,
845 a3bca46c Stavros Sachtouris
            content_length=0,
846 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
847 a3bca46c Stavros Sachtouris
            manifest='%s/%s' % (self.client.container, mobj))
848 a3bca46c Stavros Sachtouris
849 a3bca46c Stavros Sachtouris
        r = self.client.object_get(mobj)
850 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, txt)
851 a3bca46c Stavros Sachtouris
852 a3bca46c Stavros Sachtouris
        """Upload a local file with one request"""
853 773d61ca Stavros Sachtouris
        newf = self.create_large_file(1024 * 10)
854 a3bca46c Stavros Sachtouris
        self.client.upload_object('sample.file', newf)
855 a3bca46c Stavros Sachtouris
        """Check if file has been uploaded"""
856 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info('sample.file')
857 7f87da8b Stavros Sachtouris
        self.assertEqual(int(r['content-length']), 10240)
858 a3bca46c Stavros Sachtouris
859 a3bca46c Stavros Sachtouris
        """Some problems with transfer-encoding?"""
860 a3bca46c Stavros Sachtouris
861 a3bca46c Stavros Sachtouris
    def test_object_copy(self):
862 a3bca46c Stavros Sachtouris
        """Test object_COPY"""
863 a3bca46c Stavros Sachtouris
        self._test_0110_object_copy()
864 a3bca46c Stavros Sachtouris
865 a3bca46c Stavros Sachtouris
    def _test_0110_object_copy(self):
866 3a066af4 Stavros Sachtouris
        #  TODO: check with source_account option
867 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
868 a3bca46c Stavros Sachtouris
        obj = 'test2'
869 a3bca46c Stavros Sachtouris
870 a3bca46c Stavros Sachtouris
        data = '{"key1":"val1", "key2":"val2"}'
871 2005b18e Stavros Sachtouris
        r = self.client.object_put(
872 2005b18e Stavros Sachtouris
            '%sorig' % obj,
873 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
874 a3bca46c Stavros Sachtouris
            data=data,
875 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
876 24ff0a35 Stavros Sachtouris
            permissions=dict(
877 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
878 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']),
879 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
880 a3bca46c Stavros Sachtouris
881 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
882 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
883 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.client.container, obj),
884 a3bca46c Stavros Sachtouris
            ignore_content_type=False, content_type='application/json',
885 a3bca46c Stavros Sachtouris
            metadata={'mkey2': 'mval2a', 'mkey3': 'mval3'},
886 a3bca46c Stavros Sachtouris
            permissions={'write': ['u5', 'accX:groupB']})
887 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
888 a3bca46c Stavros Sachtouris
889 a3bca46c Stavros Sachtouris
        """Check content-disposition"""
890 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
891 a3bca46c Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
892 a3bca46c Stavros Sachtouris
893 a3bca46c Stavros Sachtouris
        """Check Metadata"""
894 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
895 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
896 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
897 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
898 a3bca46c Stavros Sachtouris
899 a3bca46c Stavros Sachtouris
        """Check permissions"""
900 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
901 a3bca46c Stavros Sachtouris
        self.assertFalse('read' in r or 'u2' in r['write'])
902 a3bca46c Stavros Sachtouris
        self.assertTrue('accx:groupb' in r['write'])
903 a3bca46c Stavros Sachtouris
904 a3bca46c Stavros Sachtouris
        """Check destination account"""
905 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
906 24ff0a35 Stavros Sachtouris
            obj,
907 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
908 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
909 a3bca46c Stavros Sachtouris
            content_type='application/json',
910 a3bca46c Stavros Sachtouris
            destination_account='nonExistendAddress@NeverLand.com',
911 9684f569 Stavros Sachtouris
            success=(201, 404))
912 9684f569 Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
913 a3bca46c Stavros Sachtouris
914 a3bca46c Stavros Sachtouris
        """Check destination being another container
915 a3bca46c Stavros Sachtouris
        and also content_type and content encoding"""
916 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
917 24ff0a35 Stavros Sachtouris
            obj,
918 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
919 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
920 a3bca46c Stavros Sachtouris
            content_type='application/json')
921 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
922 24ff0a35 Stavros Sachtouris
        self.assertEqual(
923 24ff0a35 Stavros Sachtouris
            r.headers['content-type'],
924 a3bca46c Stavros Sachtouris
            'application/json; charset=UTF-8')
925 a3bca46c Stavros Sachtouris
926 a3bca46c Stavros Sachtouris
        """Check ignore_content_type and content_type"""
927 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
928 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
929 a3bca46c Stavros Sachtouris
        ctype = r.headers['content-type']
930 a3bca46c Stavros Sachtouris
        self.assertEqual(ctype, 'application/json')
931 a3bca46c Stavros Sachtouris
932 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
933 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
934 a3bca46c Stavros Sachtouris
            destination='/%s/%s0' % (self.client.container, obj),
935 a3bca46c Stavros Sachtouris
            ignore_content_type=True,
936 a3bca46c Stavros Sachtouris
            content_type='application/json')
937 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
938 a3bca46c Stavros Sachtouris
        self.assertNotEqual(r.headers['content-type'], 'application/json')
939 a3bca46c Stavros Sachtouris
940 a3bca46c Stavros Sachtouris
        """Check if_etag_(not_)match"""
941 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
942 24ff0a35 Stavros Sachtouris
            obj,
943 a3bca46c Stavros Sachtouris
            destination='/%s/%s1' % (self.client.container, obj),
944 a3bca46c Stavros Sachtouris
            if_etag_match=etag)
945 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
946 a3bca46c Stavros Sachtouris
947 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
948 24ff0a35 Stavros Sachtouris
            obj,
949 a3bca46c Stavros Sachtouris
            destination='/%s/%s2' % (self.client.container, obj),
950 a3bca46c Stavros Sachtouris
            if_etag_not_match='lalala')
951 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
952 a3bca46c Stavros Sachtouris
        vers2 = r.headers['x-object-version']
953 a3bca46c Stavros Sachtouris
954 a3bca46c Stavros Sachtouris
        """Check source_version, public and format """
955 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
956 24ff0a35 Stavros Sachtouris
            '%s2' % obj,
957 a3bca46c Stavros Sachtouris
            destination='/%s/%s3' % (self.client.container, obj),
958 a3bca46c Stavros Sachtouris
            source_version=vers2,
959 a3bca46c Stavros Sachtouris
            format='xml',
960 a3bca46c Stavros Sachtouris
            public=True)
961 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
962 a3bca46c Stavros Sachtouris
        self.assertTrue(r.headers['content-type'].index('xml') > 0)
963 a3bca46c Stavros Sachtouris
964 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj + '3')
965 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
966 a3bca46c Stavros Sachtouris
967 a3bca46c Stavros Sachtouris
    def test_object_move(self):
968 a3bca46c Stavros Sachtouris
        """Test object_MOVE"""
969 a3bca46c Stavros Sachtouris
        self._test_0120_object_move()
970 a3bca46c Stavros Sachtouris
971 a3bca46c Stavros Sachtouris
    def _test_0120_object_move(self):
972 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
973 a3bca46c Stavros Sachtouris
        obj = 'test2'
974 a3bca46c Stavros Sachtouris
975 a3bca46c Stavros Sachtouris
        data = '{"key1": "val1", "key2": "val2"}'
976 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
977 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
978 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
979 a3bca46c Stavros Sachtouris
            data=data,
980 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
981 24ff0a35 Stavros Sachtouris
            permissions=dict(
982 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
983 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']))
984 a3bca46c Stavros Sachtouris
985 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
986 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
987 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.client.container, obj),
988 a3bca46c Stavros Sachtouris
            ignore_content_type=False,
989 a3bca46c Stavros Sachtouris
            content_type='application/json',
990 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey2='mval2a', mkey3='mval3'),
991 24ff0a35 Stavros Sachtouris
            permissions=dict(write=['u5', 'accX:groupB']))
992 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
993 a3bca46c Stavros Sachtouris
994 a3bca46c Stavros Sachtouris
        """Check Metadata"""
995 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
996 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
997 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
998 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
999 a3bca46c Stavros Sachtouris
1000 a3bca46c Stavros Sachtouris
        """Check permissions"""
1001 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1002 a3bca46c Stavros Sachtouris
        self.assertFalse('read' in r)
1003 a3bca46c Stavros Sachtouris
        self.assertTrue('u5' in r['write'])
1004 a3bca46c Stavros Sachtouris
        self.assertTrue('accx:groupb' in r['write'])
1005 a3bca46c Stavros Sachtouris
1006 a3bca46c Stavros Sachtouris
        """Check destination account"""
1007 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1008 24ff0a35 Stavros Sachtouris
            obj,
1009 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
1010 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
1011 a3bca46c Stavros Sachtouris
            content_type='application/json',
1012 a3bca46c Stavros Sachtouris
            destination_account='nonExistendAddress@NeverLand.com',
1013 9684f569 Stavros Sachtouris
            success=(201, 404))
1014 9684f569 Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
1015 a3bca46c Stavros Sachtouris
1016 a3bca46c Stavros Sachtouris
        """Check destination being another container and also
1017 a3bca46c Stavros Sachtouris
        content_type, content_disposition and content encoding"""
1018 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1019 24ff0a35 Stavros Sachtouris
            obj,
1020 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
1021 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
1022 a3bca46c Stavros Sachtouris
            content_type='application/json',
1023 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
1024 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1025 24ff0a35 Stavros Sachtouris
        self.assertEqual(
1026 24ff0a35 Stavros Sachtouris
            r.headers['content-type'],
1027 a3bca46c Stavros Sachtouris
            'application/json; charset=UTF-8')
1028 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
1029 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1030 24ff0a35 Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
1031 24ff0a35 Stavros Sachtouris
        self.assertTrue('fname.ext' in r['content-disposition'])
1032 a3bca46c Stavros Sachtouris
        etag = r['etag']
1033 a3bca46c Stavros Sachtouris
        ctype = r['content-type']
1034 a3bca46c Stavros Sachtouris
        self.assertEqual(ctype, 'application/json')
1035 a3bca46c Stavros Sachtouris
1036 a3bca46c Stavros Sachtouris
        """Check ignore_content_type and content_type"""
1037 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1038 24ff0a35 Stavros Sachtouris
            obj,
1039 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c2, obj),
1040 a3bca46c Stavros Sachtouris
            ignore_content_type=True,
1041 a3bca46c Stavros Sachtouris
            content_type='application/json')
1042 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1043 a3bca46c Stavros Sachtouris
        self.assertNotEqual(r.headers['content-type'], 'application/json')
1044 a3bca46c Stavros Sachtouris
1045 a3bca46c Stavros Sachtouris
        """Check if_etag_(not_)match"""
1046 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
1047 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1048 24ff0a35 Stavros Sachtouris
            obj,
1049 a3bca46c Stavros Sachtouris
            destination='/%s/%s0' % (self.client.container, obj),
1050 a3bca46c Stavros Sachtouris
            if_etag_match=etag)
1051 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1052 a3bca46c Stavros Sachtouris
1053 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1054 24ff0a35 Stavros Sachtouris
            '%s0' % obj,
1055 a3bca46c Stavros Sachtouris
            destination='/%s/%s1' % (self.client.container, obj),
1056 a3bca46c Stavros Sachtouris
            if_etag_not_match='lalala')
1057 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1058 a3bca46c Stavros Sachtouris
1059 a3bca46c Stavros Sachtouris
        """Check public and format """
1060 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1061 24ff0a35 Stavros Sachtouris
            '%s1' % obj,
1062 a3bca46c Stavros Sachtouris
            destination='/%s/%s2' % (self.client.container, obj),
1063 24ff0a35 Stavros Sachtouris
            format='xml',
1064 24ff0a35 Stavros Sachtouris
            public=True)
1065 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1066 a3bca46c Stavros Sachtouris
        self.assertTrue(r.headers['content-type'].index('xml') > 0)
1067 a3bca46c Stavros Sachtouris
1068 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj + '2')
1069 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
1070 a3bca46c Stavros Sachtouris
1071 a3bca46c Stavros Sachtouris
    def test_object_post(self):
1072 a3bca46c Stavros Sachtouris
        """Test object_POST"""
1073 a3bca46c Stavros Sachtouris
        self._test_0130_object_post()
1074 a3bca46c Stavros Sachtouris
1075 a3bca46c Stavros Sachtouris
    def _test_0130_object_post(self):
1076 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
1077 a3bca46c Stavros Sachtouris
        obj = 'test2'
1078 b773795c Stavros Sachtouris
1079 a3bca46c Stavros Sachtouris
        """create a filesystem file"""
1080 773d61ca Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
1081 773d61ca Stavros Sachtouris
        newf = self.files[-1]
1082 24ff0a35 Stavros Sachtouris
        newf.writelines([
1083 24ff0a35 Stavros Sachtouris
            'ello!\n',
1084 a3bca46c Stavros Sachtouris
            'This is a test line\n',
1085 a3bca46c Stavros Sachtouris
            'inside a test file\n'])
1086 b773795c Stavros Sachtouris
1087 a3bca46c Stavros Sachtouris
        """create a file on container"""
1088 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
1089 24ff0a35 Stavros Sachtouris
            obj,
1090 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
1091 a3bca46c Stavros Sachtouris
            data='H',
1092 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
1093 24ff0a35 Stavros Sachtouris
            permissions=dict(
1094 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
1095 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']))
1096 a3bca46c Stavros Sachtouris
1097 79b4f177 Stavros Sachtouris
        """Append livetest update, content_[range|type|length]"""
1098 773d61ca Stavros Sachtouris
        newf.seek(0)
1099 a3bca46c Stavros Sachtouris
        self.client.append_object(obj, newf)
1100 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1101 a3bca46c Stavros Sachtouris
        self.assertTrue(r.text.startswith('Hello!'))
1102 a3bca46c Stavros Sachtouris
1103 f5f2dc53 Stavros Sachtouris
        """Overwrite livetest update,
1104 a3bca46c Stavros Sachtouris
            content_type, content_length, content_range
1105 a3bca46c Stavros Sachtouris
        """
1106 a3bca46c Stavros Sachtouris
        newf.seek(0)
1107 a3bca46c Stavros Sachtouris
        r = self.client.overwrite_object(obj, 0, 10, newf)
1108 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1109 a3bca46c Stavros Sachtouris
        self.assertTrue(r.text.startswith('ello!'))
1110 a3bca46c Stavros Sachtouris
1111 f5f2dc53 Stavros Sachtouris
        """Truncate livetest update,
1112 a3bca46c Stavros Sachtouris
            content_range, content_type, object_bytes and source_object"""
1113 a3bca46c Stavros Sachtouris
        r = self.client.truncate_object(obj, 5)
1114 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1115 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, 'ello!')
1116 a3bca46c Stavros Sachtouris
1117 a3bca46c Stavros Sachtouris
        """Check metadata"""
1118 a3bca46c Stavros Sachtouris
        self.client.set_object_meta(obj, {'mkey2': 'mval2a', 'mkey3': 'mval3'})
1119 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
1120 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
1121 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
1122 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
1123 a3bca46c Stavros Sachtouris
        self.client.del_object_meta(obj, 'mkey1')
1124 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
1125 a3bca46c Stavros Sachtouris
        self.assertFalse('x-object-meta-mkey1' in r)
1126 a3bca46c Stavros Sachtouris
1127 a3bca46c Stavros Sachtouris
        """Check permissions"""
1128 24ff0a35 Stavros Sachtouris
        self.client.set_object_sharing(
1129 1e1d6f27 Stavros Sachtouris
            obj, read_permission=['u4', 'u5'], write_permission=['u4'])
1130 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1131 a3bca46c Stavros Sachtouris
        self.assertTrue('read' in r)
1132 a3bca46c Stavros Sachtouris
        self.assertTrue('u5' in r['read'])
1133 a3bca46c Stavros Sachtouris
        self.assertTrue('write' in r)
1134 a3bca46c Stavros Sachtouris
        self.assertTrue('u4' in r['write'])
1135 a3bca46c Stavros Sachtouris
        self.client.del_object_sharing(obj)
1136 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1137 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r) == 0)
1138 a3bca46c Stavros Sachtouris
1139 a3bca46c Stavros Sachtouris
        """Check publish"""
1140 a3bca46c Stavros Sachtouris
        self.client.publish_object(obj)
1141 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1142 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
1143 a3bca46c Stavros Sachtouris
        self.client.unpublish_object(obj)
1144 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1145 a3bca46c Stavros Sachtouris
        self.assertFalse('x-object-public' in r)
1146 a3bca46c Stavros Sachtouris
1147 a3bca46c Stavros Sachtouris
        """Check if_etag_(not)match"""
1148 a3bca46c Stavros Sachtouris
        etag = r['etag']
1149 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1150 24ff0a35 Stavros Sachtouris
            obj,
1151 a3bca46c Stavros Sachtouris
            update=True,
1152 a3bca46c Stavros Sachtouris
            public=True,
1153 a3bca46c Stavros Sachtouris
            if_etag_not_match=etag,
1154 a3bca46c Stavros Sachtouris
            success=(412, 202, 204))
1155 b773795c Stavros Sachtouris
        #self.assertEqual(r.status_code, 412)
1156 a3bca46c Stavros Sachtouris
1157 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1158 24ff0a35 Stavros Sachtouris
            obj,
1159 24ff0a35 Stavros Sachtouris
            update=True,
1160 24ff0a35 Stavros Sachtouris
            public=True,
1161 24ff0a35 Stavros Sachtouris
            if_etag_match=etag,
1162 24ff0a35 Stavros Sachtouris
            content_encoding='application/json')
1163 a3bca46c Stavros Sachtouris
1164 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1165 a3bca46c Stavros Sachtouris
        helloVersion = r['x-object-version']
1166 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
1167 a3bca46c Stavros Sachtouris
        self.assertEqual(r['content-encoding'], 'application/json')
1168 a3bca46c Stavros Sachtouris
1169 a3bca46c Stavros Sachtouris
        """Check source_version and source_account and content_disposition"""
1170 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1171 24ff0a35 Stavros Sachtouris
            obj,
1172 a3bca46c Stavros Sachtouris
            update=True,
1173 a3bca46c Stavros Sachtouris
            content_type='application/octet-srteam',
1174 a3bca46c Stavros Sachtouris
            content_length=5,
1175 a3bca46c Stavros Sachtouris
            content_range='bytes 1-5/*',
1176 a3bca46c Stavros Sachtouris
            source_object='/%s/%s' % (self.c2, obj),
1177 a3bca46c Stavros Sachtouris
            source_account='thisAccountWillNeverExist@adminland.com',
1178 a3bca46c Stavros Sachtouris
            source_version=helloVersion,
1179 a3bca46c Stavros Sachtouris
            data='12345',
1180 a3bca46c Stavros Sachtouris
            success=(403, 202, 204))
1181 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
1182 a3bca46c Stavros Sachtouris
1183 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1184 24ff0a35 Stavros Sachtouris
            obj,
1185 a3bca46c Stavros Sachtouris
            update=True,
1186 a3bca46c Stavros Sachtouris
            content_type='application/octet-srteam',
1187 a3bca46c Stavros Sachtouris
            content_length=5,
1188 a3bca46c Stavros Sachtouris
            content_range='bytes 1-5/*',
1189 a3bca46c Stavros Sachtouris
            source_object='/%s/%s' % (self.c2, obj),
1190 a3bca46c Stavros Sachtouris
            source_account=self.client.account,
1191 a3bca46c Stavros Sachtouris
            source_version=helloVersion,
1192 a3bca46c Stavros Sachtouris
            data='12345',
1193 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
1194 a3bca46c Stavros Sachtouris
1195 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1196 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, 'eello!')
1197 24ff0a35 Stavros Sachtouris
        self.assertTrue('content-disposition' in r.headers)
1198 24ff0a35 Stavros Sachtouris
        self.assertTrue('fname.ext' in r.headers['content-disposition'])
1199 a3bca46c Stavros Sachtouris
1200 a3bca46c Stavros Sachtouris
        """Check manifest"""
1201 a3bca46c Stavros Sachtouris
        mobj = 'manifest.test'
1202 a3bca46c Stavros Sachtouris
        txt = ''
1203 a3bca46c Stavros Sachtouris
        for i in range(10):
1204 a3bca46c Stavros Sachtouris
            txt += '%s' % i
1205 24ff0a35 Stavros Sachtouris
            r = self.client.object_put(
1206 24ff0a35 Stavros Sachtouris
                '%s/%s' % (mobj, i),
1207 24ff0a35 Stavros Sachtouris
                data='%s' % i,
1208 24ff0a35 Stavros Sachtouris
                content_length=1,
1209 24ff0a35 Stavros Sachtouris
                success=201,
1210 24ff0a35 Stavros Sachtouris
                content_encoding='application/octet-stream',
1211 24ff0a35 Stavros Sachtouris
                content_type='application/octet-stream')
1212 a3bca46c Stavros Sachtouris
1213 24ff0a35 Stavros Sachtouris
        self.client.create_object_by_manifestation(
1214 1e1d6f27 Stavros Sachtouris
            mobj, content_type='application/octet-stream')
1215 a3bca46c Stavros Sachtouris
1216 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1217 1e1d6f27 Stavros Sachtouris
            mobj, manifest='%s/%s' % (self.client.container, mobj))
1218 a3bca46c Stavros Sachtouris
1219 a3bca46c Stavros Sachtouris
        r = self.client.object_get(mobj)
1220 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, txt)
1221 a3bca46c Stavros Sachtouris
1222 a3bca46c Stavros Sachtouris
        """We need to check transfer_encoding """
1223 a3bca46c Stavros Sachtouris
1224 a3bca46c Stavros Sachtouris
    def test_object_delete(self):
1225 a3bca46c Stavros Sachtouris
        """Test object_DELETE"""
1226 a3bca46c Stavros Sachtouris
        self._test_0140_object_delete()
1227 a3bca46c Stavros Sachtouris
1228 a3bca46c Stavros Sachtouris
    def _test_0140_object_delete(self):
1229 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
1230 a3bca46c Stavros Sachtouris
        obj = 'test2'
1231 a3bca46c Stavros Sachtouris
        """create a file on container"""
1232 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
1233 24ff0a35 Stavros Sachtouris
            obj,
1234 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
1235 a3bca46c Stavros Sachtouris
            data='H',
1236 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
1237 24ff0a35 Stavros Sachtouris
            permissions=dict(
1238 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
1239 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']))
1240 a3bca46c Stavros Sachtouris
1241 a3bca46c Stavros Sachtouris
        """Check with false until"""
1242 a3bca46c Stavros Sachtouris
        r = self.client.object_delete(obj, until=1000000)
1243 a3bca46c Stavros Sachtouris
1244 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, success=(200, 404))
1245 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1246 a3bca46c Stavros Sachtouris
1247 a3bca46c Stavros Sachtouris
        """Check normal case"""
1248 a3bca46c Stavros Sachtouris
        r = self.client.object_delete(obj)
1249 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
1250 a3bca46c Stavros Sachtouris
1251 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, success=(200, 404))
1252 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
1253 a3bca46c Stavros Sachtouris
1254 773d61ca Stavros Sachtouris
    def create_large_file(self, size):
1255 a3bca46c Stavros Sachtouris
        """Create a large file at fs"""
1256 776b275c Stavros Sachtouris
        print
1257 773d61ca Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
1258 773d61ca Stavros Sachtouris
        f = self.files[-1]
1259 773d61ca Stavros Sachtouris
        Ki = size / 8
1260 7f87da8b Stavros Sachtouris
        bytelist = [b * Ki for b in range(size / Ki)]
1261 773d61ca Stavros Sachtouris
1262 773d61ca Stavros Sachtouris
        def append2file(step):
1263 773d61ca Stavros Sachtouris
            f.seek(step)
1264 773d61ca Stavros Sachtouris
            f.write(urandom(Ki))
1265 773d61ca Stavros Sachtouris
            f.flush()
1266 773d61ca Stavros Sachtouris
        self.do_with_progress_bar(
1267 773d61ca Stavros Sachtouris
            append2file,
1268 773d61ca Stavros Sachtouris
            ' create rand file %s (%sB): ' % (f.name, size),
1269 773d61ca Stavros Sachtouris
            bytelist)
1270 773d61ca Stavros Sachtouris
        f.seek(0)
1271 773d61ca Stavros Sachtouris
        return f
1272 d187ba37 Stavros Sachtouris
1273 d187ba37 Stavros Sachtouris
    def create_boring_file(self, num_of_blocks):
1274 d187ba37 Stavros Sachtouris
        """Create a file with some blocks being the same"""
1275 d187ba37 Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
1276 d187ba37 Stavros Sachtouris
        tmpFile = self.files[-1]
1277 d187ba37 Stavros Sachtouris
        block_size = 4 * 1024 * 1024
1278 d187ba37 Stavros Sachtouris
        print('\n\tCreate boring file of %s blocks' % num_of_blocks)
1279 d187ba37 Stavros Sachtouris
        chars = chargen()
1280 d187ba37 Stavros Sachtouris
        while num_of_blocks:
1281 d187ba37 Stavros Sachtouris
            fslice = 3 if num_of_blocks > 3 else num_of_blocks
1282 d187ba37 Stavros Sachtouris
            tmpFile.write(fslice * block_size * chars.next())
1283 d187ba37 Stavros Sachtouris
            num_of_blocks -= fslice
1284 d187ba37 Stavros Sachtouris
        print('\t\tDone')
1285 d187ba37 Stavros Sachtouris
        tmpFile.seek(0)
1286 d187ba37 Stavros Sachtouris
        return tmpFile