osbuild-dnf-json-tests: Introduce depsolving test
This test makes sure we can run depsolve for all build packages sets and base packages sets for all image types for all architectures for all defined Fedora versions. In could run the same for RHEL, but I haven't yet implemented it, because such tests cannot run in public Internet.
This commit is contained in:
parent
e1e5c1bb0b
commit
e43a30e4cf
1 changed files with 57 additions and 4 deletions
|
|
@ -6,12 +6,18 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"path"
|
||||
"testing"
|
||||
|
||||
"github.com/osbuild/osbuild-composer/internal/distro"
|
||||
"github.com/osbuild/osbuild-composer/internal/distro/fedora30"
|
||||
"github.com/osbuild/osbuild-composer/internal/distro/fedora31"
|
||||
"github.com/osbuild/osbuild-composer/internal/distro/fedora32"
|
||||
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
||||
"github.com/osbuild/osbuild-composer/internal/test"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestFetchChecksum(t *testing.T) {
|
||||
|
|
@ -32,3 +38,50 @@ func TestFetchChecksum(t *testing.T) {
|
|||
assert.Nilf(t, err, "Failed to fetch checksum: %v", err)
|
||||
assert.NotEqual(t, "", c["repo"], "The checksum is empty")
|
||||
}
|
||||
|
||||
// This test loads all the repositories available in /repositories directory
|
||||
// and tries to run depsolve for each architecture. With N architectures available
|
||||
// this should run cross-arch dependency solving N-1 times.
|
||||
func TestCrossArchDepsolve(t *testing.T) {
|
||||
// Set up temporary directory for rpm/dnf cache
|
||||
dir, err := ioutil.TempDir("/tmp", "rpmmd-test-")
|
||||
require.Nilf(t, err, "Failed to create tmp dir for depsolve test: %v", err)
|
||||
defer os.RemoveAll(dir)
|
||||
rpm := rpmmd.NewRPMMD(dir)
|
||||
|
||||
// Load repositories from the definition we provide in the RPM package
|
||||
repositories := "/usr/share/osbuild-composer"
|
||||
|
||||
// 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()} {
|
||||
repoConfig, err := rpmmd.LoadRepositories([]string{repositories}, distroStruct.Name())
|
||||
assert.Nilf(t, err, "Failed to LoadRepositories from %v for %v: %v", repositories, distroStruct.Name(), err)
|
||||
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.ListArchs() {
|
||||
arch, err := distroStruct.GetArch(archStr)
|
||||
assert.Nilf(t, err, "Failed to GetArch from %v structure: %v", distroStruct.Name(), err)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
for _, imgTypeStr := range arch.ListImageTypes() {
|
||||
imgType, err := arch.GetImageType(imgTypeStr)
|
||||
assert.Nilf(t, err, "Failed to GetImageType for %v on %v: %v", distroStruct.Name(), arch.Name(), err)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
buildPackages := imgType.BuildPackages()
|
||||
_, _, err = rpm.Depsolve(buildPackages, []string{}, repoConfig[archStr], distroStruct.ModulePlatformID(), archStr)
|
||||
assert.Nilf(t, err, "Failed to Depsolve build packages for %v %v %v image: %v", distroStruct.Name(), imgType.Name(), arch.Name(), err)
|
||||
|
||||
basePackagesInclude, basePackagesExclude := imgType.BasePackages()
|
||||
_, _, err = rpm.Depsolve(basePackagesInclude, basePackagesExclude, repoConfig[archStr], distroStruct.ModulePlatformID(), archStr)
|
||||
assert.Nilf(t, err, "Failed to Depsolve base packages for %v %v %v image: %v", distroStruct.Name(), imgType.Name(), arch.Name(), err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue