Skip to content

Commit 1d45bef

Browse files
test: fix git clone tests (#46)
1 parent 746136d commit 1d45bef

File tree

3 files changed

+65
-54
lines changed

3 files changed

+65
-54
lines changed

internal/util/repository_test.go

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,34 +16,29 @@
1616
package util_test
1717

1818
import (
19+
"github.com/go-git/go-git/v5"
20+
"github.com/stretchr/testify/require"
1921
"net/url"
2022
"path/filepath"
2123
"testing"
2224

23-
"github.com/go-git/go-git/v5"
2425
"github.com/stretchr/testify/assert"
2526

2627
"github.com/snyk/code-client-go/internal/util"
28+
"github.com/snyk/code-client-go/internal/util/testutil"
2729
)
2830

29-
func clone(t *testing.T, repoUrl string, repoDir string) (string, *git.Repository) {
30-
t.Helper()
31-
32-
if repoDir == "" {
33-
repoDir = t.TempDir()
34-
}
35-
repo, err := git.PlainClone(repoDir, false, &git.CloneOptions{URL: repoUrl})
36-
assert.NoError(t, err)
37-
assert.NotNil(t, repo)
38-
39-
return repoDir, repo
40-
}
41-
4231
func Test_GetRepositoryUrl_repo_with_credentials(t *testing.T) {
4332
// check out a repo and prepare its config to contain credentials in the URL
4433
expectedRepoUrl := "https://github.com/snyk-fixtures/shallow-goof-locked.git"
4534

46-
repoDir, repo := clone(t, expectedRepoUrl, "")
35+
repoDir, err := testutil.SetupCustomTestRepo(t, expectedRepoUrl, "master", "", "shallow-goof-locked")
36+
require.NoError(t, err)
37+
38+
repo, err := git.PlainOpenWithOptions(repoDir, &git.PlainOpenOptions{
39+
DetectDotGit: true,
40+
})
41+
require.NoError(t, err)
4742

4843
config, err := repo.Config()
4944
assert.NoError(t, err)
@@ -67,7 +62,8 @@ func Test_GetRepositoryUrl_repo_with_credentials(t *testing.T) {
6762
func Test_GetRepositoryUrl_repo_without_credentials(t *testing.T) {
6863
// check out a repo and prepare its config to contain credentials in the URL
6964
expectedRepoUrl := "https://github.com/snyk-fixtures/shallow-goof-locked.git"
70-
repoDir, _ := clone(t, expectedRepoUrl, "")
65+
repoDir, err := testutil.SetupCustomTestRepo(t, expectedRepoUrl, "master", "", "shallow-goof-locked")
66+
require.NoError(t, err)
7167

7268
// run method under test
7369
actualUrl, err := util.GetRepositoryUrl(repoDir)
@@ -78,7 +74,8 @@ func Test_GetRepositoryUrl_repo_without_credentials(t *testing.T) {
7874
func Test_GetRepositoryUrl_repo_with_ssh(t *testing.T) {
7975
// check out a repo and prepare its config to contain credentials in the URL
8076
expectedRepoUrl := "https://github.com/snyk-fixtures/shallow-goof-locked.git"
81-
repoDir, _ := clone(t, "[email protected]:snyk-fixtures/shallow-goof-locked.git", "")
77+
repoDir, err := testutil.SetupCustomTestRepo(t, "[email protected]:snyk-fixtures/shallow-goof-locked.git", "master", "", "shallow-goof-locked")
78+
require.NoError(t, err)
8279

8380
// run method under test
8481
actualUrl, err := util.GetRepositoryUrl(repoDir)
@@ -95,7 +92,8 @@ func Test_GetRepositoryUrl_no_repo(t *testing.T) {
9592

9693
func Test_GetRepositoryUrl_repo_subfolder(t *testing.T) {
9794
expectedRepoUrl := "https://github.com/snyk-fixtures/mono-repo.git"
98-
repoDir, _ := clone(t, "[email protected]:snyk-fixtures/mono-repo.git", "")
95+
repoDir, err := testutil.SetupCustomTestRepo(t, "[email protected]:snyk-fixtures/mono-repo.git", "master", "", "mono-repo")
96+
require.NoError(t, err)
9997

10098
// run method under test
10199
actualUrl, err := util.GetRepositoryUrl(filepath.Join(repoDir, "multi-module"))
@@ -104,8 +102,11 @@ func Test_GetRepositoryUrl_repo_subfolder(t *testing.T) {
104102
}
105103

106104
func Test_GetRepositoryUrl_repo_submodule(t *testing.T) {
107-
parentRepoDir, _ := clone(t, "https://github.com/snyk-fixtures/shallow-goof-locked.git", "")
108-
nestedRepoDir, _ := clone(t, "[email protected]:snyk-fixtures/mono-repo.git", filepath.Join(parentRepoDir, "shallow-goof-locked"))
105+
parentRepoDir, err := testutil.SetupCustomTestRepo(t, "https://github.com/snyk-fixtures/shallow-goof-locked.git", "master", "", "shallow-goof-locked")
106+
require.NoError(t, err)
107+
nestedRepoDir, err := testutil.SetupCustomTestRepo(t, "https://github.com/snyk-fixtures/mono-repo.git", "master", parentRepoDir, "mono-repo")
108+
require.NoError(t, err)
109+
109110
// run method under test
110111
actualUrl, err := util.GetRepositoryUrl(parentRepoDir)
111112
assert.NoError(t, err)

internal/util/testutil/clone.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package testutil
2+
3+
import (
4+
"github.com/rs/zerolog/log"
5+
"os/exec"
6+
"path/filepath"
7+
"testing"
8+
)
9+
10+
func SetupCustomTestRepo(t *testing.T, url string, targetCommit string, parentDir, repoDir string) (string, error) {
11+
t.Helper()
12+
if parentDir == "" {
13+
parentDir = t.TempDir()
14+
}
15+
if repoDir == "" {
16+
repoDir = "1"
17+
}
18+
absoluteCloneRepoDir := filepath.Join(parentDir, repoDir)
19+
cmd := []string{"clone", url, repoDir}
20+
log.Debug().Interface("cmd", cmd).Msg("clone command")
21+
clone := exec.Command("git", cmd...)
22+
clone.Dir = parentDir
23+
reset := exec.Command("git", "reset", "--hard", targetCommit)
24+
reset.Dir = absoluteCloneRepoDir
25+
26+
clean := exec.Command("git", "clean", "--force")
27+
clean.Dir = absoluteCloneRepoDir
28+
29+
output, err := clone.CombinedOutput()
30+
if err != nil {
31+
t.Fatal(err, "clone didn't work")
32+
}
33+
34+
log.Debug().Msg(string(output))
35+
output, _ = reset.CombinedOutput()
36+
37+
log.Debug().Msg(string(output))
38+
output, err = clean.CombinedOutput()
39+
40+
log.Debug().Msg(string(output))
41+
return absoluteCloneRepoDir, err
42+
}

scan_smoke_test.go

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,10 @@ import (
2222
"fmt"
2323
"net/http"
2424
"os"
25-
"os/exec"
2625
"path/filepath"
2726
"testing"
2827
"time"
2928

30-
"github.com/rs/zerolog/log"
3129
"github.com/stretchr/testify/assert"
3230

3331
"github.com/google/uuid"
@@ -44,7 +42,7 @@ func Test_SmokeScan_HTTPS(t *testing.T) {
4442
if os.Getenv("SMOKE_TESTS") != "true" {
4543
t.Skip()
4644
}
47-
var cloneTargetDir, err = setupCustomTestRepo(t, "https://github.com/snyk-labs/nodejs-goof", "0336589")
45+
var cloneTargetDir, err = testutil.SetupCustomTestRepo(t, "https://github.com/snyk-labs/nodejs-goof", "0336589", "", "")
4846
assert.NoError(t, err)
4947

5048
target, err := scan.NewRepositoryTarget(cloneTargetDir)
@@ -90,7 +88,7 @@ func Test_SmokeScan_SSH(t *testing.T) {
9088
if os.Getenv("SMOKE_TESTS") != "true" {
9189
t.Skip()
9290
}
93-
var cloneTargetDir, err = setupCustomTestRepo(t, "[email protected]:snyk-labs/nodejs-goof", "0336589")
91+
var cloneTargetDir, err = testutil.SetupCustomTestRepo(t, "[email protected]:snyk-labs/nodejs-goof", "0336589", "", "")
9492
assert.NoError(t, err)
9593

9694
target, err := scan.NewRepositoryTarget(cloneTargetDir)
@@ -172,36 +170,6 @@ func Test_SmokeScan_SubFolder(t *testing.T) {
172170
require.NotNil(t, response)
173171
}
174172

175-
func setupCustomTestRepo(t *testing.T, url string, targetCommit string) (string, error) {
176-
t.Helper()
177-
tempDir := t.TempDir()
178-
repoDir := "1"
179-
absoluteCloneRepoDir := filepath.Join(tempDir, repoDir)
180-
cmd := []string{"clone", url, repoDir}
181-
log.Debug().Interface("cmd", cmd).Msg("clone command")
182-
clone := exec.Command("git", cmd...)
183-
clone.Dir = tempDir
184-
reset := exec.Command("git", "reset", "--hard", targetCommit)
185-
reset.Dir = absoluteCloneRepoDir
186-
187-
clean := exec.Command("git", "clean", "--force")
188-
clean.Dir = absoluteCloneRepoDir
189-
190-
output, err := clone.CombinedOutput()
191-
if err != nil {
192-
t.Fatal(err, "clone didn't work")
193-
}
194-
195-
log.Debug().Msg(string(output))
196-
output, _ = reset.CombinedOutput()
197-
198-
log.Debug().Msg(string(output))
199-
output, err = clean.CombinedOutput()
200-
201-
log.Debug().Msg(string(output))
202-
return absoluteCloneRepoDir, err
203-
}
204-
205173
type TestAuthRoundTripper struct {
206174
http.RoundTripper
207175
}

0 commit comments

Comments
 (0)