Merge "Rework the ironic-inspector auto-discovery test"
diff --git a/ironic_tempest_plugin/config.py b/ironic_tempest_plugin/config.py
index 7f42598..dc99e03 100644
--- a/ironic_tempest_plugin/config.py
+++ b/ironic_tempest_plugin/config.py
@@ -180,4 +180,10 @@
                 help="Is the auto-discovery feature enabled. Enroll hook "
                      "should be specified in node_not_found_hook - processing "
                      "section of inspector.conf"),
+    cfg.StrOpt('auto_discovery_default_driver',
+               # TODO(dtantsur): change to fake-hardware when Queens is no
+               # longer supported.
+               default='fake',
+               help="The driver expected to be set on 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 8760dd2..2ec91f1 100644
--- a/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py
+++ b/ironic_tempest_plugin/tests/scenario/test_introspection_discovery.py
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import six
-
 from tempest import config
 from tempest.lib import decorators
 from tempest import test  # noqa
@@ -40,7 +38,26 @@
         discovered_node = self._get_discovery_node()
         self.node_info = self._get_node_info(discovered_node)
 
-        rule = self._generate_discovery_rule(self.node_info)
+        rule = {
+            "description": "Auto-discovery rule",
+            "actions": [
+                # Set an attribute in case we cannot access the introspection
+                # data to check the auto_discovered flag directly.
+                {"action": "set-attribute",
+                 "path": "/extra/discovered",
+                 "value": "yes"},
+                # Re-assign the name to use it later in the test.
+                {"action": "set-attribute",
+                 "path": "/name",
+                 "value": self.node_info['name']},
+            ],
+            # This flag must be automatically set by the auto-discovery process
+            "conditions": [
+                {"op": "eq",
+                 "field": "data://auto_discovered",
+                 "value": True}
+            ]
+        }
 
         self.rule_import_from_dict(rule)
         self.addCleanup(self.rule_purge)
@@ -65,27 +82,9 @@
         self.assertIsNotNone(discovered_node)
         return discovered_node
 
-    def _generate_discovery_rule(self, node):
-        rule = dict()
-        rule["description"] = "Node %s discovery rule" % node['name']
-        rule["actions"] = [
-            {"action": "set-attribute", "path": "/name",
-             "value": "%s" % node['name']},
-            {"action": "set-attribute", "path": "/driver",
-             "value": "%s" % node['driver']},
-        ]
-
-        for key, value in node['driver_info'].items():
-            rule["actions"].append(
-                {"action": "set-attribute", "path": "/driver_info/%s" % key,
-                 "value": "%s" % value})
-        rule["conditions"] = [
-            {"op": "eq", "field": "data://auto_discovered", "value": True}
-        ]
-        return rule
-
     def verify_node_introspection_data(self, node):
         data = self.introspection_data(node['uuid'])
+        self.assertTrue(data['auto_discovered'])
         self.assertEqual(data['cpu_arch'],
                          self.flavor['properties']['cpu_arch'])
         self.assertEqual(int(data['memory_mb']),
@@ -109,11 +108,6 @@
         self.assertEqual(expected_cpu_arch,
                          node['properties']['cpu_arch'])
 
-    def verify_node_driver_info(self, node_info, inspected_node):
-        for key in node_info['driver_info']:
-            self.assertEqual(six.text_type(node_info['driver_info'][key]),
-                             inspected_node['driver_info'].get(key))
-
     @decorators.idempotent_id('dd3abe5e-0d23-488d-bb4e-344cdeff7dcb')
     def test_bearmetal_auto_discovery(self):
         """This test case follows this set of operations:
@@ -121,9 +115,9 @@
            * Choose appropriate node, based on provision state;
            * Get node info;
            * Generate discovery rule;
-           * Delete discovered node from ironic;
-           * Start baremetal vm via virsh;
-           * Wating for node introspection;
+           * Start introspection via ironic-inspector API;
+           * Delete the node from ironic;
+           * Wating for node discovery;
            * Verify introspected node.
         """
         # NOTE(aarefiev): workaround for infra, 'tempest' user doesn't
@@ -145,6 +139,9 @@
         self.verify_node_flavor(inspected_node)
         if CONF.service_available.swift:
             self.verify_node_introspection_data(inspected_node)
-        self.verify_node_driver_info(self.node_info, inspected_node)
         self.assertEqual(ProvisionStates.ENROLL,
                          inspected_node['provision_state'])
+        self.assertEqual(
+            CONF.baremetal_introspection.auto_discovery_default_driver,
+            inspected_node['driver'])
+        self.assertEqual('yes', inspected_node['extra']['discovered'])