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 f9e25959..b9ab70be 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 d6d18337..c3408ecd 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 1da978dd..d03a8767 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 3e21e419..86dccd99 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 bb6b6f63..99882794 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 bd338f97..8923aa3b 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 aab00fe9..cd16fe25 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