1
0
mirror of https://github.com/Jguer/yay.git synced 2026-04-08 23:31:10 +02:00
yay/pkg/sync/workdir/workdir_ops_test.go
Jo 3b79933638
test: harden coverage and make tests parallel-safe (#2797)
* 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
2026-03-25 00:51:34 +01:00

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
}