get_fixture with fixture instance return instance itself.

Change-Id: Ie1528b941316579f807aa91aac28ed514b1e3a9c
This commit is contained in:
Federico Ressi 2019-03-25 14:04:16 +01:00
parent f53d5bb512
commit b907b1edd2
4 changed files with 50 additions and 13 deletions

View File

@ -25,6 +25,8 @@ discover_testcases = testcase_manager.discover_testcases
is_fixture = fixture.is_fixture
get_fixture = fixture.get_fixture
get_fixture_name = fixture.get_fixture_name
get_fixture_class = fixture.get_fixture_class
get_fixture_dir = fixture.get_fixture_dir
remove_fixture = fixture.remove_fixture
setup_fixture = fixture.setup_fixture
cleanup_fixture = fixture.cleanup_fixture

View File

@ -13,6 +13,7 @@
# under the License.
from __future__ import absolute_import
import os
import inspect
import fixtures
@ -31,12 +32,37 @@ def is_fixture(obj):
def get_fixture(obj, manager=None):
manager = manager or FIXTURES
return manager.get_fixture(obj)
if isinstance(obj, fixtures.Fixture):
return obj
else:
manager = manager or FIXTURES
return manager.get_fixture(obj)
def get_fixture_name(obj):
return get_fixture(obj).__tobiko_fixture_name__
try:
return obj.__tobiko_fixture_name__
except AttributeError:
name = get_object_name(obj)
if is_fixture(obj):
obj.__tobiko_fixture__ = True
obj.__tobiko_fixture_name__ = name
return name
def get_fixture_class(obj):
if isinstance(obj, six.string_types):
obj = tobiko.load_object(obj)
if not inspect.isclass(obj):
obj = type(obj)
assert issubclass(obj, fixtures.Fixture)
return obj
def get_fixture_dir(obj):
return os.path.dirname(inspect.getfile(get_fixture_class(obj)))
def remove_fixture(obj, manager=None):
@ -46,14 +72,14 @@ def remove_fixture(obj, manager=None):
def setup_fixture(obj, manager=None):
fixture = get_fixture(obj, manager=manager)
LOG.debug('Set up fixture %r', fixture.__tobiko_fixture_name__)
LOG.debug('Set up fixture %r', get_fixture_name(fixture))
fixture.setUp()
return fixture
def cleanup_fixture(obj, manager=None):
fixture = get_fixture(obj, manager=manager)
LOG.debug('Clean up fixture %r', fixture.__tobiko_fixture_name__)
LOG.debug('Clean up fixture %r', get_fixture_name(fixture))
fixture.cleanUp()
return fixture

View File

@ -15,7 +15,6 @@ from __future__ import absolute_import
import abc
import fixtures
from oslo_log import log
import tobiko
@ -46,10 +45,7 @@ class OpenstackClientFixture(tobiko.SharedFixture):
def setup_session(self):
session_fixture = self.session_fixture
if session_fixture:
if not isinstance(session_fixture, fixtures.Fixture):
session_fixture = tobiko.get_fixture(session_fixture)
session_fixture.setUp()
self.session = session_fixture.session
self.session = tobiko.setup_fixture(session_fixture).session
elif not self.session:
self.session = keystone.get_keystone_session()

View File

@ -13,6 +13,7 @@
# under the License.
from __future__ import absolute_import
import fixtures
import mock
import tobiko
@ -48,7 +49,13 @@ class FixtureManagerTest(unit.TobikoUnitTest):
fixture = tobiko.get_fixture(obj)
self.assertIsInstance(fixture, fixture_type)
self.assertIs(fixture, tobiko.get_fixture(obj))
self.assertIs(fixture, tobiko.get_fixture(MY_FIXTURE_NAME))
if isinstance(obj, fixtures.Fixture):
self.assertIs(obj, fixture)
else:
self.assertIs(fixture, tobiko.get_fixture(MY_FIXTURE_NAME))
def test_get_fixture_by_instance(self):
self._test_get_fixture(MyFixture(), fixture_type=MyFixture)
def test_remove_fixture_by_name(self):
self._test_remove_fixture(MY_FIXTURE_NAME)
@ -75,9 +82,12 @@ class FixtureManagerTest(unit.TobikoUnitTest):
def test_setup_fixture_by_type(self):
self._test_setup_fixture(MyFixture)
def test_setup_fixture_by_instance(self):
self._test_setup_fixture(MyFixture())
def _test_setup_fixture(self, obj):
result = tobiko.setup_fixture(obj)
self.assertIs(tobiko.get_fixture(MY_FIXTURE_NAME), result)
self.assertIs(tobiko.get_fixture(obj), result)
result.setup_fixture.assert_called_once_with()
def test_cleanup_fixture_by_name(self):
@ -86,9 +96,12 @@ class FixtureManagerTest(unit.TobikoUnitTest):
def test_cleanup_fixture_by_type(self):
self._test_cleanup_fixture(MyFixture)
def test_cleanup_fixture_by_instance(self):
self._test_cleanup_fixture(MyFixture())
def _test_cleanup_fixture(self, obj):
result = tobiko.cleanup_fixture(obj)
self.assertIs(tobiko.get_fixture(MY_FIXTURE_NAME), result)
self.assertIs(tobiko.get_fixture(obj), result)
result.cleanup_fixture.assert_called_once_with()
def test_list_required_fixtures_from_module(self):