Merge "Add tempest coverage for namespace creation"
This commit is contained in:
commit
27b303b317
@ -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")
|
||||
|
@ -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])]
|
||||
|
@ -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)
|
||||
|
63
kuryr_tempest_plugin/tests/scenario/test_namespace.py
Normal file
63
kuryr_tempest_plugin/tests/scenario/test_namespace.py
Normal 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)
|
Loading…
x
Reference in New Issue
Block a user