From eb5b19820556def816093b24c713d831b089ee0a Mon Sep 17 00:00:00 2001 From: Lars Karlitski Date: Mon, 6 Apr 2020 16:07:56 +0200 Subject: [PATCH] dnf-json-tests: use subtests in TestCrossArchDepsolve For one, this allows us to use `require` instead of `assert` and `continue`, which was awkward to read. That works because it's ok to fail a subtest: the remaining subtests are executed after it. Also, this shows which test was executed, making debugging easier: === RUN TestCrossArchDepsolve === RUN TestCrossArchDepsolve/fedora-30 === RUN TestCrossArchDepsolve/fedora-30/x86_64 === RUN TestCrossArchDepsolve/fedora-30/x86_64/ami ... You can now also run those sub tests in isolation: osbuild-dnf-json-tests -test.run TestCrossArchDepsolve/fedora-30/x86_64/ami Lastly, it enables running those tests in parallel (not part of this patch) by calling `t.Parallel()`. --- cmd/osbuild-dnf-json-tests/main_test.go | 49 ++++++++++++------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/cmd/osbuild-dnf-json-tests/main_test.go b/cmd/osbuild-dnf-json-tests/main_test.go index 326fc953b..92ff036bd 100644 --- a/cmd/osbuild-dnf-json-tests/main_test.go +++ b/cmd/osbuild-dnf-json-tests/main_test.go @@ -56,34 +56,31 @@ func TestCrossArchDepsolve(t *testing.T) { // NOTE: we can add RHEL, but don't make it hard requirement because it will fail outside of VPN for _, distroStruct := range []distro.Distro{fedora30.New(), fedora31.New(), fedora32.New()} { - repos, err := rpmmd.LoadRepositories([]string{repoDir}, distroStruct.Name()) - assert.NoErrorf(t, err, "Failed to LoadRepositories %v", distroStruct.Name()) - if err != nil { - // There is no point in running the tests without having repositories, but we can still run tests - // for the remaining distros - continue - } - for _, archStr := range distroStruct.ListArches() { - arch, err := distroStruct.GetArch(archStr) - assert.NoErrorf(t, err, "Failed to GetArch from %v structure", distroStruct.Name()) - if err != nil { - continue - } - for _, imgTypeStr := range arch.ListImageTypes() { - imgType, err := arch.GetImageType(imgTypeStr) - assert.NoErrorf(t, err, "Failed to GetImageType for %v on %v", distroStruct.Name(), arch.Name()) - if err != nil { - continue - } + t.Run(distroStruct.Name(), func(t *testing.T) { + repos, err := rpmmd.LoadRepositories([]string{repoDir}, distroStruct.Name()) + require.NoErrorf(t, err, "Failed to LoadRepositories %v", distroStruct.Name()) - buildPackages := imgType.BuildPackages() - _, _, err = rpm.Depsolve(buildPackages, []string{}, repos[archStr], distroStruct.ModulePlatformID(), archStr) - assert.NoErrorf(t, err, "Failed to Depsolve build packages for %v %v %v image", distroStruct.Name(), imgType.Name(), arch.Name()) + for _, archStr := range distroStruct.ListArches() { + t.Run(archStr, func(t *testing.T) { + arch, err := distroStruct.GetArch(archStr) + require.NoError(t, err) - basePackagesInclude, basePackagesExclude := imgType.BasePackages() - _, _, err = rpm.Depsolve(basePackagesInclude, basePackagesExclude, repos[archStr], distroStruct.ModulePlatformID(), archStr) - assert.NoErrorf(t, err, "Failed to Depsolve base packages for %v %v %v image", distroStruct.Name(), imgType.Name(), arch.Name()) + for _, imgTypeStr := range arch.ListImageTypes() { + t.Run(imgTypeStr, func(t *testing.T) { + imgType, err := arch.GetImageType(imgTypeStr) + require.NoError(t, err) + + buildPackages := imgType.BuildPackages() + _, _, err = rpm.Depsolve(buildPackages, []string{}, repos[archStr], distroStruct.ModulePlatformID(), archStr) + assert.NoError(t, err) + + basePackagesInclude, basePackagesExclude := imgType.BasePackages() + _, _, err = rpm.Depsolve(basePackagesInclude, basePackagesExclude, repos[archStr], distroStruct.ModulePlatformID(), archStr) + assert.NoError(t, err) + }) + } + }) } - } + }) } }