Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / livetest / pithos.py @ 776b275c

History | View | Annotate | Download (46.4 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 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r) > 0)
228 a3bca46c Stavros Sachtouris
229 a3bca46c Stavros Sachtouris
    def test_account_post(self):
230 a3bca46c Stavros Sachtouris
        """Test account_POST"""
231 a3bca46c Stavros Sachtouris
        self._test_0030_account_post()
232 a3bca46c Stavros Sachtouris
233 a3bca46c Stavros Sachtouris
    def _test_0030_account_post(self):
234 a3bca46c Stavros Sachtouris
        r = self.client.account_post()
235 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
236 a3bca46c Stavros Sachtouris
        grpName = 'grp' + unicode(self.now)
237 a3bca46c Stavros Sachtouris
238 a3bca46c Stavros Sachtouris
        """Method set/del_account_meta and set_account_groupcall use
239 a3bca46c Stavros Sachtouris
            account_post internally
240 a3bca46c Stavros Sachtouris
        """
241 494fb220 Stavros Sachtouris
        u1 = self.client.account
242 fb674626 Stavros Sachtouris
        #  Invalid display name
243 023230b5 Stavros Sachtouris
        u2 = '1nc0r3c7-d15p14y-n4m3'
244 fb674626 Stavros Sachtouris
        #  valid display name
245 fb674626 Stavros Sachtouris
        u3 = '6488c1b2-cb06-40a8-a02a-d474b8d29c59'
246 023230b5 Stavros Sachtouris
        self.assertRaises(
247 023230b5 Stavros Sachtouris
            ClientError,
248 023230b5 Stavros Sachtouris
            self.client.set_account_group,
249 023230b5 Stavros Sachtouris
            grpName, [u1, u2])
250 023230b5 Stavros Sachtouris
        self.client.set_account_group(grpName, [u1])
251 a3bca46c Stavros Sachtouris
        r = self.client.get_account_group()
252 023230b5 Stavros Sachtouris
        self.assertEqual(r['x-account-group-' + grpName], '%s' % u1)
253 fb674626 Stavros Sachtouris
        try:
254 fb674626 Stavros Sachtouris
            self.client.set_account_group(grpName, [u1, u3])
255 fb674626 Stavros Sachtouris
            r = self.client.get_account_group()
256 fb674626 Stavros Sachtouris
            self.assertEqual(
257 1e1d6f27 Stavros Sachtouris
                r['x-account-group-' + grpName], '%s,%s' % (u1, u3))
258 fb674626 Stavros Sachtouris
        except:
259 fb674626 Stavros Sachtouris
            print('\tInvalid user id %s (it is ok, though)' % u3)
260 a3bca46c Stavros Sachtouris
        self.client.del_account_group(grpName)
261 a3bca46c Stavros Sachtouris
        r = self.client.get_account_group()
262 a3bca46c Stavros Sachtouris
        self.assertTrue('x-account-group-' + grpName not in r)
263 a3bca46c Stavros Sachtouris
264 a3bca46c Stavros Sachtouris
        mprefix = 'meta' + unicode(self.now)
265 24ff0a35 Stavros Sachtouris
        self.client.set_account_meta({
266 1e1d6f27 Stavros Sachtouris
            mprefix + '1': 'v1', mprefix + '2': 'v2'})
267 a3bca46c Stavros Sachtouris
        r = self.client.get_account_meta()
268 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '1'], 'v1')
269 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '2'], 'v2')
270 a3bca46c Stavros Sachtouris
271 a3bca46c Stavros Sachtouris
        self.client.del_account_meta(mprefix + '1')
272 a3bca46c Stavros Sachtouris
        r = self.client.get_account_meta()
273 a3bca46c Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '1' not in r)
274 a3bca46c Stavros Sachtouris
275 a3bca46c Stavros Sachtouris
        self.client.del_account_meta(mprefix + '2')
276 a3bca46c Stavros Sachtouris
        r = self.client.get_account_meta()
277 a3bca46c Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '2' not in r)
278 a3bca46c Stavros Sachtouris
279 a3bca46c Stavros Sachtouris
        """Missing testing for quota, versioning, because normally
280 a3bca46c Stavros Sachtouris
        you don't have permissions to modify those at account level
281 a3bca46c Stavros Sachtouris
        """
282 a3bca46c Stavros Sachtouris
283 3ed6dbde Stavros Sachtouris
        #newquota = 1000000
284 3ed6dbde Stavros Sachtouris
        #self.client.set_account_quota(newquota)
285 a3bca46c Stavros Sachtouris
        #r = self.client.get_account_info()
286 a3bca46c Stavros Sachtouris
        #print(unicode(r))
287 a3bca46c Stavros Sachtouris
        #r = self.client.get_account_quota()
288 a3bca46c Stavros Sachtouris
        #self.assertEqual(r['x-account-policy-quota'], newquota)
289 df0045d8 Stavros Sachtouris
        #self.client.set_account_versioning('auto')
290 a3bca46c Stavros Sachtouris
291 a3bca46c Stavros Sachtouris
    def test_container_head(self):
292 a3bca46c Stavros Sachtouris
        """Test container_HEAD"""
293 a3bca46c Stavros Sachtouris
        self._test_0040_container_head()
294 a3bca46c Stavros Sachtouris
295 a3bca46c Stavros Sachtouris
    def _test_0040_container_head(self):
296 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
297 a3bca46c Stavros Sachtouris
298 a3bca46c Stavros Sachtouris
        r = self.client.container_head()
299 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
300 a3bca46c Stavros Sachtouris
301 a3bca46c Stavros Sachtouris
        """Check until"""
302 a3bca46c Stavros Sachtouris
        r = self.client.container_head(until=1000000, success=(204, 404))
303 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
304 a3bca46c Stavros Sachtouris
305 a3bca46c Stavros Sachtouris
        """Check and if(un)modified_since"""
306 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
307 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
308 24ff0a35 Stavros Sachtouris
            r1 = self.client.container_head(
309 1e1d6f27 Stavros Sachtouris
                if_modified_since=now_formated, success=(204, 304, 412))
310 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
311 24ff0a35 Stavros Sachtouris
            r2 = self.client.container_head(
312 1e1d6f27 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(204, 304, 412))
313 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
314 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
315 a3bca46c Stavros Sachtouris
316 a3bca46c Stavros Sachtouris
        """Check container object meta"""
317 a3bca46c Stavros Sachtouris
        r = self.client.get_container_object_meta()
318 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-object-meta'], 'Incontainer')
319 a3bca46c Stavros Sachtouris
320 a3bca46c Stavros Sachtouris
    def test_container_get(self):
321 a3bca46c Stavros Sachtouris
        """Test container_GET"""
322 a3bca46c Stavros Sachtouris
        self._test_0050_container_get()
323 a3bca46c Stavros Sachtouris
324 a3bca46c Stavros Sachtouris
    def _test_0050_container_get(self):
325 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
326 a3bca46c Stavros Sachtouris
327 a3bca46c Stavros Sachtouris
        r = self.client.container_get()
328 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
329 a3bca46c Stavros Sachtouris
        fullLen = len(r.json)
330 a3bca46c Stavros Sachtouris
331 a3bca46c Stavros Sachtouris
        r = self.client.container_get(prefix='test')
332 a3bca46c Stavros Sachtouris
        lalobjects = [obj for obj in r.json if obj['name'].startswith('test')]
333 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
334 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.json), len(lalobjects))
335 a3bca46c Stavros Sachtouris
336 a3bca46c Stavros Sachtouris
        r = self.client.container_get(limit=1)
337 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.json), 1)
338 a3bca46c Stavros Sachtouris
339 a3bca46c Stavros Sachtouris
        r = self.client.container_get(marker='another')
340 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
341 a3bca46c Stavros Sachtouris
        neobjects = [obj for obj in r.json if obj['name'] > 'another']
342 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.json), len(neobjects))
343 a3bca46c Stavros Sachtouris
344 a3bca46c Stavros Sachtouris
        r = self.client.container_get(prefix='another.test', delimiter='.')
345 a3bca46c Stavros Sachtouris
        self.assertTrue(fullLen > len(r.json))
346 a3bca46c Stavros Sachtouris
347 a3bca46c Stavros Sachtouris
        r = self.client.container_get(path='/')
348 a3bca46c Stavros Sachtouris
        self.assertEqual(fullLen, len(r.json))
349 a3bca46c Stavros Sachtouris
350 a3bca46c Stavros Sachtouris
        r = self.client.container_get(format='xml')
