Merge "Add tempest coverage for namespace creation"

This commit is contained in:
Zuul 2018-06-11 12:37:56 +00:00 committed by Gerrit Code Review
commit 27b303b317
4 changed files with 109 additions and 1 deletions

View File

@ -33,3 +33,8 @@ port_pool_enabled = cfg.BoolOpt("port_pool_enabled",
lb_build_timeout = cfg.IntOpt("lb_build_timeout",
default=900,
help="The max time it should take to create LB")
namespace_enabled = cfg.BoolOpt("namespace_enabled",
default=False,
help="Whether or not namespace handler and "
"driver are enabled")

View File

@ -38,9 +38,12 @@ class KuryrTempestPlugin(plugins.TempestPlugin):
group='kuryr_kubernetes')
conf.register_opt(project_config.lb_build_timeout,
group='kuryr_kubernetes')
conf.register_opt(project_config.namespace_enabled,
group='kuryr_kubernetes')
def get_opt_lists(self):
return [('service_available', [project_config.service_option]),
('kuryr_kubernetes', [project_config.port_pool_enabled]),
('kuryr_kubernetes', [project_config.port_pool_enabled,
project_config.namespace_enabled]),
('vif_pool', [project_config.ports_pool_batch,
project_config.lb_build_timeout])]

View File

@ -31,6 +31,10 @@ from tempest.scenario import manager
CONF = config.CONF
LOG = logging.getLogger(__name__)
KURYR_NET_CRD_GROUP = 'openstack.org'
KURYR_NET_CRD_VERSION = 'v1'
KURYR_NET_CRD_PLURAL = 'kuryrnets'
class BaseKuryrScenarioTest(manager.NetworkScenarioTest):
@ -235,3 +239,36 @@ class BaseKuryrScenarioTest(manager.NetworkScenarioTest):
cls.service_ip, CONF.kuryr_kubernetes.lb_build_timeout)
cls.addClassResourceCleanup(cls.delete_service, service_name)
@classmethod
def create_namespace(cls, name=None):
if not name:
name = data_utils.rand_name(prefix='kuryr-namespace')
namespace = cls.k8s_client.V1Namespace()
namespace.metadata = cls.k8s_client.V1ObjectMeta(name=name)
namespace_obj = cls.k8s_client.CoreV1Api().create_namespace(
body=namespace)
# wait until namespace gets created
while True:
time.sleep(1)
ns = cls.k8s_client.CoreV1Api().read_namespace_status(name)
if ns.metadata.annotations is not None:
break
return name, namespace_obj
@classmethod
def delete_namespace(cls, name, **kwargs):
body = cls.k8s_client.V1DeleteOptions(**kwargs)
cls.k8s_client.CoreV1Api().delete_namespace(name=name, body=body)
@classmethod
def list_namespaces(cls, **kwargs):
return cls.k8s_client.CoreV1Api().list_namespace(**kwargs)
@classmethod
def get_kuryr_net_crds(cls, name):
return cls.k8s_client.CustomObjectsApi().get_cluster_custom_object(
group=KURYR_NET_CRD_GROUP, version=KURYR_NET_CRD_VERSION,
plural=KURYR_NET_CRD_PLURAL, name=name)

View File

@ -0,0 +1,63 @@
# Copyright 2018 Red Hat, Inc.
#
# 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 oslo_log import log as logging
from tempest import config
from kuryr_tempest_plugin.tests.scenario import base
LOG = logging.getLogger(__name__)
CONF = config.CONF
class TestNamespaceScenario(base.BaseKuryrScenarioTest):
@classmethod
def skip_checks(cls):
super(TestNamespaceScenario, cls).skip_checks()
if not CONF.kuryr_kubernetes.namespace_enabled:
raise cls.skipException('Namespace driver and handler must be '
'enabled to run this tests')
@classmethod
def setup_clients(cls):
super(TestNamespaceScenario, cls).setup_clients()
def test_namespace(self):
namespace_name, namespace = self.create_namespace()
self.addCleanup(self.delete_namespace, namespace_name)
existing_namespaces = [ns.metadata.name
for ns in self.list_namespaces().items]
self.assertIn(namespace_name, existing_namespaces)
subnet_name = 'ns/' + namespace_name + '-subnet'
kuryr_net_crd_name = 'ns-' + namespace_name
seen_subnets = self.os_admin.subnets_client.list_subnets()
seen_subnet_names = [n['name'] for n in seen_subnets['subnets']]
self.assertIn(subnet_name, seen_subnet_names)
subnet_id = [n['id'] for n in seen_subnets['subnets']
if n['name'] == subnet_name]
net_id = [n['network_id'] for n in seen_subnets['subnets']
if n['name'] == subnet_name]
kuryr_net_crd = self.get_kuryr_net_crds(kuryr_net_crd_name)
self.assertIn(kuryr_net_crd_name, kuryr_net_crd['metadata']['name'])
self.assertIn(kuryr_net_crd['spec']['subnetId'], subnet_id)
self.assertIn(kuryr_net_crd['spec']['netId'], net_id)