Fix compute, volume, and share endpoint discovery.
The endpoint discovery mechanism in compute, volume, and share use no_port_cut_url to cut the URLs after the version (including the version) if port is not present. However, when the port is present, the no_port_cut_url method sets the top_level to True when calling do_get method. This causes the do_get method also cut the top_level_path of the URLs because by default the top_level_path is set to "". This behavior is not desired because different clouds maybe have endpoints with different top_level_path other than "". Instead of using no_port_cut_url, we can use utils.get_base_url to properly cut the URLs after and including the version. Story: #2010968 Task: #49109 Change-Id: I221b6267afce90b8b7e22d468f0824c9365f4a91
This commit is contained in:
parent
b5ae1f69ac
commit
3366caea2c
@ -19,12 +19,13 @@ from tempest.lib import exceptions
|
|||||||
|
|
||||||
from config_tempest import constants as C
|
from config_tempest import constants as C
|
||||||
from config_tempest.services.base import VersionedService
|
from config_tempest.services.base import VersionedService
|
||||||
|
from config_tempest import utils
|
||||||
|
|
||||||
|
|
||||||
class ComputeService(VersionedService):
|
class ComputeService(VersionedService):
|
||||||
def set_versions(self):
|
def set_versions(self):
|
||||||
url, top_level = self.no_port_cut_url()
|
url_without_version = utils.get_base_url(self.service_url)
|
||||||
body = self.do_get(url, top_level=top_level)
|
body = self.do_get(url_without_version, top_level=False)
|
||||||
self.versions_body = json.loads(body)
|
self.versions_body = json.loads(body)
|
||||||
self.versions = self.deserialize_versions(self.versions_body)
|
self.versions = self.deserialize_versions(self.versions_body)
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ import json
|
|||||||
|
|
||||||
from config_tempest import constants as C
|
from config_tempest import constants as C
|
||||||
from config_tempest.services.base import VersionedService
|
from config_tempest.services.base import VersionedService
|
||||||
|
from config_tempest import utils
|
||||||
|
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
@ -24,8 +25,8 @@ from tempest.lib import exceptions
|
|||||||
class ShareService(VersionedService):
|
class ShareService(VersionedService):
|
||||||
|
|
||||||
def set_versions(self):
|
def set_versions(self):
|
||||||
url, top_level = self.no_port_cut_url()
|
url_without_version = utils.get_base_url(self.service_url)
|
||||||
body = self.do_get(url, top_level=top_level)
|
body = self.do_get(url_without_version, top_level=False)
|
||||||
self.versions_body = json.loads(body)
|
self.versions_body = json.loads(body)
|
||||||
self.versions = self.deserialize_versions(self.versions_body)
|
self.versions = self.deserialize_versions(self.versions_body)
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import re
|
|||||||
from config_tempest import constants as C
|
from config_tempest import constants as C
|
||||||
from config_tempest.services.base import ServiceError
|
from config_tempest.services.base import ServiceError
|
||||||
from config_tempest.services.base import VersionedService
|
from config_tempest.services.base import VersionedService
|
||||||
|
from config_tempest import utils
|
||||||
|
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
@ -30,8 +31,8 @@ class VolumeService(VersionedService):
|
|||||||
self.extensions = list(map(lambda x: x['alias'], body['extensions']))
|
self.extensions = list(map(lambda x: x['alias'], body['extensions']))
|
||||||
|
|
||||||
def set_versions(self):
|
def set_versions(self):
|
||||||
url, top_level = self.no_port_cut_url()
|
url_without_version = utils.get_base_url(self.service_url)
|
||||||
body = self.do_get(url, top_level=top_level)
|
body = self.do_get(url_without_version, top_level=False)
|
||||||
self.versions_body = json.loads(body)
|
self.versions_body = json.loads(body)
|
||||||
self.versions = self.deserialize_versions(self.versions_body)
|
self.versions = self.deserialize_versions(self.versions_body)
|
||||||
|
|
||||||
|
51
config_tempest/tests/test_utils.py
Normal file
51
config_tempest/tests/test_utils.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Copyright 2023 Red Hat, Inc.
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
|
||||||
|
from config_tempest.tests.base import BaseConfigTempestTest
|
||||||
|
from config_tempest import utils
|
||||||
|
|
||||||
|
|
||||||
|
class TestUtils(BaseConfigTempestTest):
|
||||||
|
"""Utils test class
|
||||||
|
|
||||||
|
Tests for get_base_url method.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestUtils, self).setUp()
|
||||||
|
self.fake_urls = [
|
||||||
|
"http://10.200.16.10:8774",
|
||||||
|
"http://10.200.16.10:5000/v3",
|
||||||
|
"http://10.200.16.10/path",
|
||||||
|
"http://10.200.16.10:8774/path",
|
||||||
|
"http://10.200.16.10:8774/path/v2.1",
|
||||||
|
"http://10.200.16.10:8774/path/v2/58f582e50641fead037e8e3f7ca59f",
|
||||||
|
]
|
||||||
|
self.expected_base_urls = [
|
||||||
|
"http://10.200.16.10:8774/",
|
||||||
|
"http://10.200.16.10:5000/",
|
||||||
|
"http://10.200.16.10/path/",
|
||||||
|
"http://10.200.16.10:8774/path/",
|
||||||
|
"http://10.200.16.10:8774/path/",
|
||||||
|
"http://10.200.16.10:8774/path/",
|
||||||
|
]
|
||||||
|
self.test_cases = zip(self.fake_urls, self.expected_base_urls)
|
||||||
|
|
||||||
|
def test_get_base_url(self):
|
||||||
|
for url, expected_base_url in self.test_cases:
|
||||||
|
with self.subTest(url=url):
|
||||||
|
base_url = utils.get_base_url(url)
|
||||||
|
self.assertEqual(expected_base_url, base_url)
|
Loading…
Reference in New Issue
Block a user