351 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text.split()[4], 'name="' + self.c1 + '">')
352 a3bca46c Stavros Sachtouris
353 a3bca46c Stavros Sachtouris
        r = self.client.container_get(meta=['incontainer'])
354 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) > 0)
355 a3bca46c Stavros Sachtouris
356 a3bca46c Stavros Sachtouris
        r = self.client.container_get(show_only_shared=True)
357 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r.json) < fullLen)
358 a3bca46c Stavros Sachtouris
359 a3bca46c Stavros Sachtouris
        try:
360 a3bca46c Stavros Sachtouris
            r = self.client.container_get(until=1000000000)
361 a3bca46c Stavros Sachtouris
            datestring = unicode(r.headers['x-account-until-timestamp'])
362 a3bca46c Stavros Sachtouris
            self.assertEqual(u'Sun, 09 Sep 2001 01:46:40 GMT', datestring)
363 a3bca46c Stavros Sachtouris
364 a3bca46c Stavros Sachtouris
        except ClientError:
365 a3bca46c Stavros Sachtouris
366 a3bca46c Stavros Sachtouris
            pass
367 a3bca46c Stavros Sachtouris
368 a3bca46c Stavros Sachtouris
        """Check and if un/modified_since"""
369 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
370 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
371 24ff0a35 Stavros Sachtouris
            r1 = self.client.container_get(
372 1e1d6f27 Stavros Sachtouris
                if_modified_since=now_formated, success=(200, 304, 412))
373 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
374 24ff0a35 Stavros Sachtouris
            r2 = self.client.container_get(
375 1e1d6f27 Stavros Sachtouris
                if_unmodified_since=now_formated, success=(200, 304, 412))
376 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
377 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
378 a3bca46c Stavros Sachtouris
379 a3bca46c Stavros Sachtouris
    def test_container_put(self):
380 a3bca46c Stavros Sachtouris
        """Test container_PUT"""
381 a3bca46c Stavros Sachtouris
        self._test_0050_container_put()
382 a3bca46c Stavros Sachtouris
383 a3bca46c Stavros Sachtouris
    def _test_0050_container_put(self):
384 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
385 a3bca46c Stavros Sachtouris
386 5655d560 Stavros Sachtouris
        r = self.client.create_container()
387 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
388 a3bca46c Stavros Sachtouris
389 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
390 a3bca46c Stavros Sachtouris
        cquota = r.values()[0]
391 a3bca46c Stavros Sachtouris
        newquota = 2 * int(cquota)
392 a3bca46c Stavros Sachtouris
393 5655d560 Stavros Sachtouris
        r = self.client.create_container(sizelimit=newquota)
394 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
395 a3bca46c Stavros Sachtouris
396 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
397 a3bca46c Stavros Sachtouris
        xquota = int(r.values()[0])
398 a3bca46c Stavros Sachtouris
        self.assertEqual(newquota, xquota)
399 a3bca46c Stavros Sachtouris
400 5655d560 Stavros Sachtouris
        r = self.client.create_container(versioning='auto')
401 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
402 a3bca46c Stavros Sachtouris
403 a3bca46c Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
404 a3bca46c Stavros Sachtouris
        nvers = r.values()[0]
405 a3bca46c Stavros Sachtouris
        self.assertEqual('auto', nvers)
406 a3bca46c Stavros Sachtouris
407 a3bca46c Stavros Sachtouris
        r = self.client.container_put(versioning='none')
408 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
409 a3bca46c Stavros Sachtouris
410 a3bca46c Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
411 a3bca46c Stavros Sachtouris
        nvers = r.values()[0]
412 a3bca46c Stavros Sachtouris
        self.assertEqual('none', nvers)
413 a3bca46c Stavros Sachtouris
414 5655d560 Stavros Sachtouris
        r = self.client.create_container(metadata={'m1': 'v1', 'm2': 'v2'})
415 5655d560 Stavros Sachtouris
        self.assertTrue(isinstance(r, dict))
416 a3bca46c Stavros Sachtouris
417 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
418 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
419 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
420 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
421 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
422 a3bca46c Stavros Sachtouris
423 a3bca46c Stavros Sachtouris
        r = self.client.container_put(metadata={'m1': '', 'm2': 'v2a'})
424 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
425 a3bca46c Stavros Sachtouris
426 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
427 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
428 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
429 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
430 a3bca46c Stavros Sachtouris
431 a3bca46c Stavros Sachtouris
        self.client.del_container_meta(self.client.container)
432 a3bca46c Stavros Sachtouris
433 a3bca46c Stavros Sachtouris
    def test_container_post(self):
434 a3bca46c Stavros Sachtouris
        """Test container_POST"""
435 a3bca46c Stavros Sachtouris
        self._test_0060_container_post()
436 a3bca46c Stavros Sachtouris
437 a3bca46c Stavros Sachtouris
    def _test_0060_container_post(self):
438 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
439 a3bca46c Stavros Sachtouris
440 a3bca46c Stavros Sachtouris
        """Simple post"""
441 a3bca46c Stavros Sachtouris
        r = self.client.container_post()
442 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
443 a3bca46c Stavros Sachtouris
444 a3bca46c Stavros Sachtouris
        """post meta"""
445 a3bca46c Stavros Sachtouris
        self.client.set_container_meta({'m1': 'v1', 'm2': 'v2'})
446 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
447 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
448 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
449 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
450 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
451 a3bca46c Stavros Sachtouris
452 a3bca46c Stavros Sachtouris
        """post/2del meta"""
453 a3bca46c Stavros Sachtouris
        r = self.client.del_container_meta('m1')
454 a3bca46c Stavros Sachtouris
        r = self.client.set_container_meta({'m2': 'v2a'})
455 a3bca46c Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
456 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
457 a3bca46c Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
458 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
459 a3bca46c Stavros Sachtouris
460 a3bca46c Stavros Sachtouris
        """check quota"""
461 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
462 a3bca46c Stavros Sachtouris
        cquota = r.values()[0]
463 a3bca46c Stavros Sachtouris
        newquota = 2 * int(cquota)
464 3ed6dbde Stavros Sachtouris
        r = self.client.set_container_limit(newquota)
465 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
466 a3bca46c Stavros Sachtouris
        xquota = int(r.values()[0])
467 a3bca46c Stavros Sachtouris
        self.assertEqual(newquota, xquota)
468 3ed6dbde Stavros Sachtouris
        r = self.client.set_container_limit(cquota)
469 3ed6dbde Stavros Sachtouris
        r = self.client.get_container_limit(self.client.container)
470 a3bca46c Stavros Sachtouris
        xquota = r.values()[0]
471 a3bca46c Stavros Sachtouris
        self.assertEqual(cquota, xquota)
472 a3bca46c Stavros Sachtouris
473 a3bca46c Stavros Sachtouris
        """Check versioning"""
474 a3bca46c Stavros Sachtouris
        self.client.set_container_versioning('auto')
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('auto', nvers)
478 a3bca46c Stavros Sachtouris
        self.client.set_container_versioning('none')
479 a3bca46c Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
480 a3bca46c Stavros Sachtouris
        nvers = r.values()[0]
481 a3bca46c Stavros Sachtouris
        self.assertEqual('none', nvers)
482 a3bca46c Stavros Sachtouris
483 a3bca46c Stavros Sachtouris
        """put_block uses content_type and content_length to
484 a3bca46c Stavros Sachtouris
        post blocks of data 2 container. All that in upload_object"""
485 a3bca46c Stavros Sachtouris
        """Change a file at fs"""
486 773d61ca Stavros Sachtouris
        f = self.create_large_file(1024 * 1024 * 100)
487 a3bca46c Stavros Sachtouris
        """Upload it at a directory in container"""
488 a3bca46c Stavros Sachtouris
        self.client.create_directory('dir')
489 cb010e3e Stavros Sachtouris
        r = self.client.upload_object('/dir/sample.file', f)
490 cb010e3e Stavros Sachtouris
        for term in ('content-length', 'content-type', 'x-object-version'):
491 cb010e3e Stavros Sachtouris
            self.assertTrue(term in r)
492 a3bca46c Stavros Sachtouris
        """Check if file has been uploaded"""
493 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info('/dir/sample.file')
494 a3bca46c Stavros Sachtouris
        self.assertTrue(int(r['content-length']) > 100000000)
495 a3bca46c Stavros Sachtouris
496 a3bca46c Stavros Sachtouris
        """What is tranfer_encoding? What should I check about it? """
