From 5f5c925631d5f88d5f4a5d025e75c5d288850b4e Mon Sep 17 00:00:00 2001 From: Yolanda Robla Date: Tue, 29 Mar 2016 12:30:07 +0200 Subject: [PATCH] Use keystoneauth.betamax for shade mocks Instead of mocking the clients, use keystoneauth1.betamax fixture to intercept keystoneauth.construct_session, and provide our own recorded fixtures. Change-Id: I7b2973b0f89b66c19d6bf10571c3c93692107aa3 --- requirements.txt | 2 +- shade/tests/unit/base.py | 14 +++++++++++++- shade/tests/unit/test_flavors.py | 1 - test-requirements.txt | 1 + tox.ini | 14 ++++++++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 23ead37c4..c997766dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ os-client-config>=1.17.0 requestsexceptions>=1.1.1 six -keystoneauth1>=1.0.0 +keystoneauth1>=2.8.0 netifaces>=0.10.4 python-novaclient>=2.21.0,!=2.27.0,!=2.32.0 python-keystoneclient>=0.11.0 diff --git a/shade/tests/unit/base.py b/shade/tests/unit/base.py index 8768ebb7a..4d8661922 100644 --- a/shade/tests/unit/base.py +++ b/shade/tests/unit/base.py @@ -18,6 +18,7 @@ import time import fixtures +import os import os_client_config as occ import tempfile @@ -56,10 +57,21 @@ class TestCase(base.TestCase): vendor.write(b'{}') vendor.close() + # set record mode depending on environment + record_mode = os.environ.get('BETAMAX_RECORD_FIXTURES', False) + if record_mode: + self.record_fixtures = 'new_episodes' + else: + self.record_fixtures = None + + test_cloud = os.environ.get('SHADE_OS_CLOUD', '_test_cloud_') self.config = occ.OpenStackConfig( config_files=[config.name], vendor_files=[vendor.name]) - self.cloud_config = self.config.get_one_cloud(cloud='_test_cloud_') + self.cloud_config = self.config.get_one_cloud(cloud=test_cloud) self.cloud = shade.OpenStackCloud( cloud_config=self.cloud_config, log_inner_exceptions=True) + self.op_cloud = shade.OperatorCloud( + cloud_config=self.cloud_config, + log_inner_exceptions=True) diff --git a/shade/tests/unit/test_flavors.py b/shade/tests/unit/test_flavors.py index f16e0e1c3..99f6ebdb8 100644 --- a/shade/tests/unit/test_flavors.py +++ b/shade/tests/unit/test_flavors.py @@ -24,7 +24,6 @@ class TestFlavors(base.TestCase): def setUp(self): super(TestFlavors, self).setUp() - self.op_cloud = shade.operator_cloud(validate=False) @mock.patch.object(shade.OpenStackCloud, 'nova_client') def test_create_flavor(self, mock_nova): diff --git a/test-requirements.txt b/test-requirements.txt index ee73a8c15..58bfbe812 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,6 @@ hacking>=0.10.0,<0.11 +betamax-serializers>=0.1.1 coverage>=3.6 discover fixtures>=0.3.14 diff --git a/tox.ini b/tox.ini index c1da17bc8..5caa2b097 100644 --- a/tox.ini +++ b/tox.ini @@ -15,6 +15,20 @@ deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = python setup.py testr --slowest --testr-args='{posargs}' +[testenv:record] +usedevelop = True +install_command = pip install -U {opts} {packages} +setenv = + VIRTUAL_ENV={envdir} + LANG=en_US.UTF-8 + LANGUAGE=en_US:en + LC_ALL=C + BETAMAX_RECORD_FIXTURES=1 +passenv = SHADE_OS_CLOUD +deps = -r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt +commands = python setup.py testr --slowest --testr-args='--concurrency=1 {posargs}' + [testenv:functional] setenv = OS_TEST_PATH = ./shade/tests/functional