Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / livetest / pithos.py @ b773795c

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