diff options
| author | jannfis <jann@mistrust.net> | 2024-05-27 19:38:30 +0000 |
|---|---|---|
| committer | jannfis <jann@mistrust.net> | 2024-05-27 19:40:33 +0000 |
| commit | 67f3d349f9fb60bb232cf6f0734a090bc48f5a4e (patch) | |
| tree | f8b3731f82b98982d4f26ee598635d7932efed19 /ext/git/git_test.go | |
| parent | eb1d8d30bb22cb82928df64fd5028fa978f8cb5b (diff) | |
chore(deps): Pull in Git client changes from Argo CD v2.11.2
Signed-off-by: jannfis <jann@mistrust.net>
Diffstat (limited to 'ext/git/git_test.go')
| -rw-r--r-- | ext/git/git_test.go | 163 |
1 files changed, 104 insertions, 59 deletions
diff --git a/ext/git/git_test.go b/ext/git/git_test.go index de04454..0eebe35 100644 --- a/ext/git/git_test.go +++ b/ext/git/git_test.go @@ -10,6 +10,7 @@ import ( "github.com/stretchr/testify/assert" + "github.com/argoproj/argo-cd/v2/common" "github.com/argoproj/argo-cd/v2/test/fixture/log" "github.com/argoproj/argo-cd/v2/test/fixture/path" "github.com/argoproj/argo-cd/v2/test/fixture/test" @@ -44,18 +45,6 @@ func TestEnsurePrefix(t *testing.T) { } } -func TestRemoveSuffix(t *testing.T) { - data := [][]string{ - {"hello.git", ".git", "hello"}, - {"hello", ".git", "hello"}, - {".git", ".git", ""}, - } - for _, table := range data { - result := removeSuffix(table[0], table[1]) - assert.Equal(t, table[2], result) - } -} - func TestIsSSHURL(t *testing.T) { data := map[string]bool{ "git://github.com/argoproj/test.git": false, @@ -146,19 +135,19 @@ func TestCustomHTTPClient(t *testing.T) { assert.NotEqual(t, "", string(keyData)) // Get HTTPSCreds with client cert creds specified, and insecure connection - creds := NewHTTPSCreds("test", "test", string(certData), string(keyData), false, "http://proxy:5000") + creds := NewHTTPSCreds("test", "test", string(certData), string(keyData), false, "http://proxy:5000", &NoopCredsStore{}, false) client := GetRepoHTTPClient("https://localhost:9443/foo/bar", false, creds, "http://proxy:5000") assert.NotNil(t, client) assert.NotNil(t, client.Transport) if client.Transport != nil { - httpClient := client.Transport.(*http.Transport) - assert.NotNil(t, httpClient.TLSClientConfig) - - assert.Equal(t, false, httpClient.TLSClientConfig.InsecureSkipVerify) - - assert.NotNil(t, httpClient.TLSClientConfig.GetClientCertificate) - if httpClient.TLSClientConfig.GetClientCertificate != nil { - cert, err := httpClient.TLSClientConfig.GetClientCertificate(nil) + transport := client.Transport.(*http.Transport) + assert.NotNil(t, transport.TLSClientConfig) + assert.Equal(t, true, transport.DisableKeepAlives) + assert.Equal(t, false, transport.TLSClientConfig.InsecureSkipVerify) + assert.NotNil(t, transport.TLSClientConfig.GetClientCertificate) + assert.Nil(t, transport.TLSClientConfig.RootCAs) + if transport.TLSClientConfig.GetClientCertificate != nil { + cert, err := transport.TLSClientConfig.GetClientCertificate(nil) assert.NoError(t, err) if err == nil { assert.NotNil(t, cert) @@ -166,30 +155,27 @@ func TestCustomHTTPClient(t *testing.T) { assert.NotNil(t, cert.PrivateKey) } } - proxy, err := httpClient.Proxy(nil) + proxy, err := transport.Proxy(nil) assert.Nil(t, err) assert.Equal(t, "http://proxy:5000", proxy.String()) } - os.Setenv("http_proxy", "http://proxy-from-env:7878") - defer func() { - assert.Nil(t, os.Unsetenv("http_proxy")) - }() + t.Setenv("http_proxy", "http://proxy-from-env:7878") // Get HTTPSCreds without client cert creds, but insecure connection - creds = NewHTTPSCreds("test", "test", "", "", true, "") + creds = NewHTTPSCreds("test", "test", "", "", true, "", &NoopCredsStore{}, false) client = GetRepoHTTPClient("https://localhost:9443/foo/bar", true, creds, "") assert.NotNil(t, client) assert.NotNil(t, client.Transport) if client.Transport != nil { - httpClient := client.Transport.(*http.Transport) - assert.NotNil(t, httpClient.TLSClientConfig) - - assert.Equal(t, true, httpClient.TLSClientConfig.InsecureSkipVerify) - - assert.NotNil(t, httpClient.TLSClientConfig.GetClientCertificate) - if httpClient.TLSClientConfig.GetClientCertificate != nil { - cert, err := httpClient.TLSClientConfig.GetClientCertificate(nil) + transport := client.Transport.(*http.Transport) + assert.NotNil(t, transport.TLSClientConfig) + assert.Equal(t, true, transport.DisableKeepAlives) + assert.Equal(t, true, transport.TLSClientConfig.InsecureSkipVerify) + assert.NotNil(t, transport.TLSClientConfig.GetClientCertificate) + assert.Nil(t, transport.TLSClientConfig.RootCAs) + if transport.TLSClientConfig.GetClientCertificate != nil { + cert, err := transport.TLSClientConfig.GetClientCertificate(nil) assert.NoError(t, err) if err == nil { assert.NotNil(t, cert) @@ -197,12 +183,30 @@ func TestCustomHTTPClient(t *testing.T) { assert.Nil(t, cert.PrivateKey) } } - req, err := http.NewRequest("GET", "http://proxy-from-env:7878", nil) + req, err := http.NewRequest(http.MethodGet, "http://proxy-from-env:7878", nil) assert.Nil(t, err) - proxy, err := httpClient.Proxy(req) + proxy, err := transport.Proxy(req) assert.Nil(t, err) assert.Equal(t, "http://proxy-from-env:7878", proxy.String()) } + // GetRepoHTTPClient with root ca + cert, err := os.ReadFile("../../test/fixture/certs/argocd-test-server.crt") + assert.NoError(t, err) + temppath := t.TempDir() + defer os.RemoveAll(temppath) + err = os.WriteFile(filepath.Join(temppath, "127.0.0.1"), cert, 0666) + assert.NoError(t, err) + t.Setenv(common.EnvVarTLSDataPath, temppath) + client = GetRepoHTTPClient("https://127.0.0.1", false, creds, "") + assert.NotNil(t, client) + assert.NotNil(t, client.Transport) + if client.Transport != nil { + transport := client.Transport.(*http.Transport) + assert.NotNil(t, transport.TLSClientConfig) + assert.Equal(t, true, transport.DisableKeepAlives) + assert.Equal(t, false, transport.TLSClientConfig.InsecureSkipVerify) + assert.NotNil(t, transport.TLSClientConfig.RootCAs) + } } func TestLsRemote(t *testing.T) { @@ -245,11 +249,7 @@ func TestLFSClient(t *testing.T) { // TODO(alexmt): dockerize tests in and enabled it t.Skip() - tempDir, err := os.MkdirTemp("", "git-client-lfs-test-") - assert.NoError(t, err) - if err == nil { - defer func() { _ = os.RemoveAll(tempDir) }() - } + tempDir := t.TempDir() client, err := NewClientExt("https://github.com/argoproj-labs/argocd-testrepo-lfs", tempDir, NopCreds{}, false, true, "") assert.NoError(t, err) @@ -264,7 +264,7 @@ func TestLFSClient(t *testing.T) { err = client.Fetch("") assert.NoError(t, err) - err = client.Checkout(commitSHA) + err = client.Checkout(commitSHA, true) assert.NoError(t, err) largeFiles, err := client.LsLargeFiles() @@ -274,7 +274,11 @@ func TestLFSClient(t *testing.T) { fileHandle, err := os.Open(fmt.Sprintf("%s/test3.yaml", tempDir)) assert.NoError(t, err) if err == nil { - defer fileHandle.Close() + defer func() { + if err = fileHandle.Close(); err != nil { + assert.NoError(t, err) + } + }() text, err := io.ReadAll(fileHandle) assert.NoError(t, err) if err == nil { @@ -284,11 +288,7 @@ func TestLFSClient(t *testing.T) { } func TestVerifyCommitSignature(t *testing.T) { - p, err := os.MkdirTemp("", "test-verify-commit-sig") - if err != nil { - panic(err.Error()) - } - defer os.RemoveAll(p) + p := t.TempDir() client, err := NewClientExt("https://github.com/argoproj/argo-cd.git", p, NopCreds{}, false, false, "") assert.NoError(t, err) @@ -302,7 +302,7 @@ func TestVerifyCommitSignature(t *testing.T) { commitSHA, err := client.LsRemote("HEAD") assert.NoError(t, err) - err = client.Checkout(commitSHA) + err = client.Checkout(commitSHA, true) assert.NoError(t, err) // 28027897aad1262662096745f2ce2d4c74d02b7f is a commit that is signed in the repo @@ -343,9 +343,7 @@ func TestNewFactory(t *testing.T) { test.Flaky(t) } - dirName, err := os.MkdirTemp("", "git-client-test-") - assert.NoError(t, err) - defer func() { _ = os.RemoveAll(dirName) }() + dirName := t.TempDir() client, err := NewClientExt(tt.args.url, dirName, NopCreds{}, tt.args.insecureIgnoreHostKey, false, "") assert.NoError(t, err) @@ -362,7 +360,7 @@ func TestNewFactory(t *testing.T) { err = client.Fetch("") assert.NoError(t, err) - err = client.Checkout(commitSHA) + err = client.Checkout(commitSHA, true) assert.NoError(t, err) revisionMetadata, err := client.RevisionMetadata(commitSHA) @@ -381,11 +379,7 @@ func TestNewFactory(t *testing.T) { } func TestListRevisions(t *testing.T) { - dir, err := os.MkdirTemp("", "test-list-revisions") - if err != nil { - panic(err.Error()) - } - defer os.RemoveAll(dir) + dir := t.TempDir() repoURL := "https://github.com/argoproj/argo-cd.git" client, err := NewClientExt(repoURL, dir, NopCreds{}, false, false, "") @@ -402,3 +396,54 @@ func TestListRevisions(t *testing.T) { assert.NotContains(t, lsResult.Branches, testTag) assert.NotContains(t, lsResult.Tags, testBranch) } + +func TestLsFiles(t *testing.T) { + tmpDir1 := t.TempDir() + tmpDir2 := t.TempDir() + + client, err := NewClientExt("", tmpDir1, NopCreds{}, false, false, "") + assert.NoError(t, err) + + err = runCmd(tmpDir1, "git", "init") + assert.NoError(t, err) + + // Prepare files + a, err := os.Create(filepath.Join(tmpDir1, "a.yaml")) + assert.NoError(t, err) + a.Close() + err = os.MkdirAll(filepath.Join(tmpDir1, "subdir"), 0755) + assert.NoError(t, err) + b, err := os.Create(filepath.Join(tmpDir1, "subdir", "b.yaml")) + assert.NoError(t, err) + b.Close() + err = os.MkdirAll(filepath.Join(tmpDir2, "subdir"), 0755) + assert.NoError(t, err) + c, err := os.Create(filepath.Join(tmpDir2, "c.yaml")) + assert.NoError(t, err) + c.Close() + err = os.Symlink(filepath.Join(tmpDir2, "c.yaml"), filepath.Join(tmpDir1, "link.yaml")) + assert.NoError(t, err) + + err = runCmd(tmpDir1, "git", "add", ".") + assert.NoError(t, err) + err = runCmd(tmpDir1, "git", "commit", "-m", "Initial commit") + assert.NoError(t, err) + + // Old and default globbing + expectedResult := []string{"a.yaml", "link.yaml", "subdir/b.yaml"} + lsResult, err := client.LsFiles("*.yaml", false) + assert.NoError(t, err) + assert.Equal(t, lsResult, expectedResult) + + // New and safer globbing, do not return symlinks resolving outside of the repo + expectedResult = []string{"a.yaml"} + lsResult, err = client.LsFiles("*.yaml", true) + assert.NoError(t, err) + assert.Equal(t, lsResult, expectedResult) + + // New globbing, do not return files outside of the repo + var nilResult []string + lsResult, err = client.LsFiles(filepath.Join(tmpDir2, "*.yaml"), true) + assert.NoError(t, err) + assert.Equal(t, lsResult, nilResult) +} |
