Allow multiple sets of suites in ODL
authorCédric Ollivier <cedric.ollivier@orange.com>
Thu, 2 Feb 2017 17:25:43 +0000 (18:25 +0100)
committerCédric Ollivier <cedric.ollivier@orange.com>
Thu, 2 Feb 2017 17:34:09 +0000 (18:34 +0100)
ODLTests can manage multiple sets of suites passing as run args.
It avoids duplicating odl.py according to ODL features installed (e.g.
netvirt).

Change-Id: Ibb0697ef9441506c3f33627e13a0845cc482e23f
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
functest/ci/testcases.yaml
functest/opnfv_tests/sdn/odl/odl.py
functest/tests/unit/odl/test_odl.py

index 27d358b..406ce99 100755 (executable)
@@ -99,6 +99,10 @@ tiers:
                 run:
                     module: 'functest.opnfv_tests.sdn.odl.odl'
                     class: 'ODLTests'
+                    args:
+                        suites:
+                            -  /home/opnfv/repos/odl_test/csit/suites/integration/basic
+                            -  /home/opnfv/repos/odl_test/csit/suites/openstack/neutron
 
             -
                 name: onos
index 339c305..9502be9 100755 (executable)
@@ -54,6 +54,7 @@ class ODLTests(testcase_base.TestcaseBase):
                                      "csit/suites/openstack/neutron")
     basic_suite_dir = os.path.join(odl_test_repo,
                                    "csit/suites/integration/basic")
+    default_suites = [basic_suite_dir, neutron_suite_dir]
     res_dir = '/home/opnfv/functest/results/odl/'
     logger = ft_logger.Logger("opendaylight").getLogger()
 
@@ -89,8 +90,7 @@ class ODLTests(testcase_base.TestcaseBase):
         self.details['description'] = result.suite.name
         self.details['tests'] = visitor.get_data()
 
-    def main(self, **kwargs):
-        dirs = [self.basic_suite_dir, self.neutron_suite_dir]
+    def main(self, suites=default_suites, **kwargs):
         try:
             odlusername = kwargs['odlusername']
             odlpassword = kwargs['odlpassword']
@@ -117,7 +117,7 @@ class ODLTests(testcase_base.TestcaseBase):
             stdout_file = os.path.join(self.res_dir, 'stdout.txt')
             output_dir = os.path.join(self.res_dir, 'output.xml')
             with open(stdout_file, 'w+') as stdout:
-                robot.run(*dirs, variable=variables,
+                robot.run(*suites, variable=variables,
                           output=output_dir,
                           log='NONE',
                           report='NONE',
@@ -140,8 +140,13 @@ class ODLTests(testcase_base.TestcaseBase):
         else:
             return self.EX_RUN_ERROR
 
-    def run(self):
+    def run(self, **kwargs):
         try:
+            suites = self.default_suites
+            try:
+                suites = kwargs["suites"]
+            except KeyError:
+                pass
             keystone_url = op_utils.get_endpoint(service_type='identity')
             neutron_url = op_utils.get_endpoint(service_type='network')
             kwargs = {'keystoneip': urlparse.urlparse(keystone_url).hostname}
@@ -178,7 +183,7 @@ class ODLTests(testcase_base.TestcaseBase):
             self.logger.exception("Cannot run ODL testcases.")
             return self.EX_RUN_ERROR
 
-        return self.main(**kwargs)
+        return self.main(suites, **kwargs)
 
 
 class ODLParser():
@@ -228,7 +233,7 @@ if __name__ == '__main__':
     parser = ODLParser()
     args = parser.parse_args(sys.argv[1:])
     try:
-        result = odl.main(**args)
+        result = odl.main(ODLTests.default_suites, **args)
         if result != testcase_base.TestcaseBase.EX_OK:
             sys.exit(result)
         if args['pushtodb']:
index 568fdc8..810b359 100644 (file)
@@ -346,6 +346,28 @@ class ODLTesting(unittest.TestCase):
                 self.test.main = mock.Mock(return_value=status)
             self.assertEqual(self.test.run(), status)
             self.test.main.assert_called_once_with(
+                odl.ODLTests.default_suites,
+                keystoneip=self._keystone_ip, neutronip=self._neutron_ip,
+                odlip=odlip, odlpassword=self._odl_password,
+                odlrestconfport=odlrestconfport,
+                odlusername=self._odl_username, odlwebport=odlwebport,
+                ospassword=self._os_password, ostenantname=self._os_tenantname,
+                osusername=self._os_username)
+
+    def _test_run_defining_multiple_suites(
+            self, suites,
+            status=testcase_base.TestcaseBase.EX_OK,
+            exception=None, odlip="127.0.0.3", odlwebport="8080",
+            odlrestconfport="8181"):
+        with mock.patch('functest.utils.openstack_utils.get_endpoint',
+                        side_effect=self._fake_url_for):
+            if exception:
+                self.test.main = mock.Mock(side_effect=exception)
+            else:
+                self.test.main = mock.Mock(return_value=status)
+            self.assertEqual(self.test.run(suites=suites), status)
+            self.test.main.assert_called_once_with(
+                suites,
                 keystoneip=self._keystone_ip, neutronip=self._neutron_ip,
                 odlip=odlip, odlpassword=self._odl_password,
                 odlrestconfport=odlrestconfport,
@@ -394,6 +416,14 @@ class ODLTesting(unittest.TestCase):
                        odlip=self._sdn_controller_ip,
                        odlwebport=self._odl_webport)
 
+    def test_run_redefining_suites(self):
+        os.environ["SDN_CONTROLLER_IP"] = self._sdn_controller_ip
+        self._test_run_defining_multiple_suites(
+            [odl.ODLTests.basic_suite_dir],
+            testcase_base.TestcaseBase.EX_OK,
+            odlip=self._sdn_controller_ip,
+            odlwebport=self._odl_webport)
+
     def test_run_fuel(self):
         os.environ["INSTALLER_TYPE"] = "fuel"
         self._test_run(testcase_base.TestcaseBase.EX_OK,