diff options
Diffstat (limited to 'go/internal/command/fallback')
-rw-r--r-- | go/internal/command/fallback/fallback.go | 57 | ||||
-rw-r--r-- | go/internal/command/fallback/fallback_test.go | 84 |
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()) -} |