Check result of server metadata operation

An accidental failure in one of the functional tests showed, that
response of metadata change was not checked. In that particular example
nova returned 500 for one of the metadata deletes, but the testcase
has not recognized this and went further, what resulted in a later
asserEquals failure.
So what we need to do here is to check the response of the metadata
operation and raise an exception if it was not successful.

Change-Id: I37bc96531eb37f9f850d5531354bd4db17973406
This commit is contained in:
Artem Goncharov 2018-11-23 10:32:52 +01:00
parent 84116d6125
commit 8f97fb767c
2 changed files with 43 additions and 1 deletions

View File

@ -12,6 +12,7 @@
import six
from openstack import exceptions
from openstack import utils
@ -48,6 +49,8 @@ class MetadataMixin(object):
response = method(url, headers=headers, **kwargs)
# ensure Nova API has not returned us an error
exceptions.raise_from_response(response)
# DELETE doesn't return a JSON body while everything else does.
return response.json() if not delete else None

View File

@ -11,6 +11,7 @@
# under the License.
import mock
from openstack import exceptions
from openstack.tests.unit import base
from openstack.compute.v2 import server
@ -41,6 +42,7 @@ class TestMetadata(base.TestCase):
def _test_get_all_metadata(self, sot):
response = mock.Mock()
response.status_code = 200
response.json.return_value = self.metadata_result
sess = mock.Mock()
sess.get.return_value = response
@ -54,6 +56,7 @@ class TestMetadata(base.TestCase):
def test_set_metadata(self):
response = mock.Mock()
response.status_code = 200
response.json.return_value = self.metadata_result
sess = mock.Mock()
sess.post.return_value = response
@ -71,7 +74,9 @@ class TestMetadata(base.TestCase):
def test_delete_metadata(self):
sess = mock.Mock()
sess.delete.return_value = None
response = mock.Mock()
response.status_code = 200
sess.delete.return_value = response
sot = server.Server(id=IDENTIFIER)
@ -83,3 +88,37 @@ class TestMetadata(base.TestCase):
"servers/IDENTIFIER/metadata/" + key,
headers={"Accept": ""},
)
def test_delete_metadata_error(self):
sess = mock.Mock()
response = mock.Mock()
response.status_code = 400
response.content = None
sess.delete.return_value = response
sot = server.Server(id=IDENTIFIER)
key = "hey"
self.assertRaises(
exceptions.BadRequestException,
sot.delete_metadata,
sess,
[key])
def test_set_metadata_error(self):
sess = mock.Mock()
response = mock.Mock()
response.status_code = 400
response.content = None
sess.post.return_value = response
sot = server.Server(id=IDENTIFIER)
set_meta = {"lol": "rofl"}
self.assertRaises(
exceptions.BadRequestException,
sot.set_metadata,
sess,
**set_meta)