diff --git a/cyborg/api/controllers/v2/arqs.py b/cyborg/api/controllers/v2/arqs.py index ef556c97..be2647ec 100644 --- a/cyborg/api/controllers/v2/arqs.py +++ b/cyborg/api/controllers/v2/arqs.py @@ -194,12 +194,9 @@ class ARQsController(base.CyborgController): arq['state'] != 'BindFailed'): unbound_flag = True if instance is not None and unbound_flag: - # Return HTTP code 'Locked' - # TODO(Sundar) This should return HTTP code 423 # if any ARQ for this instance is not resolved. - LOG.warning('HTTP Response should be 423') - pecan.response.status = http_client.LOCKED - return None + # Return HTTP code '423 Locked' + return wsme.api.Response(None, status_code=http_client.LOCKED) ret = ARQCollection.convert_with_links(arqs) LOG.info('[arqs:get_all] Returned: %s', ret) diff --git a/cyborg/tests/unit/api/controllers/v2/test_arqs.py b/cyborg/tests/unit/api/controllers/v2/test_arqs.py index e4760a0c..ac71eb4a 100644 --- a/cyborg/tests/unit/api/controllers/v2/test_arqs.py +++ b/cyborg/tests/unit/api/controllers/v2/test_arqs.py @@ -75,6 +75,16 @@ class TestARQsController(v2_test.APITestV2): for in_extarq, out_arq in zip(self.fake_extarqs, out_arqs): self._validate_arq(in_extarq.arq, out_arq) + # test get_all response "423 Locked" + instance_uuid = self.fake_extarqs[0].arq.instance_uuid + # set ARQ state to 'BindStarted' + self.fake_extarqs[0].arq.state = 'BindStarted' + mock_extarqs.return_value = self.fake_extarqs + url = '%s?instance=%s&bind_state=resolved' % ( + self.ARQ_URL, instance_uuid) + response = self.get_json(url, self.headers) + self.assertEqual(http_client.LOCKED, response.status_int) + @mock.patch('cyborg.objects.DeviceProfile.get_by_name') @mock.patch('cyborg.objects.ExtARQ.create') def test_create(self, mock_obj_extarq, mock_obj_dp):