Files
yay/pkg/runtime/pacman_test.go
Jo 99770dec04 Fix pacman-git builds (#2712)
* fix pacman-git ABI change

* add guard for ABI stability

* bump alpm for ABI fix

* normalize strings for comparison
2025-11-28 21:20:27 +01:00

99 lines
3.0 KiB
Go

//go:build !integration
// +build !integration
package runtime
import (
"path/filepath"
"runtime"
"strings"
"testing"
"github.com/Morganamilo/go-pacmanconf"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/Jguer/yay/v12/pkg/settings/parser"
)
// normalizePath removes trailing slashes from paths (except for root "/").
func normalizePath(p string) string {
if p == "/" {
return p
}
return strings.TrimSuffix(p, "/")
}
// normalizePaths normalizes a slice of paths.
func normalizePaths(paths []string) []string {
result := make([]string, len(paths))
for i, p := range paths {
result[i] = normalizePath(p)
}
return result
}
// normalizePacmanConf normalizes directory paths in a pacmanconf.Config
// to handle differences between pacman versions (with/without trailing slashes).
func normalizePacmanConf(conf *pacmanconf.Config) {
conf.RootDir = normalizePath(conf.RootDir)
conf.DBPath = normalizePath(conf.DBPath)
conf.GPGDir = normalizePath(conf.GPGDir)
conf.CacheDir = normalizePaths(conf.CacheDir)
conf.HookDir = normalizePaths(conf.HookDir)
}
func TestPacmanConf(t *testing.T) {
t.Parallel()
path := "../../testdata/pacman.conf"
absPath, err := filepath.Abs(path)
require.NoError(t, err)
// detect the architecture of the system
expectedArch := []string{"x86_64"}
if runtime.GOARCH == "arm64" {
expectedArch = []string{"aarch64"}
}
expectedPacmanConf := &pacmanconf.Config{
RootDir: "/", DBPath: "/var/lib/pacman",
CacheDir: []string{"/var/cache/pacman/pkg"},
HookDir: []string{"/etc/pacman.d/hooks"},
GPGDir: "/etc/pacman.d/gnupg", LogFile: "/var/log/pacman.log",
HoldPkg: []string{"pacman", "glibc"}, IgnorePkg: []string{"xorm"},
IgnoreGroup: []string{"yorm"}, Architecture: expectedArch,
XferCommand: "/usr/bin/wget --passive-ftp -c -O %o %u",
NoUpgrade: []string(nil), NoExtract: []string(nil), CleanMethod: []string{"KeepInstalled"},
SigLevel: []string{"PackageRequired", "PackageTrustedOnly", "DatabaseOptional", "DatabaseTrustedOnly"},
LocalFileSigLevel: []string{"PackageOptional", "PackageTrustedOnly"},
RemoteFileSigLevel: []string{"PackageRequired", "PackageTrustedOnly"}, UseSyslog: true,
Color: true, UseDelta: 0, TotalDownload: false, CheckSpace: true,
VerbosePkgLists: true, DisableDownloadTimeout: false,
Repos: []pacmanconf.Repository{
{
Name: "core", Servers: []string{"Core"},
SigLevel: []string(nil), Usage: []string{"All"},
},
{
Name: "extra", Servers: []string{"Extra"}, SigLevel: []string(nil),
Usage: []string{"All"},
},
{
Name: "multilib", Servers: []string{"repo3", "multilib"},
SigLevel: []string(nil), Usage: []string{"All"},
},
},
}
pacmanConf, color, err := retrievePacmanConfig(parser.MakeArguments(), absPath)
assert.Nil(t, err)
assert.NotNil(t, pacmanConf)
assert.Equal(t, color, false)
// Normalize paths to handle differences between pacman versions
// (some versions include trailing slashes, some don't)
normalizePacmanConf(pacmanConf)
assert.EqualValues(t, expectedPacmanConf, pacmanConf)
}