|
Packit |
63bb0d |
// This package contains tests related to dnf-json and rpmmd package.
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// +build integration
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
package main
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
import (
|
|
Packit |
63bb0d |
"fmt"
|
|
Packit |
63bb0d |
"io/ioutil"
|
|
Packit |
63bb0d |
"os"
|
|
Packit |
63bb0d |
"path"
|
|
Packit |
63bb0d |
"testing"
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
"github.com/stretchr/testify/assert"
|
|
Packit |
63bb0d |
"github.com/stretchr/testify/require"
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/distro"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/distro/fedora32"
|
|
Packit Service |
509fd4 |
"github.com/osbuild/osbuild-composer/internal/distro/fedora33"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/test"
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
func TestFetchChecksum(t *testing.T) {
|
|
Packit |
63bb0d |
dir, err := test.SetUpTemporaryRepository()
|
|
Packit |
63bb0d |
defer func(dir string) {
|
|
Packit |
63bb0d |
err := test.TearDownTemporaryRepository(dir)
|
|
Packit |
63bb0d |
assert.Nil(t, err, "Failed to clean up temporary repository.")
|
|
Packit |
63bb0d |
}(dir)
|
|
Packit |
63bb0d |
assert.Nilf(t, err, "Failed to set up temporary repository: %v", err)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
repoCfg := rpmmd.RepoConfig{
|
|
Packit |
63bb0d |
Name: "repo",
|
|
Packit |
63bb0d |
BaseURL: fmt.Sprintf("file://%s", dir),
|
|
Packit |
63bb0d |
IgnoreSSL: true,
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// use a fullpath to dnf-json, this allows this test to have an arbitrary
|
|
Packit |
63bb0d |
// working directory
|
|
Packit |
63bb0d |
rpmMetadata := rpmmd.NewRPMMD(path.Join(dir, "rpmmd"), "/usr/libexec/osbuild-composer/dnf-json")
|
|
Packit |
63bb0d |
_, c, err := rpmMetadata.FetchMetadata([]rpmmd.RepoConfig{repoCfg}, "platform:f31", "x86_64")
|
|
Packit |
63bb0d |
assert.Nilf(t, err, "Failed to fetch checksum: %v", err)
|
|
Packit |
63bb0d |
assert.NotEqual(t, "", c["repo"], "The checksum is empty")
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// This test loads all the repositories available in /repositories directory
|
|
Packit |
63bb0d |
// and tries to run depsolve for each architecture. With N architectures available
|
|
Packit |
63bb0d |
// this should run cross-arch dependency solving N-1 times.
|
|
Packit |
63bb0d |
func TestCrossArchDepsolve(t *testing.T) {
|
|
Packit |
63bb0d |
// Load repositories from the definition we provide in the RPM package
|
|
Packit |
63bb0d |
repoDir := "/usr/share/osbuild-composer"
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// NOTE: we can add RHEL, but don't make it hard requirement because it will fail outside of VPN
|
|
Packit Service |
509fd4 |
for _, distroStruct := range []distro.Distro{fedora32.New(), fedora33.New()} {
|
|
Packit |
63bb0d |
t.Run(distroStruct.Name(), func(t *testing.T) {
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Run tests in parallel to speed up run times.
|
|
Packit |
63bb0d |
t.Parallel()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Set up temporary directory for rpm/dnf cache
|
|
Packit |
63bb0d |
dir, err := ioutil.TempDir("/tmp", "rpmmd-test-")
|
|
Packit |
63bb0d |
require.Nilf(t, err, "Failed to create tmp dir for depsolve test: %v", err)
|
|
Packit |
63bb0d |
defer os.RemoveAll(dir)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// use a fullpath to dnf-json, this allows this test to have an arbitrary
|
|
Packit |
63bb0d |
// working directory
|
|
Packit |
63bb0d |
rpm := rpmmd.NewRPMMD(dir, "/usr/libexec/osbuild-composer/dnf-json")
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
repos, err := rpmmd.LoadRepositories([]string{repoDir}, distroStruct.Name())
|
|
Packit |
63bb0d |
require.NoErrorf(t, err, "Failed to LoadRepositories %v", distroStruct.Name())
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
for _, archStr := range distroStruct.ListArches() {
|
|
Packit |
63bb0d |
t.Run(archStr, func(t *testing.T) {
|
|
Packit |
63bb0d |
arch, err := distroStruct.GetArch(archStr)
|
|
Packit |
63bb0d |
require.NoError(t, err)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
for _, imgTypeStr := range arch.ListImageTypes() {
|
|
Packit |
63bb0d |
t.Run(imgTypeStr, func(t *testing.T) {
|
|
Packit |
63bb0d |
imgType, err := arch.GetImageType(imgTypeStr)
|
|
Packit |
63bb0d |
require.NoError(t, err)
|
|
Packit |
63bb0d |
|
|
Packit Service |
15f37d |
packages := imgType.PackageSets(blueprint.Blueprint{})
|
|
Packit Service |
15f37d |
|
|
Packit Service |
15f37d |
_, _, err = rpm.Depsolve(packages["build-packages"], repos[archStr], distroStruct.ModulePlatformID(), archStr)
|
|
Packit |
63bb0d |
assert.NoError(t, err)
|
|
Packit |
63bb0d |
|
|
Packit Service |
15f37d |
_, _, err = rpm.Depsolve(packages["packages"], repos[archStr], distroStruct.ModulePlatformID(), archStr)
|
|
Packit |
63bb0d |
assert.NoError(t, err)
|
|
Packit |
63bb0d |
})
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
})
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
})
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
}
|