Use fixtures and addCleanup instead of tearDown

Nothing ensures tearDown call as tearDown is called only if test
succeeds. This change replaces tearDown use with:

* addCleanup use to stop mocks
* EnvFixture which ensures to unmock environment thanks to useFixture.

Change-Id: I1ff422e6a7585bc48b04b8f5c4cc1e7e9ddab1bc
This commit is contained in:
Cedric Brandily 2016-04-05 17:57:55 +02:00
parent 97492c168f
commit bad21594be

@ -14,6 +14,7 @@
#
import copy
import fixtures
import mock
import os
import testtools
@ -161,6 +162,23 @@ def fake_execute(shell, cmd):
return shell.run(cmd.split())
class EnvFixture(fixtures.Fixture):
"""Environment Fixture.
This fixture replaces os.environ with provided env or an empty env.
"""
def __init__(self, env=None):
self.new_env = env or {}
def _setUp(self):
self.orig_env, os.environ = os.environ, self.new_env
self.addCleanup(self.revert)
def revert(self):
os.environ = self.orig_env
class TestShell(utils.TestCase):
def setUp(self):
@ -168,12 +186,9 @@ class TestShell(utils.TestCase):
patch = "openstackclient.shell.OpenStackShell.run_subcommand"
self.cmd_patch = mock.patch(patch)
self.cmd_save = self.cmd_patch.start()
self.addCleanup(self.cmd_patch.stop)
self.app = mock.Mock("Test Shell")
def tearDown(self):
super(TestShell, self).tearDown()
self.cmd_patch.stop()
def _assert_initialize_app_arg(self, cmd_options, default_args):
"""Check the args passed to initialize_app()
@ -285,11 +300,7 @@ class TestShellHelp(TestShell):
def setUp(self):
super(TestShellHelp, self).setUp()
self.orig_env, os.environ = os.environ, {}
def tearDown(self):
super(TestShellHelp, self).tearDown()
os.environ = self.orig_env
self.useFixture(EnvFixture())
@testtools.skip("skip until bug 1444983 is resolved")
def test_help_options(self):
@ -310,11 +321,7 @@ class TestShellOptions(TestShell):
def setUp(self):
super(TestShellOptions, self).setUp()
self.orig_env, os.environ = os.environ, {}
def tearDown(self):
super(TestShellOptions, self).tearDown()
os.environ = self.orig_env
self.useFixture(EnvFixture())
def _test_options_init_app(self, test_opts):
for opt in test_opts.keys():
@ -402,11 +409,7 @@ class TestShellTokenAuthEnv(TestShell):
"OS_TOKEN": DEFAULT_TOKEN,
"OS_AUTH_URL": DEFAULT_AUTH_URL,
}
self.orig_env, os.environ = os.environ, env.copy()
def tearDown(self):
super(TestShellTokenAuthEnv, self).tearDown()
os.environ = self.orig_env
self.useFixture(EnvFixture(env.copy()))
def test_env(self):
flag = ""
@ -450,11 +453,7 @@ class TestShellTokenEndpointAuthEnv(TestShell):
"OS_TOKEN": DEFAULT_TOKEN,
"OS_URL": DEFAULT_SERVICE_URL,
}
self.orig_env, os.environ = os.environ, env.copy()
def tearDown(self):
super(TestShellTokenEndpointAuthEnv, self).tearDown()
os.environ = self.orig_env
self.useFixture(EnvFixture(env.copy()))
def test_env(self):
flag = ""
@ -501,11 +500,7 @@ class TestShellCli(TestShell):
"OS_VOLUME_API_VERSION": DEFAULT_VOLUME_API_VERSION,
"OS_NETWORK_API_VERSION": DEFAULT_NETWORK_API_VERSION,
}
self.orig_env, os.environ = os.environ, env.copy()
def tearDown(self):
super(TestShellCli, self).tearDown()
os.environ = self.orig_env
self.useFixture(EnvFixture(env.copy()))
def test_shell_args_no_options(self):
_shell = make_shell()
@ -719,11 +714,7 @@ class TestShellCliEnv(TestShell):
env = {
'OS_REGION_NAME': 'occ-env',
}
self.orig_env, os.environ = os.environ, env.copy()
def tearDown(self):
super(TestShellCliEnv, self).tearDown()
os.environ = self.orig_env
self.useFixture(EnvFixture(env.copy()))
@mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file")
@mock.patch("os_client_config.config.OpenStackConfig._load_config_file")