From 7ee63b1517b7412c8e25f2842b207339a70f62c6 Mon Sep 17 00:00:00 2001 From: Amol Kahat Date: Thu, 28 May 2020 16:49:38 +0530 Subject: [PATCH] Improve octavia tempest plugin configuration To run octavia tempest plugin some configuration need to set in tempestconf file. If octavia service is enabled then configuration region, enable_provider_drivers will set automatically. Added tripleo-ci-centos-8-scenario010-standalone job in check and gate list. Added tests for list_drivers and post_configuration. Change-Id: Ic719f83f4fb9a330fc64ef46144e0b0b39c3a7d5 Signed-off-by: Amol Kahat --- .zuul.yaml | 2 + config_tempest/services/octavia.py | 23 +++++++- config_tempest/tests/base.py | 17 ++++-- config_tempest/tests/services/test_octavia.py | 59 +++++++++++++++++++ 4 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 config_tempest/tests/services/test_octavia.py diff --git a/.zuul.yaml b/.zuul.yaml index 95b24ecb..765bd81a 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -20,6 +20,7 @@ - tripleo-ci-centos-8-scenario002-standalone - tripleo-ci-centos-8-standalone - refstack-client-devstack-tempestconf + - tripleo-ci-centos-8-scenario010-standalone gate: jobs: - openstack-tox-pep8 @@ -31,6 +32,7 @@ - tripleo-ci-centos-8-scenario002-standalone - tripleo-ci-centos-8-standalone - refstack-client-devstack-tempestconf + - tripleo-ci-centos-8-scenario010-standalone experimental: jobs: - python-tempestconf-tempest-devstack-demo-train diff --git a/config_tempest/services/octavia.py b/config_tempest/services/octavia.py index 0fd3e2e0..e89ed1cb 100644 --- a/config_tempest/services/octavia.py +++ b/config_tempest/services/octavia.py @@ -14,10 +14,10 @@ # under the License. from config_tempest.services.base import VersionedService +import json class LoadBalancerService(VersionedService): - def set_versions(self): super(LoadBalancerService, self).set_versions(top_level=False) @@ -34,6 +34,23 @@ class LoadBalancerService(VersionedService): def get_codename(): return 'octavia' + def list_drivers(self): + """List lbaas drivers""" + body = self.do_get(self.service_url + '/v2/lbaas/providers') + body = json.loads(body) + names = [ + '{p[name]}:{p[description]}'.format(p=i) for i in body['providers'] + ] + return names + def post_configuration(self, conf, is_service): - conf.set('load_balancer', 'member_role', - conf.get('auth', 'tempest_roles').split(',')[0]) + if not conf.has_option('auth', 'tempest_roles') \ + or conf.get('auth', 'tempest_roles') in ['', None]: + conf.set('load_balancer', 'member_role', 'member') + else: + conf.set('load_balancer', 'member_role', + conf.get('auth', 'tempest_roles').split(',')[0]) + conf.set('load_balancer', 'region', conf.get('identity', 'region')) + conf.set('load_balancer', + 'enabled_provider_drivers', + ','.join(self.list_drivers())) diff --git a/config_tempest/tests/base.py b/config_tempest/tests/base.py index 46709de8..90031686 100644 --- a/config_tempest/tests/base.py +++ b/config_tempest/tests/base.py @@ -31,7 +31,6 @@ logging.disable(logging.CRITICAL) class BaseConfigTempestTest(base.BaseTestCase): - """Test case base class for all config_tempest unit tests""" FAKE_V3_VERSIONS = ( @@ -105,7 +104,6 @@ class BaseConfigTempestTest(base.BaseTestCase): class BaseServiceTest(base.BaseTestCase): - """Test case base class for all api_discovery unit tests""" FAKE_TOKEN = "s6d5f45sdf4s564f4s6464sdfsd514" @@ -210,6 +208,17 @@ class BaseServiceTest(base.BaseTestCase): } } ) + FAKE_LBAAS_PROVIDERS = ( + { + "providers": [{ + "name": "amphora", + "description": "The Octavia Amphora driver." + }, { + "name": "octavia", + "description": "Deprecated alias of the Octavia driver." + }] + } + ) FAKE_STORAGE_EXTENSIONS = ( { "formpost": {}, @@ -257,12 +266,12 @@ class BaseServiceTest(base.BaseTestCase): { 'resources': { URL + 'OS-INHERIT/1.0/rel/domain_user_' + - 'role_inherited_to_projects': "", + 'role_inherited_to_projects': "", URL + 'OS-SIMPLE-CERT/1.0/rel/ca_certificate': "", URL + 'OS-EP-FILTER/1.0/rel/endpoint_group_to_' + - 'project_association': "", + 'project_association': "", URL + 'OS-EP-FILTER/1.0/rel/project_endpoint': "", diff --git a/config_tempest/tests/services/test_octavia.py b/config_tempest/tests/services/test_octavia.py new file mode 100644 index 00000000..30bc0f8b --- /dev/null +++ b/config_tempest/tests/services/test_octavia.py @@ -0,0 +1,59 @@ +# Copyright 2020 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 unittest import mock + +from config_tempest.services.octavia import LoadBalancerService +from config_tempest.tests.base import BaseConfigTempestTest +from config_tempest.tests.base import BaseServiceTest as bst + + +class TestOctaviaService(BaseConfigTempestTest): + def setUp(self): + super(TestOctaviaService, self).setUp() + self.conf = self._get_conf("v2", "v3") + self.clients = self._get_clients(self.conf) + self.Service = LoadBalancerService("ServiceName", + "ServiceType", + bst.FAKE_URL + "v2.0/", + bst.FAKE_TOKEN, + disable_ssl_validation=False) + self.Service.client = bst.FakeServiceClient( + services={"services": [{"name": "octavia", "enabled": True}]} + ) + self.conf.set("identity", "region", "regionOne") + bst._fake_service_do_get_method(self, bst.FAKE_LBAAS_PROVIDERS) + + def test_list_drivers(self): + expected_resp = [ + "amphora:The Octavia Amphora driver.", + "octavia:Deprecated alias of the Octavia driver.", + ] + providers = self.Service.list_drivers() + self.assertCountEqual(providers, expected_resp) + + @mock.patch("config_tempest.services.services.Services.is_service") + def test_octavia_service_post_configuration(self, mock_is_service): + mock_is_service.return_value = True + self.Service.post_configuration(self.conf, mock_is_service) + self.assertEqual(self.conf.get("load_balancer", "member_role"), + "member") + self.assertEqual(self.conf.get("load_balancer", "region"), + "regionOne") + self.assertEqual(self.conf.get("load_balancer", + "enabled_provider_drivers"), + ("amphora:The Octavia Amphora driver.," + "octavia:Deprecated alias of the Octavia driver."), + )