summaryrefslogtreecommitdiff
path: root/go/internal/command/fallback/fallback_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/internal/command/fallback/fallback_test.go')
-rw-r--r--go/internal/command/fallback/fallback_test.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/go/internal/command/fallback/fallback_test.go b/go/internal/command/fallback/fallback_test.go
new file mode 100644
index 0000000..2d67b14
--- /dev/null
+++ b/go/internal/command/fallback/fallback_test.go
@@ -0,0 +1,75 @@
+package fallback
+
+import (
+ "errors"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+type fakeExec struct {
+ OldExec func(string, []string, []string) error
+ Error error
+ Called bool
+
+ Filename string
+ Args []string
+ Env []string
+}
+
+var (
+ fakeArgs = []string{"./test", "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{RootDir: "/tmp", Args: fakeArgs}
+
+ // Override the exec func
+ fake := &fakeExec{}
+ fake.Setup()
+ defer fake.Cleanup()
+
+ require.NoError(t, cmd.Execute(nil))
+ 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 TestExecuteExecsCommandOnError(t *testing.T) {
+ cmd := &Command{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(nil))
+ require.True(t, fake.Called)
+}
+
+func TestExecuteGivenNonexistentCommand(t *testing.T) {
+ cmd := &Command{RootDir: "/tmp/does/not/exist", Args: fakeArgs}
+
+ require.Error(t, cmd.Execute(nil))
+}