debian-forge-composer/cmd/osbuild-dnf-json-tests/main.go
Lars Karlitski 60301df8f7 rpmmd: pass in cache directory explicitly
rpmmd looked at the CACHE_DIRECTORY environment variable to set a path
for the dnf repository cache.  Aside from being a smelly thing to do
from a library, this breaks osbuild-pipeline and osbuild-dnf-json-tests,
which don't run as systemd services and thus don't have CACHE_DIRECTORY
set.

Explicitly pass the cache directory to rpmmd. Keep using a path based on
CACHE_DIRECTORY for osbuild-composer. Use the user's `.cache` directory
for osbuild-pipeline and a temporary directory for the tests.
2020-03-02 20:58:39 +01:00

71 lines
1.6 KiB
Go

// This package contains tests related to dnf-json and rpmmd package.
package main
import (
"fmt"
"github.com/osbuild/osbuild-composer/internal/rpmmd"
"io/ioutil"
"log"
"os"
"os/exec"
"path"
)
func main() {
// Tests that the package wrapping dnf-json works as expected
dir, err := setUpTemporaryRepository()
defer func(dir string) {
err := tearDownTemporaryRepository(dir)
if err != nil {
log.Print("Warning: failed to clean up temporary repository.")
}
}(dir)
if err != nil {
log.Panic("Failed to set up temporary repository:", err)
}
TestFetchChecksum(false, dir)
}
func setUpTemporaryRepository() (string, error) {
dir, err := ioutil.TempDir("/tmp", "osbuild-composer-test-")
if err != nil {
return "", err
}
cmd := exec.Command("createrepo_c", path.Join(dir))
err = cmd.Start()
if err != nil {
return "", err
}
err = cmd.Wait()
if err != nil {
return "", err
}
return dir, nil
}
func tearDownTemporaryRepository(dir string) error {
return os.RemoveAll(dir)
}
func TestFetchChecksum(quiet bool, dir string) {
repoCfg := rpmmd.RepoConfig{
Id: "repo",
Name: "repo",
BaseURL: fmt.Sprintf("file://%s", dir),
IgnoreSSL: true,
}
if !quiet {
log.Println("Running TestFetchChecksum on:", dir)
}
rpmMetadata := rpmmd.NewRPMMD(path.Join(dir, "rpmmd"))
_, c, err := rpmMetadata.FetchMetadata([]rpmmd.RepoConfig{repoCfg}, "platform:f31")
if err != nil {
log.Panic("Failed to fetch checksum:", err)
}
if c["repo"] == "" {
log.Panic("The checksum is empty")
}
if !quiet {
log.Println("TestFetchChecksum: SUCCESS")
}
}