Initialize tests of real clouds

We want to start testing sdk and osc on real clouds. They are all
different, have different settings, policies, etc. In order to cope with
that it would be necessary to rework lot of tests and code to ensure all
of those "feautres" are properly detected by sdk and osc.

Block-storage test base class should not set operator cloud, only tests
that require it explicitly should use it

Change-Id: I09d118097bade8f0d8ff497957846a754ebc7c1e
This commit is contained in:
Artem Goncharov 2022-09-23 10:19:04 +02:00
parent 13117610fe
commit 70dbcfcd66
5 changed files with 46 additions and 9 deletions

View File

@ -0,0 +1,7 @@
# This file contains list of tests that can work with regular user privileges
# Until all tests are modified to properly identify whether they are able to
# run or must skip the ones that are known to work are listed here.
openstack.tests.functional.block_storage.v3.test_volume
# Do not enable test_backup for now, since it is not capable to determine
# backup capabilities of the cloud
# openstack.tests.functional.block_storage.v3.test_backup

View File

@ -12,6 +12,8 @@
import operator
import os
import time
import uuid
from keystoneauth1 import discover
@ -57,10 +59,11 @@ class BaseFunctionalTest(base.TestCase):
self.config = openstack.config.OpenStackConfig()
self._set_user_cloud()
self._set_operator_cloud()
if self._op_name:
self._set_operator_cloud()
self.identity_version = \
self.operator_cloud.config.get_api_version('identity')
self.user_cloud.config.get_api_version('identity')
self.flavor = self._pick_flavor()
self.image = self._pick_image()
@ -78,10 +81,11 @@ class BaseFunctionalTest(base.TestCase):
# This cloud is used by the project_cleanup test, so you can't rely on
# it
user_config_alt = self.config.get_one(
cloud=self._demo_name_alt, **kwargs)
self.user_cloud_alt = connection.Connection(config=user_config_alt)
_disable_keep_alive(self.user_cloud_alt)
if self._demo_name_alt:
user_config_alt = self.config.get_one(
cloud=self._demo_name_alt, **kwargs)
self.user_cloud_alt = connection.Connection(config=user_config_alt)
_disable_keep_alive(self.user_cloud_alt)
def _set_operator_cloud(self, **kwargs):
operator_config = self.config.get_one(cloud=self._op_name, **kwargs)
@ -216,6 +220,15 @@ class BaseFunctionalTest(base.TestCase):
f'{min_microversion}'
)
def getUniqueString(self, prefix=None):
"""Generate unique resource name"""
# Globally unique names can only rely on some form of uuid
# unix_t is also used to easier determine orphans when running real
# functional tests on a real cloud
return (prefix if prefix else '') + "{time}-{uuid}".format(
time=int(time.time()),
uuid=uuid.uuid4().hex)
class KeystoneBaseFunctionalTest(BaseFunctionalTest):

View File

@ -20,7 +20,5 @@ class BaseBlockStorageTest(base.BaseFunctionalTest):
def setUp(self):
super(BaseBlockStorageTest, self).setUp()
self._set_user_cloud(block_storage_api_version='3')
self._set_operator_cloud(block_storage_api_version='3')
if not self.user_cloud.has_service('block-storage', '3'):
self.skipTest('block-storage service not supported by cloud')

View File

@ -22,7 +22,9 @@ class TestType(base.BaseBlockStorageTest):
self.TYPE_NAME = self.getUniqueString()
self.TYPE_ID = None
if not self._op_name:
self.skip("Operator cloud must be set for this test")
self._set_operator_cloud(block_storage_api_version='3')
sot = self.operator_cloud.block_storage.create_type(
name=self.TYPE_NAME)
assert isinstance(sot, _type.Type)

17
tox.ini
View File

@ -38,6 +38,23 @@ commands =
stestr --test-path ./openstack/tests/functional/{env:OPENSTACKSDK_TESTS_SUBDIR:} run --serial {posargs}
stestr slowest
# Acceptance tests are the ones running on real clouds
[testenv:acceptance-regular-user]
# This env intends to test functions of a regular user without admin privileges
# Some jobs (especially heat) takes longer, therefore increase default timeout
# This timeout should not be smaller, than the longest individual timeout
setenv =
{[testenv]setenv}
OS_TEST_TIMEOUT=600
OPENSTACKSDK_FUNC_TEST_TIMEOUT_LOAD_BALANCER=600
# OPENSTACKSDK_DEMO_CLOUD and OS_CLOUD should point to the cloud to test
# Othee clouds are explicitly set empty to let tests detect absense
OPENSTACKSDK_DEMO_CLOUD_ALT=
OPENSTACKSDK_OPERATOR_CLOUD=
commands =
stestr --test-path ./openstack/tests/functional/{env:OPENSTACKSDK_TESTS_SUBDIR:} run --serial {posargs} --include-list include-acceptance-regular-user.txt
stestr slowest
[testenv:pep8]
deps =
hacking>=3.1.0,<4.0.0 # Apache-2.0