aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker/healthcheck/testcases.yaml4
-rw-r--r--docker/smoke/testcases.yaml5
-rw-r--r--functest_kubernetes/ims/ims.py27
-rw-r--r--functest_kubernetes/k8stest.py42
-rw-r--r--functest_kubernetes/test_k8stest.py11
-rw-r--r--setup.cfg3
6 files changed, 43 insertions, 49 deletions
diff --git a/docker/healthcheck/testcases.yaml b/docker/healthcheck/testcases.yaml
index 73ea5263..e8ad2b10 100644
--- a/docker/healthcheck/testcases.yaml
+++ b/docker/healthcheck/testcases.yaml
@@ -18,4 +18,6 @@ tiers:
dependencies:
- DEPLOY_SCENARIO: 'k8-*'
run:
- name: k8s_smoke
+ name: e2e_testing
+ args:
+ focus: Guestbook.application
diff --git a/docker/smoke/testcases.yaml b/docker/smoke/testcases.yaml
index 012fed74..d64335b4 100644
--- a/docker/smoke/testcases.yaml
+++ b/docker/smoke/testcases.yaml
@@ -18,7 +18,10 @@ tiers:
dependencies:
- DEPLOY_SCENARIO: 'k8-*'
run:
- name: k8s_conformance
+ name: e2e_testing
+ args:
+ focus: \[Conformance\]
+ skip: Alpha|\[(Disruptive|Feature:[^\]]+|Flaky)\]
-
case_name: xrally_kubernetes
project_name: functest
diff --git a/functest_kubernetes/ims/ims.py b/functest_kubernetes/ims/ims.py
index 3ff2d6b5..aafeacd4 100644
--- a/functest_kubernetes/ims/ims.py
+++ b/functest_kubernetes/ims/ims.py
@@ -24,7 +24,7 @@ import pkg_resources
from xtesting.core import testcase
-class Vims(testcase.TestCase):
+class Vims(testcase.TestCase): # pylint: disable=too-many-instance-attributes
"""Deploy and test Clearwater vIMS using Kubernetes
It leverage on the Python kubernetes client to apply operation proposed by
@@ -32,8 +32,6 @@ class Vims(testcase.TestCase):
See https://github.com/Metaswitch/clearwater-docker for more details
"""
- namespace = 'default'
- zone = 'default.svc.cluster.local'
watch_timeout = 1200
metadata_name = "env-vars"
test_image_name = "ollivier/clearwater-live-test:latest"
@@ -52,6 +50,8 @@ class Vims(testcase.TestCase):
self.appsv1 = client.AppsV1Api()
self.output_log_name = 'functest-kubernetes.log'
self.output_debug_log_name = 'functest-kubernetes.debug.log'
+ self.namespace = ""
+ self.zone = ""
def deploy_vnf(self):
"""Deploy vIMS as proposed by clearwater-docker
@@ -61,8 +61,14 @@ class Vims(testcase.TestCase):
See https://github.com/Metaswitch/clearwater-docker for more details
"""
+ api_response = self.corev1.create_namespace(
+ client.V1Namespace(metadata=client.V1ObjectMeta(
+ generate_name="ims-")))
+ self.namespace = api_response.metadata.name
+ self.__logger.debug("create_namespace: %s", api_response)
metadata = client.V1ObjectMeta(
name=self.metadata_name, namespace=self.namespace)
+ self.zone = '{}.svc.cluster.local'.format(self.namespace)
body = client.V1ConfigMap(
metadata=metadata,
data={"ADDITIONAL_SHARED_CONFIG": "", "ZONE": self.zone})
@@ -75,7 +81,7 @@ class Vims(testcase.TestCase):
'ims/{}-depl.yaml'.format(deployment))) as yfile:
body = yaml.safe_load(yfile)
resp = self.appsv1.create_namespaced_deployment(
- body=body, namespace="default")
+ body=body, namespace=self.namespace)
self.__logger.info("Deployment %s created", resp.metadata.name)
self.__logger.debug(
"create_namespaced_deployment: %s", api_response)
@@ -85,7 +91,7 @@ class Vims(testcase.TestCase):
'ims/{}-svc.yaml'.format(service))) as yfile:
body = yaml.safe_load(yfile)
resp = self.corev1.create_namespaced_service(
- body=body, namespace="default")
+ body=body, namespace=self.namespace)
self.__logger.info("Service %s created", resp.metadata.name)
self.__logger.debug(
"create_namespaced_service: %s", api_response)
@@ -115,7 +121,11 @@ class Vims(testcase.TestCase):
See https://github.com/Metaswitch/clearwater-live-test for more details
"""
container = client.V1Container(
- name=self.test_container_name, image=self.test_image_name)
+ name=self.test_container_name, image=self.test_image_name,
+ command=["rake", "test[{}]".format(self.zone),
+ "PROXY=bono.{}".format(self.zone),
+ "ELLIS=ellis.{}".format(self.zone),
+ "SIGNUP_CODE=secret", "--trace"])
spec = client.V1PodSpec(containers=[container], restart_policy="Never")
metadata = client.V1ObjectMeta(name=self.test_container_name)
body = client.V1Pod(metadata=metadata, spec=spec)
@@ -191,3 +201,8 @@ class Vims(testcase.TestCase):
"delete_namespaced_service: %s", api_response)
except client.rest.ApiException:
pass
+ try:
+ api_response = self.corev1.delete_namespace(self.namespace)
+ self.__logger.debug("delete_namespace: %s", self.namespace)
+ except client.rest.ApiException:
+ pass
diff --git a/functest_kubernetes/k8stest.py b/functest_kubernetes/k8stest.py
index e8e8a1f4..55a18233 100644
--- a/functest_kubernetes/k8stest.py
+++ b/functest_kubernetes/k8stest.py
@@ -23,7 +23,7 @@ import time
from xtesting.core import testcase
-class K8sTesting(testcase.TestCase):
+class E2ETesting(testcase.TestCase):
"""Kubernetes test runner"""
# pylint: disable=too-many-instance-attributes
@@ -32,7 +32,7 @@ class K8sTesting(testcase.TestCase):
config = '/root/.kube/config'
def __init__(self, **kwargs):
- super(K8sTesting, self).__init__(**kwargs)
+ super(E2ETesting, self).__init__(**kwargs)
self.cmd = []
self.dir_results = "/home/opnfv/functest/results"
self.res_dir = os.path.join(self.dir_results, self.case_name)
@@ -42,11 +42,16 @@ class K8sTesting(testcase.TestCase):
self.output_log_name = 'functest-kubernetes.log'
self.output_debug_log_name = 'functest-kubernetes.debug.log'
- def run_kubetest(self): # pylint: disable=too-many-branches
+ def run_kubetest(self, **kwargs): # pylint: disable=too-many-branches
"""Run the test suites"""
- cmd_line = self.cmd
+ cmd_line = ['e2e.test', '-ginkgo.noColor', '-kubeconfig', self.config,
+ '-provider', 'local', '-report-dir', self.res_dir]
+ if kwargs.get("focus"):
+ cmd_line.extend(['-ginkgo.focus', kwargs.get("focus")])
+ if kwargs.get("skip"):
+ cmd_line.extend(['-ginkgo.skip', kwargs.get("skip")])
+ cmd_line.extend(['-disable-log-dump', 'true'])
self.__logger.info("Starting k8s test: '%s'.", cmd_line)
-
process = subprocess.Popen(cmd_line, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
boutput = process.stdout.read()
@@ -80,35 +85,10 @@ class K8sTesting(testcase.TestCase):
return self.EX_RUN_ERROR
self.start_time = time.time()
try:
- self.run_kubetest()
+ self.run_kubetest(**kwargs)
res = self.EX_OK
except Exception: # pylint: disable=broad-except
self.__logger.exception("Error with running kubetest:")
res = self.EX_RUN_ERROR
self.stop_time = time.time()
return res
-
-
-class K8sSmokeTest(K8sTesting):
- """Kubernetes smoke test suite"""
- def __init__(self, **kwargs):
- if "case_name" not in kwargs:
- kwargs.get("case_name", 'k8s_smoke')
- super(K8sSmokeTest, self).__init__(**kwargs)
- self.cmd = ['e2e.test', '-ginkgo.focus', 'Guestbook.application',
- '-ginkgo.noColor', '-kubeconfig', self.config,
- '-provider', 'local', '-report-dir', self.res_dir,
- '-disable-log-dump', 'true']
-
-
-class K8sConformanceTest(K8sTesting):
- """Kubernetes conformance test suite"""
- def __init__(self, **kwargs):
- if "case_name" not in kwargs:
- kwargs.get("case_name", 'k8s_conformance')
- super(K8sConformanceTest, self).__init__(**kwargs)
- self.cmd = [
- 'e2e.test', '-ginkgo.focus', r'\[Conformance\]', '-ginkgo.noColor',
- '-ginkgo.skip', r'Alpha|\[(Disruptive|Feature:[^\]]+|Flaky)\]',
- '-kubeconfig', self.config, '-provider', 'local',
- '-report-dir', self.res_dir, '-disable-log-dump', 'true']
diff --git a/functest_kubernetes/test_k8stest.py b/functest_kubernetes/test_k8stest.py
index 16b0f246..aff0f422 100644
--- a/functest_kubernetes/test_k8stest.py
+++ b/functest_kubernetes/test_k8stest.py
@@ -20,7 +20,7 @@ from xtesting.core import testcase
from functest_kubernetes import k8stest
-class K8sTests(unittest.TestCase):
+class E2EUnitTesting(unittest.TestCase):
# pylint: disable=missing-docstring
@@ -30,25 +30,20 @@ class K8sTests(unittest.TestCase):
os.environ["KUBE_MASTER_URL"] = "https://127.0.0.1:6443"
os.environ["KUBERNETES_PROVIDER"] = "local"
- self.k8stesting = k8stest.K8sTesting()
+ self.k8stesting = k8stest.E2ETesting()
@mock.patch('functest_kubernetes.k8stest.os.path.isfile',
return_value=False)
def test_run_missing_config_file(self, mock_func):
self.k8stesting.config = 'not_file'
with mock.patch.object(self.k8stesting,
- '_K8sTesting__logger') as mock_logger:
+ '_E2ETesting__logger') as mock_logger:
self.assertEqual(self.k8stesting.run(),
testcase.TestCase.EX_RUN_ERROR)
mock_logger.error.assert_called_with(
"Cannot run k8s testcases. Config file not found")
mock_func.assert_called_with('not_file')
- def test_run_kubetest_cmd_none(self):
- self.k8stesting.cmd = None
- with self.assertRaises(TypeError):
- self.k8stesting.run_kubetest()
-
@mock.patch('re.search')
@mock.patch('six.moves.builtins.open', mock.mock_open())
@mock.patch('functest_kubernetes.k8stest.os.path.isfile')
diff --git a/setup.cfg b/setup.cfg
index eb2b87e7..bfb45a65 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -8,8 +8,7 @@ packages = functest_kubernetes
[entry_points]
xtesting.testcase =
- k8s_smoke = functest_kubernetes.k8stest:K8sSmokeTest
- k8s_conformance = functest_kubernetes.k8stest:K8sConformanceTest
+ e2e_testing = functest_kubernetes.k8stest:E2ETesting
xrally_kubernetes = functest_kubernetes.rally.rally_kubernetes:RallyKubernetes
k8s_vims = functest_kubernetes.ims.ims:Vims
kube_hunter = functest_kubernetes.security.security:KubeHunter