497 a3bca46c Stavros Sachtouris
        #TODO
498 a3bca46c Stavros Sachtouris
499 a3bca46c Stavros Sachtouris
        """Check update=False"""
500 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
501 24ff0a35 Stavros Sachtouris
            'test',
502 a3bca46c Stavros Sachtouris
            update=False,
503 a3bca46c Stavros Sachtouris
            metadata={'newmeta': 'newval'})
504 a3bca46c Stavros Sachtouris
505 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info('test')
506 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-meta-newmeta' in r)
507 a3bca46c Stavros Sachtouris
        self.assertFalse('x-object-meta-incontainer' in r)
508 a3bca46c Stavros Sachtouris
509 a3bca46c Stavros Sachtouris
        r = self.client.del_container_meta('m2')
510 a3bca46c Stavros Sachtouris
511 a3bca46c Stavros Sachtouris
    def test_container_delete(self):
512 a3bca46c Stavros Sachtouris
        """Test container_DELETE"""
513 a3bca46c Stavros Sachtouris
        self._test_0070_container_delete()
514 a3bca46c Stavros Sachtouris
515 a3bca46c Stavros Sachtouris
    def _test_0070_container_delete(self):
516 a3bca46c Stavros Sachtouris
517 a3bca46c Stavros Sachtouris
        """Fail to delete a non-empty container"""
518 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
519 a3bca46c Stavros Sachtouris
        r = self.client.container_delete(success=409)
520 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 409)
521 a3bca46c Stavros Sachtouris
522 a3bca46c Stavros Sachtouris
        """Fail to delete c3 (empty) container"""
523 a3bca46c Stavros Sachtouris
        self.client.container = self.c3
524 a3bca46c Stavros Sachtouris
        r = self.client.container_delete(until='1000000000')
525 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
526 a3bca46c Stavros Sachtouris
527 a3bca46c Stavros Sachtouris
        """Delete c3 (empty) container"""
528 a3bca46c Stavros Sachtouris
        r = self.client.container_delete()
529 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
530 a3bca46c Stavros Sachtouris
531 a3bca46c Stavros Sachtouris
        """Purge container(empty a container), check versionlist"""
532 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
533 a3bca46c Stavros Sachtouris
        r = self.client.object_head('test', success=(200, 404))
534 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
535 a3bca46c Stavros Sachtouris
        self.client.del_container(delimiter='/')
536 a3bca46c Stavros Sachtouris
        r = self.client.object_head('test', success=(200, 404))
537 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
538 a3bca46c Stavros Sachtouris
        r = self.client.get_object_versionlist('test')
539 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r) > 0)
540 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r[0]) > 1)
541 a3bca46c Stavros Sachtouris
        self.client.purge_container()
542 24ff0a35 Stavros Sachtouris
        self.assertRaises(
543 1e1d6f27 Stavros Sachtouris
            ClientError, self.client.get_object_versionlist, 'test')
544 a3bca46c Stavros Sachtouris
545 a3bca46c Stavros Sachtouris
    def _test_0080_recreate_deleted_data(self):
546 a3bca46c Stavros Sachtouris
        self._init_data()
547 a3bca46c Stavros Sachtouris
548 a3bca46c Stavros Sachtouris
    def test_object_head(self):
549 a3bca46c Stavros Sachtouris
        """Test object_HEAD"""
550 a3bca46c Stavros Sachtouris
        self._test_0090_object_head()
551 a3bca46c Stavros Sachtouris
552 a3bca46c Stavros Sachtouris
    def _test_0090_object_head(self):
553 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
554 a3bca46c Stavros Sachtouris
        obj = 'test'
555 a3bca46c Stavros Sachtouris
556 a3bca46c Stavros Sachtouris
        r = self.client.object_head(obj)
557 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
558 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
559 776b275c Stavros Sachtouris
        real_version = r.headers['x-object-version']
560 a3bca46c Stavros Sachtouris
561 776b275c Stavros Sachtouris
        self.assertRaises(
562 776b275c Stavros Sachtouris
            ClientError, self.client.object_head, obj, version=-10)
563 776b275c Stavros Sachtouris
        r = self.client.object_head(obj, version=real_version)
564 776b275c Stavros Sachtouris
        self.assertEqual(r.headers['x-object-version'], real_version)
565 a3bca46c Stavros Sachtouris
566 a3bca46c Stavros Sachtouris
        r = self.client.object_head(obj, if_etag_match=etag)
567 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
568 a3bca46c Stavros Sachtouris
569 24ff0a35 Stavros Sachtouris
        r = self.client.object_head(
570 1e1d6f27 Stavros Sachtouris
            obj, if_etag_not_match=etag, success=(200, 412, 304))
571 a3bca46c Stavros Sachtouris
        self.assertNotEqual(r.status_code, 200)
572 a3bca46c Stavros Sachtouris
573 24ff0a35 Stavros Sachtouris
        r = self.client.object_head(
574 776b275c Stavros Sachtouris
            obj, version=real_version, if_etag_match=etag, success=200)
575 776b275c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
576 a3bca46c Stavros Sachtouris
577 a3bca46c Stavros Sachtouris
        """Check and if(un)modified_since"""
578 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
579 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
580 24ff0a35 Stavros Sachtouris
            r1 = self.client.object_head(
581 1e1d6f27 Stavros Sachtouris
                obj, if_modified_since=now_formated, success=(200, 304, 412))
582 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
583 24ff0a35 Stavros Sachtouris
            r2 = self.client.object_head(
584 1e1d6f27 Stavros Sachtouris
                obj, if_unmodified_since=now_formated, success=(200, 304, 412))
585 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
586 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
587 a3bca46c Stavros Sachtouris
588 a3bca46c Stavros Sachtouris
    def test_object_get(self):
589 a3bca46c Stavros Sachtouris
        """Test object_GET"""
590 a3bca46c Stavros Sachtouris
        self._test_0100_object_get()
591 a3bca46c Stavros Sachtouris
592 a3bca46c Stavros Sachtouris
    def _test_0100_object_get(self):
593 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
594 a3bca46c Stavros Sachtouris
        obj = 'test'
595 a3bca46c Stavros Sachtouris
596 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
597 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
598 a3bca46c Stavros Sachtouris
599 a3bca46c Stavros Sachtouris
        osize = int(r.headers['content-length'])
600 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
601 a3bca46c Stavros Sachtouris
602 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, hashmap=True)
603 24ff0a35 Stavros Sachtouris
        for term in ('hashes', 'block_hash', 'block_hash', 'bytes'):
604 24ff0a35 Stavros Sachtouris
            self.assertTrue(term in r.json)
605 a3bca46c Stavros Sachtouris
606 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, format='xml', hashmap=True)
607 a3bca46c Stavros Sachtouris
        self.assertEqual(len(r.text.split('hash>')), 3)
608 a3bca46c Stavros Sachtouris
609 a3bca46c Stavros Sachtouris
        rangestr = 'bytes=%s-%s' % (osize / 3, osize / 2)
610 24ff0a35 Stavros Sachtouris
        r = self.client.object_get(
611 1e1d6f27 Stavros Sachtouris
            obj, data_range=rangestr, success=(200, 206))
612 a3bca46c Stavros Sachtouris
        partsize = int(r.headers['content-length'])
613 a3bca46c Stavros Sachtouris
        self.assertTrue(0 < partsize and partsize <= 1 + osize / 3)
614 a3bca46c Stavros Sachtouris
615 a3bca46c Stavros Sachtouris
        rangestr = 'bytes=%s-%s' % (osize / 3, osize / 2)
616 24ff0a35 Stavros Sachtouris
        r = self.client.object_get(
617 1e1d6f27 Stavros Sachtouris
            obj, data_range=rangestr, if_range=True, success=(200, 206))
618 a3bca46c Stavros Sachtouris
        partsize = int(r.headers['content-length'])
619 a3bca46c Stavros Sachtouris
        self.assertTrue(0 < partsize and partsize <= 1 + osize / 3)
620 a3bca46c Stavros Sachtouris
621 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, if_etag_match=etag)
622 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
623 a3bca46c Stavros Sachtouris
624 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, if_etag_not_match=etag + 'LALALA')
625 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
626 a3bca46c Stavros Sachtouris
627 a3bca46c Stavros Sachtouris
        """Check and if(un)modified_since"""
