|
|
|
|
@ -15,6 +15,7 @@ import (
@@ -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 {
@@ -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) {
@@ -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) {
@@ -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"]) |
|
|
|
|
} |
|
|
|
|
|