blob: 54999f76ebf858eef8650bdd9a0453ac6d0e6fa4 [file] [log] [blame]
package git_common_test
import (
"context"
"os"
"path"
"strings"
"testing"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/exec"
"go.skia.org/infra/go/git/git_common"
"go.skia.org/infra/go/skerr"
)
func TestFindGit_BypassWrapper(t *testing.T) {
// Lots of setup.
wrapperGit := "/path/to/wrapper/git"
realGit := "/path/to/real/git"
// Mock out os.Stat to find our wrapped and real git executables.
ctx := exec.WithOverrideExecutableExists(t.Context(), func(name string) bool {
return name == wrapperGit || name == realGit
})
// Override PATH and os.Stat.
oldPATH := os.Getenv("PATH")
require.NoError(t, os.Setenv("PATH", strings.Join([]string{
path.Dir(wrapperGit),
path.Dir(realGit),
}, string(os.PathListSeparator))))
defer func() {
require.NoError(t, os.Setenv("PATH", oldPATH))
}()
// Override exec run.
mockRun := &exec.CommandCollector{}
ctx = exec.NewContext(ctx, mockRun.Run)
mockRun.SetDelegateRun(func(ctx context.Context, cmd *exec.Command) error {
var output string
if cmd.Name == wrapperGit {
output = "git version 2.45.2.chromium.11 / Infra wrapper (infra/tools/git/linux-amd64 @ EpkL_3RTtPZV2hGJqsC6xZ4SBj_KCQmdl3Vy2amJ4MAC)"
} else if cmd.Name == realGit {
output = "git version 2.45.2.chromium.11"
} else {
return skerr.Fmt("Unknown command %s %s", cmd.Name, strings.Join(cmd.Args, " "))
}
_, err := cmd.CombinedOutput.Write([]byte(output))
return err
})
// Actually test.
git, _, _, isWrapper, err := git_common.FindGit(ctx)
require.NoError(t, err)
require.Equal(t, wrapperGit, git)
require.True(t, isWrapper)
// Now set BypassWrapper and ensure that we get the real git.
git_common.BypassWrapper(true)
defer git_common.BypassWrapper(false)
git, _, _, isWrapper, err = git_common.FindGit(ctx)
require.NoError(t, err)
require.Equal(t, realGit, git)
require.False(t, isWrapper)
}