diff options
author | Kaifeng Wang <kaifeng.w@gmail.com> | 2020-11-28 01:07:18 +0800 |
---|---|---|
committer | Kaifeng Wang <kaifeng.w@gmail.com> | 2020-11-29 13:37:55 +0800 |
commit | b7ddeb314d98961b5d169f5356a451eec78c8cc7 (patch) | |
tree | 9c61c95a37ae1379dcf666da137a34a33075eb21 /ironic/tests | |
parent | a08da8551a66815bedef7c6444fde5f9082a6aea (diff) | |
download | ironic-b7ddeb314d98961b5d169f5356a451eec78c8cc7.tar.gz |
Support port name
MAC address is not user friendly for port management, having
a name field is also a feature parity with other resources.
This patch implements db related change.
Change-Id: Ibad9a1b6bbfddc0af1950def4e27db3757904cb1
Story: 2003091
Task: 23180
Diffstat (limited to 'ironic/tests')
-rw-r--r-- | ironic/tests/unit/db/sqlalchemy/test_migrations.py | 5 | ||||
-rw-r--r-- | ironic/tests/unit/db/test_ports.py | 7 | ||||
-rw-r--r-- | ironic/tests/unit/db/utils.py | 1 | ||||
-rw-r--r-- | ironic/tests/unit/objects/test_objects.py | 4 | ||||
-rw-r--r-- | ironic/tests/unit/objects/test_port.py | 73 |
5 files changed, 84 insertions, 6 deletions
diff --git a/ironic/tests/unit/db/sqlalchemy/test_migrations.py b/ironic/tests/unit/db/sqlalchemy/test_migrations.py index 39293c6ac..7a2641323 100644 --- a/ironic/tests/unit/db/sqlalchemy/test_migrations.py +++ b/ironic/tests/unit/db/sqlalchemy/test_migrations.py @@ -1002,6 +1002,11 @@ class MigrationCheckersMixin(object): col_names = [column.name for column in nodes.c] self.assertIn('lessee', col_names) + def _check_c0455649680c(self, engine, data): + ports = db_utils.get_table(engine, 'ports') + col_names = [column.name for column in ports.c] + self.assertIn('name', col_names) + def test_upgrade_and_version(self): with patch_with_engine(self.engine): self.migration_api.upgrade('head') diff --git a/ironic/tests/unit/db/test_ports.py b/ironic/tests/unit/db/test_ports.py index d2434d603..18b8a9032 100644 --- a/ironic/tests/unit/db/test_ports.py +++ b/ironic/tests/unit/db/test_ports.py @@ -32,7 +32,8 @@ class DbPortTestCase(base.DbTestCase): lessee='54321') 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) + portgroup_id=self.portgroup.id, + name='port-name') def test_get_port_by_id(self): res = self.dbapi.get_port_by_id(self.port.id) @@ -68,6 +69,10 @@ class DbPortTestCase(base.DbTestCase): self.port.address, project='55555') + def test_get_port_by_name(self): + res = self.dbapi.get_port_by_name(self.port.name) + self.assertEqual(self.port.id, res.id) + def test_get_port_list(self): uuids = [] for i in range(1, 6): diff --git a/ironic/tests/unit/db/utils.py b/ironic/tests/unit/db/utils.py index 96254889d..436849054 100644 --- a/ironic/tests/unit/db/utils.py +++ b/ironic/tests/unit/db/utils.py @@ -277,6 +277,7 @@ def get_test_port(**kw): 'internal_info': kw.get('internal_info', {"bar": "buzz"}), 'physical_network': kw.get('physical_network'), 'is_smartnic': kw.get('is_smartnic', False), + 'name': kw.get('name'), } diff --git a/ironic/tests/unit/objects/test_objects.py b/ironic/tests/unit/objects/test_objects.py index 3852a9abd..7b7788933 100644 --- a/ironic/tests/unit/objects/test_objects.py +++ b/ironic/tests/unit/objects/test_objects.py @@ -679,7 +679,7 @@ expected_object_fingerprints = { 'Node': '1.35-aee8ecf5c4d0ed590eb484762aee7fca', 'MyObj': '1.5-9459d30d6954bffc7a9afd347a807ca6', 'Chassis': '1.3-d656e039fd8ae9f34efc232ab3980905', - 'Port': '1.9-0cb9202a4ec442e8c0d87a324155eaaf', + 'Port': '1.10-67381b065c597c8d3a13c5dbc6243c33', 'Portgroup': '1.4-71923a81a86743b313b190f5c675e258', 'Conductor': '1.3-d3f53e853b4d58cae5bfbd9a8341af4a', 'EventType': '1.1-aa2ba1afd38553e3880c267404e8d370', @@ -700,7 +700,7 @@ expected_object_fingerprints = { 'NodeCRUDNotification': '1.0-59acc533c11d306f149846f922739c15', 'NodeCRUDPayload': '1.13-8f673253ff8d7389897a6a80d224ac33', 'PortCRUDNotification': '1.0-59acc533c11d306f149846f922739c15', - 'PortCRUDPayload': '1.3-21235916ed54a91b2a122f59571194e7', + 'PortCRUDPayload': '1.4-9411a1701077ae9dc0aea27d6bf586fc', 'NodeMaintenanceNotification': '1.0-59acc533c11d306f149846f922739c15', 'NodeConsoleNotification': '1.0-59acc533c11d306f149846f922739c15', 'PortgroupCRUDNotification': '1.0-59acc533c11d306f149846f922739c15', diff --git a/ironic/tests/unit/objects/test_port.py b/ironic/tests/unit/objects/test_port.py index 43c58876e..43459c958 100644 --- a/ironic/tests/unit/objects/test_port.py +++ b/ironic/tests/unit/objects/test_port.py @@ -34,7 +34,7 @@ class TestPortObject(db_base.DbTestCase, obj_utils.SchemasTestMixIn): def setUp(self): super(TestPortObject, self).setUp() - self.fake_port = db_utils.get_test_port() + self.fake_port = db_utils.get_test_port(name='port-name') def test_get_by_id(self): port_id = self.fake_port['id'] @@ -69,9 +69,20 @@ class TestPortObject(db_base.DbTestCase, obj_utils.SchemasTestMixIn): mock_get_port.assert_called_once_with(address, project=None) self.assertEqual(self.context, port._context) - def test_get_bad_id_and_uuid_and_address(self): + def test_get_by_name(self): + name = self.fake_port['name'] + with mock.patch.object(self.dbapi, 'get_port_by_name', + autospec=True) as mock_get_port: + mock_get_port.return_value = self.fake_port + + port = objects.Port.get(self.context, name) + + mock_get_port.assert_called_once_with(name) + self.assertEqual(self.context, port._context) + + def test_get_bad_id_and_uuid_and_name_and_address(self): self.assertRaises(exception.InvalidIdentity, - objects.Port.get, self.context, 'not-a-uuid') + objects.Port.get, self.context, '#not-valid') def test_create(self): port = objects.Port(self.context, **self.fake_port) @@ -349,3 +360,59 @@ class TestConvertToVersion(db_base.DbTestCase): port._convert_to_version("1.8", False) self.assertFalse(port.is_smartnic) self.assertNotIn('is_smartnic', port.obj_get_changes()) + + def test_name_supported_missing(self): + # name not set, should be set to default. + port = objects.Port(self.context, **self.fake_port) + delattr(port, 'name') + port.obj_reset_changes() + port._convert_to_version("1.10") + self.assertIsNone(port.name) + self.assertIn('name', port.obj_get_changes()) + self.assertIsNone(port.obj_get_changes()['name']) + + def test_name_supported_set(self): + # Physical network set, no change required. + port = objects.Port(self.context, **self.fake_port) + port.name = 'meow' + port.obj_reset_changes() + port._convert_to_version("1.10") + self.assertEqual('meow', port.name) + self.assertNotIn('name', port.obj_get_changes()) + + def test_name_unsupported_missing(self): + # name not set, no change required. + port = objects.Port(self.context, **self.fake_port) + delattr(port, 'name') + port.obj_reset_changes() + port._convert_to_version("1.9") + self.assertNotIn('name', port) + self.assertNotIn('name', port.obj_get_changes()) + + def test_name_unsupported_set_remove(self): + # name set, should be removed. + port = objects.Port(self.context, **self.fake_port) + port.name = 'meow' + port.obj_reset_changes() + port._convert_to_version("1.9") + self.assertNotIn('name', port) + self.assertNotIn('name', port.obj_get_changes()) + + def test_name_unsupported_set_no_remove_non_default(self): + # name set, should be set to default. + port = objects.Port(self.context, **self.fake_port) + port.name = 'meow' + port.obj_reset_changes() + port._convert_to_version("1.9", False) + self.assertIsNone(port.name) + self.assertIn('name', port.obj_get_changes()) + self.assertIsNone(port.obj_get_changes()['name']) + + def test_name_unsupported_set_no_remove_default(self): + # name set, no change required. + port = objects.Port(self.context, **self.fake_port) + port.name = None + port.obj_reset_changes() + port._convert_to_version("1.9", False) + self.assertIsNone(port.name) + self.assertNotIn('name', port.obj_get_changes()) |