Sync functional tests with Swift v1.9.1
Change-Id: Id478f651fe937883837291059da9da853fcd2de2 Signed-off-by: Peter Portante <peter.portante@redhat.com> Reviewed-on: http://review.gluster.org/6141 Reviewed-by: Luis Pabon <lpabon@redhat.com> Tested-by: Luis Pabon <lpabon@redhat.com>
This commit is contained in:
parent
b48149a4af
commit
04e402599b
@ -1 +1 @@
|
|||||||
Subproject commit 95bcd7180c546f91414c2493d343fe1a4ae3ce44
|
Subproject commit 4bd9e4584d31eb37c7e30e555daeb6b90703ee3a
|
@ -4,8 +4,6 @@
|
|||||||
import __builtin__
|
import __builtin__
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from ConfigParser import MissingSectionHeaderError
|
|
||||||
from StringIO import StringIO
|
|
||||||
|
|
||||||
from swift.common.utils import readconf
|
from swift.common.utils import readconf
|
||||||
|
|
||||||
|
@ -15,12 +15,56 @@
|
|||||||
|
|
||||||
""" OpenStack Swift based functional tests for Gluster for Swift"""
|
""" OpenStack Swift based functional tests for Gluster for Swift"""
|
||||||
|
|
||||||
from test.functional.tests import config, locale, Base, Utils
|
import random
|
||||||
|
|
||||||
|
from nose import SkipTest
|
||||||
|
|
||||||
|
from test.functional.tests import config, locale, Base, Base2, Utils, \
|
||||||
|
TestFileEnv
|
||||||
from test.functional.swift_test_client import Account, Connection, File, \
|
from test.functional.swift_test_client import Account, Connection, File, \
|
||||||
ResponseError
|
ResponseError
|
||||||
|
|
||||||
|
web_front_end = config.get('web_front_end', 'integral')
|
||||||
|
|
||||||
class TestGlusterContainerPathsEnv:
|
|
||||||
|
class TestFile(Base):
|
||||||
|
env = TestFileEnv
|
||||||
|
set_up = False
|
||||||
|
|
||||||
|
def testObjectManifest(self):
|
||||||
|
if (web_front_end == 'apache2'):
|
||||||
|
raise SkipTest()
|
||||||
|
data = File.random_data(10000)
|
||||||
|
parts = random.randrange(2,10)
|
||||||
|
charsEachPart = len(data)/parts
|
||||||
|
for i in range(parts+1):
|
||||||
|
if i==0 :
|
||||||
|
file = self.env.container.file('objectmanifest')
|
||||||
|
hdrs={}
|
||||||
|
hdrs['Content-Length']='0'
|
||||||
|
hdrs['X-Object-Manifest']=str(self.env.container.name)+'/objectmanifest'
|
||||||
|
self.assert_(file.write('',hdrs=hdrs))
|
||||||
|
self.assert_(file.name in self.env.container.files())
|
||||||
|
self.assert_(file.read() == '')
|
||||||
|
elif i==parts :
|
||||||
|
file = self.env.container.file('objectmanifest'+'-'+str(i))
|
||||||
|
segment=data[ (i-1)*charsEachPart :]
|
||||||
|
self.assertTrue(file.write(segment))
|
||||||
|
else :
|
||||||
|
file = self.env.container.file('objectmanifest'+'-'+str(i))
|
||||||
|
segment=data[ (i-1)*charsEachPart : i*charsEachPart]
|
||||||
|
self.assertTrue(file.write(segment))
|
||||||
|
#matching the manifest file content with orignal data, as etag won't match
|
||||||
|
file = self.env.container.file('objectmanifest')
|
||||||
|
data_read = file.read()
|
||||||
|
self.assertEquals(data,data_read)
|
||||||
|
|
||||||
|
|
||||||
|
class TestFileUTF8(Base2, TestFile):
|
||||||
|
set_up = False
|
||||||
|
|
||||||
|
|
||||||
|
class TestContainerPathsEnv:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
cls.conn = Connection(config)
|
cls.conn = Connection(config)
|
||||||
@ -76,8 +120,8 @@ class TestGlusterContainerPathsEnv:
|
|||||||
cls.sorted_objects = sorted(set(cls.dirs + cls.files))
|
cls.sorted_objects = sorted(set(cls.dirs + cls.files))
|
||||||
|
|
||||||
|
|
||||||
class TestGlusterContainerPaths(Base):
|
class TestContainerPaths(Base):
|
||||||
env = TestGlusterContainerPathsEnv
|
env = TestContainerPathsEnv
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
def testTraverseContainer(self):
|
def testTraverseContainer(self):
|
||||||
@ -149,3 +193,49 @@ class TestGlusterContainerPaths(Base):
|
|||||||
assert_listing('dir1/subdir with spaces',
|
assert_listing('dir1/subdir with spaces',
|
||||||
['dir1/subdir with spaces/file B'])
|
['dir1/subdir with spaces/file B'])
|
||||||
|
|
||||||
|
|
||||||
|
class TestObjectVersioningEnv:
|
||||||
|
@classmethod
|
||||||
|
def setUp(cls):
|
||||||
|
cls.conn = Connection(config)
|
||||||
|
cls.conn.authenticate()
|
||||||
|
cls.account = Account(cls.conn, config.get('account',
|
||||||
|
config['username']))
|
||||||
|
cls.account.delete_containers()
|
||||||
|
cls.containers = {}
|
||||||
|
#create two containers one for object other for versions of objects
|
||||||
|
for i in range(2):
|
||||||
|
hdrs={}
|
||||||
|
if i==0:
|
||||||
|
hdrs={'X-Versions-Location':'versions'}
|
||||||
|
cont = cls.containers['object'] = cls.account.container('object')
|
||||||
|
else:
|
||||||
|
cont = cls.containers['versions'] = cls.account.container('versions')
|
||||||
|
if not cont.create(hdrs=hdrs):
|
||||||
|
raise ResponseError(cls.conn.response)
|
||||||
|
cls.containers.append(cont)
|
||||||
|
|
||||||
|
|
||||||
|
class TestObjectVersioning(Base):
|
||||||
|
env = TestObjectVersioningEnv
|
||||||
|
set_up = False
|
||||||
|
|
||||||
|
def testObjectVersioning(self):
|
||||||
|
versions = random.randrange(2,10)
|
||||||
|
dataArr=[]
|
||||||
|
#create versions
|
||||||
|
for i in range(versions):
|
||||||
|
data = File.random_data(10000*(i+1))
|
||||||
|
file = self.env.containers['object'].file('object')
|
||||||
|
self.assertTrue(file.write(data))
|
||||||
|
dataArr.append(data)
|
||||||
|
cont = self.env.containers['versions']
|
||||||
|
info = cont.info()
|
||||||
|
self.assertEquals(info['object_count'], versions-1)
|
||||||
|
#match the current version of object with data in arr and delete it
|
||||||
|
for i in range(versions):
|
||||||
|
data = dataArr[-(i+1)]
|
||||||
|
file = self.env.containers['object'].file('object')
|
||||||
|
self.assertEquals(data,file.read())
|
||||||
|
self.assert_(file.delete())
|
||||||
|
self.assert_status(204)
|
||||||
|
@ -170,7 +170,11 @@ class Connection(object):
|
|||||||
self.storage_host = x[2].split(':')[0]
|
self.storage_host = x[2].split(':')[0]
|
||||||
if ':' in x[2]:
|
if ':' in x[2]:
|
||||||
self.storage_port = int(x[2].split(':')[1])
|
self.storage_port = int(x[2].split(':')[1])
|
||||||
self.storage_url = '/%s/%s' % (x[3], x[4])
|
# Make sure storage_url is a string and not unicode, since
|
||||||
|
# keystoneclient (called by swiftclient) returns them in
|
||||||
|
# unicode and this would cause troubles when doing
|
||||||
|
# no_safe_quote query.
|
||||||
|
self.storage_url = str('/%s/%s' % (x[3], x[4]))
|
||||||
|
|
||||||
self.storage_token = storage_token
|
self.storage_token = storage_token
|
||||||
|
|
||||||
@ -462,8 +466,8 @@ class Container(Base):
|
|||||||
raise ResponseError(self.conn.response)
|
raise ResponseError(self.conn.response)
|
||||||
|
|
||||||
def info(self, hdrs={}, parms={}, cfg={}):
|
def info(self, hdrs={}, parms={}, cfg={}):
|
||||||
status = self.conn.make_request('HEAD', self.path, hdrs=hdrs,
|
self.conn.make_request('HEAD', self.path, hdrs=hdrs,
|
||||||
parms=parms, cfg=cfg)
|
parms=parms, cfg=cfg)
|
||||||
|
|
||||||
if self.conn.response.status == 204:
|
if self.conn.response.status == 204:
|
||||||
fields = [['bytes_used', 'x-container-bytes-used'],
|
fields = [['bytes_used', 'x-container-bytes-used'],
|
||||||
|
@ -67,7 +67,7 @@ conf_exists = constraints_conf.read('/etc/swift/swift.conf')
|
|||||||
# Constraints are set first from the test config, then from
|
# Constraints are set first from the test config, then from
|
||||||
# /etc/swift/swift.conf if it exists. If swift.conf doesn't exist,
|
# /etc/swift/swift.conf if it exists. If swift.conf doesn't exist,
|
||||||
# then limit test coverage. This allows SAIO tests to work fine but
|
# then limit test coverage. This allows SAIO tests to work fine but
|
||||||
# requires remote funtional testing to know something about the cluster
|
# requires remote functional testing to know something about the cluster
|
||||||
# that is being tested.
|
# that is being tested.
|
||||||
config = get_config('func_test')
|
config = get_config('func_test')
|
||||||
for k in default_constraints:
|
for k in default_constraints:
|
||||||
@ -514,7 +514,6 @@ class TestContainer(Base):
|
|||||||
prefixs = ['alpha/', 'beta/', 'kappa/']
|
prefixs = ['alpha/', 'beta/', 'kappa/']
|
||||||
prefix_files = {}
|
prefix_files = {}
|
||||||
|
|
||||||
all_files = []
|
|
||||||
for prefix in prefixs:
|
for prefix in prefixs:
|
||||||
prefix_files[prefix] = []
|
prefix_files[prefix] = []
|
||||||
|
|
||||||
@ -791,7 +790,7 @@ class TestContainerPathsEnv:
|
|||||||
stored_files.add(f)
|
stored_files.add(f)
|
||||||
cls.stored_files = sorted(stored_files)
|
cls.stored_files = sorted(stored_files)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TestContainerPaths(Base):
|
class TestContainerPaths(Base):
|
||||||
@ -1231,7 +1230,6 @@ class TestFile(Base):
|
|||||||
def testRangedGetsWithLWSinHeader(self):
|
def testRangedGetsWithLWSinHeader(self):
|
||||||
#Skip this test until webob 1.2 can tolerate LWS in Range header.
|
#Skip this test until webob 1.2 can tolerate LWS in Range header.
|
||||||
file_length = 10000
|
file_length = 10000
|
||||||
range_size = file_length / 10
|
|
||||||
file = self.env.container.file(Utils.create_name())
|
file = self.env.container.file(Utils.create_name())
|
||||||
data = file.write_random(file_length)
|
data = file.write_random(file_length)
|
||||||
|
|
||||||
@ -1567,33 +1565,6 @@ class TestFile(Base):
|
|||||||
info = file.info()
|
info = file.info()
|
||||||
self.assertEquals(etag, info['etag'])
|
self.assertEquals(etag, info['etag'])
|
||||||
|
|
||||||
def testObjectManifest(self):
|
|
||||||
if (web_front_end == 'apache2'):
|
|
||||||
raise SkipTest()
|
|
||||||
data = File.random_data(10000)
|
|
||||||
parts = random.randrange(2,10)
|
|
||||||
charsEachPart = len(data)/parts
|
|
||||||
for i in range(parts+1):
|
|
||||||
if i==0 :
|
|
||||||
file = self.env.container.file('objectmanifest')
|
|
||||||
hdrs={}
|
|
||||||
hdrs['Content-Length']='0'
|
|
||||||
hdrs['X-Object-Manifest']=str(self.env.container.name)+'/objectmanifest'
|
|
||||||
self.assert_(file.write('',hdrs=hdrs))
|
|
||||||
self.assert_(file.name in self.env.container.files())
|
|
||||||
self.assert_(file.read() == '')
|
|
||||||
elif i==parts :
|
|
||||||
file = self.env.container.file('objectmanifest'+'-'+str(i))
|
|
||||||
segment=data[ (i-1)*charsEachPart :]
|
|
||||||
self.assertTrue(file.write(segment))
|
|
||||||
else :
|
|
||||||
file = self.env.container.file('objectmanifest'+'-'+str(i))
|
|
||||||
segment=data[ (i-1)*charsEachPart : i*charsEachPart]
|
|
||||||
self.assertTrue(file.write(segment))
|
|
||||||
#matching the manifest file content with orignal data, as etag won't match
|
|
||||||
file = self.env.container.file('objectmanifest')
|
|
||||||
data_read = file.read()
|
|
||||||
self.assertEquals(data,data_read)
|
|
||||||
|
|
||||||
class TestFileUTF8(Base2, TestFile):
|
class TestFileUTF8(Base2, TestFile):
|
||||||
set_up = False
|
set_up = False
|
||||||
@ -1682,53 +1653,6 @@ class TestFileComparison(Base):
|
|||||||
self.assert_status(412)
|
self.assert_status(412)
|
||||||
|
|
||||||
|
|
||||||
class TestObjectVersioningEnv:
|
|
||||||
@classmethod
|
|
||||||
def setUp(cls):
|
|
||||||
cls.conn = Connection(config)
|
|
||||||
cls.conn.authenticate()
|
|
||||||
cls.account = Account(cls.conn, config.get('account',
|
|
||||||
config['username']))
|
|
||||||
cls.account.delete_containers()
|
|
||||||
cls.containers = {}
|
|
||||||
#create two containers one for object other for versions of objects
|
|
||||||
for i in range(2):
|
|
||||||
hdrs={}
|
|
||||||
if i==0:
|
|
||||||
hdrs={'X-Versions-Location':'versions'}
|
|
||||||
cont = cls.containers['object'] = cls.account.container('object')
|
|
||||||
else:
|
|
||||||
cont = cls.containers['versions'] = cls.account.container('versions')
|
|
||||||
if not cont.create(hdrs=hdrs):
|
|
||||||
raise ResponseError(cls.conn.response)
|
|
||||||
cls.containers.append(cont)
|
|
||||||
|
|
||||||
|
|
||||||
class TestObjectVersioning(Base):
|
|
||||||
env = TestObjectVersioningEnv
|
|
||||||
set_up = False
|
|
||||||
|
|
||||||
def testObjectVersioning(self):
|
|
||||||
versions = random.randrange(2,10)
|
|
||||||
dataArr=[]
|
|
||||||
#create versions
|
|
||||||
for i in range(versions):
|
|
||||||
data = File.random_data(10000*(i+1))
|
|
||||||
file = self.env.containers['object'].file('object')
|
|
||||||
self.assertTrue(file.write(data))
|
|
||||||
dataArr.append(data)
|
|
||||||
cont = self.env.containers['versions']
|
|
||||||
info = cont.info()
|
|
||||||
self.assertEquals(info['object_count'], versions-1)
|
|
||||||
#match the current version of object with data in arr and delete it
|
|
||||||
for i in range(versions):
|
|
||||||
data = dataArr[-(i+1)]
|
|
||||||
file = self.env.containers['object'].file('object')
|
|
||||||
self.assertEquals(data,file.read())
|
|
||||||
self.assert_(file.delete())
|
|
||||||
self.assert_status(204)
|
|
||||||
|
|
||||||
|
|
||||||
class TestFileComparisonUTF8(Base2, TestFileComparison):
|
class TestFileComparisonUTF8(Base2, TestFileComparison):
|
||||||
set_up = False
|
set_up = False
|
||||||
|
|
||||||
|
@ -28,13 +28,10 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import errno
|
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from nose import SkipTest
|
|
||||||
from ConfigParser import MissingSectionHeaderError
|
|
||||||
|
|
||||||
from test import get_config
|
from test import get_config
|
||||||
|
|
||||||
@ -168,10 +165,10 @@ def retry(func, *args, **kwargs):
|
|||||||
if attempts > retries:
|
if attempts > retries:
|
||||||
raise
|
raise
|
||||||
parsed[use_account] = conn[use_account] = None
|
parsed[use_account] = conn[use_account] = None
|
||||||
except AuthError, err:
|
except AuthError:
|
||||||
url[use_account] = token[use_account] = None
|
url[use_account] = token[use_account] = None
|
||||||
continue
|
continue
|
||||||
except InternalServerError, err:
|
except InternalServerError:
|
||||||
pass
|
pass
|
||||||
if attempts <= retries:
|
if attempts <= retries:
|
||||||
sleep(backoff)
|
sleep(backoff)
|
||||||
|
@ -37,7 +37,7 @@ from nose import SkipTest
|
|||||||
from swift.common.constraints import MAX_META_COUNT, MAX_META_NAME_LENGTH, \
|
from swift.common.constraints import MAX_META_COUNT, MAX_META_NAME_LENGTH, \
|
||||||
MAX_META_OVERALL_SIZE, MAX_META_VALUE_LENGTH
|
MAX_META_OVERALL_SIZE, MAX_META_VALUE_LENGTH
|
||||||
|
|
||||||
from swift_testing import check_response, retry, skip
|
from swift_testing import check_response, retry, skip, web_front_end
|
||||||
|
|
||||||
|
|
||||||
class TestAccount(unittest.TestCase):
|
class TestAccount(unittest.TestCase):
|
||||||
@ -78,6 +78,46 @@ class TestAccount(unittest.TestCase):
|
|||||||
self.assert_(resp.status in (200, 204), resp.status)
|
self.assert_(resp.status in (200, 204), resp.status)
|
||||||
self.assertEquals(resp.getheader('x-account-meta-test'), 'Value')
|
self.assertEquals(resp.getheader('x-account-meta-test'), 'Value')
|
||||||
|
|
||||||
|
def test_unicode_metadata(self):
|
||||||
|
if skip:
|
||||||
|
raise SkipTest
|
||||||
|
|
||||||
|
def post(url, token, parsed, conn, name, value):
|
||||||
|
conn.request('POST', parsed.path, '',
|
||||||
|
{'X-Auth-Token': token, name: value})
|
||||||
|
return check_response(conn)
|
||||||
|
|
||||||
|
def head(url, token, parsed, conn):
|
||||||
|
conn.request('HEAD', parsed.path, '', {'X-Auth-Token': token})
|
||||||
|
return check_response(conn)
|
||||||
|
uni_key = u'X-Account-Meta-uni\u0E12'
|
||||||
|
uni_value = u'uni\u0E12'
|
||||||
|
if (web_front_end == 'integral'):
|
||||||
|
resp = retry(post, uni_key, '1')
|
||||||
|
resp.read()
|
||||||
|
self.assertTrue(resp.status in (201, 204))
|
||||||
|
resp = retry(head)
|
||||||
|
resp.read()
|
||||||
|
self.assert_(resp.status in (200, 204), resp.status)
|
||||||
|
self.assertEquals(resp.getheader(uni_key.encode('utf-8')), '1')
|
||||||
|
resp = retry(post, 'X-Account-Meta-uni', uni_value)
|
||||||
|
resp.read()
|
||||||
|
self.assertEquals(resp.status, 204)
|
||||||
|
resp = retry(head)
|
||||||
|
resp.read()
|
||||||
|
self.assert_(resp.status in (200, 204), resp.status)
|
||||||
|
self.assertEquals(resp.getheader('X-Account-Meta-uni'),
|
||||||
|
uni_value.encode('utf-8'))
|
||||||
|
if (web_front_end == 'integral'):
|
||||||
|
resp = retry(post, uni_key, uni_value)
|
||||||
|
resp.read()
|
||||||
|
self.assertEquals(resp.status, 204)
|
||||||
|
resp = retry(head)
|
||||||
|
resp.read()
|
||||||
|
self.assert_(resp.status in (200, 204), resp.status)
|
||||||
|
self.assertEquals(resp.getheader(uni_key.encode('utf-8')),
|
||||||
|
uni_value.encode('utf-8'))
|
||||||
|
|
||||||
def test_multi_metadata(self):
|
def test_multi_metadata(self):
|
||||||
if skip:
|
if skip:
|
||||||
raise SkipTest
|
raise SkipTest
|
||||||
|
@ -114,6 +114,48 @@ class TestContainer(unittest.TestCase):
|
|||||||
self.assertEquals(resp.getheader('x-container-meta-one'), '1')
|
self.assertEquals(resp.getheader('x-container-meta-one'), '1')
|
||||||
self.assertEquals(resp.getheader('x-container-meta-two'), '2')
|
self.assertEquals(resp.getheader('x-container-meta-two'), '2')
|
||||||
|
|
||||||
|
def test_unicode_metadata(self):
|
||||||
|
if skip:
|
||||||
|
raise SkipTest
|
||||||
|
|
||||||
|
def post(url, token, parsed, conn, name, value):
|
||||||
|
conn.request('POST', parsed.path + '/' + self.name, '',
|
||||||
|
{'X-Auth-Token': token, name: value})
|
||||||
|
return check_response(conn)
|
||||||
|
|
||||||
|
def head(url, token, parsed, conn):
|
||||||
|
conn.request('HEAD', parsed.path + '/' + self.name, '',
|
||||||
|
{'X-Auth-Token': token})
|
||||||
|
return check_response(conn)
|
||||||
|
|
||||||
|
uni_key = u'X-Container-Meta-uni\u0E12'
|
||||||
|
uni_value = u'uni\u0E12'
|
||||||
|
if (web_front_end == 'integral'):
|
||||||
|
resp = retry(post, uni_key, '1')
|
||||||
|
resp.read()
|
||||||
|
self.assertEquals(resp.status, 204)
|
||||||
|
resp = retry(head)
|
||||||
|
resp.read()
|
||||||
|
self.assert_(resp.status in (200, 204), resp.status)
|
||||||
|
self.assertEquals(resp.getheader(uni_key.encode('utf-8')), '1')
|
||||||
|
resp = retry(post, 'X-Container-Meta-uni', uni_value)
|
||||||
|
resp.read()
|
||||||
|
self.assertEquals(resp.status, 204)
|
||||||
|
resp = retry(head)
|
||||||
|
resp.read()
|
||||||
|
self.assert_(resp.status in (200, 204), resp.status)
|
||||||
|
self.assertEquals(resp.getheader('X-Container-Meta-uni'),
|
||||||
|
uni_value.encode('utf-8'))
|
||||||
|
if (web_front_end == 'integral'):
|
||||||
|
resp = retry(post, uni_key, uni_value)
|
||||||
|
resp.read()
|
||||||
|
self.assertEquals(resp.status, 204)
|
||||||
|
resp = retry(head)
|
||||||
|
resp.read()
|
||||||
|
self.assert_(resp.status in (200, 204), resp.status)
|
||||||
|
self.assertEquals(resp.getheader(uni_key.encode('utf-8')),
|
||||||
|
uni_value.encode('utf-8'))
|
||||||
|
|
||||||
def test_PUT_metadata(self):
|
def test_PUT_metadata(self):
|
||||||
if skip:
|
if skip:
|
||||||
raise SkipTest
|
raise SkipTest
|
||||||
|
@ -34,12 +34,8 @@ import unittest
|
|||||||
from nose import SkipTest
|
from nose import SkipTest
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
from swift.common.constraints import MAX_META_COUNT, MAX_META_NAME_LENGTH, \
|
|
||||||
MAX_META_OVERALL_SIZE, MAX_META_VALUE_LENGTH
|
|
||||||
|
|
||||||
from swift_testing import check_response, retry, skip, skip3, \
|
from swift_testing import check_response, retry, skip, skip3, \
|
||||||
swift_test_perm, web_front_end
|
swift_test_perm, web_front_end
|
||||||
from test import get_config
|
|
||||||
|
|
||||||
|
|
||||||
class TestObject(unittest.TestCase):
|
class TestObject(unittest.TestCase):
|
||||||
@ -127,7 +123,7 @@ class TestObject(unittest.TestCase):
|
|||||||
'X-Copy-From': source})
|
'X-Copy-From': source})
|
||||||
return check_response(conn)
|
return check_response(conn)
|
||||||
resp = retry(put)
|
resp = retry(put)
|
||||||
contents = resp.read()
|
resp.read()
|
||||||
self.assertEquals(resp.status, 201)
|
self.assertEquals(resp.status, 201)
|
||||||
|
|
||||||
# contents of dest should be the same as source
|
# contents of dest should be the same as source
|
||||||
@ -161,7 +157,7 @@ class TestObject(unittest.TestCase):
|
|||||||
'Destination': dest})
|
'Destination': dest})
|
||||||
return check_response(conn)
|
return check_response(conn)
|
||||||
resp = retry(copy)
|
resp = retry(copy)
|
||||||
contents = resp.read()
|
resp.read()
|
||||||
self.assertEquals(resp.status, 201)
|
self.assertEquals(resp.status, 201)
|
||||||
|
|
||||||
# contents of dest should be the same as source
|
# contents of dest should be the same as source
|
||||||
|
Loading…
x
Reference in New Issue
Block a user