mirror of
https://github.com/Jguer/yay
synced 2024-09-06 16:43:03 +00:00
![Jo](/assets/img/avatar_default.png)
* rework relationship between runtime and cfg * separate runtime from cfg * simplify instantiation logic * move installer to appropriate package * move operator to sync package * add tests for srcinfo service * consolidate srcinfo service in sync * add logger to srcinfo * add logger to preparer * remove unused text functions * remove remaining text.* from srcinfo * remove global logger parts * remove global org method exports * remove global logger * move text->input * add rule to prevent fmt.Print * update golangci go version * remove outdated FAQs * remove outdated FAQs
117 lines
2.8 KiB
Go
117 lines
2.8 KiB
Go
//go:build !integration
|
|
// +build !integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/Jguer/go-alpm/v2"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/Jguer/yay/v12/pkg/db/mock"
|
|
"github.com/Jguer/yay/v12/pkg/runtime"
|
|
"github.com/Jguer/yay/v12/pkg/settings"
|
|
"github.com/Jguer/yay/v12/pkg/settings/exe"
|
|
"github.com/Jguer/yay/v12/pkg/settings/parser"
|
|
)
|
|
|
|
func TestCleanHanging(t *testing.T) {
|
|
pacmanBin := t.TempDir() + "/pacman"
|
|
|
|
t.Parallel()
|
|
|
|
testCases := []struct {
|
|
name string
|
|
args []string
|
|
wantShow []string
|
|
}{
|
|
{
|
|
name: "clean",
|
|
args: []string{"Y", "c"},
|
|
wantShow: []string{"pacman", "-R", "-s", "-u", "--config", "/etc/pacman.conf", "--", "lsp-plugins"},
|
|
},
|
|
{
|
|
name: "clean double",
|
|
args: []string{"Y", "c", "c"},
|
|
wantShow: []string{"pacman", "-R", "-s", "-u", "--config", "/etc/pacman.conf", "--", "lsp-plugins", "linux-headers"},
|
|
},
|
|
}
|
|
|
|
dbExc := &mock.DBExecutor{
|
|
PackageOptionalDependsFn: func(i alpm.IPackage) []alpm.Depend {
|
|
if i.Name() == "linux" {
|
|
return []alpm.Depend{
|
|
{
|
|
Name: "linux-headers",
|
|
},
|
|
}
|
|
}
|
|
|
|
return []alpm.Depend{}
|
|
},
|
|
PackageProvidesFn: func(p alpm.IPackage) []alpm.Depend { return []alpm.Depend{} },
|
|
PackageDependsFn: func(p alpm.IPackage) []alpm.Depend { return []alpm.Depend{} },
|
|
LocalPackagesFn: func() []mock.IPackage {
|
|
return []mock.IPackage{
|
|
&mock.Package{
|
|
PReason: alpm.PkgReasonExplicit,
|
|
PName: "linux",
|
|
},
|
|
&mock.Package{
|
|
PReason: alpm.PkgReasonDepend,
|
|
PName: "lsp-plugins",
|
|
},
|
|
&mock.Package{
|
|
PReason: alpm.PkgReasonDepend,
|
|
PName: "linux-headers",
|
|
},
|
|
}
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
mockRunner := &exe.MockRunner{
|
|
CaptureFn: func(cmd *exec.Cmd) (stdout string, stderr string, err error) {
|
|
return "", "", nil
|
|
},
|
|
ShowFn: func(cmd *exec.Cmd) error { return nil },
|
|
}
|
|
cmdBuilder := &exe.CmdBuilder{
|
|
SudoBin: "su",
|
|
PacmanBin: pacmanBin,
|
|
PacmanConfigPath: "/etc/pacman.conf",
|
|
GitBin: "git",
|
|
Runner: mockRunner,
|
|
SudoLoopEnabled: false,
|
|
}
|
|
|
|
run := &runtime.Runtime{CmdBuilder: cmdBuilder, Cfg: &settings.Configuration{}}
|
|
cmdArgs := parser.MakeArguments()
|
|
cmdArgs.AddArg(tc.args...)
|
|
|
|
err := handleCmd(context.Background(),
|
|
run, cmdArgs, dbExc,
|
|
)
|
|
|
|
require.NoError(t, err)
|
|
|
|
for i, call := range mockRunner.ShowCalls {
|
|
show := call.Args[0].(*exec.Cmd).String()
|
|
show = strings.ReplaceAll(show, pacmanBin, "pacman")
|
|
|
|
// options are in a different order on different systems and on CI root user is used
|
|
assert.Subset(t, strings.Split(show, " "),
|
|
strings.Split(tc.wantShow[i], " "),
|
|
fmt.Sprintf("%d - %s", i, show))
|
|
}
|
|
})
|
|
}
|
|
}
|