gitea源码

command_test.go 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package gitcmd
  4. import (
  5. "fmt"
  6. "os"
  7. "testing"
  8. "code.gitea.io/gitea/modules/setting"
  9. "code.gitea.io/gitea/modules/tempdir"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func TestMain(m *testing.M) {
  13. gitHomePath, cleanup, err := tempdir.OsTempDir("gitea-test").MkdirTempRandom("git-home")
  14. if err != nil {
  15. _, _ = fmt.Fprintf(os.Stderr, "unable to create temp dir: %v", err)
  16. os.Exit(1)
  17. }
  18. defer cleanup()
  19. setting.Git.HomePath = gitHomePath
  20. }
  21. func TestRunWithContextStd(t *testing.T) {
  22. cmd := NewCommand("--version")
  23. stdout, stderr, err := cmd.RunStdString(t.Context(), &RunOpts{})
  24. assert.NoError(t, err)
  25. assert.Empty(t, stderr)
  26. assert.Contains(t, stdout, "git version")
  27. cmd = NewCommand("--no-such-arg")
  28. stdout, stderr, err = cmd.RunStdString(t.Context(), &RunOpts{})
  29. if assert.Error(t, err) {
  30. assert.Equal(t, stderr, err.Stderr())
  31. assert.Contains(t, err.Stderr(), "unknown option:")
  32. assert.Contains(t, err.Error(), "exit status 129 - unknown option:")
  33. assert.Empty(t, stdout)
  34. }
  35. cmd = NewCommand()
  36. cmd.AddDynamicArguments("-test")
  37. assert.ErrorIs(t, cmd.Run(t.Context(), &RunOpts{}), ErrBrokenCommand)
  38. cmd = NewCommand()
  39. cmd.AddDynamicArguments("--test")
  40. assert.ErrorIs(t, cmd.Run(t.Context(), &RunOpts{}), ErrBrokenCommand)
  41. subCmd := "version"
  42. cmd = NewCommand().AddDynamicArguments(subCmd) // for test purpose only, the sub-command should never be dynamic for production
  43. stdout, stderr, err = cmd.RunStdString(t.Context(), &RunOpts{})
  44. assert.NoError(t, err)
  45. assert.Empty(t, stderr)
  46. assert.Contains(t, stdout, "git version")
  47. }
  48. func TestGitArgument(t *testing.T) {
  49. assert.True(t, isValidArgumentOption("-x"))
  50. assert.True(t, isValidArgumentOption("--xx"))
  51. assert.False(t, isValidArgumentOption(""))
  52. assert.False(t, isValidArgumentOption("x"))
  53. assert.True(t, isSafeArgumentValue(""))
  54. assert.True(t, isSafeArgumentValue("x"))
  55. assert.False(t, isSafeArgumentValue("-x"))
  56. }
  57. func TestCommandString(t *testing.T) {
  58. cmd := NewCommand("a", "-m msg", "it's a test", `say "hello"`)
  59. assert.Equal(t, cmd.prog+` a "-m msg" "it's a test" "say \"hello\""`, cmd.LogString())
  60. cmd = NewCommand("url: https://a:b@c/", "/root/dir-a/dir-b")
  61. assert.Equal(t, cmd.prog+` "url: https://sanitized-credential@c/" .../dir-a/dir-b`, cmd.LogString())
  62. }