From c7e4219cd442007758493dcf7c6b0ab6ff4adc45 Mon Sep 17 00:00:00 2001 From: Julia Kreger Date: Tue, 26 Mar 2024 08:47:26 -0700 Subject: [PATCH] WIP: leverage remote microversion without requiring human config Change-Id: I197e6c30c8514e1f72cb1ce3ebad851802632203 --- ironic_tempest_plugin/services/baremetal/base.py | 13 +++++++++++++ ironic_tempest_plugin/tests/api/base.py | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/ironic_tempest_plugin/services/baremetal/base.py b/ironic_tempest_plugin/services/baremetal/base.py index 2acad18d..3c8fa8a3 100644 --- a/ironic_tempest_plugin/services/baremetal/base.py +++ b/ironic_tempest_plugin/services/baremetal/base.py @@ -63,9 +63,22 @@ class BaremetalClient(rest_client.RestClient): def get_headers(self): headers = super(BaremetalClient, self).get_headers() if BAREMETAL_MICROVERSION: + # NOTE(TheJulia): This is not great, because it can blind a test + # to the actual version supported. headers[self.api_microversion_header_name] = BAREMETAL_MICROVERSION return headers + def get_raw_headers(self): + """A proper get headers without guessing the microversion.""" + return super(BaremetalClient, self).get_headers() + + def get_min_max_api_microversions(self): + """Returns a tuple of min, max microversions.""" + headers = self.get_raw_headers() + api_min = headers.get('x-openstack-ironic-api-minimum-version') + api_max = headers.get('x-openstack-ironic-api-maximum-version') + return (api_min, api_max) + def request(self, *args, **kwargs): resp, resp_body = super(BaremetalClient, self).request(*args, **kwargs) latest_microversion = api_version_utils.LATEST_MICROVERSION diff --git a/ironic_tempest_plugin/tests/api/base.py b/ironic_tempest_plugin/tests/api/base.py index 6ebb162a..7e8d3818 100644 --- a/ironic_tempest_plugin/tests/api/base.py +++ b/ironic_tempest_plugin/tests/api/base.py @@ -76,6 +76,15 @@ class BaseBaremetalTest(api_version_utils.BaseMicroversionTest, cfg_min_version = CONF.baremetal.min_microversion cfg_max_version = CONF.baremetal.max_microversion + + # Explicitly check with the remote endpoint, gather the versions + # and feed that into the skip check if not overridden. + api_min, api_max = cls.client.get_min_max_api_microversions() + if not cfg_min_version: + cfg_min_version = api_min + if not cfg_max_version: + cfg_max_version = api_max + api_version_utils.check_skip_with_microversion(cls.min_microversion, cls.max_microversion, cfg_min_version,