summaryrefslogtreecommitdiff
path: root/tests/unit/test_swiftclient.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-01-12 13:00:16 +0000
committerGerrit Code Review <review@openstack.org>2016-01-12 13:00:17 +0000
commit6ed6c3343f73e170b259c1dc1956017da2c17620 (patch)
tree96483b663808f5145dc49b51a737e707c3da2989 /tests/unit/test_swiftclient.py
parentc9ce80c460a609d23f4681027dd1b3e4883ea334 (diff)
parentd4157ce5b5eeeebb3516092de995cee20025a5c1 (diff)
downloadpython-swiftclient-6ed6c3343f73e170b259c1dc1956017da2c17620.tar.gz
Merge "Retry file uploads via SwiftService"
Diffstat (limited to 'tests/unit/test_swiftclient.py')
-rw-r--r--tests/unit/test_swiftclient.py62
1 files changed, 48 insertions, 14 deletions
diff --git a/tests/unit/test_swiftclient.py b/tests/unit/test_swiftclient.py
index 56d3ff8..050f8b2 100644
--- a/tests/unit/test_swiftclient.py
+++ b/tests/unit/test_swiftclient.py
@@ -17,6 +17,7 @@ import logging
import mock
import six
import socket
+import string
import testtools
import warnings
import tempfile
@@ -1791,23 +1792,24 @@ class TestConnection(MockHttpTest):
class LocalContents(object):
def __init__(self, tell_value=0):
- self.already_read = False
+ self.data = six.BytesIO(string.ascii_letters.encode() * 10)
+ self.data.seek(tell_value)
+ self.reads = []
self.seeks = []
- self.tell_value = tell_value
+ self.tells = []
def tell(self):
- return self.tell_value
+ self.tells.append(self.data.tell())
+ return self.tells[-1]
- def seek(self, position):
- self.seeks.append(position)
- self.already_read = False
+ def seek(self, position, mode=0):
+ self.seeks.append((position, mode))
+ self.data.seek(position, mode)
def read(self, size=-1):
- if self.already_read:
- return ''
- else:
- self.already_read = True
- return 'abcdef'
+ read_data = self.data.read(size)
+ self.reads.append((size, read_data))
+ return read_data
class LocalConnection(object):
@@ -1818,7 +1820,7 @@ class TestConnection(MockHttpTest):
self.port = parsed_url.netloc
def putrequest(self, *args, **kwargs):
- self.send()
+ self.send('PUT', *args, **kwargs)
def putheader(self, *args, **kwargs):
return
@@ -1827,6 +1829,13 @@ class TestConnection(MockHttpTest):
return
def send(self, *args, **kwargs):
+ data = kwargs.get('data')
+ if data is not None:
+ if hasattr(data, 'read'):
+ data.read()
+ else:
+ for datum in data:
+ pass
raise socket.error('oops')
def request(self, *args, **kwargs):
@@ -1861,7 +1870,12 @@ class TestConnection(MockHttpTest):
conn.put_object('c', 'o', contents)
except socket.error as err:
exc = err
- self.assertEqual(contents.seeks, [0])
+ self.assertEqual(contents.tells, [0])
+ self.assertEqual(contents.seeks, [(0, 0)])
+ # four reads: two in the initial pass, two in the retry
+ self.assertEqual(4, len(contents.reads))
+ self.assertEqual((65536, b''), contents.reads[1])
+ self.assertEqual((65536, b''), contents.reads[3])
self.assertEqual(str(exc), 'oops')
contents = LocalContents(tell_value=123)
@@ -1870,9 +1884,29 @@ class TestConnection(MockHttpTest):
conn.put_object('c', 'o', contents)
except socket.error as err:
exc = err
- self.assertEqual(contents.seeks, [123])
+ self.assertEqual(contents.tells, [123])
+ self.assertEqual(contents.seeks, [(123, 0)])
+ # four reads: two in the initial pass, two in the retry
+ self.assertEqual(4, len(contents.reads))
+ self.assertEqual((65536, b''), contents.reads[1])
+ self.assertEqual((65536, b''), contents.reads[3])
self.assertEqual(str(exc), 'oops')
+ contents = LocalContents(tell_value=123)
+ wrapped_contents = swiftclient.utils.LengthWrapper(
+ contents, 6, md5=True)
+ exc = None
+ try:
+ conn.put_object('c', 'o', wrapped_contents)
+ except socket.error as err:
+ exc = err
+ self.assertEqual(contents.tells, [123])
+ self.assertEqual(contents.seeks, [(123, 0)])
+ self.assertEqual(contents.reads, [(6, b'tuvwxy')] * 2)
+ self.assertEqual(str(exc), 'oops')
+ self.assertEqual(md5(b'tuvwxy').hexdigest(),
+ wrapped_contents.get_md5sum())
+
contents = LocalContents()
contents.tell = None
exc = None