Implement "setup" and "cleanup" fixture sub-commands.

Change-Id: I87eb6fd16310b596f87d89a4fd89ae03ef02d77c
This commit is contained in:
Federico Ressi 2019-03-05 10:15:27 +01:00
parent 33c4d4e3aa
commit be5135cd66
5 changed files with 49 additions and 43 deletions

View File

@ -31,7 +31,4 @@ setup_shared_fixture = fixture.setup_shared_fixture
cleanup_fixture = fixture.cleanup_fixture
cleanup_shared_fixture = fixture.cleanup_shared_fixture
list_required_fixtures = fixture.list_required_fixtures
iter_required_fixtures = fixture.iter_required_fixtures
setup_required_fixtures = fixture.setup_required_fixtures
cleanup_required_fixtures = fixture.cleanup_required_fixtures
SharedFixture = fixture.SharedFixture

View File

@ -139,17 +139,25 @@ class FixtureUtil(base.TobikoCMD):
output = output.decode()
stream.write(output)
def setup_fixtures(self):
def setup_fixtures(self, stream=None):
stream = stream or sys.stdout
test_cases = self.discover_testcases()
for fixture in tobiko.setup_required_fixtures(test_cases):
fixture_name = tobiko.get_fixture_name(fixture)
LOG.debug("Fixture setUp called, %s", fixture_name)
for fixture_name in tobiko.list_required_fixtures(test_cases):
output = fixture_name + '\n'
if six.PY2:
output = output.decode()
stream.write(output)
tobiko.setup_fixture(fixture_name)
def cleanup_fixtures(self):
def cleanup_fixtures(self, stream=None):
stream = stream or sys.stdout
test_cases = self.discover_testcases()
for fixture in tobiko.cleanup_required_fixtures(test_cases):
fixture_name = tobiko.get_fixture_name(fixture)
LOG.debug("Fixture cleanUp called, %s", fixture_name)
for fixture_name in tobiko.list_required_fixtures(test_cases):
output = fixture_name + '\n'
if six.PY2:
output = output.decode()
stream.write(output)
tobiko.cleanup_fixture(fixture_name)
def main():

View File

@ -100,17 +100,6 @@ def list_required_fixtures(objects):
return sorted(set(iter_required_fixtures(objects)))
def setup_required_fixtures(objects, manager=None):
for name in list_required_fixtures(objects=objects):
yield setup_fixture(name, manager=manager)
def cleanup_required_fixtures(objects, manager=None):
manager = manager or FIXTURES
for name in list_required_fixtures(objects=objects):
yield cleanup_fixture(name, manager=manager)
def init_fixture(obj, name):
if isinstance(obj, six.string_types):
obj = tobiko.load_object(name)

View File

@ -189,8 +189,7 @@ class FixtureUtilTest(unit.TobikoUnitTest):
def test_main(self, subcommand=None, config_file=None, repo_type=None,
repo_url=None, test_path=None, top_dir=None,
group_regex=None, blacklist_file=None, whitelist_file=None,
black_regex=None, filters=None, fixture1=MyFixture1,
fixture2=MyFixture2):
black_regex=None, filters=None):
test_path = test_path or self.test_path
top_dir = top_dir or self.top_dir
self.setup_file_repo(top_dir=top_dir)
@ -202,12 +201,43 @@ class FixtureUtilTest(unit.TobikoUnitTest):
whitelist_file=whitelist_file,
black_regex=black_regex, filters=filters)
stdout = self.patch('sys.stdout', io.StringIO())
fixture.main()
self.mock_error.assert_not_called()
return stdout
def test_list(self, fixture1=MyFixture1, fixture2=MyFixture2):
stdout = self.test_main(subcommand='list')
written_lines = stdout.getvalue().splitlines()
self.assertIn(tobiko.get_fixture_name(fixture1), written_lines)
self.assertIn(tobiko.get_fixture_name(fixture2), written_lines)
def test_setup(self, fixture1=MyFixture1, fixture2=MyFixture2):
setup1 = self.patch(tobiko.get_fixture_name(fixture1) + '.setUp')
setup2 = self.patch(tobiko.get_fixture_name(fixture2) + '.setUp')
setup1.assert_not_called()
setup2.assert_not_called()
stdout = self.test_main(subcommand='setup')
written_lines = stdout.getvalue().splitlines()
self.assertIn(tobiko.get_fixture_name(fixture1), written_lines)
self.assertIn(tobiko.get_fixture_name(fixture2), written_lines)
setup1.assert_called_with()
setup2.assert_called_with()
def test_cleanup(self, fixture1=MyFixture1, fixture2=MyFixture2):
cleanup1 = self.patch(tobiko.get_fixture_name(fixture1) + '.cleanUp')
cleanup2 = self.patch(tobiko.get_fixture_name(fixture2) + '.cleanUp')
cleanup1.assert_not_called()
cleanup2.assert_not_called()
stdout = self.test_main(subcommand='cleanup')
written_lines = stdout.getvalue().splitlines()
self.assertIn(tobiko.get_fixture_name(fixture1), written_lines)
self.assertIn(tobiko.get_fixture_name(fixture2), written_lines)
cleanup1.assert_called_with()
cleanup2.assert_called_with()
def setup_file_repo(self, top_dir):
if not os.path.isdir(os.path.join(top_dir, '.stestr')):

View File

@ -121,24 +121,6 @@ class FixtureManagerTest(unit.TobikoUnitTest):
result = tobiko.list_required_fixtures([fixture])
self.assertEqual([MY_FIXTURE_NAME], result)
def test_setup_required_fixtures(self, fixture_type=MyFixture):
setup = self.patch('fixtures.Fixture.setUp')
result = list(tobiko.setup_required_fixtures([self.id()]))
setup.assert_called_once_with()
self.assertEqual([tobiko.get_fixture(fixture_type)], result)
def test_cleanup_required_fixtures(self, fixture_type=MyFixture):
cleanup = mock.MagicMock()
fixture = tobiko.setup_fixture(fixture_type)
fixture.addCleanup(cleanup)
result = list(tobiko.cleanup_required_fixtures([self.id()]))
cleanup.assert_called_once_with()
self.assertEqual([tobiko.get_fixture(fixture_type)], result)
class MySharedFixture(tobiko.SharedFixture):
pass