From 6f16a2268ce9c7e17c09a3ebd5f48c544e93c808 Mon Sep 17 00:00:00 2001 From: Tzu-Mainn Chen Date: Tue, 19 Nov 2019 00:08:54 +0000 Subject: Allow node owners to administer associated ports Expose a port's node's owner to policy, giving Ironic admins the option of modifying the policy file to allow users specified by a node's owner field to perform API actions on that node's associated ports. Change-Id: I47ecbad9729f18dacc703e2a625ef3e92bfb00ed Story: #2006506 Task: #37539 --- ironic/tests/unit/db/test_ports.py | 49 +++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) (limited to 'ironic/tests/unit/db') diff --git a/ironic/tests/unit/db/test_ports.py b/ironic/tests/unit/db/test_ports.py index fa12c4c25..e0d2e1d66 100644 --- a/ironic/tests/unit/db/test_ports.py +++ b/ironic/tests/unit/db/test_ports.py @@ -28,7 +28,7 @@ class DbPortTestCase(base.DbTestCase): # This method creates a port for every test and # replaces a test for creating a port. super(DbPortTestCase, self).setUp() - self.node = db_utils.create_test_node() + self.node = db_utils.create_test_node(owner='12345') self.portgroup = db_utils.create_test_portgroup(node_id=self.node.id) self.port = db_utils.create_test_port(node_id=self.node.id, portgroup_id=self.portgroup.id) @@ -45,6 +45,17 @@ class DbPortTestCase(base.DbTestCase): res = self.dbapi.get_port_by_address(self.port.address) self.assertEqual(self.port.id, res.id) + def test_get_port_by_address_filter_by_owner(self): + res = self.dbapi.get_port_by_address(self.port.address, + owner=self.node.owner) + self.assertEqual(self.port.id, res.id) + + def test_get_port_by_address_filter_by_owner_no_match(self): + self.assertRaises(exception.PortNotFound, + self.dbapi.get_port_by_address, + self.port.address, + owner='54321') + def test_get_port_list(self): uuids = [] for i in range(1, 6): @@ -72,10 +83,36 @@ class DbPortTestCase(base.DbTestCase): self.assertRaises(exception.InvalidParameterValue, self.dbapi.get_port_list, sort_key='foo') + def test_get_port_list_filter_by_node_owner(self): + uuids = [] + for i in range(1, 3): + port = db_utils.create_test_port(uuid=uuidutils.generate_uuid(), + address='52:54:00:cf:2d:4%s' % i) + for i in range(4, 6): + port = db_utils.create_test_port(uuid=uuidutils.generate_uuid(), + node_id=self.node.id, + address='52:54:00:cf:2d:4%s' % i) + uuids.append(str(port.uuid)) + # Also add the uuid for the port created in setUp() + uuids.append(str(self.port.uuid)) + res = self.dbapi.get_port_list(owner=self.node.owner) + res_uuids = [r.uuid for r in res] + self.assertCountEqual(uuids, res_uuids) + def test_get_ports_by_node_id(self): res = self.dbapi.get_ports_by_node_id(self.node.id) self.assertEqual(self.port.address, res[0].address) + def test_get_ports_by_node_id_filter_by_node_owner(self): + res = self.dbapi.get_ports_by_node_id(self.node.id, + owner=self.node.owner) + self.assertEqual(self.port.address, res[0].address) + + def test_get_ports_by_node_id_filter_by_node_owner_no_match(self): + res = self.dbapi.get_ports_by_node_id(self.node.id, + owner='54321') + self.assertEqual([], res) + def test_get_ports_by_node_id_that_does_not_exist(self): self.assertEqual([], self.dbapi.get_ports_by_node_id(99)) @@ -83,6 +120,16 @@ class DbPortTestCase(base.DbTestCase): res = self.dbapi.get_ports_by_portgroup_id(self.portgroup.id) self.assertEqual(self.port.address, res[0].address) + def test_get_ports_by_portgroup_id_filter_by_node_owner(self): + res = self.dbapi.get_ports_by_portgroup_id(self.portgroup.id, + owner=self.node.owner) + self.assertEqual(self.port.address, res[0].address) + + def test_get_ports_by_portgroup_id_filter_by_node_owner_no_match(self): + res = self.dbapi.get_ports_by_portgroup_id(self.portgroup.id, + owner='54321') + self.assertEqual([], res) + def test_get_ports_by_portgroup_id_that_does_not_exist(self): self.assertEqual([], self.dbapi.get_ports_by_portgroup_id(99)) -- cgit v1.2.1