Ease modifying the test list in E2E testing 63/70763/3
authorCédric Ollivier <cedric.ollivier@orange.com>
Thu, 13 Aug 2020 10:04:31 +0000 (12:04 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Thu, 13 Aug 2020 11:59:26 +0000 (13:59 +0200)
It eases creating specific CNTT test cases based on K8s E2E testing.

Change-Id: I304960fda760ffc47d763d53511898699f63e356
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
(cherry picked from commit a22553a65d6019350c215c9024c9dc54cf77dc7c)

docker/healthcheck/testcases.yaml
docker/smoke/testcases.yaml
functest_kubernetes/k8stest.py
functest_kubernetes/test_k8stest.py
setup.cfg

index 73ea526..e8ad2b1 100644 (file)
@@ -18,4 +18,6 @@ tiers:
                 dependencies:
                     - DEPLOY_SCENARIO: 'k8-*'
                 run:
-                    name: k8s_smoke
+                    name: e2e_testing
+                    args:
+                        focus: Guestbook.application
index 012fed7..d64335b 100644 (file)
@@ -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
index e8e8a1f..55a1823 100644 (file)
@@ -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']
index 16b0f24..aff0f42 100644 (file)
@@ -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')
index 455a61b..e9b73f9 100644 (file)
--- 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