628 a3bca46c Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
629 a3bca46c Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
630 24ff0a35 Stavros Sachtouris
            r1 = self.client.object_get(
631 1e1d6f27 Stavros Sachtouris
                obj, if_modified_since=now_formated, success=(200, 304, 412))
632 a3bca46c Stavros Sachtouris
            sc1 = r1.status_code
633 24ff0a35 Stavros Sachtouris
            r2 = self.client.object_get(
634 1e1d6f27 Stavros Sachtouris
                obj, if_unmodified_since=now_formated, success=(200, 304, 412))
635 a3bca46c Stavros Sachtouris
            sc2 = r2.status_code
636 a3bca46c Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
637 a3bca46c Stavros Sachtouris
638 a3bca46c Stavros Sachtouris
        """Upload an object to download"""
639 14c72dbd Stavros Sachtouris
        container_info_cache = dict()
640 a3bca46c Stavros Sachtouris
        trg_fname = 'remotefile_%s' % self.now
641 a3bca46c Stavros Sachtouris
        f_size = 59247824
642 773d61ca Stavros Sachtouris
        src_f = self.create_large_file(f_size)
643 a3bca46c Stavros Sachtouris
        print('\tUploading...')
644 14c72dbd Stavros Sachtouris
        r = self.client.upload_object(
645 1e1d6f27 Stavros Sachtouris
            trg_fname, src_f, container_info_cache=container_info_cache)
646 a3bca46c Stavros Sachtouris
        print('\tDownloading...')
647 773d61ca Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
648 773d61ca Stavros Sachtouris
        dnl_f = self.files[-1]
649 a3bca46c Stavros Sachtouris
        self.client.download_object(trg_fname, dnl_f)
650 a3bca46c Stavros Sachtouris
651 a3bca46c Stavros Sachtouris
        print('\tCheck if files match...')
652 49cc29b2 Stavros Sachtouris
        for pos in (0, f_size / 2, f_size - 128):
653 a3bca46c Stavros Sachtouris
            src_f.seek(pos)
654 a3bca46c Stavros Sachtouris
            dnl_f.seek(pos)
655 49cc29b2 Stavros Sachtouris
            self.assertEqual(src_f.read(64), dnl_f.read(64))
656 49cc29b2 Stavros Sachtouris
657 49cc29b2 Stavros Sachtouris
        print('\tDownload KiBs to string and check again...')
658 49cc29b2 Stavros Sachtouris
        for pos in (0, f_size / 2, f_size - 256):
659 49cc29b2 Stavros Sachtouris
            src_f.seek(pos)
660 49cc29b2 Stavros Sachtouris
            tmp_s = self.client.download_to_string(
661 1e1d6f27 Stavros Sachtouris
                trg_fname, range_str='%s-%s' % (pos, (pos + 128)))
662 49cc29b2 Stavros Sachtouris
            self.assertEqual(tmp_s, src_f.read(len(tmp_s)))
663 9d502497 Stavros Sachtouris
        print('\tUploading KiBs as strings...')
664 9d502497 Stavros Sachtouris
        trg_fname = 'fromString_%s' % self.now
665 9d502497 Stavros Sachtouris
        src_size = 2 * 1024
666 9d502497 Stavros Sachtouris
        src_f.seek(0)
667 9d502497 Stavros Sachtouris
        src_str = src_f.read(src_size)
668 9d502497 Stavros Sachtouris
        self.client.upload_from_string(trg_fname, src_str)
669 9d502497 Stavros Sachtouris
        print('\tDownload as string and check...')
670 9d502497 Stavros Sachtouris
        tmp_s = self.client.download_to_string(trg_fname)
671 9d502497 Stavros Sachtouris
        self.assertEqual(tmp_s, src_str)
672 9d502497 Stavros Sachtouris
673 d187ba37 Stavros Sachtouris
        """Upload a boring file"""
674 d187ba37 Stavros Sachtouris
        trg_fname = 'boringfile_%s' % self.now
675 d187ba37 Stavros Sachtouris
        src_f = self.create_boring_file(42)
676 d187ba37 Stavros Sachtouris
        print('\tUploading boring file...')
677 14c72dbd Stavros Sachtouris
        self.client.upload_object(
678 1e1d6f27 Stavros Sachtouris
            trg_fname, src_f, container_info_cache=container_info_cache)
679 d187ba37 Stavros Sachtouris
        print('\tDownloading boring file...')
680 d187ba37 Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
681 d187ba37 Stavros Sachtouris
        dnl_f = self.files[-1]
682 d187ba37 Stavros Sachtouris
        self.client.download_object(trg_fname, dnl_f)
683 d187ba37 Stavros Sachtouris
684 d187ba37 Stavros Sachtouris
        print('\tCheck if files match...')
685 d187ba37 Stavros Sachtouris
        for i in range(42):
686 d187ba37 Stavros Sachtouris
            self.assertEqual(sample_block(src_f, i), sample_block(dnl_f, i))
687 d187ba37 Stavros Sachtouris
688 a3bca46c Stavros Sachtouris
    def test_object_put(self):
689 a3bca46c Stavros Sachtouris
        """Test object_PUT"""
690 a3bca46c Stavros Sachtouris
        self._test_object_put()
691 a3bca46c Stavros Sachtouris
692 a3bca46c Stavros Sachtouris
    def _test_object_put(self):
693 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
694 a3bca46c Stavros Sachtouris
        obj = 'another.test'
695 a3bca46c Stavros Sachtouris
696 a3bca46c Stavros Sachtouris
        self.client.create_object(obj + '.FAKE')
697 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj + '.FAKE')
698 a3bca46c Stavros Sachtouris
        self.assertEqual(r['content-type'], 'application/octet-stream')
699 a3bca46c Stavros Sachtouris
700 a3bca46c Stavros Sachtouris
        """create the object"""
701 2005b18e Stavros Sachtouris
        r = self.client.object_put(
702 2005b18e Stavros Sachtouris
            obj,
703 a3bca46c Stavros Sachtouris
            data='a',
704 a3bca46c Stavros Sachtouris
            content_type='application/octer-stream',
705 24ff0a35 Stavros Sachtouris
            permissions=dict(
706 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
707 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']),
708 24ff0a35 Stavros Sachtouris
            metadata=dict(key1='val1', key2='val2'),
709 a3bca46c Stavros Sachtouris
            content_encoding='UTF-8',
710 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
711 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
712 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
713 a3bca46c Stavros Sachtouris
714 a3bca46c Stavros Sachtouris
        """Check content-disposition"""
715 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
716 a3bca46c Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
717 a3bca46c Stavros Sachtouris
718 a3bca46c Stavros Sachtouris
        """Check permissions"""
719 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
720 a3bca46c Stavros Sachtouris
        self.assertTrue('accx:groupa' in r['read'])
721 a3bca46c Stavros Sachtouris
        self.assertTrue('u1' in r['read'])
722 a3bca46c Stavros Sachtouris
        self.assertTrue('u2' in r['write'])
723 a3bca46c Stavros Sachtouris
        self.assertTrue('u3' in r['write'])
724 a3bca46c Stavros Sachtouris
725 a3bca46c Stavros Sachtouris
        """Check metadata"""
726 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
727 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-key1'], 'val1')
728 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-key2'], 'val2')
729 a3bca46c Stavros Sachtouris
730 a3bca46c Stavros Sachtouris
        """Check public and if_etag_match"""
731 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
732 24ff0a35 Stavros Sachtouris
            obj,
733 24ff0a35 Stavros Sachtouris
            if_etag_match=etag,
734 24ff0a35 Stavros Sachtouris
            data='b',
735 24ff0a35 Stavros Sachtouris
            content_type='application/octet-stream',
736 24ff0a35 Stavros Sachtouris
            public=True)
737 a3bca46c Stavros Sachtouris
738 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
739 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r.headers)
740 a3bca46c Stavros Sachtouris
        vers2 = int(r.headers['x-object-version'])
741 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
742 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, 'b')
743 a3bca46c Stavros Sachtouris
744 a3bca46c Stavros Sachtouris
        """Check if_etag_not_match"""
745 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
746 24ff0a35 Stavros Sachtouris
            obj,
747 24ff0a35 Stavros Sachtouris
            if_etag_not_match=etag,
748 24ff0a35 Stavros Sachtouris
            data='c',
749 24ff0a35 Stavros Sachtouris
            content_type='application/octet-stream',
750 24ff0a35 Stavros Sachtouris
            success=(201, 412))
