summaryrefslogtreecommitdiff
path: root/pycadf
diff options
context:
space:
mode:
authorGordon Chung <chungg@ca.ibm.com>2014-02-21 11:55:06 -0500
committerGordon Chung <chungg@ca.ibm.com>2014-02-21 11:56:06 -0500
commita93e2ae4d6a3412c79ddfdea5b4cfe6d7ec28d3b (patch)
treec7f199e498a67def63888e46b247372100329809 /pycadf
parentf7fc5ac01252347e050b3516be94933c31d28af9 (diff)
downloadpycadf-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.py11
-rw-r--r--pycadf/tests/audit/test_api.py12
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/'