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
This commit is contained in:
Julia Kreger 2024-02-22 13:38:33 -08:00
parent f5bfe9b319
commit 7241770603
7 changed files with 54 additions and 18 deletions

View File

@ -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']])

View File

@ -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'])

View File

@ -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 = [

View File

@ -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'))

View File

@ -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):

View File

@ -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')

View File

@ -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