diff options
author | Gordon Chung <chungg@ca.ibm.com> | 2014-02-21 11:55:06 -0500 |
---|---|---|
committer | Gordon Chung <chungg@ca.ibm.com> | 2014-02-21 11:56:06 -0500 |
commit | a93e2ae4d6a3412c79ddfdea5b4cfe6d7ec28d3b (patch) | |
tree | c7f199e498a67def63888e46b247372100329809 /pycadf | |
parent | f7fc5ac01252347e050b3516be94933c31d28af9 (diff) | |
download | pycadf-a93e2ae4d6a3412c79ddfdea5b4cfe6d7ec28d3b.tar.gz |
catch empty json body0.4.1
add a catch for when json body is empty on action event.
Change-Id: I25ae76162ace25bac700bbfb39fa1af83427f629
Diffstat (limited to 'pycadf')
-rw-r--r-- | pycadf/audit/api.py | 11 | ||||
-rw-r--r-- | pycadf/tests/audit/test_api.py | 12 |
2 files changed, 19 insertions, 4 deletions
diff --git a/pycadf/audit/api.py b/pycadf/audit/api.py index 31ec712..cf23edb 100644 --- a/pycadf/audit/api.py +++ b/pycadf/audit/api.py @@ -150,10 +150,13 @@ class OpenStackAuditApi(object): action = self._MAP.custom_actions[url_ending] elif method == 'POST': if url_ending == 'action': - if req.json: - body_action = list(req.json.keys())[0] - action = taxonomy.ACTION_UPDATE + '/' + body_action - else: + try: + if req.json: + body_action = list(req.json.keys())[0] + action = taxonomy.ACTION_UPDATE + '/' + body_action + else: + action = taxonomy.ACTION_CREATE + except ValueError: action = taxonomy.ACTION_CREATE elif url_ending not in self._MAP.path_kw: action = taxonomy.ACTION_UPDATE diff --git a/pycadf/tests/audit/test_api.py b/pycadf/tests/audit/test_api.py index c70086e..2947524 100644 --- a/pycadf/tests/audit/test_api.py +++ b/pycadf/tests/audit/test_api.py @@ -208,6 +208,18 @@ class TestAuditApi(base.TestCase): self.assertEqual(payload['action'], 'update/createImage') self.assertEqual(payload['outcome'], 'pending') + def test_post_empty_body_action(self): + self.ENV_HEADERS['REQUEST_METHOD'] = 'POST' + req = webob.Request.blank('http://admin_host:8774/v2/' + + str(uuid.uuid4()) + '/servers/action', + environ=self.ENV_HEADERS) + self.audit_api.append_audit_event(req) + payload = req.environ['CADF_EVENT'] + self.assertEqual(payload['target']['typeURI'], + 'service/compute/servers/action') + self.assertEqual(payload['action'], 'create') + self.assertEqual(payload['outcome'], 'pending') + def test_custom_action(self): req = self.api_request('GET', 'http://admin_host:8774/v2/' + str(uuid.uuid4()) + '/os-hosts/' |