751 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 412)
752 a3bca46c Stavros Sachtouris
753 a3bca46c Stavros Sachtouris
        """Check content_type and content_length"""
754 a3bca46c Stavros Sachtouris
        tmpdir = 'dir' + unicode(self.now)
755 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
756 1e1d6f27 Stavros Sachtouris
            tmpdir, content_type='application/directory', content_length=0)
757 a3bca46c Stavros Sachtouris
758 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(tmpdir)
759 a3bca46c Stavros Sachtouris
        self.assertEqual(r['content-type'], 'application/directory')
760 a3bca46c Stavros Sachtouris
761 a3bca46c Stavros Sachtouris
        """Check copy_from, content_encoding"""
762 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
763 24ff0a35 Stavros Sachtouris
            '%s/%s' % (tmpdir, obj),
764 a3bca46c Stavros Sachtouris
            format=None,
765 a3bca46c Stavros Sachtouris
            copy_from='/%s/%s' % (self.client.container, obj),
766 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
767 a3bca46c Stavros Sachtouris
            source_account=self.client.account,
768 24ff0a35 Stavros Sachtouris
            content_length=0,
769 24ff0a35 Stavros Sachtouris
            success=201)
770 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
771 a3bca46c Stavros Sachtouris
772 a3bca46c Stavros Sachtouris
        """Test copy_object for cross-conctainer copy"""
773 24ff0a35 Stavros Sachtouris
        self.client.copy_object(
774 24ff0a35 Stavros Sachtouris
            src_container=self.c2,
775 a3bca46c Stavros Sachtouris
            src_object='%s/%s' % (tmpdir, obj),
776 a3bca46c Stavros Sachtouris
            dst_container=self.c1,
777 a3bca46c Stavros Sachtouris
            dst_object=obj)
778 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
779 a3bca46c Stavros Sachtouris
        r1 = self.client.get_object_info(obj)
780 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
781 a3bca46c Stavros Sachtouris
        r2 = self.client.get_object_info('%s/%s' % (tmpdir, obj))
782 a3bca46c Stavros Sachtouris
        self.assertEqual(r1['x-object-hash'], r2['x-object-hash'])
783 a3bca46c Stavros Sachtouris
784 a3bca46c Stavros Sachtouris
        """Check cross-container copy_from, content_encoding"""
785 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
786 a3bca46c Stavros Sachtouris
        fromstr = '/%s/%s/%s' % (self.c2, tmpdir, obj)
787 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
788 24ff0a35 Stavros Sachtouris
            obj,
789 a3bca46c Stavros Sachtouris
            format=None,
790 a3bca46c Stavros Sachtouris
            copy_from=fromstr,
791 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
792 a3bca46c Stavros Sachtouris
            source_account=self.client.account,
793 24ff0a35 Stavros Sachtouris
            content_length=0,
794 24ff0a35 Stavros Sachtouris
            success=201)
795 a3bca46c Stavros Sachtouris
796 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
797 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
798 a3bca46c Stavros Sachtouris
        self.assertEqual(r['etag'], etag)
799 a3bca46c Stavros Sachtouris
800 a3bca46c Stavros Sachtouris
        """Check source_account"""
801 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
802 a3bca46c Stavros Sachtouris
        fromstr = '/%s/%s' % (self.c1, obj)
803 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
804 24ff0a35 Stavros Sachtouris
            '%sv2' % obj,
805 a3bca46c Stavros Sachtouris
            format=None,
806 a3bca46c Stavros Sachtouris
            move_from=fromstr,
807 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
808 a3bca46c Stavros Sachtouris
            source_account='nonExistendAddress@NeverLand.com',
809 a3bca46c Stavros Sachtouris
            content_length=0,
810 a3bca46c Stavros Sachtouris
            success=(201, 403))
811 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
812 a3bca46c Stavros Sachtouris
813 a3bca46c Stavros Sachtouris
        """Check cross-container move_from"""
814 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
815 a3bca46c Stavros Sachtouris
        r1 = self.client.get_object_info(obj)
816 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
817 24ff0a35 Stavros Sachtouris
        self.client.move_object(
818 24ff0a35 Stavros Sachtouris
            src_container=self.c1,
819 a3bca46c Stavros Sachtouris
            src_object=obj,
820 a3bca46c Stavros Sachtouris
            dst_container=self.c2,
821 a3bca46c Stavros Sachtouris
            dst_object=obj + 'v0')
822 a3bca46c Stavros Sachtouris
        r0 = self.client.get_object_info(obj + 'v0')
823 a3bca46c Stavros Sachtouris
        self.assertEqual(r1['x-object-hash'], r0['x-object-hash'])
824 a3bca46c Stavros Sachtouris
825 a3bca46c Stavros Sachtouris
        """Check move_from"""
826 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
827 24ff0a35 Stavros Sachtouris
            '%sv1' % obj,
828 a3bca46c Stavros Sachtouris
            format=None,
829 a3bca46c Stavros Sachtouris
            move_from='/%s/%s' % (self.c2, obj),
830 a3bca46c Stavros Sachtouris
            source_version=vers2,
831 a3bca46c Stavros Sachtouris
            content_encoding='application/octet-stream',
832 a3bca46c Stavros Sachtouris
            content_length=0, success=201)
833 a3bca46c Stavros Sachtouris
834 a3bca46c Stavros Sachtouris
        """Check manifest"""
835 a3bca46c Stavros Sachtouris
        mobj = 'manifest.test'
836 a3bca46c Stavros Sachtouris
        txt = ''
837 a3bca46c Stavros Sachtouris
        for i in range(10):
838 a3bca46c Stavros Sachtouris
            txt += '%s' % i
839 24ff0a35 Stavros Sachtouris
            r = self.client.object_put(
840 24ff0a35 Stavros Sachtouris
                '%s/%s' % (mobj, i),
841 a3bca46c Stavros Sachtouris
                data='%s' % i,
842 a3bca46c Stavros Sachtouris
                content_length=1,
843 a3bca46c Stavros Sachtouris
                success=201,
844 a3bca46c Stavros Sachtouris
                content_type='application/octet-stream',
845 a3bca46c Stavros Sachtouris
                content_encoding='application/octet-stream')
846 a3bca46c Stavros Sachtouris
847 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
848 24ff0a35 Stavros Sachtouris
            mobj,
849 a3bca46c Stavros Sachtouris
            content_length=0,
850 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
851 a3bca46c Stavros Sachtouris
            manifest='%s/%s' % (self.client.container, mobj))
852 a3bca46c Stavros Sachtouris
853 a3bca46c Stavros Sachtouris
        r = self.client.object_get(mobj)
854 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, txt)
855 a3bca46c Stavros Sachtouris
856 a3bca46c Stavros Sachtouris
        """Upload a local file with one request"""
857 773d61ca Stavros Sachtouris
        newf = self.create_large_file(1024 * 10)
858 a3bca46c Stavros Sachtouris
        self.client.upload_object('sample.file', newf)
859 a3bca46c Stavros Sachtouris
        """Check if file has been uploaded"""
860 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info('sample.file')
861 7f87da8b Stavros Sachtouris
        self.assertEqual(int(r['content-length']), 10240)
862 a3bca46c Stavros Sachtouris
863 a3bca46c Stavros Sachtouris
        """Some problems with transfer-encoding?"""
864 a3bca46c Stavros Sachtouris
865 a3bca46c Stavros Sachtouris
    def test_object_copy(self):
866 a3bca46c Stavros Sachtouris
        """Test object_COPY"""
867 a3bca46c Stavros Sachtouris
        self._test_0110_object_copy()
868 a3bca46c Stavros Sachtouris
869 a3bca46c Stavros Sachtouris
    def _test_0110_object_copy(self):
870 3a066af4 Stavros Sachtouris
        #  TODO: check with source_account option
871 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
872 a3bca46c Stavros Sachtouris
        obj = 'test2'
873 a3bca46c Stavros Sachtouris
874 a3bca46c Stavros Sachtouris
        data = '{"key1":"val1", "key2":"val2"}'
875 2005b18e Stavros Sachtouris
        r = self.client.object_put(
876 2005b18e Stavros Sachtouris
            '%sorig' % obj,
877 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
878 a3bca46c Stavros Sachtouris
            data=data,
879 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
880 24ff0a35 Stavros Sachtouris
            permissions=dict(
881 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
882 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']),
883 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
884 a3bca46c Stavros Sachtouris
885 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
886 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
887 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.client.container, obj),
888 a3bca46c Stavros Sachtouris
            ignore_content_type=False, content_type='application/json',
889 a3bca46c Stavros Sachtouris
            metadata={'mkey2': 'mval2a', 'mkey3': 'mval3'},
890 a3bca46c Stavros Sachtouris
            permissions={'write': ['u5', 'accX:groupB']})
