diff options
author | Zuul <zuul@review.opendev.org> | 2020-05-19 19:10:30 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2020-05-19 19:10:30 +0000 |
commit | ff8a0c71b03d5f4b8d16b46a1801e4a7ccf97181 (patch) | |
tree | ce4ab45a1d6fa80ac9719c12f817e045348f836a /ironic/tests/unit | |
parent | 4688d62fd4f644e07f7e0f6693a77639fc57bd25 (diff) | |
parent | 653d4e4ef55bf5acb315339eb79018c0e432c210 (diff) | |
download | ironic-ff8a0c71b03d5f4b8d16b46a1801e4a7ccf97181.tar.gz |
Merge "Add `network_data` field to ironic node object"
Diffstat (limited to 'ironic/tests/unit')
-rw-r--r-- | ironic/tests/unit/api/controllers/v1/test_node.py | 55 | ||||
-rw-r--r-- | ironic/tests/unit/db/sqlalchemy/test_migrations.py | 7 | ||||
-rw-r--r-- | ironic/tests/unit/db/utils.py | 1 | ||||
-rw-r--r-- | ironic/tests/unit/objects/test_objects.py | 2 |
4 files changed, 64 insertions, 1 deletions
diff --git a/ironic/tests/unit/api/controllers/v1/test_node.py b/ironic/tests/unit/api/controllers/v1/test_node.py index fa10846c9..99f3cf34f 100644 --- a/ironic/tests/unit/api/controllers/v1/test_node.py +++ b/ironic/tests/unit/api/controllers/v1/test_node.py @@ -16,6 +16,7 @@ Tests for the API /nodes/ methods. import datetime from http import client as http_client import json +import os from urllib import parse as urlparse import fixtures @@ -42,12 +43,20 @@ from ironic.common import states from ironic.conductor import rpcapi from ironic import objects from ironic.objects import fields as obj_fields +from ironic import tests as tests_root from ironic.tests import base from ironic.tests.unit.api import base as test_api_base from ironic.tests.unit.api import utils as test_api_utils from ironic.tests.unit.objects import utils as obj_utils +with open( + os.path.join( + os.path.dirname(tests_root.__file__), + 'json_samples', 'network_data.json')) as fl: + NETWORK_DATA = json.load(fl) + + class TestNodeObject(base.TestCase): def test_node_init(self): @@ -138,6 +147,7 @@ class TestListNodes(test_api_base.BaseApiTest): self.assertNotIn('retired', data['nodes'][0]) self.assertNotIn('retired_reason', data['nodes'][0]) self.assertNotIn('lessee', data['nodes'][0]) + self.assertNotIn('network_data', data['nodes'][0]) def test_get_one(self): node = obj_utils.create_test_node(self.context, @@ -403,6 +413,19 @@ class TestListNodes(test_api_base.BaseApiTest): headers={api_base.Version.string: '1.65'}) self.assertEqual(data['lessee'], "some-lucky-project") + def test_node_network_data_hidden_in_lower_version(self): + self._test_node_field_hidden_in_lower_version('network_data', + '1.65', '1.66') + + def test_node_network_data(self): + node = obj_utils.create_test_node( + self.context, network_data=NETWORK_DATA, + provision_state='active', + uuid=uuidutils.generate_uuid()) + data = self.get_json('/nodes/%s' % node.uuid, + headers={api_base.Version.string: '1.66'}) + self.assertEqual(data['network_data'], NETWORK_DATA) + def test_get_one_custom_fields(self): node = obj_utils.create_test_node(self.context, chassis_id=self.chassis.id) @@ -684,6 +707,7 @@ class TestListNodes(test_api_base.BaseApiTest): self.assertIn('allocation_uuid', data['nodes'][0]) self.assertIn('retired', data['nodes'][0]) self.assertIn('retired_reason', data['nodes'][0]) + self.assertIn('network_data', data['nodes'][0]) def test_detail_using_query(self): node = obj_utils.create_test_node(self.context, @@ -722,6 +746,7 @@ class TestListNodes(test_api_base.BaseApiTest): self.assertNotIn('chassis_id', data['nodes'][0]) self.assertIn('retired', data['nodes'][0]) self.assertIn('retired_reason', data['nodes'][0]) + self.assertIn('network_data', data['nodes'][0]) def test_detail_query_false(self): obj_utils.create_test_node(self.context) @@ -3655,6 +3680,36 @@ class TestPatch(test_api_base.BaseApiTest): self.assertEqual('application/json', response.content_type) self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code) + def test_update_network_data(self): + node = obj_utils.create_test_node(self.context, + uuid=uuidutils.generate_uuid(), + provision_state='active') + self.mock_update_node.return_value = node + headers = {api_base.Version.string: '1.66'} + + response = self.patch_json('/nodes/%s' % node.uuid, + [{'path': '/network_data', + 'value': NETWORK_DATA, + 'op': 'replace'}], + headers=headers) + self.assertEqual('application/json', response.content_type) + self.assertEqual(http_client.OK, response.status_code) + + def test_update_network_data_old_api(self): + node = obj_utils.create_test_node(self.context, + uuid=uuidutils.generate_uuid()) + self.mock_update_node.return_value = node + headers = {api_base.Version.string: '1.62'} + + response = self.patch_json('/nodes/%s' % node.uuid, + [{'path': '/network_data', + 'value': NETWORK_DATA, + 'op': 'replace'}], + headers=headers, + expect_errors=True) + self.assertEqual('application/json', response.content_type) + self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code) + @mock.patch.object(api_utils, 'check_multiple_node_policies_and_retrieve', autospec=True) def test_patch_policy_update(self, mock_cmnpar): diff --git a/ironic/tests/unit/db/sqlalchemy/test_migrations.py b/ironic/tests/unit/db/sqlalchemy/test_migrations.py index fdffe4b99..39293c6ac 100644 --- a/ironic/tests/unit/db/sqlalchemy/test_migrations.py +++ b/ironic/tests/unit/db/sqlalchemy/test_migrations.py @@ -969,6 +969,13 @@ class MigrationCheckersMixin(object): col_names = [column.name for column in allocations.c] self.assertIn('owner', col_names) + def _check_cf1a80fdb352(self, engine, data): + nodes = db_utils.get_table(engine, 'nodes') + col_names = [column.name for column in nodes.c] + self.assertIn('network_data', col_names) + self.assertIsInstance( + nodes.c.network_data.type, sqlalchemy.types.String) + def _pre_upgrade_cd2c80feb331(self, engine): data = { 'node_uuid': uuidutils.generate_uuid(), diff --git a/ironic/tests/unit/db/utils.py b/ironic/tests/unit/db/utils.py index a7b720f4b..96254889d 100644 --- a/ironic/tests/unit/db/utils.py +++ b/ironic/tests/unit/db/utils.py @@ -228,6 +228,7 @@ def get_test_node(**kw): 'retired': kw.get('retired', False), 'retired_reason': kw.get('retired_reason', None), 'lessee': kw.get('lessee', None), + 'network_data': kw.get('network_data'), } for iface in drivers_base.ALL_INTERFACES: diff --git a/ironic/tests/unit/objects/test_objects.py b/ironic/tests/unit/objects/test_objects.py index 3e2b9a8d4..1320d96d3 100644 --- a/ironic/tests/unit/objects/test_objects.py +++ b/ironic/tests/unit/objects/test_objects.py @@ -676,7 +676,7 @@ class TestObject(_LocalTest, _TestObject): # version bump. It is an MD5 hash of the object fields and remotable methods. # The fingerprint values should only be changed if there is a version bump. expected_object_fingerprints = { - 'Node': '1.34-ae873e627cf30bf28fe9f98a807b6200', + 'Node': '1.35-aee8ecf5c4d0ed590eb484762aee7fca', 'MyObj': '1.5-9459d30d6954bffc7a9afd347a807ca6', 'Chassis': '1.3-d656e039fd8ae9f34efc232ab3980905', 'Port': '1.9-0cb9202a4ec442e8c0d87a324155eaaf', |