summaryrefslogtreecommitdiff
path: root/ironic/tests
diff options
context:
space:
mode:
authorKaifeng Wang <kaifeng.w@gmail.com>2020-11-28 01:07:18 +0800
committerKaifeng Wang <kaifeng.w@gmail.com>2020-11-29 13:37:55 +0800
commitb7ddeb314d98961b5d169f5356a451eec78c8cc7 (patch)
tree9c61c95a37ae1379dcf666da137a34a33075eb21 /ironic/tests
parenta08da8551a66815bedef7c6444fde5f9082a6aea (diff)
downloadironic-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.py5
-rw-r--r--ironic/tests/unit/db/test_ports.py7
-rw-r--r--ironic/tests/unit/db/utils.py1
-rw-r--r--ironic/tests/unit/objects/test_objects.py4
-rw-r--r--ironic/tests/unit/objects/test_port.py73
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())