891 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
892 a3bca46c Stavros Sachtouris
893 a3bca46c Stavros Sachtouris
        """Check content-disposition"""
894 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
895 a3bca46c Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
896 a3bca46c Stavros Sachtouris
897 a3bca46c Stavros Sachtouris
        """Check Metadata"""
898 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
899 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
900 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
901 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
902 a3bca46c Stavros Sachtouris
903 a3bca46c Stavros Sachtouris
        """Check permissions"""
904 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
905 a3bca46c Stavros Sachtouris
        self.assertFalse('read' in r or 'u2' in r['write'])
906 a3bca46c Stavros Sachtouris
        self.assertTrue('accx:groupb' in r['write'])
907 a3bca46c Stavros Sachtouris
908 a3bca46c Stavros Sachtouris
        """Check destination account"""
909 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
910 24ff0a35 Stavros Sachtouris
            obj,
911 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
912 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
913 a3bca46c Stavros Sachtouris
            content_type='application/json',
914 a3bca46c Stavros Sachtouris
            destination_account='nonExistendAddress@NeverLand.com',
915 a3bca46c Stavros Sachtouris
            success=(201, 403))
916 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
917 a3bca46c Stavros Sachtouris
918 a3bca46c Stavros Sachtouris
        """Check destination being another container
919 a3bca46c Stavros Sachtouris
        and also content_type and content encoding"""
920 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
921 24ff0a35 Stavros Sachtouris
            obj,
922 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
923 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
924 a3bca46c Stavros Sachtouris
            content_type='application/json')
925 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
926 24ff0a35 Stavros Sachtouris
        self.assertEqual(
927 24ff0a35 Stavros Sachtouris
            r.headers['content-type'],
928 a3bca46c Stavros Sachtouris
            'application/json; charset=UTF-8')
929 a3bca46c Stavros Sachtouris
930 a3bca46c Stavros Sachtouris
        """Check ignore_content_type and content_type"""
931 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
932 a3bca46c Stavros Sachtouris
        etag = r.headers['etag']
933 a3bca46c Stavros Sachtouris
        ctype = r.headers['content-type']
934 a3bca46c Stavros Sachtouris
        self.assertEqual(ctype, 'application/json')
935 a3bca46c Stavros Sachtouris
936 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
937 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
938 a3bca46c Stavros Sachtouris
            destination='/%s/%s0' % (self.client.container, obj),
939 a3bca46c Stavros Sachtouris
            ignore_content_type=True,
940 a3bca46c Stavros Sachtouris
            content_type='application/json')
941 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
942 a3bca46c Stavros Sachtouris
        self.assertNotEqual(r.headers['content-type'], 'application/json')
943 a3bca46c Stavros Sachtouris
944 a3bca46c Stavros Sachtouris
        """Check if_etag_(not_)match"""
945 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
946 24ff0a35 Stavros Sachtouris
            obj,
947 a3bca46c Stavros Sachtouris
            destination='/%s/%s1' % (self.client.container, obj),
948 a3bca46c Stavros Sachtouris
            if_etag_match=etag)
949 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
950 a3bca46c Stavros Sachtouris
951 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
952 24ff0a35 Stavros Sachtouris
            obj,
953 a3bca46c Stavros Sachtouris
            destination='/%s/%s2' % (self.client.container, obj),
954 a3bca46c Stavros Sachtouris
            if_etag_not_match='lalala')
955 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
956 a3bca46c Stavros Sachtouris
        vers2 = r.headers['x-object-version']
957 a3bca46c Stavros Sachtouris
958 a3bca46c Stavros Sachtouris
        """Check source_version, public and format """
959 24ff0a35 Stavros Sachtouris
        r = self.client.object_copy(
960 24ff0a35 Stavros Sachtouris
            '%s2' % obj,
961 a3bca46c Stavros Sachtouris
            destination='/%s/%s3' % (self.client.container, obj),
962 a3bca46c Stavros Sachtouris
            source_version=vers2,
963 a3bca46c Stavros Sachtouris
            format='xml',
964 a3bca46c Stavros Sachtouris
            public=True)
965 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
966 a3bca46c Stavros Sachtouris
        self.assertTrue(r.headers['content-type'].index('xml') > 0)
967 a3bca46c Stavros Sachtouris
968 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj + '3')
969 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
970 a3bca46c Stavros Sachtouris
971 a3bca46c Stavros Sachtouris
    def test_object_move(self):
972 a3bca46c Stavros Sachtouris
        """Test object_MOVE"""
973 a3bca46c Stavros Sachtouris
        self._test_0120_object_move()
974 a3bca46c Stavros Sachtouris
975 a3bca46c Stavros Sachtouris
    def _test_0120_object_move(self):
976 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
977 a3bca46c Stavros Sachtouris
        obj = 'test2'
978 a3bca46c Stavros Sachtouris
979 a3bca46c Stavros Sachtouris
        data = '{"key1": "val1", "key2": "val2"}'
980 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
981 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
982 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
983 a3bca46c Stavros Sachtouris
            data=data,
984 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
985 24ff0a35 Stavros Sachtouris
            permissions=dict(
986 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
987 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']))
988 a3bca46c Stavros Sachtouris
989 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
990 24ff0a35 Stavros Sachtouris
            '%sorig' % obj,
991 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.client.container, obj),
992 a3bca46c Stavros Sachtouris
            ignore_content_type=False,
993 a3bca46c Stavros Sachtouris
            content_type='application/json',
994 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey2='mval2a', mkey3='mval3'),
995 24ff0a35 Stavros Sachtouris
            permissions=dict(write=['u5', 'accX:groupB']))
996 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
997 a3bca46c Stavros Sachtouris
998 a3bca46c Stavros Sachtouris
        """Check Metadata"""
999 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
1000 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
1001 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
1002 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
1003 a3bca46c Stavros Sachtouris
1004 a3bca46c Stavros Sachtouris
        """Check permissions"""
1005 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1006 a3bca46c Stavros Sachtouris
        self.assertFalse('read' in r)
1007 a3bca46c Stavros Sachtouris
        self.assertTrue('u5' in r['write'])
1008 a3bca46c Stavros Sachtouris
        self.assertTrue('accx:groupb' in r['write'])
1009 a3bca46c Stavros Sachtouris
1010 a3bca46c Stavros Sachtouris
        """Check destination account"""
1011 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1012 24ff0a35 Stavros Sachtouris
            obj,
1013 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
1014 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
1015 a3bca46c Stavros Sachtouris
            content_type='application/json',
1016 a3bca46c Stavros Sachtouris
            destination_account='nonExistendAddress@NeverLand.com',
1017 a3bca46c Stavros Sachtouris
            success=(201, 403))
1018 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
1019 a3bca46c Stavros Sachtouris
1020 a3bca46c Stavros Sachtouris
        """Check destination being another container and also
1021 a3bca46c Stavros Sachtouris
        content_type, content_disposition and content encoding"""
1022 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1023 24ff0a35 Stavros Sachtouris
            obj,
1024 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
1025 a3bca46c Stavros Sachtouris
            content_encoding='utf8',
1026 a3bca46c Stavros Sachtouris
            content_type='application/json',
1027 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
1028 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1029 24ff0a35 Stavros Sachtouris
        self.assertEqual(
1030 24ff0a35 Stavros Sachtouris
            r.headers['content-type'],
1031 a3bca46c Stavros Sachtouris
            'application/json; charset=UTF-8')
1032 a3bca46c Stavros Sachtouris
        self.client.container = self.c1
1033 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1034 24ff0a35 Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
1035 24ff0a35 Stavros Sachtouris
        self.assertTrue('fname.ext' in r['content-disposition'])
1036 a3bca46c Stavros Sachtouris
        etag = r['etag']
1037 a3bca46c Stavros Sachtouris
        ctype = r['content-type']
1038 a3bca46c Stavros Sachtouris
        self.assertEqual(ctype, 'application/json')
1039 a3bca46c Stavros Sachtouris
1040 a3bca46c Stavros Sachtouris
        """Check ignore_content_type and content_type"""
1041 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1042 24ff0a35 Stavros Sachtouris
            obj,
