From ba82e8b5a620f70d7a0355ba68ba7ad0fab8335c Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Tue, 1 Dec 2020 15:55:34 -0500 Subject: [PATCH] test_mock.py: refactor test case setup To clean things up and facilitate future changes to test cases, split the method for creating a builder apart from the fixture so that it can be used independently. --- tests/test_builder/test_mock.py | 109 +++++++++++++++++++------------- 1 file changed, 66 insertions(+), 43 deletions(-) diff --git a/tests/test_builder/test_mock.py b/tests/test_builder/test_mock.py index 956c0c50..d27e7d9c 100644 --- a/tests/test_builder/test_mock.py +++ b/tests/test_builder/test_mock.py @@ -202,8 +202,48 @@ class TestMockModuleBuilder: assert not pkglist -@pytest.mark.usefixtures("require_platform_and_default_arch", "testconfig") +@pytest.mark.usefixtures("testconfig") class TestMockModuleBuilderBuild: + @pytest.fixture + def testsetup(self, require_platform_and_default_arch): + mmd = load_mmd(read_staged_data("formatted_testmodule")) + xmd = mmd.get_xmd() + xmd["mbs"]["koji_tag"] = "module-testmodule-master-20180205135154-9c690d0e" + mmd.set_xmd(xmd) + + import_mmd(db_session, mmd) + + build = ModuleBuild.get_last_build_in_stream(db_session, "testmodule", "master") + build.batch = 2 + + comp_builds = [ + { + "module_id": build.id, + "state": koji.BUILD_STATES["COMPLETE"], + "package": "module-build-macros", + "nvr": "module-build-macros-0.1-1.module+f33+2+cea92c88", + "format": "rpms", + "batch": 1, + "scmurl": ("/tmp/module_build_service-build-macrosWZUPeK/SRPMS/" + "module-build-macros-0.1-1.src.rpm"), + }, + { + "module_id": build.id, + "state": koji.BUILD_STATES["BUILDING"], + "package": "perl-Tangerine", + "format": "rpms", + "scmurl": ( + "https://src.fedoraproject.org/rpms/perl-Tangerine?#master" + ), + "batch": 2, + "ref": "01234567812fea798671925cc537f2f29b0bd216", + }, + ] + + for build in comp_builds: + db_session.add(ComponentBuild(**build)) + + db_session.commit() @pytest.fixture(params=[{}]) def mock_external_commands(self, request): @@ -282,54 +322,34 @@ class TestMockModuleBuilderBuild: popen_mock.side_effect = mock_popen yield - @pytest.fixture - def builder(self, mock_external_commands, require_platform_and_default_arch): - mmd = load_mmd(read_staged_data("formatted_testmodule")) - xmd = mmd.get_xmd() - xmd["mbs"]["koji_tag"] = "module-testmodule-master-20180205135154-9c690d0e" - mmd.set_xmd(xmd) - - import_mmd(db_session, mmd) - + def make_builder(self): build = ModuleBuild.get_last_build_in_stream(db_session, "testmodule", "master") - build.batch = 2 - - comp_builds = [ - { - "module_id": build.id, - "state": koji.BUILD_STATES["BUILDING"], - "package": "perl-Tangerine", - "format": "rpms", - "scmurl": ( - "https://src.fedoraproject.org/rpms/perl-Tangerine?#master" - ), - "batch": 2, - "ref": "01234567812fea798671925cc537f2f29b0bd216", - }, - ] - - for build in comp_builds: - db_session.add(ComponentBuild(**build)) - db_session.commit() # This is used to identify the first build of a module MockModuleBuilder._build_id = 1 - build = ModuleBuild.get_last_build_in_stream(db_session, "testmodule", "master") - yield GenericBuilder.create_from_module(db_session, build, conf, buildroot_connect=True) + builder = GenericBuilder.create_from_module(db_session, build, conf, buildroot_connect=True) - def test_mock_module_builder_build(self, builder): builder.buildroot_add_artifacts([ - "module-build-macros-0.1-1.module+f33+2+cea92c88.noarch.rpm" + "module-build-macros-0.1-1.module+f33+2+cea92c88" ]) + return builder + + @pytest.fixture(params=[{}]) + def builder(self, mock_external_commands, testsetup): + builder = self.make_builder() + + yield builder + + builder.finalize(succeeded=True) + + def test_mock_module_builder_build(self, builder): builder.build("perl-Tangerine", "https://src.fedoraproject.org/rpms/perl-Tangerine?#master") # Try building again to exercise code to clean up last build for this thread builder.build("perl-Tangerine", "https://src.fedoraproject.org/rpms/perl-Tangerine?#master") - builder.finalize(succeeded=True) - @pytest.mark.parametrize("mock_external_commands", [{"fail_build": True}], indirect=True) def test_mock_module_builder_build_failure(self, builder, caplog): builder.build("perl-Tangerine", "file://opt/sources/fedora/perl-Tangerine?#master") @@ -341,15 +361,18 @@ class TestMockModuleBuilderBuild: def test_mock_module_builder_build_srpm(self, builder): builder.build("perl-Tangerine", "/opt/sources/perl-Tangerine-0.22-2.src.rpm") - def test_mock_module_builder_build_stale_builddir(self, builder): - builder.build("perl-Tangerine", "/opt/sources/perl-Tangerine-0.22-2.src.rpm") - builder.finalize(succeeded=True) + def test_mock_module_builder_build_stale_builddir(self, mock_external_commands): + builder = self.make_builder() + try: + builder.build("perl-Tangerine", "/opt/sources/perl-Tangerine-0.22-2.src.rpm") + finally: + builder.finalize(succeeded=True) - MockModuleBuilder._build_id = 1 - builder2 = GenericBuilder.create_from_module( - db_session, builder.module, conf, buildroot_connect=True - ) - builder2.build("perl-Tangerine", "/opt/sources/perl-Tangerine-0.22-2.src.rpm") + builder2 = self.make_builder() + try: + builder2.build("perl-Tangerine", "/opt/sources/perl-Tangerine-0.22-2.src.rpm") + finally: + builder.finalize(succeeded=True) @pytest.mark.usefixtures("require_empty_database", "testconfig")