From 8a2ed13620e78f4b82e68028e86745e8c86240b0 Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp <rhafer@suse.de> Date: Wed, 28 Oct 2015 15:33:22 +0100 Subject: [PATCH] Allow to specify a network for functional tests Currently the tests just attach instances to the first network returned by "net-list". That might however not be the right thing in some environments. This change allows to override the default network via the environment variable "OS_NOVACLIENT_NETWORK". If not specified the test will fallback to the old behaviour and just use the first network. Closes-Bug: #1510975 Change-Id: Ie682111127584a33d8e96377d812d3a6352c760d --- novaclient/tests/functional/api/test_servers.py | 5 +++-- novaclient/tests/functional/base.py | 16 ++++++++++++++++ .../tests/functional/v2/legacy/test_instances.py | 3 +-- .../tests/functional/v2/legacy/test_servers.py | 4 ++-- tox.ini | 2 ++ 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/novaclient/tests/functional/api/test_servers.py b/novaclient/tests/functional/api/test_servers.py index df6671fa2..936bfeac9 100644 --- a/novaclient/tests/functional/api/test_servers.py +++ b/novaclient/tests/functional/api/test_servers.py @@ -19,7 +19,8 @@ class TestServersAPI(base.ClientTestBase): def test_server_ips(self): server_name = "test_server" initial_server = self.client.servers.create( - server_name, self.image, self.flavor) + server_name, self.image, self.flavor, + nics=[{"net-id": self.network.id}]) self.addCleanup(initial_server.delete) for x in range(60): @@ -32,4 +33,4 @@ class TestServersAPI(base.ClientTestBase): self.fail("Server %s did not go ACTIVE after 60s" % server) ips = self.client.servers.ips(server) - self.assertIn('private', ips) + self.assertIn(self.network.label, ips) diff --git a/novaclient/tests/functional/base.py b/novaclient/tests/functional/base.py index 09e3a1990..e148d0b8b 100644 --- a/novaclient/tests/functional/base.py +++ b/novaclient/tests/functional/base.py @@ -45,6 +45,16 @@ def pick_image(images): raise NoImageException() +def pick_network(networks): + network_name = os.environ.get('OS_NOVACLIENT_NETWORK') + if network_name: + for network in networks: + if network.label == network_name: + return network + raise NoNetworkException() + return networks[0] + + class NoImageException(Exception): """We couldn't find an acceptable image.""" pass @@ -55,6 +65,11 @@ class NoFlavorException(Exception): pass +class NoNetworkException(Exception): + """We couldn't find an acceptable network.""" + pass + + class NoCloudConfigException(Exception): """We couldn't find a cloud configuration.""" pass @@ -163,6 +178,7 @@ class ClientTestBase(testtools.TestCase): # pick some reasonable flavor / image combo self.flavor = pick_flavor(self.client.flavors.list()) self.image = pick_image(self.client.images.list()) + self.network = pick_network(self.client.networks.list()) # create a CLI client in case we'd like to do CLI # testing. tempest_lib does this really weird thing where it diff --git a/novaclient/tests/functional/v2/legacy/test_instances.py b/novaclient/tests/functional/v2/legacy/test_instances.py index d512106ec..39e78ee51 100644 --- a/novaclient/tests/functional/v2/legacy/test_instances.py +++ b/novaclient/tests/functional/v2/legacy/test_instances.py @@ -40,10 +40,9 @@ class TestInstanceCLI(base.ClientTestBase): name = self.name_generate('Instance') # Boot via the cli, as we're primarily testing the cli in this test - network = self.client.networks.list()[0] self.nova('boot', params="--flavor %s --image %s %s --nic net-id=%s --poll" % - (self.flavor.name, self.image.name, name, network.id)) + (self.flavor.name, self.image.name, name, self.network.id)) # Be nice about cleaning up, however, use the API for this to avoid # parsing text. diff --git a/novaclient/tests/functional/v2/legacy/test_servers.py b/novaclient/tests/functional/v2/legacy/test_servers.py index 23d3835d5..e13cd1ef2 100644 --- a/novaclient/tests/functional/v2/legacy/test_servers.py +++ b/novaclient/tests/functional/v2/legacy/test_servers.py @@ -75,11 +75,11 @@ class TestServersListNovaClient(base.ClientTestBase): COMPUTE_API_VERSION = "2.1" def _create_servers(self, name, number): - network = self.client.networks.list()[0] servers = [] for i in range(number): servers.append(self.client.servers.create( - name, self.image, self.flavor, nics=[{"net-id": network.id}])) + name, self.image, self.flavor, + nics=[{"net-id": self.network.id}])) shell._poll_for_status( self.client.servers.get, servers[-1].id, 'building', ['active']) diff --git a/tox.ini b/tox.ini index 845523a4c..b8a5004de 100644 --- a/tox.ini +++ b/tox.ini @@ -36,12 +36,14 @@ commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasen [testenv:functional] basepython = python2.7 +passenv = OS_NOVACLIENT_TEST_NETWORK setenv = OS_TEST_PATH = ./novaclient/tests/functional commands = python setup.py testr --testr-args='--concurrency=1 {posargs}' [testenv:functional-py34] basepython = python3.4 +passenv = OS_NOVACLIENT_TEST_NETWORK setenv = OS_TEST_PATH = ./novaclient/tests/functional commands = python setup.py testr --testr-args='--concurrency=1 {posargs}'