From 93ffb9e08eac0c361c8f097b0d5f73a933431f5f Mon Sep 17 00:00:00 2001 From: Yuriy Zveryanskyy Date: Mon, 22 Sep 2014 17:33:15 +0300 Subject: [PATCH] Do not return 'id' in REST API error messages REST API should return 'uuid' instead of 'id' in error messages. Closes-Bug: #1372499 Change-Id: I0b5c8fce3e50da2a9fa42f6407409dcf6332fa45 --- ironic/db/sqlalchemy/api.py | 2 +- ironic/objects/chassis.py | 2 +- ironic/objects/node.py | 2 +- ironic/objects/port.py | 2 +- ironic/tests/api/v1/test_chassis.py | 1 + ironic/tests/api/v1/test_ports.py | 24 +++++++++++++++--------- 6 files changed, 20 insertions(+), 13 deletions(-) diff --git a/ironic/db/sqlalchemy/api.py b/ironic/db/sqlalchemy/api.py index 45d4bbcabe..3a74605f80 100644 --- a/ironic/db/sqlalchemy/api.py +++ b/ironic/db/sqlalchemy/api.py @@ -137,7 +137,7 @@ def _check_port_change_forbidden(port, session): query = query.filter_by(id=node_id) node_ref = query.one() if node_ref['reservation'] is not None: - raise exception.NodeLocked(node=node_id, + raise exception.NodeLocked(node=node_ref['uuid'], host=node_ref['reservation']) diff --git a/ironic/objects/chassis.py b/ironic/objects/chassis.py index 98a560e735..c19decf20c 100644 --- a/ironic/objects/chassis.py +++ b/ironic/objects/chassis.py @@ -140,7 +140,7 @@ class Chassis(base.IronicObject): A context should be set when instantiating the object, e.g.: Chassis(context) """ - self.dbapi.destroy_chassis(self.id) + self.dbapi.destroy_chassis(self.uuid) self.obj_reset_changes() @base.remotable diff --git a/ironic/objects/node.py b/ironic/objects/node.py index 1730a96342..df8911051d 100644 --- a/ironic/objects/node.py +++ b/ironic/objects/node.py @@ -205,7 +205,7 @@ class Node(base.IronicObject): A context should be set when instantiating the object, e.g.: Node(context) """ - self.dbapi.destroy_node(self.id) + self.dbapi.destroy_node(self.uuid) self.obj_reset_changes() @base.remotable diff --git a/ironic/objects/port.py b/ironic/objects/port.py index 72b587e1c1..2b5cb9aff3 100644 --- a/ironic/objects/port.py +++ b/ironic/objects/port.py @@ -170,7 +170,7 @@ class Port(base.IronicObject): A context should be set when instantiating the object, e.g.: Port(context) """ - self.dbapi.destroy_port(self.id) + self.dbapi.destroy_port(self.uuid) self.obj_reset_changes() @base.remotable diff --git a/ironic/tests/api/v1/test_chassis.py b/ironic/tests/api/v1/test_chassis.py index b0dbb93b49..7dbff49876 100644 --- a/ironic/tests/api/v1/test_chassis.py +++ b/ironic/tests/api/v1/test_chassis.py @@ -377,6 +377,7 @@ class TestDelete(base.FunctionalTest): self.assertEqual(400, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['error_message']) + self.assertIn(chassis.uuid, response.json['error_message']) def test_delete_chassis_not_found(self): uuid = utils.generate_uuid() diff --git a/ironic/tests/api/v1/test_ports.py b/ironic/tests/api/v1/test_ports.py index 882b8dd616..a3a0a62c2e 100644 --- a/ironic/tests/api/v1/test_ports.py +++ b/ironic/tests/api/v1/test_ports.py @@ -604,22 +604,28 @@ class TestDelete(base.FunctionalTest): def setUp(self): super(TestDelete, self).setUp() - self.node = obj_utils.create_test_node(context.get_admin_context()) - obj_utils.create_test_port(self.context) + self.node = obj_utils.create_test_node(self.context) + self.port = obj_utils.create_test_port(self.context) def test_delete_port_byid(self): - pdict = dbutils.get_test_port() - self.delete('/ports/%s' % pdict['uuid']) - response = self.get_json('/ports/%s' % pdict['uuid'], + self.delete('/ports/%s' % self.port.uuid) + response = self.get_json('/ports/%s' % self.port.uuid, expect_errors=True) self.assertEqual(404, response.status_int) self.assertEqual('application/json', response.content_type) - self.assertTrue(response.json['error_message']) + self.assertIn(self.port.uuid, response.json['error_message']) def test_delete_port_byaddress(self): - pdict = dbutils.get_test_port() - response = self.delete('/ports/%s' % pdict['address'], + response = self.delete('/ports/%s' % self.port.address, expect_errors=True) self.assertEqual(400, response.status_int) self.assertEqual('application/json', response.content_type) - self.assertIn(pdict['address'], response.json['error_message']) + self.assertIn(self.port.address, response.json['error_message']) + + def test_delete_port_node_locked(self): + self.node.reserve(self.context, 'fake', self.node.uuid) + response = self.delete('/ports/%s' % self.port.uuid, + expect_errors=True) + self.assertEqual(409, response.status_int) + self.assertEqual('application/json', response.content_type) + self.assertIn(self.node.uuid, response.json['error_message'])