discovery: optional support for testing changing driver

Now that we have reset_interfaces in the API, we can try changing the driver after
discovery. This is optional, since reset_interfaces was only introduced in Rocky.

Change-Id: I8718941bb194c8fc0646a1f0bc11ef3468291ccb
diff --git a/ironic_tempest_plugin/config.py b/ironic_tempest_plugin/config.py
index 7cabf69..a3b5019 100644
--- a/ironic_tempest_plugin/config.py
+++ b/ironic_tempest_plugin/config.py
@@ -195,4 +195,7 @@
                default='fake',
                help="The driver expected to be set on newly discovered nodes. "
                     "Only has effect with auto_discovery_feature is True."),
+    cfg.StrOpt('auto_discovery_target_driver',
+               help="The driver to set on the newly discovered nodes. "
+                    "Only has effect with auto_discovery_feature is True."),
 ]
diff --git a/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py b/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py
index 2ec91f1..c44844f 100644
--- a/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py
+++ b/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py
@@ -37,6 +37,13 @@
 
         discovered_node = self._get_discovery_node()
         self.node_info = self._get_node_info(discovered_node)
+        self.default_driver = (
+            CONF.baremetal_introspection.auto_discovery_default_driver
+        )
+        self.expected_driver = (
+            CONF.baremetal_introspection.auto_discovery_target_driver
+            or CONF.baremetal_introspection.auto_discovery_default_driver
+        )
 
         rule = {
             "description": "Auto-discovery rule",
@@ -51,14 +58,26 @@
                  "path": "/name",
                  "value": self.node_info['name']},
             ],
-            # This flag must be automatically set by the auto-discovery process
             "conditions": [
+                # This flag must be automatically set by the auto-discovery
+                # process.
                 {"op": "eq",
                  "field": "data://auto_discovered",
-                 "value": True}
+                 "value": True},
+                # Making sure the initial driver matches the expected.
+                {"op": "eq",
+                 "field": "node://driver",
+                 "value": self.default_driver},
             ]
         }
 
+        if self.expected_driver != self.default_driver:
+            rule['actions'].append({
+                'action': 'set-attribute',
+                'path': '/driver',
+                'value': self.expected_driver
+            })
+
         self.rule_import_from_dict(rule)
         self.addCleanup(self.rule_purge)
 
@@ -141,7 +160,5 @@
             self.verify_node_introspection_data(inspected_node)
         self.assertEqual(ProvisionStates.ENROLL,
                          inspected_node['provision_state'])
-        self.assertEqual(
-            CONF.baremetal_introspection.auto_discovery_default_driver,
-            inspected_node['driver'])
+        self.assertEqual(self.expected_driver, inspected_node['driver'])
         self.assertEqual('yes', inspected_node['extra']['discovered'])