|
|
|
|
@ -15,6 +15,7 @@ import (
|
|
|
|
|
"code.gitea.io/gitea/models/unittest"
|
|
|
|
|
"code.gitea.io/gitea/modules/setting"
|
|
|
|
|
"code.gitea.io/gitea/modules/test"
|
|
|
|
|
"code.gitea.io/gitea/modules/util"
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
"github.com/urfave/cli/v3"
|
|
|
|
|
@ -28,11 +29,11 @@ func makePathOutput(workPath, customPath, customConf string) string {
|
|
|
|
|
return fmt.Sprintf("WorkPath=%s\nCustomPath=%s\nCustomConf=%s", workPath, customPath, customConf)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func newTestApp(testCmdAction cli.ActionFunc) *cli.Command {
|
|
|
|
|
func newTestApp(testCmd cli.Command) *cli.Command {
|
|
|
|
|
app := NewMainApp(AppVersion{})
|
|
|
|
|
testCmd := &cli.Command{Name: "test-cmd", Action: testCmdAction}
|
|
|
|
|
prepareSubcommandWithGlobalFlags(testCmd)
|
|
|
|
|
app.Commands = append(app.Commands, testCmd)
|
|
|
|
|
testCmd.Name = util.IfZero(testCmd.Name, "test-cmd")
|
|
|
|
|
prepareSubcommandWithGlobalFlags(&testCmd)
|
|
|
|
|
app.Commands = append(app.Commands, &testCmd)
|
|
|
|
|
app.DefaultCommand = testCmd.Name
|
|
|
|
|
return app
|
|
|
|
|
}
|
|
|
|
|
@ -156,9 +157,11 @@ func TestCliCmd(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
for _, c := range cases {
|
|
|
|
|
t.Run(c.cmd, func(t *testing.T) {
|
|
|
|
|
app := newTestApp(func(ctx context.Context, cmd *cli.Command) error {
|
|
|
|
|
_, _ = fmt.Fprint(cmd.Root().Writer, makePathOutput(setting.AppWorkPath, setting.CustomPath, setting.CustomConf))
|
|
|
|
|
return nil
|
|
|
|
|
app := newTestApp(cli.Command{
|
|
|
|
|
Action: func(ctx context.Context, cmd *cli.Command) error {
|
|
|
|
|
_, _ = fmt.Fprint(cmd.Root().Writer, makePathOutput(setting.AppWorkPath, setting.CustomPath, setting.CustomConf))
|
|
|
|
|
return nil
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
for k, v := range c.env {
|
|
|
|
|
t.Setenv(k, v)
|
|
|
|
|
@ -173,31 +176,54 @@ func TestCliCmd(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestCliCmdError(t *testing.T) {
|
|
|
|
|
app := newTestApp(func(ctx context.Context, cmd *cli.Command) error { return errors.New("normal error") })
|
|
|
|
|
app := newTestApp(cli.Command{Action: func(ctx context.Context, cmd *cli.Command) error { return errors.New("normal error") }})
|
|
|
|
|
r, err := runTestApp(app, "./gitea", "test-cmd")
|
|
|
|
|
assert.Error(t, err)
|
|
|
|
|
assert.Equal(t, 1, r.ExitCode)
|
|
|
|
|
assert.Empty(t, r.Stdout)
|
|
|
|
|
assert.Equal(t, "Command error: normal error\n", r.Stderr)
|
|
|
|
|
|
|
|
|
|
app = newTestApp(func(ctx context.Context, cmd *cli.Command) error { return cli.Exit("exit error", 2) })
|
|
|
|
|
app = newTestApp(cli.Command{Action: func(ctx context.Context, cmd *cli.Command) error { return cli.Exit("exit error", 2) }})
|
|
|
|
|
r, err = runTestApp(app, "./gitea", "test-cmd")
|
|
|
|
|
assert.Error(t, err)
|
|
|
|
|
assert.Equal(t, 2, r.ExitCode)
|
|
|
|
|
assert.Empty(t, r.Stdout)
|
|
|
|
|
assert.Equal(t, "exit error\n", r.Stderr)
|
|
|
|
|
|
|
|
|
|
app = newTestApp(func(ctx context.Context, cmd *cli.Command) error { return nil })
|
|
|
|
|
app = newTestApp(cli.Command{Action: func(ctx context.Context, cmd *cli.Command) error { return nil }})
|
|
|
|
|
r, err = runTestApp(app, "./gitea", "test-cmd", "--no-such")
|
|
|
|
|
assert.Error(t, err)
|
|
|
|
|
assert.Equal(t, 1, r.ExitCode)
|
|
|
|
|
assert.Empty(t, r.Stdout)
|
|
|
|
|
assert.Equal(t, "Incorrect Usage: flag provided but not defined: -no-such\n\n", r.Stderr)
|
|
|
|
|
|
|
|
|
|
app = newTestApp(func(ctx context.Context, cmd *cli.Command) error { return nil })
|
|
|
|
|
app = newTestApp(cli.Command{Action: func(ctx context.Context, cmd *cli.Command) error { return nil }})
|
|
|
|
|
r, err = runTestApp(app, "./gitea", "test-cmd")
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
assert.Equal(t, -1, r.ExitCode) // the cli.OsExiter is not called
|
|
|
|
|
assert.Empty(t, r.Stdout)
|
|
|
|
|
assert.Empty(t, r.Stderr)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestCliCmdBefore(t *testing.T) {
|
|
|
|
|
ctxNew := context.WithValue(context.Background(), any("key"), "value")
|
|
|
|
|
configValues := map[string]string{}
|
|
|
|
|
setting.CustomConf = "/tmp/any.ini"
|
|
|
|
|
var actionCtx context.Context
|
|
|
|
|
app := newTestApp(cli.Command{
|
|
|
|
|
Before: func(context.Context, *cli.Command) (context.Context, error) {
|
|
|
|
|
configValues["before"] = setting.CustomConf
|
|
|
|
|
return ctxNew, nil
|
|
|
|
|
},
|
|
|
|
|
Action: func(ctx context.Context, cmd *cli.Command) error {
|
|
|
|
|
configValues["action"] = setting.CustomConf
|
|
|
|
|
actionCtx = ctx
|
|
|
|
|
return nil
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
_, err := runTestApp(app, "./gitea", "--config", "/dev/null", "test-cmd")
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
assert.Equal(t, ctxNew, actionCtx)
|
|
|
|
|
assert.Equal(t, "/tmp/any.ini", configValues["before"], "BeforeFunc must be called before preparing config")
|
|
|
|
|
assert.Equal(t, "/dev/null", configValues["action"])
|
|
|
|
|
}
|
|
|
|
|
|