Fix error in delete_composednode
Cureently delete_composednode method doesn't work because it call a url like '/redfish/v1/Nodes101'. Change-Id: Ib2a961f3f97de028018ff8e5269f875eae329d01 Closes-Bug: #1652784
This commit is contained in:
parent
e32e99f254
commit
978dff9fbe
@ -328,10 +328,13 @@ def compose_node(request_body):
|
||||
|
||||
def delete_composednode(nodeid):
|
||||
nodes_url = get_base_resource_url("Nodes")
|
||||
delete_url = nodes_url + str(nodeid)
|
||||
delete_url = nodes_url + '/' + str(nodeid)
|
||||
resp = send_request(delete_url, "DELETE")
|
||||
if resp.status_code == http_client.NO_CONTENT:
|
||||
return exception.confirmation("", "DELETED"), resp.status_code
|
||||
# we should return 200 status code instead of 204, because 204 means
|
||||
# 'No Content', the message in resp_dict will be ignored in that way
|
||||
resp_dict = exception.confirmation(confirm_detail="DELETED")
|
||||
return utils.make_response(http_client.OK, resp_dict)
|
||||
else:
|
||||
raise exception.RedfishException(resp.json(),
|
||||
status_code=resp.status_code)
|
||||
|
@ -145,3 +145,21 @@ def fake_system_ethernet_interfaces():
|
||||
{"@odata.id": "/redfish/v1/Systems/1/EthernetInterfaces/2"}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
def fake_delete_composednode_ok():
|
||||
return {}
|
||||
|
||||
|
||||
def fake_delete_composednode_fail():
|
||||
return {
|
||||
"error": {
|
||||
"code": "Base.1.0.UnknownException",
|
||||
"message": "The specified node could not be disassembled",
|
||||
"@Message.ExtendedInfo": [{
|
||||
"Message": "Disassembly failed: Could not power off composed "
|
||||
"node: ComputerSystem 33 reset action"
|
||||
"(GracefulShutdown) failed"
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import mock
|
||||
from requests.compat import urljoin
|
||||
from six.moves import http_client
|
||||
|
||||
from valence.common import exception
|
||||
from valence import config as cfg
|
||||
from valence.redfish import redfish
|
||||
from valence.tests.unit.fakes import redfish_fakes as fakes
|
||||
@ -184,3 +185,36 @@ class TestRedfish(TestCase):
|
||||
expected = '600'
|
||||
result = redfish.system_storage_details("/redfish/v1/Systems/test")
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
@mock.patch('valence.common.utils.make_response')
|
||||
@mock.patch('valence.redfish.redfish.get_base_resource_url')
|
||||
@mock.patch('valence.redfish.redfish.send_request')
|
||||
def test_delete_composednode_ok(self, mock_request, mock_get_url,
|
||||
mock_make_response):
|
||||
mock_get_url.return_value = '/redfish/v1/Nodes'
|
||||
delete_result = fakes.fake_delete_composednode_ok()
|
||||
fake_delete_resopnse = fakes.mock_request_get(delete_result,
|
||||
http_client.NO_CONTENT)
|
||||
mock_request.return_value = fake_delete_resopnse
|
||||
redfish.delete_composednode(101)
|
||||
mock_request.assert_called_with('/redfish/v1/Nodes/101', 'DELETE')
|
||||
expected_content = {
|
||||
"code": "",
|
||||
"detail": "DELETED",
|
||||
"request_id": exception.FAKE_REQUEST_ID,
|
||||
}
|
||||
mock_make_response.assert_called_with(http_client.OK, expected_content)
|
||||
|
||||
@mock.patch('valence.common.utils.make_response')
|
||||
@mock.patch('valence.redfish.redfish.get_base_resource_url')
|
||||
@mock.patch('valence.redfish.redfish.send_request')
|
||||
def test_delete_composednode_fail(self, mock_request, mock_get_url,
|
||||
mock_make_response):
|
||||
mock_get_url.return_value = '/redfish/v1/Nodes'
|
||||
delete_result = fakes.fake_delete_composednode_fail()
|
||||
fake_resp = fakes.mock_request_get(delete_result,
|
||||
http_client.INTERNAL_SERVER_ERROR)
|
||||
mock_request.return_value = fake_resp
|
||||
self.assertRaises(exception.RedfishException,
|
||||
redfish.delete_composednode, 101)
|
||||
self.assertFalse(mock_make_response.called)
|
||||
|
Loading…
x
Reference in New Issue
Block a user