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.
This commit is contained in:
Owen W. Taylor
2020-12-01 15:55:34 -05:00
committed by breilly
parent de1c1e2675
commit ba82e8b5a6

View File

@@ -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")