Add requests related unit-tests
This change improves unit tests of the new code added by the port to requests. Raw upload and chunked upload in put_object are now covered. Change-Id: I995b23a74bc4b00bf5761362b1f1405bb8662311
This commit is contained in:
parent
1eaf4c549f
commit
da2d8eef47
@ -18,6 +18,8 @@ import mock
|
|||||||
import logging
|
import logging
|
||||||
import six
|
import six
|
||||||
import socket
|
import socket
|
||||||
|
import types
|
||||||
|
import StringIO
|
||||||
import testtools
|
import testtools
|
||||||
import warnings
|
import warnings
|
||||||
from six.moves.urllib.parse import urlparse
|
from six.moves.urllib.parse import urlparse
|
||||||
@ -27,6 +29,7 @@ from six.moves import reload_module
|
|||||||
from .utils import fake_http_connect, fake_get_keystoneclient_2_0
|
from .utils import fake_http_connect, fake_get_keystoneclient_2_0
|
||||||
|
|
||||||
from swiftclient import client as c
|
from swiftclient import client as c
|
||||||
|
import swiftclient.utils
|
||||||
|
|
||||||
|
|
||||||
class TestClientException(testtools.TestCase):
|
class TestClientException(testtools.TestCase):
|
||||||
@ -147,6 +150,7 @@ class MockHttpResponse():
|
|||||||
self.status_code = status
|
self.status_code = status
|
||||||
self.reason = "OK"
|
self.reason = "OK"
|
||||||
self.buffer = []
|
self.buffer = []
|
||||||
|
self.requests_params = None
|
||||||
|
|
||||||
class Raw:
|
class Raw:
|
||||||
def read():
|
def read():
|
||||||
@ -167,6 +171,7 @@ class MockHttpResponse():
|
|||||||
|
|
||||||
def _fake_request(self, *arg, **kwarg):
|
def _fake_request(self, *arg, **kwarg):
|
||||||
self.status = 200
|
self.status = 200
|
||||||
|
self.requests_params = kwarg
|
||||||
# This simulate previous httplib implementation that would do a
|
# This simulate previous httplib implementation that would do a
|
||||||
# putrequest() and then use putheader() to send header.
|
# putrequest() and then use putheader() to send header.
|
||||||
for k, v in kwarg['headers'].items():
|
for k, v in kwarg['headers'].items():
|
||||||
@ -675,6 +680,58 @@ class TestPutObject(MockHttpTest):
|
|||||||
c.put_object('http://www.test.com', 'asdf', 'asdf', 'asdf',
|
c.put_object('http://www.test.com', 'asdf', 'asdf', 'asdf',
|
||||||
query_string="hello=20")
|
query_string="hello=20")
|
||||||
|
|
||||||
|
def test_raw_upload(self):
|
||||||
|
# Raw upload happens when content_length is passed to put_object
|
||||||
|
conn = c.http_connection(u'http://www.test.com/')
|
||||||
|
resp = MockHttpResponse(status=200)
|
||||||
|
conn[1].getresponse = resp.fake_response
|
||||||
|
conn[1]._request = resp._fake_request
|
||||||
|
mock_file = StringIO.StringIO('asdf')
|
||||||
|
|
||||||
|
c.put_object(url='http://www.test.com', http_conn=conn,
|
||||||
|
contents=mock_file, content_length=4)
|
||||||
|
self.assertTrue(isinstance(resp.requests_params['data'],
|
||||||
|
swiftclient.utils.LengthWrapper))
|
||||||
|
self.assertEqual(mock_file.len, 4)
|
||||||
|
|
||||||
|
c.put_object(url='http://www.test.com', http_conn=conn,
|
||||||
|
headers={'Content-Length': '4'}, contents=mock_file)
|
||||||
|
self.assertTrue(isinstance(resp.requests_params['data'],
|
||||||
|
swiftclient.utils.LengthWrapper))
|
||||||
|
self.assertEqual(mock_file.len, 4)
|
||||||
|
|
||||||
|
def test_chunk_upload(self):
|
||||||
|
# Chunked upload happens when no content_length is passed to put_object
|
||||||
|
conn = c.http_connection(u'http://www.test.com/')
|
||||||
|
resp = MockHttpResponse(status=200)
|
||||||
|
conn[1].getresponse = resp.fake_response
|
||||||
|
conn[1]._request = resp._fake_request
|
||||||
|
raw_data = 'asdf' * 256
|
||||||
|
chunk_size = 16
|
||||||
|
mock_file = StringIO.StringIO(raw_data)
|
||||||
|
|
||||||
|
c.put_object(url='http://www.test.com', http_conn=conn,
|
||||||
|
contents=mock_file, chunk_size=chunk_size)
|
||||||
|
request_data = resp.requests_params['data']
|
||||||
|
self.assertTrue(isinstance(request_data, types.GeneratorType))
|
||||||
|
data = ''
|
||||||
|
for chunk in request_data:
|
||||||
|
self.assertEqual(chunk_size, len(chunk))
|
||||||
|
data += chunk
|
||||||
|
self.assertEqual(data, raw_data)
|
||||||
|
|
||||||
|
def test_params(self):
|
||||||
|
conn = c.http_connection(u'http://www.test.com/')
|
||||||
|
resp = MockHttpResponse(status=200)
|
||||||
|
conn[1].getresponse = resp.fake_response
|
||||||
|
conn[1]._request = resp._fake_request
|
||||||
|
|
||||||
|
c.put_object(url='http://www.test.com', http_conn=conn,
|
||||||
|
etag='1234-5678', content_type='text/plain')
|
||||||
|
request_header = resp.requests_params['headers']
|
||||||
|
self.assertTrue(request_header['etag'], '1234-5678')
|
||||||
|
self.assertTrue(request_header['content-type'], 'text/plain')
|
||||||
|
|
||||||
|
|
||||||
class TestPostObject(MockHttpTest):
|
class TestPostObject(MockHttpTest):
|
||||||
|
|
||||||
@ -743,6 +800,30 @@ class TestGetCapabilities(MockHttpTest):
|
|||||||
self.assertRaises(c.ClientException, c.get_capabilities, http_conn)
|
self.assertRaises(c.ClientException, c.get_capabilities, http_conn)
|
||||||
|
|
||||||
|
|
||||||
|
class TestHTTPConnection(MockHttpTest):
|
||||||
|
|
||||||
|
def test_ok_proxy(self):
|
||||||
|
conn = c.http_connection(u'http://www.test.com/',
|
||||||
|
proxy='http://localhost:8080')
|
||||||
|
self.assertEquals(conn[1].requests_args['proxies']['http'],
|
||||||
|
'http://localhost:8080')
|
||||||
|
|
||||||
|
def test_bad_proxy(self):
|
||||||
|
try:
|
||||||
|
c.http_connection(u'http://www.test.com/', proxy='localhost:8080')
|
||||||
|
except c.ClientException as e:
|
||||||
|
self.assertEqual(e.msg, "Proxy's missing scheme")
|
||||||
|
|
||||||
|
def test_cacert(self):
|
||||||
|
conn = c.http_connection(u'http://www.test.com/',
|
||||||
|
cacert='/dev/urandom')
|
||||||
|
self.assertEquals(conn[1].requests_args['verify'], '/dev/urandom')
|
||||||
|
|
||||||
|
def test_insecure(self):
|
||||||
|
conn = c.http_connection(u'http://www.test.com/', insecure=True)
|
||||||
|
self.assertEquals(conn[1].requests_args['verify'], False)
|
||||||
|
|
||||||
|
|
||||||
class TestConnection(MockHttpTest):
|
class TestConnection(MockHttpTest):
|
||||||
|
|
||||||
def test_instance(self):
|
def test_instance(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user