From 72417706034ccce75450e10fcac57100b1f8d1d5 Mon Sep 17 00:00:00 2001 From: Julia Kreger Date: Thu, 22 Feb 2024 13:38:33 -0800 Subject: [PATCH] Invoke tests with fake interfaces So it turns out as highlighted by looking at bug 2054722 that you can end up creating nodes with "fake" hardware nodes in the default config we test in the gate, which end up with "fake" as the deploy_interface, but if you try to run the same test against a production configured ironic deployment, it fails because it likely ends up with a default of "agent" as the deploy_interface. Unfortunately, a review of test logs also reveals that the same basic problem exists with the network_interface field *as well*, where tests were written expecting the default to be a fake or noop interface out of the box. Note: This depends-on is to be removed before mering, it is enable additional issues to be identified. Change-Id: Id0051d9b39bc0f46e3afee5bbfa8a2062114df80 --- .../tests/api/admin/test_allocations.py | 21 ++++++++++++++----- .../tests/api/admin/test_nodes.py | 11 ++++++++-- .../tests/api/admin/test_nodestates.py | 20 +++++++++++++----- .../tests/api/admin/test_portgroups.py | 3 ++- .../tests/api/admin/test_ports.py | 6 ++++-- .../tests/api/admin/test_ports_negative.py | 3 ++- .../tests/api/rbac_defaults/test_nodes.py | 8 +++++-- 7 files changed, 54 insertions(+), 18 deletions(-) diff --git a/ironic_tempest_plugin/tests/api/admin/test_allocations.py b/ironic_tempest_plugin/tests/api/admin/test_allocations.py index f9e2595..b9ab70b 100644 --- a/ironic_tempest_plugin/tests/api/admin/test_allocations.py +++ b/ironic_tempest_plugin/tests/api/admin/test_allocations.py @@ -38,8 +38,15 @@ class Base(base.BaseBaremetalTest): self.resource_class = uuidutils.generate_uuid() _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid'], - resource_class=self.resource_class) + _, self.node = self.create_node( + self.chassis['uuid'], + resource_class=self.resource_class, + # Fake deploy interface to avoid stop when automated + # cleaning is on. + deploy_interface='fake', + # noop network interface in case a cleaning/provisioning network + # is not defined. + network_interface='noop') self.provide_and_power_off_node(self.node['uuid']) @@ -75,7 +82,8 @@ class TestAllocations(Base): @decorators.idempotent_id('eb074d06-e5f4-4fb4-b992-c9929db488ae') def test_create_allocation_with_traits(self): _, node2 = self.create_node(self.chassis['uuid'], - resource_class=self.resource_class) + resource_class=self.resource_class, + deploy_interface='fake') self.client.set_node_traits(node2['uuid'], ['CUSTOM_MEOW']) self.provide_and_power_off_node(node2['uuid']) @@ -99,7 +107,9 @@ class TestAllocations(Base): node_name = 'allocation-test-1' _, node2 = self.create_node(self.chassis['uuid'], resource_class=self.resource_class, - name=node_name) + name=node_name, + deploy_interface='fake', + network_interface='noop') self.provide_and_power_off_node(node2['uuid']) _, body = self.create_allocation(self.resource_class, @@ -203,7 +213,8 @@ class TestAllocations(Base): @decorators.idempotent_id('2378727f-77c3-4289-9562-bd2f3b147a60') def test_create_allocation_node_mismatch(self): _, node2 = self.create_node(self.chassis['uuid'], - resource_class=self.resource_class + 'alt') + resource_class=self.resource_class + 'alt', + deploy_interface='fake') # Mismatch between the resource class and the candidate node _, body = self.create_allocation( self.resource_class, candidate_nodes=[node2['uuid']]) diff --git a/ironic_tempest_plugin/tests/api/admin/test_nodes.py b/ironic_tempest_plugin/tests/api/admin/test_nodes.py index d6d1833..c3408ec 100644 --- a/ironic_tempest_plugin/tests/api/admin/test_nodes.py +++ b/ironic_tempest_plugin/tests/api/admin/test_nodes.py @@ -1044,7 +1044,12 @@ class TestNodeProtected(base.BaseBaremetalTest): super(TestNodeProtected, self).setUp() _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node( + self.chassis['uuid'], + # Fake deploy interface to bypass cleaning in the test flow. + deploy_interface='fake', + # Noop network interface to skip networking involvement. + network_interface='noop') self.provide_node(self.node['uuid']) @decorators.idempotent_id('52f0cb1c-ad7b-43dc-8e22-a76438b67716') @@ -1114,7 +1119,9 @@ class TestNodesProtectedOldApi(base.BaseBaremetalTest): def setUp(self): super(TestNodesProtectedOldApi, self).setUp() _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node(self.chassis['uuid'], + deploy_interface='fake', + network_interface='noop') self.deploy_node(self.node['uuid']) _, self.node = self.client.show_node(self.node['uuid']) diff --git a/ironic_tempest_plugin/tests/api/admin/test_nodestates.py b/ironic_tempest_plugin/tests/api/admin/test_nodestates.py index 1da978d..d03a876 100644 --- a/ironic_tempest_plugin/tests/api/admin/test_nodestates.py +++ b/ironic_tempest_plugin/tests/api/admin/test_nodestates.py @@ -78,7 +78,9 @@ class TestNodeStatesV1_1(TestNodeStatesMixin, base.BaseBaremetalTest): @decorators.idempotent_id('ccb8fca9-2ba0-480c-a037-34c3bd09dc74') def test_set_node_provision_state(self): - _, node = self.create_node(self.chassis['uuid']) + _, node = self.create_node(self.chassis['uuid'], + deploy_interface='fake', + network_interface='noop') # Nodes appear in NONE state by default until v1.1 self.assertIsNone(node['provision_state']) provision_states_list = ['active', 'deleted'] @@ -97,7 +99,9 @@ class TestNodeStatesV1_2(TestNodeStatesMixin, base.BaseBaremetalTest): @decorators.idempotent_id('9c414984-f3b6-4b3d-81da-93b60d4662fb') def test_set_node_provision_state(self): - _, node = self.create_node(self.chassis['uuid']) + _, node = self.create_node(self.chassis['uuid'], + deploy_interface='fake', + network_interface='noop') # Nodes appear in AVAILABLE state by default from v1.2 to v1.10 self.assertEqual('available', node['provision_state']) provision_states_list = ['active', 'deleted'] @@ -116,7 +120,9 @@ class TestNodeStatesV1_4(TestNodeStatesMixin, base.BaseBaremetalTest): @decorators.idempotent_id('3d606003-05ce-4b5a-964d-bdee382fafe9') def test_set_node_provision_state(self): - _, node = self.create_node(self.chassis['uuid']) + _, node = self.create_node(self.chassis['uuid'], + deploy_interface='fake', + network_interface='noop') # Nodes appear in AVAILABLE state by default from v1.2 to v1.10 self.assertEqual('available', node['provision_state']) # MANAGEABLE state and PROVIDE transition have been added in v1.4 @@ -138,7 +144,9 @@ class TestNodeStatesV1_6(TestNodeStatesMixin, base.BaseBaremetalTest): @decorators.idempotent_id('6c9ce4a3-713b-4c76-91af-18c48d01f1bb') def test_set_node_provision_state(self): - _, node = self.create_node(self.chassis['uuid']) + _, node = self.create_node(self.chassis['uuid'], + deploy_interface='fake', + network_interface='noop') # Nodes appear in AVAILABLE state by default from v1.2 to v1.10 self.assertEqual('available', node['provision_state']) # INSPECT* states have been added in v1.6 @@ -162,7 +170,9 @@ class TestNodeStatesV1_11(TestNodeStatesMixin, base.BaseBaremetalTest): @decorators.idempotent_id('31f53828-b83d-40c7-98e5-843e28a1b6b9') def test_set_node_provision_state(self): - _, node = self.create_node(self.chassis['uuid']) + _, node = self.create_node(self.chassis['uuid'], + deploy_interface='fake', + network_interface='noop') # Nodes appear in ENROLL state by default from v1.11 self.assertEqual('enroll', node['provision_state']) provision_states_list = [ diff --git a/ironic_tempest_plugin/tests/api/admin/test_portgroups.py b/ironic_tempest_plugin/tests/api/admin/test_portgroups.py index 3e21e41..86dccd9 100644 --- a/ironic_tempest_plugin/tests/api/admin/test_portgroups.py +++ b/ironic_tempest_plugin/tests/api/admin/test_portgroups.py @@ -29,7 +29,8 @@ class TestPortGroups(base.BaseBaremetalTest): api_microversion_fixture.APIMicroversionFixture( self.min_microversion)) _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node(self.chassis['uuid'], + network_interface='noop') _, self.portgroup = self.create_portgroup( self.node['uuid'], address=data_utils.rand_mac_address(), name=data_utils.rand_name('portgroup')) diff --git a/ironic_tempest_plugin/tests/api/admin/test_ports.py b/ironic_tempest_plugin/tests/api/admin/test_ports.py index bb6b6f6..9988279 100644 --- a/ironic_tempest_plugin/tests/api/admin/test_ports.py +++ b/ironic_tempest_plugin/tests/api/admin/test_ports.py @@ -25,7 +25,8 @@ class TestPorts(base.BaseBaremetalTest): super(TestPorts, self).setUp() _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node(self.chassis['uuid'], + network_interface='noop') _, self.port = self.create_port(self.node['uuid'], data_utils.rand_mac_address()) @@ -275,7 +276,8 @@ class TestPortsWithPhysicalNetwork(base.BaseBaremetalTest): TestPortsWithPhysicalNetwork.min_microversion) ) _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node(self.chassis['uuid'], + network_interface='noop') @decorators.idempotent_id('f1a5d279-c456-4311-ad31-fea09f61c22b') def test_create_port_with_physical_network(self): diff --git a/ironic_tempest_plugin/tests/api/admin/test_ports_negative.py b/ironic_tempest_plugin/tests/api/admin/test_ports_negative.py index bd338f9..8923aa3 100644 --- a/ironic_tempest_plugin/tests/api/admin/test_ports_negative.py +++ b/ironic_tempest_plugin/tests/api/admin/test_ports_negative.py @@ -25,7 +25,8 @@ class TestPortsNegative(base.BaseBaremetalTest): super(TestPortsNegative, self).setUp() _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node(self.chassis['uuid'], + network_interface='noop') @decorators.attr(type=['negative']) @decorators.idempotent_id('0a6ee1f7-d0d9-4069-8778-37f3aa07303a') diff --git a/ironic_tempest_plugin/tests/api/rbac_defaults/test_nodes.py b/ironic_tempest_plugin/tests/api/rbac_defaults/test_nodes.py index aab00fe..cd16fe2 100644 --- a/ironic_tempest_plugin/tests/api/rbac_defaults/test_nodes.py +++ b/ironic_tempest_plugin/tests/api/rbac_defaults/test_nodes.py @@ -34,7 +34,9 @@ class TestNodeProjectReader(base.BaseBaremetalRBACTest): self.reader_client = self.os_project_reader.baremetal.BaremetalClient() _, self.chassis = self.create_chassis() # Bare node, no inherent permissions by default for project readers. - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node(self.chassis['uuid'], + network_interface='noop', + deploy_interface='fake') # Default policy is: # ('role:reader and ' @@ -684,7 +686,9 @@ class TestNodeSystemReader(base.BaseBaremetalRBACTest): self.client = self.os_system_admin.baremetal.BaremetalClient() self.reader_client = self.os_system_reader.baremetal.BaremetalClient() _, self.chassis = self.create_chassis() - _, self.node = self.create_node(self.chassis['uuid']) + _, self.node = self.create_node(self.chassis['uuid'], + network_interface='noop', + deploy_interface='fake') def test_reader_cannot_create_node(self): """Reader cannot create node