From aab85f3600caf04b491d6ca4fc3f0f004d9e3fc0 Mon Sep 17 00:00:00 2001 From: Patrick Bajao Date: Mon, 29 Jul 2019 14:33:01 +0800 Subject: Support falling back to ruby version of checkers Rename the ruby scripts to have `-ruby` suffix and add a symlink for both to `./gitlab-shell`. The executable name will be used to determine how args will be parsed. For now, we only parse the arguments for gitlab-shell commands. If the executable is `gitlab-shell-authorized-keys-check` or `gitlab-shell-authorized-principals-check`, it'll always fallback to the ruby version. Ruby specs test the ruby script, the fallback from go to ruby and go implementation of both (still pending). --- go/internal/command/fallback/fallback_test.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'go/internal/command/fallback/fallback_test.go') diff --git a/go/internal/command/fallback/fallback_test.go b/go/internal/command/fallback/fallback_test.go index afd752b..91dcb53 100644 --- a/go/internal/command/fallback/fallback_test.go +++ b/go/internal/command/fallback/fallback_test.go @@ -6,6 +6,8 @@ import ( "testing" "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-shell/go/internal/command/commandargs" ) type fakeExec struct { @@ -18,8 +20,21 @@ type fakeExec struct { Env []string } +type FakeCommandArgs struct { + executable commandargs.Executable + arguments []string +} + +func (f *FakeCommandArgs) Executable() commandargs.Executable { + return f.executable +} + +func (f *FakeCommandArgs) Arguments() []string { + return f.arguments +} + var ( - fakeArgs = []string{"./test", "foo", "bar"} + fakeArgs = &FakeCommandArgs{executable: commandargs.GitlabShell, arguments: []string{"foo", "bar"}} ) func (f *fakeExec) Exec(filename string, args []string, env []string) error { -- cgit v1.2.1 From 3b0176df497263323da2fae793a79b568502e6db Mon Sep 17 00:00:00 2001 From: Patrick Bajao Date: Mon, 29 Jul 2019 15:56:00 +0800 Subject: Support different CommandArgs type `CommandArgs` has been renamed to `Shell`. An interface has been added that includes `Executable()` and `Arguments()` method. The `BaseArgs` implement this methods and should be embeeded in each type. --- go/internal/command/fallback/fallback_test.go | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'go/internal/command/fallback/fallback_test.go') diff --git a/go/internal/command/fallback/fallback_test.go b/go/internal/command/fallback/fallback_test.go index 91dcb53..669aad1 100644 --- a/go/internal/command/fallback/fallback_test.go +++ b/go/internal/command/fallback/fallback_test.go @@ -25,6 +25,11 @@ type FakeCommandArgs struct { arguments []string } +func (f *FakeCommandArgs) Parse() error { + // Do nothing as no need to parse anything + return nil +} + func (f *FakeCommandArgs) Executable() commandargs.Executable { return f.executable } -- cgit v1.2.1 From 3b6f9f7583755e041e76142d7caf7716937907fa Mon Sep 17 00:00:00 2001 From: Patrick Bajao Date: Fri, 2 Aug 2019 16:10:17 +0800 Subject: Add Executable struct This struct is responsible for determining the name and root dir of the executable. The `RootDir` property will be used to find the config. The `Name` property will be used to determine what `Command` and `CommandArgs` to be built. --- go/internal/command/fallback/fallback_test.go | 33 +++++++++------------------ 1 file changed, 11 insertions(+), 22 deletions(-) (limited to 'go/internal/command/fallback/fallback_test.go') diff --git a/go/internal/command/fallback/fallback_test.go b/go/internal/command/fallback/fallback_test.go index 669aad1..7485084 100644 --- a/go/internal/command/fallback/fallback_test.go +++ b/go/internal/command/fallback/fallback_test.go @@ -8,6 +8,7 @@ import ( "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 { @@ -20,26 +21,8 @@ type fakeExec struct { Env []string } -type FakeCommandArgs struct { - executable commandargs.Executable - arguments []string -} - -func (f *FakeCommandArgs) Parse() error { - // Do nothing as no need to parse anything - return nil -} - -func (f *FakeCommandArgs) Executable() commandargs.Executable { - return f.executable -} - -func (f *FakeCommandArgs) Arguments() []string { - return f.arguments -} - var ( - fakeArgs = &FakeCommandArgs{executable: commandargs.GitlabShell, arguments: []string{"foo", "bar"}} + fakeArgs = &commandargs.GenericArgs{Arguments: []string{"foo", "bar"}} ) func (f *fakeExec) Exec(filename string, args []string, env []string) error { @@ -62,7 +45,7 @@ func (f *fakeExec) Cleanup() { } func TestExecuteExecsCommandSuccesfully(t *testing.T) { - cmd := &Command{RootDir: "/tmp", Args: fakeArgs} + cmd := &Command{Executable: &executable.Executable{Name: executable.GitlabShell}, RootDir: "/tmp", Args: fakeArgs} // Override the exec func fake := &fakeExec{} @@ -76,8 +59,14 @@ func TestExecuteExecsCommandSuccesfully(t *testing.T) { 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{RootDir: "/test", Args: fakeArgs} + cmd := &Command{Executable: &executable.Executable{Name: executable.GitlabShell}, RootDir: "/test", Args: fakeArgs} // Override the exec func fake := &fakeExec{Error: errors.New("Test error")} @@ -89,7 +78,7 @@ func TestExecuteExecsCommandOnError(t *testing.T) { } func TestExecuteGivenNonexistentCommand(t *testing.T) { - cmd := &Command{RootDir: "/tmp/does/not/exist", Args: fakeArgs} + cmd := &Command{Executable: &executable.Executable{Name: executable.GitlabShell}, RootDir: "/tmp/does/not/exist", Args: fakeArgs} require.Error(t, cmd.Execute()) } -- cgit v1.2.1