From 8cf94642d8e41af5b23892323528aaab0e087a83 Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Sat, 5 May 2018 19:07:42 +0200 Subject: Implement get_external_network via shade MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It fixes the current issues as EXTERNAL_NETWORK is mainly unset by all Installers [1]. [1] https://build.opnfv.org/ci/view/functest/job/functest-fuel-armband-baremetal-arm-daily-fraser/31/console Change-Id: I8ee62623701c15b9ff962d0a0e07a77934ff03ac Signed-off-by: Cédric Ollivier --- functest/opnfv_tests/openstack/vping/vping_base.py | 3 +- functest/tests/unit/utils/test_functest_utils.py | 66 ++++++++++++++++++++++ functest/utils/functest_utils.py | 19 +++++++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/functest/opnfv_tests/openstack/vping/vping_base.py b/functest/opnfv_tests/openstack/vping/vping_base.py index 13ee67ddb..6f2f5dfbe 100644 --- a/functest/opnfv_tests/openstack/vping/vping_base.py +++ b/functest/opnfv_tests/openstack/vping/vping_base.py @@ -20,6 +20,7 @@ from xtesting.core import testcase from functest.utils import config from functest.utils import env +from functest.utils import functest_utils class VPingBase(testcase.TestCase): @@ -35,7 +36,7 @@ class VPingBase(testcase.TestCase): super(VPingBase, self).__init__(**kwargs) self.logger = logging.getLogger(__name__) self.cloud = os_client_config.make_shade() - self.ext_net = self.cloud.get_network("ext-net") + self.ext_net = functest_utils.get_external_network(self.cloud) self.logger.debug("ext_net: %s", self.ext_net) self.guid = '-' + str(uuid.uuid4()) self.network = None diff --git a/functest/tests/unit/utils/test_functest_utils.py b/functest/tests/unit/utils/test_functest_utils.py index d35ed8ced..7debcc1df 100644 --- a/functest/tests/unit/utils/test_functest_utils.py +++ b/functest/tests/unit/utils/test_functest_utils.py @@ -11,9 +11,11 @@ import logging import time +import os import unittest import mock +import munch import pkg_resources from functest.utils import functest_utils @@ -218,6 +220,70 @@ class FunctestUtilsTesting(unittest.TestCase): self.test_file), 'test_image_name') + def test_get_extnetwork_nocloud(self): + with self.assertRaises(AssertionError): + functest_utils.get_external_network(None) + + def test_get_extnetwork_env_ok1(self): + cloud = mock.Mock() + cloud.get_network.return_value = munch.Munch(name="dummy") + os.environ["EXTERNAL_NETWORK"] = 'dummy' + self.assertEqual( + functest_utils.get_external_network(cloud), + cloud.get_network.return_value) + cloud.get_network.assert_called_once_with( + 'dummy', {'router:external': True}) + cloud.list_networks.assert_not_called() + + def test_get_extnetwork_env_ok2(self): + cloud = mock.Mock() + cloud.get_network.return_value = None + cloud.list_networks.return_value = None + os.environ["EXTERNAL_NETWORK"] = 'dummy' + self.assertEqual(functest_utils.get_external_network(cloud), None) + cloud.get_network.assert_called_once_with( + 'dummy', {'router:external': True}) + cloud.list_networks.assert_called_once_with( + {'router:external': True}) + + def test_get_extnetwork_env_ko(self): + cloud = mock.Mock() + cloud.get_network.return_value = None + cloud.list_networks.return_value = [munch.Munch(name="dummy")] + os.environ["EXTERNAL_NETWORK"] = 'dummy' + self.assertEqual( + functest_utils.get_external_network(cloud), + cloud.list_networks.return_value[0]) + cloud.get_network.assert_called_once_with( + 'dummy', {'router:external': True}) + cloud.list_networks.assert_called_once_with( + {'router:external': True}) + + def test_get_extnetwork_noenv_ko(self): + try: + del os.environ["EXTERNAL_NETWORK"] + except Exception: # pylint: disable=broad-except + pass + cloud = mock.Mock() + cloud.list_networks.return_value = None + self.assertEqual(functest_utils.get_external_network(cloud), None) + cloud.get_network.assert_not_called() + cloud.list_networks.assert_called_once_with( + {'router:external': True}) + + def test_get_extnetwork_noenv_ok(self): + try: + del os.environ["EXTERNAL_NETWORK"] + except Exception: # pylint: disable=broad-except + pass + cloud = mock.Mock() + cloud.list_networks.return_value = [munch.Munch(name="dummy")] + self.assertEqual( + functest_utils.get_external_network(cloud), + cloud.list_networks.return_value[0]) + cloud.get_network.assert_not_called() + cloud.list_networks.assert_called_once_with( + {'router:external': True}) if __name__ == "__main__": logging.disable(logging.CRITICAL) diff --git a/functest/utils/functest_utils.py b/functest/utils/functest_utils.py index b614af321..b860828f1 100644 --- a/functest/utils/functest_utils.py +++ b/functest/utils/functest_utils.py @@ -15,6 +15,8 @@ import subprocess import sys import yaml +from functest.utils import env + LOGGER = logging.getLogger(__name__) @@ -72,3 +74,20 @@ def get_parameter_from_yaml(parameter, yfile): raise ValueError("The parameter %s is not defined in" " %s" % (parameter, yfile)) return value + + +def get_external_network(cloud): + """ + Returns the configured external network name or + the first retrieved external network name + """ + assert cloud + if env.get("EXTERNAL_NETWORK"): + network = cloud.get_network( + env.get("EXTERNAL_NETWORK"), {"router:external": True}) + if network: + return network + networks = cloud.list_networks({"router:external": True}) + if networks: + return networks[0] + return None -- cgit 1.2.3-korg