1043 a3bca46c Stavros Sachtouris
            destination='/%s/%s' % (self.c2, obj),
1044 a3bca46c Stavros Sachtouris
            ignore_content_type=True,
1045 a3bca46c Stavros Sachtouris
            content_type='application/json')
1046 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1047 a3bca46c Stavros Sachtouris
        self.assertNotEqual(r.headers['content-type'], 'application/json')
1048 a3bca46c Stavros Sachtouris
1049 a3bca46c Stavros Sachtouris
        """Check if_etag_(not_)match"""
1050 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
1051 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1052 24ff0a35 Stavros Sachtouris
            obj,
1053 a3bca46c Stavros Sachtouris
            destination='/%s/%s0' % (self.client.container, obj),
1054 a3bca46c Stavros Sachtouris
            if_etag_match=etag)
1055 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1056 a3bca46c Stavros Sachtouris
1057 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1058 24ff0a35 Stavros Sachtouris
            '%s0' % obj,
1059 a3bca46c Stavros Sachtouris
            destination='/%s/%s1' % (self.client.container, obj),
1060 a3bca46c Stavros Sachtouris
            if_etag_not_match='lalala')
1061 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1062 a3bca46c Stavros Sachtouris
1063 a3bca46c Stavros Sachtouris
        """Check public and format """
1064 24ff0a35 Stavros Sachtouris
        r = self.client.object_move(
1065 24ff0a35 Stavros Sachtouris
            '%s1' % obj,
1066 a3bca46c Stavros Sachtouris
            destination='/%s/%s2' % (self.client.container, obj),
1067 24ff0a35 Stavros Sachtouris
            format='xml',
1068 24ff0a35 Stavros Sachtouris
            public=True)
1069 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1070 a3bca46c Stavros Sachtouris
        self.assertTrue(r.headers['content-type'].index('xml') > 0)
1071 a3bca46c Stavros Sachtouris
1072 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj + '2')
1073 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
1074 a3bca46c Stavros Sachtouris
1075 a3bca46c Stavros Sachtouris
    def test_object_post(self):
1076 a3bca46c Stavros Sachtouris
        """Test object_POST"""
1077 a3bca46c Stavros Sachtouris
        self._test_0130_object_post()
1078 a3bca46c Stavros Sachtouris
1079 a3bca46c Stavros Sachtouris
    def _test_0130_object_post(self):
1080 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
1081 a3bca46c Stavros Sachtouris
        obj = 'test2'
1082 b773795c Stavros Sachtouris
1083 a3bca46c Stavros Sachtouris
        """create a filesystem file"""
1084 773d61ca Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
1085 773d61ca Stavros Sachtouris
        newf = self.files[-1]
1086 24ff0a35 Stavros Sachtouris
        newf.writelines([
1087 24ff0a35 Stavros Sachtouris
            'ello!\n',
1088 a3bca46c Stavros Sachtouris
            'This is a test line\n',
1089 a3bca46c Stavros Sachtouris
            'inside a test file\n'])
1090 b773795c Stavros Sachtouris
1091 a3bca46c Stavros Sachtouris
        """create a file on container"""
1092 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
1093 24ff0a35 Stavros Sachtouris
            obj,
1094 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
1095 a3bca46c Stavros Sachtouris
            data='H',
1096 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
1097 24ff0a35 Stavros Sachtouris
            permissions=dict(
1098 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
1099 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']))
1100 a3bca46c Stavros Sachtouris
1101 79b4f177 Stavros Sachtouris
        """Append livetest update, content_[range|type|length]"""
1102 773d61ca Stavros Sachtouris
        newf.seek(0)
1103 a3bca46c Stavros Sachtouris
        self.client.append_object(obj, newf)
1104 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1105 a3bca46c Stavros Sachtouris
        self.assertTrue(r.text.startswith('Hello!'))
1106 a3bca46c Stavros Sachtouris
1107 f5f2dc53 Stavros Sachtouris
        """Overwrite livetest update,
1108 a3bca46c Stavros Sachtouris
            content_type, content_length, content_range
1109 a3bca46c Stavros Sachtouris
        """
1110 a3bca46c Stavros Sachtouris
        newf.seek(0)
1111 a3bca46c Stavros Sachtouris
        r = self.client.overwrite_object(obj, 0, 10, newf)
1112 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1113 a3bca46c Stavros Sachtouris
        self.assertTrue(r.text.startswith('ello!'))
1114 a3bca46c Stavros Sachtouris
1115 f5f2dc53 Stavros Sachtouris
        """Truncate livetest update,
1116 a3bca46c Stavros Sachtouris
            content_range, content_type, object_bytes and source_object"""
1117 a3bca46c Stavros Sachtouris
        r = self.client.truncate_object(obj, 5)
1118 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1119 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, 'ello!')
1120 a3bca46c Stavros Sachtouris
1121 a3bca46c Stavros Sachtouris
        """Check metadata"""
1122 a3bca46c Stavros Sachtouris
        self.client.set_object_meta(obj, {'mkey2': 'mval2a', 'mkey3': 'mval3'})
1123 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
1124 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
1125 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
1126 a3bca46c Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
1127 a3bca46c Stavros Sachtouris
        self.client.del_object_meta(obj, 'mkey1')
1128 a3bca46c Stavros Sachtouris
        r = self.client.get_object_meta(obj)
1129 a3bca46c Stavros Sachtouris
        self.assertFalse('x-object-meta-mkey1' in r)
1130 a3bca46c Stavros Sachtouris
1131 a3bca46c Stavros Sachtouris
        """Check permissions"""
1132 24ff0a35 Stavros Sachtouris
        self.client.set_object_sharing(
1133 1e1d6f27 Stavros Sachtouris
            obj, read_permission=['u4', 'u5'], write_permission=['u4'])
1134 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1135 a3bca46c Stavros Sachtouris
        self.assertTrue('read' in r)
1136 a3bca46c Stavros Sachtouris
        self.assertTrue('u5' in r['read'])
1137 a3bca46c Stavros Sachtouris
        self.assertTrue('write' in r)
1138 a3bca46c Stavros Sachtouris
        self.assertTrue('u4' in r['write'])
1139 a3bca46c Stavros Sachtouris
        self.client.del_object_sharing(obj)
1140 a3bca46c Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1141 a3bca46c Stavros Sachtouris
        self.assertTrue(len(r) == 0)
1142 a3bca46c Stavros Sachtouris
1143 a3bca46c Stavros Sachtouris
        """Check publish"""
1144 a3bca46c Stavros Sachtouris
        self.client.publish_object(obj)
1145 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1146 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
1147 a3bca46c Stavros Sachtouris
        self.client.unpublish_object(obj)
1148 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1149 a3bca46c Stavros Sachtouris
        self.assertFalse('x-object-public' in r)
1150 a3bca46c Stavros Sachtouris
1151 a3bca46c Stavros Sachtouris
        """Check if_etag_(not)match"""
1152 a3bca46c Stavros Sachtouris
        etag = r['etag']
1153 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1154 24ff0a35 Stavros Sachtouris
            obj,
1155 a3bca46c Stavros Sachtouris
            update=True,
1156 a3bca46c Stavros Sachtouris
            public=True,
1157 a3bca46c Stavros Sachtouris
            if_etag_not_match=etag,
1158 a3bca46c Stavros Sachtouris
            success=(412, 202, 204))
1159 b773795c Stavros Sachtouris
        #self.assertEqual(r.status_code, 412)
1160 a3bca46c Stavros Sachtouris
1161 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1162 24ff0a35 Stavros Sachtouris
            obj,
1163 24ff0a35 Stavros Sachtouris
            update=True,
1164 24ff0a35 Stavros Sachtouris
            public=True,
1165 24ff0a35 Stavros Sachtouris
            if_etag_match=etag,
1166 24ff0a35 Stavros Sachtouris
            content_encoding='application/json')
1167 a3bca46c Stavros Sachtouris
1168 a3bca46c Stavros Sachtouris
        r = self.client.get_object_info(obj)
1169 a3bca46c Stavros Sachtouris
        helloVersion = r['x-object-version']
1170 a3bca46c Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
1171 a3bca46c Stavros Sachtouris
        self.assertEqual(r['content-encoding'], 'application/json')
1172 a3bca46c Stavros Sachtouris
1173 a3bca46c Stavros Sachtouris
        """Check source_version and source_account and content_disposition"""
1174 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1175 24ff0a35 Stavros Sachtouris
            obj,
1176 a3bca46c Stavros Sachtouris
            update=True,
