diff options
-rw-r--r-- | docker/healthcheck/testcases.yaml | 4 | ||||
-rw-r--r-- | docker/smoke/testcases.yaml | 5 | ||||
-rw-r--r-- | functest_kubernetes/ims/ims.py | 27 | ||||
-rw-r--r-- | functest_kubernetes/k8stest.py | 42 | ||||
-rw-r--r-- | functest_kubernetes/test_k8stest.py | 11 | ||||
-rw-r--r-- | setup.cfg | 3 |
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') @@ -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 |