Support https when testing ODL 19/42719/1
authorCédric Ollivier <cedric.ollivier@orange.com>
Wed, 20 Sep 2017 08:52:33 +0000 (10:52 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Thu, 21 Sep 2017 23:23:16 +0000 (01:23 +0200)
It conforms with the last change on ODL tests [1].
Neutron endpoint is passed via robot args instead of Neutron ip.
Keystone url (based on OS_AUTH_URL) is passed too to replace Keystone
ip.

[1] https://git.opendaylight.org/gerrit/#/c/63293/

Conflicts:
    docker/restapi/Dockerfile
    docker/smoke/Dockerfile

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

docker/Dockerfile
docker/restapi/Dockerfile
docker/smoke/Dockerfile
functest/opnfv_tests/sdn/odl/odl.py
functest/tests/unit/odl/test_odl.py

index 2e59ada..76a7095 100644 (file)
@@ -14,7 +14,7 @@ LABEL version="0.1" description="OPNFV Functest Docker container"
 # Environment variables
 ARG BRANCH=stable/euphrates
 ARG RALLY_TAG=stable/0.9
-ARG ODL_TAG=35e415b6873b39d72775c88a337e92dac26012e2
+ARG ODL_TAG=e12ba90cd27577c4c6c70ee54f7d599b5f6777ba
 ARG OPENSTACK_TAG=stable/ocata
 ARG VIMS_TAG=stable
 ARG REFSTACK_TAG=4e187b07672dd1c41cb7c94658f1c91edebf53a2
index 50eb8a8..3021c83 100644 (file)
@@ -2,7 +2,7 @@ FROM opnfv/functest-core:euphrates
 
 ARG BRANCH=stable/euphrates
 ARG OPENSTACK_TAG=stable/ocata
-ARG ODL_TAG=35e415b6873b39d72775c88a337e92dac26012e2
+ARG ODL_TAG=e12ba90cd27577c4c6c70ee54f7d599b5f6777ba
 ARG FDS_TAG=stable/euphrates
 ARG REFSTACK_TAG=4e187b07672dd1c41cb7c94658f1c91edebf53a2
 ARG VIMS_TAG=stable
index 8204384..b1443c7 100644 (file)
@@ -2,7 +2,7 @@ FROM opnfv/functest-core:euphrates
 
 ARG BRANCH=stable/euphrates
 ARG OPENSTACK_TAG=stable/ocata
-ARG ODL_TAG=35e415b6873b39d72775c88a337e92dac26012e2
+ARG ODL_TAG=e12ba90cd27577c4c6c70ee54f7d599b5f6777ba
 ARG FDS_TAG=stable/euphrates
 ARG REFSTACK_TAG=4e187b07672dd1c41cb7c94658f1c91edebf53a2
 
index d09532c..dd313ff 100644 (file)
@@ -78,20 +78,20 @@ class ODLTests(testcase.TestCase):
 
     @classmethod
     def set_robotframework_vars(cls, odlusername="admin", odlpassword="admin"):
-        """Set credentials in csit/variables/Variables.py.
+        """Set credentials in csit/variables/Variables.robot.
 
         Returns:
             True if credentials are set.
             False otherwise.
         """
         odl_variables_files = os.path.join(cls.odl_test_repo,
-                                           'csit/variables/Variables.py')
+                                           'csit/variables/Variables.robot')
         try:
             for line in fileinput.input(odl_variables_files,
                                         inplace=True):
-                print(re.sub("AUTH = .*",
-                             ("AUTH = [u'" + odlusername + "', u'" +
-                              odlpassword + "']"),
+                print(re.sub("@{AUTH}.*",
+                             "@{{AUTH}}           {}    {}".format(
+                                 odlusername, odlpassword),
                              line.rstrip()))
             return True
         except Exception as ex:  # pylint: disable=broad-except
@@ -125,7 +125,7 @@ class ODLTests(testcase.TestCase):
            * odlusername,
            * odlpassword,
            * osauthurl,
-           * neutronip,
+           * neutronurl,
            * osusername,
            * ostenantname,
            * ospassword,
@@ -152,9 +152,11 @@ class ODLTests(testcase.TestCase):
             odlusername = kwargs['odlusername']
             odlpassword = kwargs['odlpassword']
             osauthurl = kwargs['osauthurl']
-            keystoneip = urllib.parse.urlparse(osauthurl).hostname
-            variables = ['KEYSTONE:' + keystoneip,
-                         'NEUTRON:' + kwargs['neutronip'],
+            keystoneurl = "{}://{}".format(
+                urllib.parse.urlparse(osauthurl).scheme,
+                urllib.parse.urlparse(osauthurl).netloc)
+            variables = ['KEYSTONEURL:' + keystoneurl,
+                         'NEUTRONURL:' + kwargs['neutronurl'],
                          'OS_AUTH_URL:"' + osauthurl + '"',
                          'OSUSERNAME:"' + kwargs['osusername'] + '"',
                          ('OSUSERDOMAINNAME:"' +
@@ -167,8 +169,7 @@ class ODLTests(testcase.TestCase):
                          'PORT:' + kwargs['odlwebport'],
                          'RESTCONFPORT:' + kwargs['odlrestconfport']]
         except KeyError as ex:
-            self.__logger.error("Cannot run ODL testcases. Please check "
-                                "%s", str(ex))
+            self.__logger.exception("Cannot run ODL testcases. Please check")
             return self.EX_RUN_ERROR
         if self.set_robotframework_vars(odlusername, odlpassword):
             try:
@@ -214,9 +215,10 @@ class ODLTests(testcase.TestCase):
                 suites = kwargs["suites"]
             except KeyError:
                 pass
-            neutron_url = op_utils.get_endpoint(service_type='network')
-            kwargs = {'neutronip': urllib.parse.urlparse(neutron_url).hostname}
-            kwargs['odlip'] = kwargs['neutronip']
+            kwargs = {'neutronurl': op_utils.get_endpoint(
+                service_type='network')}
+            kwargs['odlip'] = urllib.parse.urlparse(
+                kwargs['neutronurl']).hostname
             kwargs['odlwebport'] = '8080'
             kwargs['odlrestconfport'] = '8181'
             kwargs['odlusername'] = 'admin'
@@ -267,8 +269,8 @@ class ODLParser(object):  # pylint: disable=too-few-public-methods
     def __init__(self):
         self.parser = argparse.ArgumentParser()
         self.parser.add_argument(
-            '-n', '--neutronip', help='Neutron IP',
-            default='127.0.0.1')
+            '-n', '--neutronurl', help='Neutron Endpoint',
+            default='http://127.0.0.1:9696')
         self.parser.add_argument(
             '-k', '--osauthurl', help='OS_AUTH_URL as defined by OpenStack',
             default='http://127.0.0.1:5000/v3')
index 338a4e6..a653b04 100644 (file)
@@ -20,6 +20,7 @@ from robot.errors import DataError, RobotError
 from robot.result import model
 from robot.utils.robottime import timestamp_to_secs
 import six
+from six.moves import urllib
 
 from functest.core import testcase
 from functest.opnfv_tests.sdn.odl import odl
@@ -67,7 +68,7 @@ class ODLTesting(unittest.TestCase):
     logging.disable(logging.CRITICAL)
 
     _keystone_ip = "127.0.0.1"
-    _neutron_ip = "127.0.0.2"
+    _neutron_url = "http://127.0.0.2:9696"
     _sdn_controller_ip = "127.0.0.3"
     _os_auth_url = "http://{}:5000/v3".format(_keystone_ip)
     _os_tenantname = "admin"
@@ -94,7 +95,8 @@ class ODLTesting(unittest.TestCase):
         self.test = odl.ODLTests(case_name='odl', project_name='functest')
         self.defaultargs = {'odlusername': self._odl_username,
                             'odlpassword': self._odl_password,
-                            'neutronip': self._keystone_ip,
+                            'neutronurl': "http://{}:9696".format(
+                                self._keystone_ip),
                             'osauthurl': self._os_auth_url,
                             'osusername': self._os_username,
                             'osuserdomainname': self._os_userdomainname,
@@ -167,14 +169,14 @@ class ODLRobotTesting(ODLTesting):
         self.assertFalse(self.test.set_robotframework_vars())
         mock_method.assert_called_once_with(
             os.path.join(odl.ODLTests.odl_test_repo,
-                         'csit/variables/Variables.py'), inplace=True)
+                         'csit/variables/Variables.robot'), inplace=True)
 
     @mock.patch('fileinput.input', return_value=[])
     def test_set_vars_empty(self, mock_method):
         self.assertTrue(self.test.set_robotframework_vars())
         mock_method.assert_called_once_with(
             os.path.join(odl.ODLTests.odl_test_repo,
-                         'csit/variables/Variables.py'), inplace=True)
+                         'csit/variables/Variables.robot'), inplace=True)
 
     @mock.patch('sys.stdout', new_callable=six.StringIO)
     def _test_set_vars(self, msg1, msg2, *args):
@@ -184,27 +186,31 @@ class ODLRobotTesting(ODLTesting):
             self.assertTrue(self.test.set_robotframework_vars())
             mock_method.assert_called_once_with(
                 os.path.join(odl.ODLTests.odl_test_repo,
-                             'csit/variables/Variables.py'), inplace=True)
+                             'csit/variables/Variables.robot'), inplace=True)
             self.assertEqual(args[0].getvalue(), "{}\n".format(msg2))
 
     def test_set_vars_auth_default(self):
-        self._test_set_vars("AUTH = []",
-                            "AUTH = [u'admin', u'admin']")
+        self._test_set_vars(
+            "@{AUTH} ",
+            "@{AUTH}           admin    admin")
 
     def test_set_vars_auth1(self):
-        self._test_set_vars("AUTH1 = []", "AUTH1 = []")
+        self._test_set_vars(
+            "@{AUTH1}           foo    bar",
+            "@{AUTH1}           foo    bar")
 
     @mock.patch('sys.stdout', new_callable=six.StringIO)
     def test_set_vars_auth_foo(self, *args):
         line = mock.MagicMock()
-        line.__iter__.return_value = ["AUTH = []"]
+        line.__iter__.return_value = ["@{AUTH} "]
         with mock.patch('fileinput.input', return_value=line) as mock_method:
             self.assertTrue(self.test.set_robotframework_vars('foo', 'bar'))
             mock_method.assert_called_once_with(
                 os.path.join(odl.ODLTests.odl_test_repo,
-                             'csit/variables/Variables.py'), inplace=True)
-            self.assertEqual(args[0].getvalue(),
-                             "AUTH = [u'{}', u'{}']\n".format('foo', 'bar'))
+                             'csit/variables/Variables.robot'), inplace=True)
+            self.assertEqual(
+                args[0].getvalue(),
+                "@{AUTH}           foo    bar\n")
 
 
 class ODLMainTesting(ODLTesting):
@@ -215,7 +221,7 @@ class ODLMainTesting(ODLTesting):
     def _get_run_suites_kwargs(self, key=None):
         kwargs = {'odlusername': self._odl_username,
                   'odlpassword': self._odl_password,
-                  'neutronip': self._neutron_ip,
+                  'neutronurl': self._neutron_url,
                   'osauthurl': self._os_auth_url,
                   'osusername': self._os_username,
                   'osuserdomainname': self._os_userdomainname,
@@ -236,19 +242,20 @@ class ODLMainTesting(ODLTesting):
             args[0].assert_called_once_with(
                 odl.ODLTests.res_dir)
         if len(args) > 1:
-            variable = ['KEYSTONE:{}'.format(self._keystone_ip),
-                        'NEUTRON:{}'.format(self._neutron_ip),
-                        'OS_AUTH_URL:"{}"'.format(self._os_auth_url),
-                        'OSUSERNAME:"{}"'.format(self._os_username),
-                        'OSUSERDOMAINNAME:"{}"'.format(
-                            self._os_userdomainname),
-                        'OSTENANTNAME:"{}"'.format(self._os_tenantname),
-                        'OSPROJECTDOMAINNAME:"{}"'.format(
-                            self._os_projectdomainname),
-                        'OSPASSWORD:"{}"'.format(self._os_password),
-                        'ODL_SYSTEM_IP:{}'.format(self._sdn_controller_ip),
-                        'PORT:{}'.format(self._odl_webport),
-                        'RESTCONFPORT:{}'.format(self._odl_restconfport)]
+            variable = [
+                'KEYSTONEURL:{}://{}'.format(
+                    urllib.parse.urlparse(self._os_auth_url).scheme,
+                    urllib.parse.urlparse(self._os_auth_url).netloc),
+                'NEUTRONURL:{}'.format(self._neutron_url),
+                'OS_AUTH_URL:"{}"'.format(self._os_auth_url),
+                'OSUSERNAME:"{}"'.format(self._os_username),
+                'OSUSERDOMAINNAME:"{}"'.format(self._os_userdomainname),
+                'OSTENANTNAME:"{}"'.format(self._os_tenantname),
+                'OSPROJECTDOMAINNAME:"{}"'.format(self._os_projectdomainname),
+                'OSPASSWORD:"{}"'.format(self._os_password),
+                'ODL_SYSTEM_IP:{}'.format(self._sdn_controller_ip),
+                'PORT:{}'.format(self._odl_webport),
+                'RESTCONFPORT:{}'.format(self._odl_restconfport)]
             args[1].assert_called_once_with(
                 odl.ODLTests.basic_suite_dir,
                 odl.ODLTests.neutron_suite_dir,
@@ -272,8 +279,8 @@ class ODLMainTesting(ODLTesting):
     def test_no_odlpassword(self):
         self._test_no_keyword('odlpassword')
 
-    def test_no_neutronip(self):
-        self._test_no_keyword('neutronip')
+    def test_no_neutronurl(self):
+        self._test_no_keyword('neutronurl')
 
     def test_no_osauthurl(self):
         self._test_no_keyword('osauthurl')
@@ -367,8 +374,7 @@ class ODLRunTesting(ODLTesting):
 
     def _test_no_env_var(self, var):
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             del os.environ[var]
             self.assertEqual(self.test.run(),
                              testcase.TestCase.EX_RUN_ERROR)
@@ -381,8 +387,7 @@ class ODLRunTesting(ODLTesting):
                            if 'odlrestconfport' in kwargs else '8181')
 
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             if exception:
                 self.test.run_suites = mock.Mock(side_effect=exception)
             else:
@@ -390,7 +395,7 @@ class ODLRunTesting(ODLTesting):
             self.assertEqual(self.test.run(), status)
             self.test.run_suites.assert_called_once_with(
                 odl.ODLTests.default_suites,
-                neutronip=self._neutron_ip,
+                neutronurl=self._neutron_url,
                 odlip=odlip, odlpassword=self._odl_password,
                 odlrestconfport=odlrestconfport,
                 odlusername=self._odl_username, odlwebport=odlwebport,
@@ -407,13 +412,12 @@ class ODLRunTesting(ODLTesting):
         odlrestconfport = (kwargs['odlrestconfport']
                            if 'odlrestconfport' in kwargs else '8181')
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             self.test.run_suites = mock.Mock(return_value=status)
             self.assertEqual(self.test.run(suites=suites), status)
             self.test.run_suites.assert_called_once_with(
                 suites,
-                neutronip=self._neutron_ip,
+                neutronurl=self._neutron_url,
                 odlip=odlip, odlpassword=self._odl_password,
                 odlrestconfport=odlrestconfport,
                 odlusername=self._odl_username, odlwebport=odlwebport,
@@ -457,8 +461,7 @@ class ODLRunTesting(ODLTesting):
 
     def test_no_sdn_controller_ip(self):
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             self.assertEqual(self.test.run(),
                              testcase.TestCase.EX_RUN_ERROR)
 
@@ -479,13 +482,13 @@ class ODLRunTesting(ODLTesting):
     def test_fuel(self):
         os.environ["INSTALLER_TYPE"] = "fuel"
         self._test_run(testcase.TestCase.EX_OK,
-                       odlip=self._neutron_ip, odlwebport='8181',
+                       odlip=urllib.parse.urlparse(self._neutron_url).hostname,
+                       odlwebport='8181',
                        odlrestconfport='8282')
 
     def test_apex_no_controller_ip(self):
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             os.environ["INSTALLER_TYPE"] = "apex"
             self.assertEqual(self.test.run(),
                              testcase.TestCase.EX_RUN_ERROR)
@@ -499,8 +502,7 @@ class ODLRunTesting(ODLTesting):
 
     def test_netvirt_no_controller_ip(self):
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             os.environ["INSTALLER_TYPE"] = "netvirt"
             self.assertEqual(self.test.run(),
                              testcase.TestCase.EX_RUN_ERROR)
@@ -514,8 +516,7 @@ class ODLRunTesting(ODLTesting):
 
     def test_joid_no_controller_ip(self):
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             os.environ["INSTALLER_TYPE"] = "joid"
             self.assertEqual(self.test.run(),
                              testcase.TestCase.EX_RUN_ERROR)
@@ -529,12 +530,12 @@ class ODLRunTesting(ODLTesting):
     def test_compass(self):
         os.environ["INSTALLER_TYPE"] = "compass"
         self._test_run(testcase.TestCase.EX_OK,
-                       odlip=self._neutron_ip, odlrestconfport='8080')
+                       odlip=urllib.parse.urlparse(self._neutron_url).hostname,
+                       odlrestconfport='8080')
 
     def test_daisy_no_controller_ip(self):
         with mock.patch('functest.utils.openstack_utils.get_endpoint',
-                        return_value="http://{}:9696".format(
-                            ODLTesting._neutron_ip)):
+                        return_value=ODLTesting._neutron_url):
             os.environ["INSTALLER_TYPE"] = "daisy"
             self.assertEqual(self.test.run(),
                              testcase.TestCase.EX_RUN_ERROR)
@@ -560,11 +561,11 @@ class ODLArgParserTesting(ODLTesting):
         self.assertEqual(self.parser.parse_args(), self.defaultargs)
 
     def test_basic(self):
-        self.defaultargs['neutronip'] = self._neutron_ip
+        self.defaultargs['neutronurl'] = self._neutron_url
         self.defaultargs['odlip'] = self._sdn_controller_ip
         self.assertEqual(
             self.parser.parse_args(
-                ["--neutronip={}".format(self._neutron_ip),
+                ["--neutronurl={}".format(self._neutron_url),
                  "--odlip={}".format(self._sdn_controller_ip)]),
             self.defaultargs)
 
@@ -590,8 +591,8 @@ class ODLArgParserTesting(ODLTesting):
     def test_osauthurl(self):
         self._test_arg('osauthurl', 'http://127.0.0.4:5000/v2')
 
-    def test_neutronip(self):
-        self._test_arg('neutronip', '127.0.0.4')
+    def test_neutronurl(self):
+        self._test_arg('neutronurl', 'http://127.0.0.4:9696')
 
     def test_osusername(self):
         self._test_arg('osusername', 'foo')
@@ -623,11 +624,11 @@ class ODLArgParserTesting(ODLTesting):
                          self.defaultargs)
 
     def test_multiple_args(self):
-        self.defaultargs['neutronip'] = self._neutron_ip
+        self.defaultargs['neutronurl'] = self._neutron_url
         self.defaultargs['odlip'] = self._sdn_controller_ip
         self.assertEqual(
             self.parser.parse_args(
-                ["--neutronip={}".format(self._neutron_ip),
+                ["--neutronurl={}".format(self._neutron_url),
                  "--odlip={}".format(self._sdn_controller_ip)]),
             self.defaultargs)