blob: 7c7e96ab22db12d22218acddfdb06cb6f65c573c [file] [log] [blame]
# Copyright 2015 NEC Corporation. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import testtools
from tempest.common import api_version_request
from tempest import exceptions
LATEST_MICROVERSION = 'latest'
class BaseMicroversionTest(object):
"""Mixin class for API microversion test class."""
# NOTE: Basically, each microversion is small API change and we
# can use the same tests for most microversions in most cases.
# So it is nice to define the test class as possible to run
# for all microversions. We need to define microversion range
# (min_microversion, max_microversion) on each test class if necessary.
min_microversion = None
max_microversion = LATEST_MICROVERSION
def check_skip_with_microversion(test_min_version, test_max_version,
cfg_min_version, cfg_max_version):
min_version = api_version_request.APIVersionRequest(test_min_version)
max_version = api_version_request.APIVersionRequest(test_max_version)
config_min_version = api_version_request.APIVersionRequest(cfg_min_version)
config_max_version = api_version_request.APIVersionRequest(cfg_max_version)
if ((min_version > max_version) or
(config_min_version > config_max_version)):
msg = ("Test Class versions [%s - %s]. "
"Configuration versions [%s - %s]."
% (min_version.get_string(),
max_version.get_string(),
config_min_version.get_string(),
config_max_version.get_string()))
raise exceptions.InvalidAPIVersionRange(msg)
# NOTE: Select tests which are in range of configuration like
# config min config max
# ----------------+--------------------------+----------------
# ...don't-select|
# ...select... ...select... ...select...
# |don't-select...
# ......................select............................
if (max_version < config_min_version or
config_max_version < min_version):
msg = ("The microversion range[%s - %s] of this test is out of the "
"configuration range[%s - %s]."
% (min_version.get_string(),
max_version.get_string(),
config_min_version.get_string(),
config_max_version.get_string()))
raise testtools.TestCase.skipException(msg)
def select_request_microversion(test_min_version, cfg_min_version):
test_version = api_version_request.APIVersionRequest(test_min_version)
cfg_version = api_version_request.APIVersionRequest(cfg_min_version)
max_version = cfg_version if cfg_version >= test_version else test_version
return max_version.get_string()
def assert_version_header_matches_request(api_microversion_header_name,
api_microversion,
response_header):
"""Checks API microversion in resposne header
Verify whether microversion is present in response header
and with specified 'api_microversion' value.
@param: api_microversion_header_name: Microversion header name
Example- "X-OpenStack-Nova-API-Version"
@param: api_microversion: Microversion number like "2.10"
@param: response_header: Response header where microversion is
expected to be present.
"""
api_microversion_header_name = api_microversion_header_name.lower()
if (api_microversion_header_name not in response_header or
api_microversion != response_header[api_microversion_header_name]):
msg = ("Microversion header '%s' with value '%s' does not match in "
"response - %s. " % (api_microversion_header_name,
api_microversion,
response_header))
raise exceptions.InvalidHTTPResponseHeader(msg)