1177 a3bca46c Stavros Sachtouris
            content_type='application/octet-srteam',
1178 a3bca46c Stavros Sachtouris
            content_length=5,
1179 a3bca46c Stavros Sachtouris
            content_range='bytes 1-5/*',
1180 a3bca46c Stavros Sachtouris
            source_object='/%s/%s' % (self.c2, obj),
1181 a3bca46c Stavros Sachtouris
            source_account='thisAccountWillNeverExist@adminland.com',
1182 a3bca46c Stavros Sachtouris
            source_version=helloVersion,
1183 a3bca46c Stavros Sachtouris
            data='12345',
1184 a3bca46c Stavros Sachtouris
            success=(403, 202, 204))
1185 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
1186 a3bca46c Stavros Sachtouris
1187 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1188 24ff0a35 Stavros Sachtouris
            obj,
1189 a3bca46c Stavros Sachtouris
            update=True,
1190 a3bca46c Stavros Sachtouris
            content_type='application/octet-srteam',
1191 a3bca46c Stavros Sachtouris
            content_length=5,
1192 a3bca46c Stavros Sachtouris
            content_range='bytes 1-5/*',
1193 a3bca46c Stavros Sachtouris
            source_object='/%s/%s' % (self.c2, obj),
1194 a3bca46c Stavros Sachtouris
            source_account=self.client.account,
1195 a3bca46c Stavros Sachtouris
            source_version=helloVersion,
1196 a3bca46c Stavros Sachtouris
            data='12345',
1197 a3bca46c Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
1198 a3bca46c Stavros Sachtouris
1199 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj)
1200 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, 'eello!')
1201 24ff0a35 Stavros Sachtouris
        self.assertTrue('content-disposition' in r.headers)
1202 24ff0a35 Stavros Sachtouris
        self.assertTrue('fname.ext' in r.headers['content-disposition'])
1203 a3bca46c Stavros Sachtouris
1204 a3bca46c Stavros Sachtouris
        """Check manifest"""
1205 a3bca46c Stavros Sachtouris
        mobj = 'manifest.test'
1206 a3bca46c Stavros Sachtouris
        txt = ''
1207 a3bca46c Stavros Sachtouris
        for i in range(10):
1208 a3bca46c Stavros Sachtouris
            txt += '%s' % i
1209 24ff0a35 Stavros Sachtouris
            r = self.client.object_put(
1210 24ff0a35 Stavros Sachtouris
                '%s/%s' % (mobj, i),
1211 24ff0a35 Stavros Sachtouris
                data='%s' % i,
1212 24ff0a35 Stavros Sachtouris
                content_length=1,
1213 24ff0a35 Stavros Sachtouris
                success=201,
1214 24ff0a35 Stavros Sachtouris
                content_encoding='application/octet-stream',
1215 24ff0a35 Stavros Sachtouris
                content_type='application/octet-stream')
1216 a3bca46c Stavros Sachtouris
1217 24ff0a35 Stavros Sachtouris
        self.client.create_object_by_manifestation(
1218 1e1d6f27 Stavros Sachtouris
            mobj, content_type='application/octet-stream')
1219 a3bca46c Stavros Sachtouris
1220 24ff0a35 Stavros Sachtouris
        r = self.client.object_post(
1221 1e1d6f27 Stavros Sachtouris
            mobj, manifest='%s/%s' % (self.client.container, mobj))
1222 a3bca46c Stavros Sachtouris
1223 a3bca46c Stavros Sachtouris
        r = self.client.object_get(mobj)
1224 a3bca46c Stavros Sachtouris
        self.assertEqual(r.text, txt)
1225 a3bca46c Stavros Sachtouris
1226 a3bca46c Stavros Sachtouris
        """We need to check transfer_encoding """
1227 a3bca46c Stavros Sachtouris
1228 a3bca46c Stavros Sachtouris
    def test_object_delete(self):
1229 a3bca46c Stavros Sachtouris
        """Test object_DELETE"""
1230 a3bca46c Stavros Sachtouris
        self._test_0140_object_delete()
1231 a3bca46c Stavros Sachtouris
1232 a3bca46c Stavros Sachtouris
    def _test_0140_object_delete(self):
1233 a3bca46c Stavros Sachtouris
        self.client.container = self.c2
1234 a3bca46c Stavros Sachtouris
        obj = 'test2'
1235 a3bca46c Stavros Sachtouris
        """create a file on container"""
1236 24ff0a35 Stavros Sachtouris
        r = self.client.object_put(
1237 24ff0a35 Stavros Sachtouris
            obj,
1238 a3bca46c Stavros Sachtouris
            content_type='application/octet-stream',
1239 a3bca46c Stavros Sachtouris
            data='H',
1240 24ff0a35 Stavros Sachtouris
            metadata=dict(mkey1='mval1', mkey2='mval2'),
1241 24ff0a35 Stavros Sachtouris
            permissions=dict(
1242 24ff0a35 Stavros Sachtouris
                read=['accX:groupA', 'u1', 'u2'],
1243 24ff0a35 Stavros Sachtouris
                write=['u2', 'u3']))
1244 a3bca46c Stavros Sachtouris
1245 a3bca46c Stavros Sachtouris
        """Check with false until"""
1246 a3bca46c Stavros Sachtouris
        r = self.client.object_delete(obj, until=1000000)
1247 a3bca46c Stavros Sachtouris
1248 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, success=(200, 404))
1249 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1250 a3bca46c Stavros Sachtouris
1251 a3bca46c Stavros Sachtouris
        """Check normal case"""
1252 a3bca46c Stavros Sachtouris
        r = self.client.object_delete(obj)
1253 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
1254 a3bca46c Stavros Sachtouris
1255 a3bca46c Stavros Sachtouris
        r = self.client.object_get(obj, success=(200, 404))
1256 a3bca46c Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
1257 a3bca46c Stavros Sachtouris
1258 773d61ca Stavros Sachtouris
    def create_large_file(self, size):
1259 a3bca46c Stavros Sachtouris
        """Create a large file at fs"""
1260 776b275c Stavros Sachtouris
        print
1261 773d61ca Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
1262 773d61ca Stavros Sachtouris
        f = self.files[-1]
1263 773d61ca Stavros Sachtouris
        Ki = size / 8
1264 7f87da8b Stavros Sachtouris
        bytelist = [b * Ki for b in range(size / Ki)]
1265 773d61ca Stavros Sachtouris
1266 773d61ca Stavros Sachtouris
        def append2file(step):
1267 773d61ca Stavros Sachtouris
            f.seek(step)
1268 773d61ca Stavros Sachtouris
            f.write(urandom(Ki))
1269 773d61ca Stavros Sachtouris
            f.flush()
1270 773d61ca Stavros Sachtouris
        self.do_with_progress_bar(
1271 773d61ca Stavros Sachtouris
            append2file,
1272 773d61ca Stavros Sachtouris
            ' create rand file %s (%sB): ' % (f.name, size),
1273 773d61ca Stavros Sachtouris
            bytelist)
1274 773d61ca Stavros Sachtouris
        f.seek(0)
1275 773d61ca Stavros Sachtouris
        return f
1276 d187ba37 Stavros Sachtouris
1277 d187ba37 Stavros Sachtouris
    def create_boring_file(self, num_of_blocks):
1278 d187ba37 Stavros Sachtouris
        """Create a file with some blocks being the same"""
1279 d187ba37 Stavros Sachtouris
        self.files.append(NamedTemporaryFile())
1280 d187ba37 Stavros Sachtouris
        tmpFile = self.files[-1]
1281 d187ba37 Stavros Sachtouris
        block_size = 4 * 1024 * 1024
1282 d187ba37 Stavros Sachtouris
        print('\n\tCreate boring file of %s blocks' % num_of_blocks)
1283 d187ba37 Stavros Sachtouris
        chars = chargen()
1284 d187ba37 Stavros Sachtouris
        while num_of_blocks:
1285 d187ba37 Stavros Sachtouris
            fslice = 3 if num_of_blocks > 3 else num_of_blocks
1286 d187ba37 Stavros Sachtouris
            tmpFile.write(fslice * block_size * chars.next())
1287 d187ba37 Stavros Sachtouris
            num_of_blocks -= fslice
1288 d187ba37 Stavros Sachtouris
        print('\t\tDone')
1289 d187ba37 Stavros Sachtouris
        tmpFile.seek(0)
1290 d187ba37 Stavros Sachtouris
        return tmpFile