Blame cmd/osbuild-dnf-json-tests/main_test.go

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
}