summaryrefslogtreecommitdiff
path: root/go/internal/command/fallback
diff options
context:
space:
mode:
Diffstat (limited to 'go/internal/command/fallback')
-rw-r--r--go/internal/command/fallback/fallback.go57
-rw-r--r--go/internal/command/fallback/fallback_test.go84
2 files changed, 0 insertions, 141 deletions
diff --git a/go/internal/command/fallback/fallback.go b/go/internal/command/fallback/fallback.go
deleted file mode 100644
index 781eda1..0000000
--- a/go/internal/command/fallback/fallback.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package fallback
-
-import (
- "errors"
- "fmt"
- "os"
- "path/filepath"
- "syscall"
-
- "gitlab.com/gitlab-org/gitlab-shell/go/internal/command/commandargs"
- "gitlab.com/gitlab-org/gitlab-shell/go/internal/executable"
-)
-
-type Command struct {
- Executable *executable.Executable
- RootDir string
- Args commandargs.CommandArgs
-}
-
-var (
- // execFunc is overridden in tests
- execFunc = syscall.Exec
- whitelist = []string{
- executable.GitlabShell,
- executable.AuthorizedKeysCheck,
- executable.AuthorizedPrincipalsCheck,
- }
-)
-
-func (c *Command) Execute() error {
- if !c.isWhitelisted() {
- return errors.New("Failed to execute unknown executable")
- }
-
- rubyCmd := c.fallbackProgram()
-
- // Ensure rubyArgs[0] is the full path to gitlab-shell-ruby
- rubyArgs := append([]string{rubyCmd}, c.Args.GetArguments()...)
-
- return execFunc(rubyCmd, rubyArgs, os.Environ())
-}
-
-func (c *Command) isWhitelisted() bool {
- for _, item := range whitelist {
- if c.Executable.Name == item {
- return true
- }
- }
-
- return false
-}
-
-func (c *Command) fallbackProgram() string {
- fileName := fmt.Sprintf("%s-ruby", c.Executable.Name)
-
- return filepath.Join(c.RootDir, "bin", fileName)
-}
diff --git a/go/internal/command/fallback/fallback_test.go b/go/internal/command/fallback/fallback_test.go
deleted file mode 100644
index 7485084..0000000
--- a/go/internal/command/fallback/fallback_test.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package fallback
-
-import (
- "errors"
- "os"
- "testing"
-
- "github.com/stretchr/testify/require"
-
- "gitlab.com/gitlab-org/gitlab-shell/go/internal/command/commandargs"
- "gitlab.com/gitlab-org/gitlab-shell/go/internal/executable"
-)
-
-type fakeExec struct {
- OldExec func(string, []string, []string) error
- Error error
- Called bool
-
- Filename string
- Args []string
- Env []string
-}
-
-var (
- fakeArgs = &commandargs.GenericArgs{Arguments: []string{"foo", "bar"}}
-)
-
-func (f *fakeExec) Exec(filename string, args []string, env []string) error {
- f.Called = true
-
- f.Filename = filename
- f.Args = args
- f.Env = env
-
- return f.Error
-}
-
-func (f *fakeExec) Setup() {
- f.OldExec = execFunc
- execFunc = f.Exec
-}
-
-func (f *fakeExec) Cleanup() {
- execFunc = f.OldExec
-}
-
-func TestExecuteExecsCommandSuccesfully(t *testing.T) {
- cmd := &Command{Executable: &executable.Executable{Name: executable.GitlabShell}, RootDir: "/tmp", Args: fakeArgs}
-
- // Override the exec func
- fake := &fakeExec{}
- fake.Setup()
- defer fake.Cleanup()
-
- require.NoError(t, cmd.Execute())
- require.True(t, fake.Called)
- require.Equal(t, fake.Filename, "/tmp/bin/gitlab-shell-ruby")
- require.Equal(t, fake.Args, []string{"/tmp/bin/gitlab-shell-ruby", "foo", "bar"})
- require.Equal(t, fake.Env, os.Environ())
-}
-
-func TestExecuteExecsUnknownExecutable(t *testing.T) {
- cmd := &Command{Executable: &executable.Executable{Name: "unknown"}, RootDir: "/test"}
-
- require.Error(t, cmd.Execute())
-}
-
-func TestExecuteExecsCommandOnError(t *testing.T) {
- cmd := &Command{Executable: &executable.Executable{Name: executable.GitlabShell}, RootDir: "/test", Args: fakeArgs}
-
- // Override the exec func
- fake := &fakeExec{Error: errors.New("Test error")}
- fake.Setup()
- defer fake.Cleanup()
-
- require.Error(t, cmd.Execute())
- require.True(t, fake.Called)
-}
-
-func TestExecuteGivenNonexistentCommand(t *testing.T) {
- cmd := &Command{Executable: &executable.Executable{Name: executable.GitlabShell}, RootDir: "/tmp/does/not/exist", Args: fakeArgs}
-
- require.Error(t, cmd.Execute())
-}