Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <psteinhardt@gitlab.com>2022-08-09 09:01:22 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2022-08-11 16:07:33 +0300
commitc7996255726c86e1196924a22c8b00c34b2eccce (patch)
tree3f31d68568b615c926381eb95eac752251d7c992
parent8cd3dc3038dfac98779b95bda112ee4d8c0961c7 (diff)
gitpipe: Refactor DiffTree tests to not use seeded repos
Refactor the DiffTree tests to not use seeded repositories with hardcoded object IDs. Instead, the tests are changed such that they generate test data at runtime so that we can easily support different object hashes.
-rw-r--r--internal/git/gitpipe/diff_tree_test.go236
1 files changed, 163 insertions, 73 deletions
diff --git a/internal/git/gitpipe/diff_tree_test.go b/internal/git/gitpipe/diff_tree_test.go
index f2cac6a38..556ec4e9f 100644
--- a/internal/git/gitpipe/diff_tree_test.go
+++ b/internal/git/gitpipe/diff_tree_test.go
@@ -3,10 +3,12 @@
package gitpipe
import (
+ "bytes"
"errors"
"testing"
"github.com/stretchr/testify/require"
+ "gitlab.com/gitlab-org/gitaly/v15/internal/git"
"gitlab.com/gitlab-org/gitaly/v15/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v15/internal/git/localrepo"
"gitlab.com/gitlab-org/gitaly/v15/internal/testhelper"
@@ -17,105 +19,186 @@ func TestDiffTree(t *testing.T) {
ctx := testhelper.Context(t)
cfg := testcfg.Build(t)
- repoProto, _ := gittest.CreateRepository(ctx, t, cfg, gittest.CreateRepositoryConfig{
- SkipCreationViaService: true,
- Seed: gittest.SeedGitLabTest,
- })
- repo := localrepo.NewTestRepo(t, cfg, repoProto)
-
for _, tc := range []struct {
- desc string
- leftRevision string
- rightRevision string
- options []DiffTreeOption
- expectedResults []RevisionResult
- expectedErr error
+ desc string
+ setup func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult)
+ options []DiffTreeOption
+ expectedErr error
}{
{
- desc: "single file",
- leftRevision: "b83d6e391c22777fca1ed3012fce84f633d7fed0",
- rightRevision: "4a24d82dbca5c11c61556f3b35ca472b7463187e",
- expectedResults: []RevisionResult{
- {
- OID: "c60514b6d3d6bf4bec1030f70026e34dfbd69ad5",
- ObjectName: []byte("README.md"),
- },
+ desc: "single file",
+ setup: func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult) {
+ treeA := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "unchanged", Mode: "100644", Content: "unchanged"},
+ {Path: "changed", Mode: "100644", Content: "a"},
+ })
+
+ changedBlob := gittest.WriteBlob(t, cfg, repoPath, []byte("b"))
+ treeB := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "unchanged", Mode: "100644", Content: "unchanged"},
+ {Path: "changed", Mode: "100644", OID: changedBlob},
+ })
+
+ return treeA.Revision(), treeB.Revision(), []RevisionResult{
+ {OID: changedBlob, ObjectName: []byte("changed")},
+ }
},
},
{
- desc: "single file in subtree without recursive",
- leftRevision: "7975be0116940bf2ad4321f79d02a55c5f7779aa",
- rightRevision: "1e292f8fedd741b75372e19097c76d327140c312",
- expectedResults: []RevisionResult{
- {
- OID: "ceb102b8d3f9a95c2eb979213e49f7cc1b23d56e",
- ObjectName: []byte("files"),
- },
+ desc: "single file in subtree without recursive",
+ setup: func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult) {
+ treeA := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {
+ Path: "unchanged",
+ Mode: "100644",
+ Content: "unchanged",
+ },
+ {
+ Path: "subtree",
+ Mode: "040000",
+ OID: gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "changed", Mode: "100644", Content: "a"},
+ }),
+ },
+ })
+
+ changedSubtree := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "changed", Mode: "100644", Content: "b"},
+ })
+ treeB := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {
+ Path: "unchanged",
+ Mode: "100644",
+ Content: "unchanged",
+ },
+ {
+ Path: "subtree",
+ Mode: "040000",
+ OID: changedSubtree,
+ },
+ })
+
+ return treeA.Revision(), treeB.Revision(), []RevisionResult{
+ {OID: changedSubtree, ObjectName: []byte("subtree")},
+ }
},
},
{
- desc: "single file in subtree with recursive",
- leftRevision: "7975be0116940bf2ad4321f79d02a55c5f7779aa",
- rightRevision: "1e292f8fedd741b75372e19097c76d327140c312",
+ desc: "single file in subtree with recursive",
+ setup: func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult) {
+ treeA := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {
+ Path: "unchanged",
+ Mode: "100644",
+ Content: "unchanged",
+ },
+ {
+ Path: "subtree",
+ Mode: "040000",
+ OID: gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "changed", Mode: "100644", Content: "a"},
+ }),
+ },
+ })
+
+ changedBlob := gittest.WriteBlob(t, cfg, repoPath, []byte("b"))
+ treeB := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {
+ Path: "unchanged",
+ Mode: "100644",
+ Content: "unchanged",
+ },
+ {
+ Path: "subtree",
+ Mode: "040000",
+ OID: gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "changed", Mode: "100644", OID: changedBlob},
+ }),
+ },
+ })
+
+ return treeA.Revision(), treeB.Revision(), []RevisionResult{
+ {OID: changedBlob, ObjectName: []byte("subtree/changed")},
+ }
+ },
options: []DiffTreeOption{
DiffTreeWithRecursive(),
},
- expectedResults: []RevisionResult{
- {
- OID: "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
- ObjectName: []byte("files/flat/path/correct/content.txt"),
- },
- },
},
{
- desc: "with submodules",
- leftRevision: "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
- rightRevision: "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
- expectedResults: []RevisionResult{
- {
- OID: "efd587ccb47caf5f31fc954edb21f0a713d9ecc3",
- ObjectName: []byte(".gitmodules"),
- },
- {
- OID: "645f6c4c82fd3f5e06f67134450a570b795e55a6",
- ObjectName: []byte("gitlab-grack"),
- },
+ desc: "with submodules",
+ setup: func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult) {
+ submodule := gittest.WriteCommit(t, cfg, repoPath)
+
+ treeA := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: ".gitmodules", Mode: "100644", Content: "a"},
+ })
+
+ changedGitmodules := gittest.WriteBlob(t, cfg, repoPath, []byte("b"))
+ treeB := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: ".gitmodules", Mode: "100644", OID: changedGitmodules},
+ {Path: "submodule", Mode: "160000", OID: submodule},
+ })
+
+ return treeA.Revision(), treeB.Revision(), []RevisionResult{
+ {OID: changedGitmodules, ObjectName: []byte(".gitmodules")},
+ {OID: submodule, ObjectName: []byte("submodule")},
+ }
},
},
{
- desc: "without submodules",
- leftRevision: "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
- rightRevision: "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
+ desc: "without submodules",
+ setup: func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult) {
+ submodule := gittest.WriteCommit(t, cfg, repoPath)
+
+ treeA := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: ".gitmodules", Mode: "100644", Content: "a"},
+ })
+
+ changedGitmodules := gittest.WriteBlob(t, cfg, repoPath, []byte("b"))
+ treeB := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: ".gitmodules", Mode: "100644", OID: changedGitmodules},
+ {Path: "submodule", Mode: "160000", OID: submodule},
+ })
+
+ return treeA.Revision(), treeB.Revision(), []RevisionResult{
+ {OID: changedGitmodules, ObjectName: []byte(".gitmodules")},
+ }
+ },
options: []DiffTreeOption{
DiffTreeWithIgnoreSubmodules(),
},
- expectedResults: []RevisionResult{
- {
- OID: "efd587ccb47caf5f31fc954edb21f0a713d9ecc3",
- ObjectName: []byte(".gitmodules"),
- },
- },
},
{
- desc: "with skip function",
- leftRevision: "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
- rightRevision: "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
+ desc: "with skip function",
+ setup: func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult) {
+ treeA := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "a", Mode: "100644", Content: "1"},
+ {Path: "b", Mode: "100644", Content: "2"},
+ })
+
+ changedBlobA := gittest.WriteBlob(t, cfg, repoPath, []byte("x"))
+ treeB := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "a", Mode: "100644", OID: changedBlobA},
+ {Path: "b", Mode: "100644", Content: "y"},
+ })
+
+ return treeA.Revision(), treeB.Revision(), []RevisionResult{
+ {OID: changedBlobA, ObjectName: []byte("a")},
+ }
+ },
options: []DiffTreeOption{
DiffTreeWithSkip(func(r *RevisionResult) bool {
- return r.OID == "efd587ccb47caf5f31fc954edb21f0a713d9ecc3"
+ return bytes.Equal(r.ObjectName, []byte("b"))
}),
},
- expectedResults: []RevisionResult{
- {
- OID: "645f6c4c82fd3f5e06f67134450a570b795e55a6",
- ObjectName: []byte("gitlab-grack"),
- },
- },
},
{
- desc: "invalid revision",
- leftRevision: "refs/heads/master",
- rightRevision: "refs/heads/does-not-exist",
+ desc: "invalid revision",
+ setup: func(t *testing.T, repoPath string) (git.Revision, git.Revision, []RevisionResult) {
+ gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("main"))
+ return "refs/heads/main", "refs/heads/does-not-exist", nil
+ },
expectedErr: errors.New("diff-tree pipeline command: exit status 128, stderr: " +
"\"fatal: ambiguous argument 'refs/heads/does-not-exist': unknown revision or path not in the working tree.\\n" +
"Use '--' to separate paths from revisions, like this:\\n" +
@@ -123,7 +206,14 @@ func TestDiffTree(t *testing.T) {
},
} {
t.Run(tc.desc, func(t *testing.T) {
- it := DiffTree(ctx, repo, tc.leftRevision, tc.rightRevision, tc.options...)
+ repoProto, repoPath := gittest.CreateRepository(ctx, t, cfg, gittest.CreateRepositoryConfig{
+ SkipCreationViaService: true,
+ })
+ repo := localrepo.NewTestRepo(t, cfg, repoProto)
+
+ leftRevision, rightRevision, expectedResults := tc.setup(t, repoPath)
+
+ it := DiffTree(ctx, repo, leftRevision.String(), rightRevision.String(), tc.options...)
var results []RevisionResult
for it.Next() {
@@ -138,7 +228,7 @@ func TestDiffTree(t *testing.T) {
}
require.Equal(t, tc.expectedErr, err)
- require.Equal(t, tc.expectedResults, results)
+ require.Equal(t, expectedResults, results)
})
}
}