diff options
author | Victor Ryzhenkin <vryzhenkin@mirantis.com> | 2015-12-22 21:23:20 +0300 |
---|---|---|
committer | Victor Ryzhenkin <vryzhenkin@mirantis.com> | 2015-12-24 21:45:11 +0300 |
commit | 6910813552025e28031d80c7b8a09c7a0869d38c (patch) | |
tree | c83e21fcb4d5951f9c066d51ce28a62e3572642d | |
parent | 963f4943d69778dd8f1d5035e273652e3f0166fb (diff) | |
download | tempest-lib-6910813552025e28031d80c7b8a09c7a0869d38c.tar.gz |
Prevent StopIteration exception during parse response
- Parse response body only if there is one top-level element
in JSON object because if there is nullable JSON in response body
six will throw us an StopIteration exception from six.next
Closes-Bug: #1529144
Change-Id: Iea2d0950b25cb8f576ca7e15383a205e04d7c9e3
-rw-r--r-- | tempest_lib/common/rest_client.py | 4 | ||||
-rw-r--r-- | tempest_lib/tests/test_rest_client.py | 5 |
2 files changed, 8 insertions, 1 deletions
diff --git a/tempest_lib/common/rest_client.py b/tempest_lib/common/rest_client.py index d833d5f..c5886e6 100644 --- a/tempest_lib/common/rest_client.py +++ b/tempest_lib/common/rest_client.py @@ -461,7 +461,9 @@ class RestClient(object): # } try: # Ensure there are not more than one top-level keys - if len(body.keys()) > 1: + # NOTE(freerunner): Ensure, that JSON is not nullable to + # to prevent StopIteration Exception + if len(body.keys()) != 1: return body # Just return the "wrapped" element first_key, first_item = six.next(six.iteritems(body)) diff --git a/tempest_lib/tests/test_rest_client.py b/tempest_lib/tests/test_rest_client.py index 0875092..452cef5 100644 --- a/tempest_lib/tests/test_rest_client.py +++ b/tempest_lib/tests/test_rest_client.py @@ -244,6 +244,7 @@ class TestRestClientParseRespJSON(BaseRestClientTestClass): keys[0]: values[0], keys[1]: values[1], }} + null_dict = {} def setUp(self): self.fake_http = fake_http.fake_httplib2() @@ -273,6 +274,10 @@ class TestRestClientParseRespJSON(BaseRestClientTestClass): body = self.rest_client._parse_resp(json.dumps(data)) self.assertEqual(data, body) + def test_parse_nullable_dict(self): + body = self.rest_client._parse_resp(json.dumps(self.null_dict)) + self.assertEqual(self.null_dict, body) + class TestRestClientErrorCheckerJSON(base.TestCase): c_type = "application/json" |