Merge "Verify top key in _parse_body"

This commit is contained in:
Zuul
2022-06-28 23:36:10 +00:00
committed by Gerrit Code Review
2 changed files with 31 additions and 2 deletions

View File

@@ -492,7 +492,7 @@ class RestClient(object):
self._log_request_full(resp, req_headers, req_body, self._log_request_full(resp, req_headers, req_body,
resp_body, extra) resp_body, extra)
def _parse_resp(self, body): def _parse_resp(self, body, top_key_to_verify=None):
try: try:
body = json.loads(body) body = json.loads(body)
except ValueError: except ValueError:
@@ -516,8 +516,17 @@ class RestClient(object):
if not hasattr(body, "keys") or len(body.keys()) != 1: if not hasattr(body, "keys") or len(body.keys()) != 1:
return body return body
# Just return the "wrapped" element # Just return the "wrapped" element
_, first_item = tuple(body.items())[0] first_key, first_item = tuple(body.items())[0]
if isinstance(first_item, (dict, list)): if isinstance(first_item, (dict, list)):
if top_key_to_verify is not None:
msg_args = {
'top_key': top_key_to_verify,
'actual_key': first_key,
}
assert_msg = ("The expected top level key is "
"'%(top_key)s' but we found "
"'%(actual_key)s'." % msg_args)
assert top_key_to_verify == first_key, assert_msg
return first_item return first_item
except (ValueError, IndexError): except (ValueError, IndexError):
pass pass

View File

@@ -280,6 +280,26 @@ class TestRestClientParseRespJSON(BaseRestClientTestClass):
body = self.rest_client._parse_resp(json.dumps(empty_list)) body = self.rest_client._parse_resp(json.dumps(empty_list))
self.assertEqual(empty_list, body) self.assertEqual(empty_list, body)
def test_parse_top_key_match(self):
body = self.rest_client._parse_resp(json.dumps(self.dict_expected),
top_key_to_verify="body_dict")
self.assertEqual(self.dict_expected["body_dict"], body)
class TestRestClientParseErrorRespJSON(BaseRestClientTestClass):
dict_expected = {"body_dict": {"fake_key": "fake_value"}}
def setUp(self):
self.fake_http = fake_http.fake_httplib2()
super(TestRestClientParseErrorRespJSON, self).setUp()
def test_parse_top_key_no_match(self):
self.assertRaises(AssertionError,
self.rest_client._parse_resp,
json.dumps(self.dict_expected),
top_key_to_verify="body_key")
class TestRestClientErrorCheckerJSON(base.TestCase): class TestRestClientErrorCheckerJSON(base.TestCase):
c_type = "application/json" c_type = "application/json"