Return appropriate error for invalid-port state in create port API.

Fixes ovs-plugin to return appropriate error code when create port API is passed a port state value other than ACTIVE or DOWN. Fixes bug 919265.

Also added unit-test to test the behavior and verified it using ovs-plugin with devstack.

Change-Id: Ibd4e7bfdf4483c7ad1ef4ca70a336cb164493ae1
This commit is contained in:
Madhav Puri 2012-02-23 22:44:07 -08:00
parent a945d1a304
commit b9805bd234
2 changed files with 19 additions and 1 deletions

View File

@ -145,7 +145,11 @@ def port_create(net_id, state=None, op_status=OperationalStatus.UNKNOWN):
session = get_session() session = get_session()
with session.begin(): with session.begin():
port = models.Port(net_id, op_status) port = models.Port(net_id, op_status)
port['state'] = state or 'DOWN' if state is None:
state = 'DOWN'
elif state not in ('ACTIVE', 'DOWN'):
raise q_exc.StateInvalid(port_state=state)
port['state'] = state
session.add(port) session.add(port)
session.flush() session.flush()
return port return port

View File

@ -526,6 +526,14 @@ class BaseAPIOperationsTest(AbstractAPITest):
custom_req_body=bad_body, expected_res_status=400) custom_req_body=bad_body, expected_res_status=400)
LOG.debug("_test_create_port_badrequest - fmt:%s - END", fmt) LOG.debug("_test_create_port_badrequest - fmt:%s - END", fmt)
def _test_create_port_badportstate(self, fmt):
LOG.debug("_test_create_port_badportstate - fmt:%s - START", fmt)
network_id = self._create_network(fmt)
port_state = "BADSTATE"
self._create_port(network_id, port_state, fmt,
expected_res_status=self._port_state_invalid_code)
LOG.debug("_test_create_port_badportstate - fmt:%s - END", fmt)
def _test_delete_port(self, fmt): def _test_delete_port(self, fmt):
LOG.debug("_test_delete_port - fmt:%s - START", fmt) LOG.debug("_test_delete_port - fmt:%s - START", fmt)
content_type = "application/%s" % fmt content_type = "application/%s" % fmt
@ -1032,6 +1040,12 @@ class BaseAPIOperationsTest(AbstractAPITest):
def test_create_port_badrequest_xml(self): def test_create_port_badrequest_xml(self):
self._test_create_port_badrequest('xml') self._test_create_port_badrequest('xml')
def test_create_port_badportstate_json(self):
self._test_create_port_badportstate('json')
def test_create_port_badportstate_xml(self):
self._test_create_port_badportstate('xml')
def test_delete_port_xml(self): def test_delete_port_xml(self):
self._test_delete_port('xml') self._test_delete_port('xml')