The server returns a 500 when attempting to update an order with the body being invalid json or a string.
Steps to Reproduce:
Create and Order:
----------------------------------
curl -X POST -H "X-Auth-Token:$AUTH_TOKEN" -H "Content-Type:application/json" -H "X-Project-Id:$PROJECT_ID" -d '{
"type": "key",
"meta": {
"mode": "cbc",
"bit_length": 256,
"name": "secretname",
"algorithm": "aes",
"payload_content_type": "application/octet-stream"
}
}' http://localhost:9311/v1/orders
Attempt to update the order with string instead of valid json
--------------------------------------------------------------
curl -X PUT -H "X-Auth-Token:$AUTH_TOKEN" -H "Content-Type:application/json" -d 'blarg' http://localhost:9311/v1/orders/20433fca-4f6d-4320-be04-97adb18feb48
Server Traceback:
--------------------------------
2014-10-01 15:32:25.750 10530 ERROR barbican.api.controllers [-] Order update failure seen - please contact site administrator.
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers Traceback (most recent call last):
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/Repositories/github/Barbican/barbican/api/controllers/__init__.py", line 96, in handler
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers return fn(inst, *args, **kwargs)
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/Repositories/github/Barbican/barbican/api/controllers/__init__.py", line 82, in enforcer
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers return fn(inst, *args, **kwargs)
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/Repositories/github/Barbican/barbican/api/controllers/__init__.py", line 130, in content_types_enforcer
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers return fn(inst, *args, **kwargs)
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/Repositories/github/Barbican/barbican/api/controllers/orders.py", line 105, in on_put
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers order_type = json.loads(raw_body).get('type')
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/Repositories/github/Barbican/barbican/openstack/common/jsonutils.py", line 172, in loads
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers return json.loads(strutils.safe_decode(s, encoding))
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/.pyenv/versions/2.7.8/lib/python2.7/json/__init__.py", line 338, in loads
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers return _default_decoder.decode(s)
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/.pyenv/versions/2.7.8/lib/python2.7/json/decoder.py", line 366, in decode
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers obj, end = self.raw_decode(s, idx=_w(s, 0).end())
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers File "/home/john/.pyenv/versions/2.7.8/lib/python2.7/json/decoder.py", line 384, in raw_decode
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers raise ValueError("No JSON object could be decoded")
2014-10-01 15:32:25.750 10530 TRACE barbican.api.controllers ValueError: No JSON object could be decoded
Fix proposed to branch: master /review. openstack. org/125516
Review: https:/