diff --git a/quantum/db/api.py b/quantum/db/api.py index de8c452996..deef3c06e5 100644 --- a/quantum/db/api.py +++ b/quantum/db/api.py @@ -145,7 +145,11 @@ def port_create(net_id, state=None, op_status=OperationalStatus.UNKNOWN): session = get_session() with session.begin(): 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.flush() return port diff --git a/quantum/tests/unit/_test_api.py b/quantum/tests/unit/_test_api.py index 7a444c09db..4755ad9f77 100644 --- a/quantum/tests/unit/_test_api.py +++ b/quantum/tests/unit/_test_api.py @@ -526,6 +526,14 @@ class BaseAPIOperationsTest(AbstractAPITest): custom_req_body=bad_body, expected_res_status=400) 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): LOG.debug("_test_delete_port - fmt:%s - START", fmt) content_type = "application/%s" % fmt @@ -1032,6 +1040,12 @@ class BaseAPIOperationsTest(AbstractAPITest): def test_create_port_badrequest_xml(self): 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): self._test_delete_port('xml')