summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-09-01 03:18:18 +0000
committerGerrit Code Review <review@openstack.org>2016-09-01 03:18:18 +0000
commit92544c58c547e1ccf9d7df8c417c6a161a355ca8 (patch)
tree42875d4ffa6ea387b83a3b359f71540d6bc4b0bb /tests
parent98085c961fc9421ffb07e62dacee67da9b7fcd16 (diff)
parentf728027bed59d08a6491ae9c14d2f5968f8d6fa3 (diff)
downloadpython-swiftclient-92544c58c547e1ccf9d7df8c417c6a161a355ca8.tar.gz
Merge "Accept gzip-encoded API responses"
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/test_swiftclient.py21
-rw-r--r--tests/unit/test_utils.py37
2 files changed, 55 insertions, 3 deletions
diff --git a/tests/unit/test_swiftclient.py b/tests/unit/test_swiftclient.py
index 7e753e9..7d0dd9a 100644
--- a/tests/unit/test_swiftclient.py
+++ b/tests/unit/test_swiftclient.py
@@ -582,6 +582,7 @@ class TestGetAccount(MockHttpTest):
self.assertEqual(value, [])
self.assertRequests([
('GET', '/v1/acct?format=json', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'asdf'}),
])
@@ -592,6 +593,7 @@ class TestGetAccount(MockHttpTest):
c.get_account('http://www.test.com/v1/acct', 'asdf', marker='marker')
self.assertRequests([
('GET', '/v1/acct?format=json&marker=marker', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'asdf'}),
])
@@ -602,6 +604,7 @@ class TestGetAccount(MockHttpTest):
c.get_account('http://www.test.com/v1/acct', 'asdf', limit=10)
self.assertRequests([
('GET', '/v1/acct?format=json&limit=10', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'asdf'}),
])
@@ -612,6 +615,7 @@ class TestGetAccount(MockHttpTest):
c.get_account('http://www.test.com/v1/acct', 'asdf', prefix='asdf/')
self.assertRequests([
('GET', '/v1/acct?format=json&prefix=asdf/', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'asdf'}),
])
@@ -623,6 +627,7 @@ class TestGetAccount(MockHttpTest):
end_marker='end_marker')
self.assertRequests([
('GET', '/v1/acct?format=json&end_marker=end_marker', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'asdf'}),
])
@@ -701,6 +706,7 @@ class TestGetContainer(MockHttpTest):
self.assertEqual(value, [])
self.assertRequests([
('GET', '/v1/acct/container?format=json', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'token'}),
])
@@ -712,6 +718,7 @@ class TestGetContainer(MockHttpTest):
marker='marker')
self.assertRequests([
('GET', '/v1/acct/container?format=json&marker=marker', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'token'}),
])
@@ -723,6 +730,7 @@ class TestGetContainer(MockHttpTest):
limit=10)
self.assertRequests([
('GET', '/v1/acct/container?format=json&limit=10', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'token'}),
])
@@ -734,6 +742,7 @@ class TestGetContainer(MockHttpTest):
prefix='asdf/')
self.assertRequests([
('GET', '/v1/acct/container?format=json&prefix=asdf/', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'token'}),
])
@@ -745,6 +754,7 @@ class TestGetContainer(MockHttpTest):
delimiter='/')
self.assertRequests([
('GET', '/v1/acct/container?format=json&delimiter=/', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'token'}),
])
@@ -756,7 +766,7 @@ class TestGetContainer(MockHttpTest):
end_marker='end_marker')
self.assertRequests([
('GET', '/v1/acct/container?format=json&end_marker=end_marker',
- '', {'x-auth-token': 'token'}),
+ '', {'x-auth-token': 'token', 'accept-encoding': 'gzip'}),
])
def test_param_path(self):
@@ -767,6 +777,7 @@ class TestGetContainer(MockHttpTest):
path='asdf')
self.assertRequests([
('GET', '/v1/acct/container?format=json&path=asdf', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'token'}),
])
@@ -781,6 +792,7 @@ class TestGetContainer(MockHttpTest):
('GET', '/container?format=json', '', {
'x-auth-token': 'TOKEN',
'x-client-key': 'client key',
+ 'accept-encoding': 'gzip',
}),
])
@@ -791,6 +803,7 @@ class TestGetContainer(MockHttpTest):
query_string="hello=20")
self.assertRequests([
('GET', '/asdf?format=json&hello=20', '', {
+ 'accept-encoding': 'gzip',
'x-auth-token': 'asdf'}),
])
@@ -1584,7 +1597,7 @@ class TestGetCapabilities(MockHttpTest):
http_conn = conn('http://www.test.com/info')
info = c.get_capabilities(http_conn)
self.assertRequests([
- ('GET', '/info', '', {}),
+ ('GET', '/info', '', {'Accept-Encoding': 'gzip'}),
])
self.assertEqual(info, {})
self.assertTrue(http_conn[1].resp.has_been_read)
@@ -1620,7 +1633,8 @@ class TestGetCapabilities(MockHttpTest):
('GET', '/auth/v1.0', '', {
'x-auth-user': 'user',
'x-auth-key': 'key'}),
- ('GET', 'http://storage.example.com/info', '', {}),
+ ('GET', 'http://storage.example.com/info', '', {
+ 'accept-encoding': 'gzip'}),
])
def test_conn_get_capabilities_with_os_auth(self):
@@ -2342,6 +2356,7 @@ class TestConnection(MockHttpTest):
('GET', '/v1/a/c1?format=json&limit=5&prefix=p', '', {
'x-auth-token': 'token',
'X-Favourite-Pet': 'Aardvark',
+ 'accept-encoding': 'gzip',
}),
])
self.assertEqual(conn.attempts, 1)
diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py
index 0f210a3..f0de79c 100644
--- a/tests/unit/test_utils.py
+++ b/tests/unit/test_utils.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import gzip
import unittest
import mock
import six
@@ -394,3 +395,39 @@ class TestGroupers(unittest.TestCase):
result = list(u.n_groups(range(100), 12))
self.assertEqual([9] * 11 + [1], list(map(len, result)))
+
+
+class TestApiResponeParser(unittest.TestCase):
+
+ def test_utf8_default(self):
+ result = u.parse_api_response(
+ {}, u'{"test": "\u2603"}'.encode('utf8'))
+ self.assertEqual({'test': u'\u2603'}, result)
+
+ result = u.parse_api_response(
+ {}, u'{"test": "\\u2603"}'.encode('utf8'))
+ self.assertEqual({'test': u'\u2603'}, result)
+
+ def test_bad_json(self):
+ self.assertRaises(ValueError, u.parse_api_response,
+ {}, b'{"foo": "bar}')
+
+ def test_bad_utf8(self):
+ self.assertRaises(UnicodeDecodeError, u.parse_api_response,
+ {}, b'{"foo": "b\xffr"}')
+
+ def test_latin_1(self):
+ result = u.parse_api_response(
+ {'content-type': 'application/json; charset=iso8859-1'},
+ b'{"t\xe9st": "\xff"}')
+ self.assertEqual({u't\xe9st': u'\xff'}, result)
+
+ def test_gzipped_utf8(self):
+ buf = six.BytesIO()
+ gz = gzip.GzipFile(fileobj=buf, mode='w')
+ gz.write(u'{"test": "\u2603"}'.encode('utf8'))
+ gz.close()
+ result = u.parse_api_response(
+ {'content-encoding': 'gzip'},
+ buf.getvalue())
+ self.assertEqual({'test': u'\u2603'}, result)