mirror of
https://github.com/Jguer/yay.git
synced 2026-04-08 23:31:10 +02:00
* Test coverage hardening and parallel-safe refactors Add focused test coverage for under-tested operational paths, edge branches, and make key table-driven suites parallel-safe. Also fixed flaky installer test execution under repeated/parallel runs. * chore: fix goimports ordering for golangci-lint * Test(download): expand integration coverage for download paths Add integration scenarios for force/pull repo updates, repo-only and skip semantics, and direct AUR download/scanner coverage used by getpkgbuild and package preparation. * Test(exe): relax systemd-run path assertion Fix flaky TestBuildGitCmd by accepting an absolute systemd-run path while still asserting the expected binary is used. * Test(text): avoid race in color tests Remove parallel execution from TestColorHash so global UseColor writes do not overlap with color consumers in parallel tests and trigger race detector failures. * fix potential race conditions
115 lines
3.4 KiB
Go
115 lines
3.4 KiB
Go
//go:build !integration
|
|
// +build !integration
|
|
|
|
package workdir
|
|
|
|
import (
|
|
"context"
|
|
"os/exec"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/Jguer/yay/v12/pkg/runtime"
|
|
"github.com/Jguer/yay/v12/pkg/settings"
|
|
"github.com/Jguer/yay/v12/pkg/settings/parser"
|
|
"github.com/Jguer/yay/v12/pkg/text"
|
|
)
|
|
|
|
func TestMergePkgbuilds(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
builder := &fakeWorkdirCmdBuilder{}
|
|
dirs := map[string]string{
|
|
"one": "/tmp/pkg-one",
|
|
"two": "/tmp/pkg-two",
|
|
}
|
|
|
|
err := mergePkgbuilds(context.Background(), builder, dirs)
|
|
require.NoError(t, err)
|
|
require.Len(t, builder.captureCalls, 4)
|
|
require.True(t, strings.Contains(builder.captureCalls[0], "reset"))
|
|
require.True(t, strings.Contains(builder.captureCalls[1], "merge"))
|
|
}
|
|
|
|
func TestCleanAfter(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
builder := &fakeWorkdirCmdBuilder{}
|
|
run := &runtime.Runtime{
|
|
Logger: text.NewLogger(&strings.Builder{}, &strings.Builder{}, strings.NewReader(""), false, "test"),
|
|
CmdBuilder: builder,
|
|
}
|
|
dirs := map[string]string{
|
|
"one": "/tmp/pkg-one",
|
|
"two": "/tmp/pkg-two",
|
|
}
|
|
|
|
cleanAfter(context.Background(), run, builder, dirs)
|
|
require.Len(t, builder.captureCalls, 2)
|
|
require.Len(t, builder.showCalls, 2)
|
|
require.True(t, strings.Contains(builder.captureCalls[0], "reset"))
|
|
require.True(t, strings.Contains(builder.showCalls[0], "clean"))
|
|
}
|
|
|
|
func TestRemoveMake(t *testing.T) {
|
|
var old bool
|
|
old, settings.NoConfirm = settings.NoConfirm, false
|
|
defer func() { settings.NoConfirm = old }()
|
|
|
|
builder := &fakeWorkdirCmdBuilder{}
|
|
args := parser.MakeArguments()
|
|
args.AddArg("Q")
|
|
_ = removeMake(context.Background(), &settings.Configuration{}, builder, []string{"foo", "bar"}, args)
|
|
|
|
require.Len(t, builder.showCalls, 1)
|
|
require.Contains(t, builder.showCalls[0], "pacman")
|
|
require.Contains(t, builder.showCalls[0], "-R")
|
|
require.Contains(t, builder.showCalls[0], "foo")
|
|
require.Contains(t, builder.showCalls[0], "bar")
|
|
require.True(t, strings.Contains(builder.showCalls[0], "--noconfirm"))
|
|
}
|
|
|
|
type fakeWorkdirCmdBuilder struct {
|
|
captureCalls []string
|
|
showCalls []string
|
|
}
|
|
|
|
func (f *fakeWorkdirCmdBuilder) BuildGitCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
|
|
return exec.CommandContext(ctx, "git", extraArgs...)
|
|
}
|
|
|
|
func (f *fakeWorkdirCmdBuilder) BuildPacmanCmd(ctx context.Context, args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd {
|
|
cmdArgs := append([]string{"pacman"}, args.FormatGlobals()...)
|
|
cmdArgs = append(cmdArgs, args.FormatArgs()...)
|
|
cmdArgs = append(cmdArgs, args.Targets...)
|
|
if noConfirm {
|
|
cmdArgs = append(cmdArgs, "--noconfirm")
|
|
}
|
|
|
|
return exec.CommandContext(ctx, cmdArgs[0], cmdArgs[1:]...)
|
|
}
|
|
|
|
func (f *fakeWorkdirCmdBuilder) BuildMakepkgCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
|
|
return exec.CommandContext(ctx, "makepkg", extraArgs...)
|
|
}
|
|
|
|
func (f *fakeWorkdirCmdBuilder) BuildGPGCmd(ctx context.Context, extraArgs ...string) *exec.Cmd {
|
|
return exec.CommandContext(ctx, "gpg", extraArgs...)
|
|
}
|
|
|
|
func (f *fakeWorkdirCmdBuilder) AddMakepkgFlag(string) {}
|
|
func (f *fakeWorkdirCmdBuilder) GetKeepSrc() bool { return false }
|
|
func (f *fakeWorkdirCmdBuilder) SudoLoop() {}
|
|
|
|
func (f *fakeWorkdirCmdBuilder) Capture(cmd *exec.Cmd) (string, string, error) {
|
|
f.captureCalls = append(f.captureCalls, cmd.String())
|
|
return "", "", nil
|
|
}
|
|
|
|
func (f *fakeWorkdirCmdBuilder) Show(cmd *exec.Cmd) error {
|
|
f.showCalls = append(f.showCalls, cmd.String())
|
|
return nil
|
|
}
|