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
commit8f1a982ce59922d2ceaacbe18a000e68d4511379 (patch)
tree40daf619b1920e42581f96a89b3db827085c1d18
parentc7996255726c86e1196924a22c8b00c34b2eccce (diff)
gitpipe: Refactor LsTree tests to not use seeded repos
Refactor the LsTree 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/ls_tree_test.go213
1 files changed, 123 insertions, 90 deletions
diff --git a/internal/git/gitpipe/ls_tree_test.go b/internal/git/gitpipe/ls_tree_test.go
index 0a90f0fec..fd82e1921 100644
--- a/internal/git/gitpipe/ls_tree_test.go
+++ b/internal/git/gitpipe/ls_tree_test.go
@@ -7,6 +7,7 @@ import (
"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,124 +18,156 @@ func TestLsTree(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
- revision string
- options []LsTreeOption
- expectedResults []RevisionResult
- expectedErr error
+ desc string
+ setup func(t *testing.T, repoPath string) (git.Revision, []RevisionResult)
+ options []LsTreeOption
+ expectedErr error
}{
{
- desc: "initial commit",
- revision: "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863",
- expectedResults: []RevisionResult{
- {OID: "470ad2fcf1e33798f1afc5781d08e60c40f51e7a", ObjectName: []byte(".gitignore")},
- {OID: "50b27c6518be44c42c4d87966ae2481ce895624c", ObjectName: []byte("LICENSE")},
- {OID: "faaf198af3a36dbf41961466703cc1d47c61d051", ObjectName: []byte("README.md")},
+ desc: "initial commit",
+ setup: func(t *testing.T, repoPath string) (git.Revision, []RevisionResult) {
+ blobA := gittest.WriteBlob(t, cfg, repoPath, []byte("a"))
+ blobB := gittest.WriteBlob(t, cfg, repoPath, []byte("b"))
+ blobC := gittest.WriteBlob(t, cfg, repoPath, []byte("c"))
+
+ tree := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: ".gitignore", Mode: "100644", OID: blobA},
+ {Path: "LICENSE", Mode: "100644", OID: blobB},
+ {Path: "README.md", Mode: "100644", OID: blobC},
+ })
+
+ return tree.Revision(), []RevisionResult{
+ {OID: blobA, ObjectName: []byte(".gitignore")},
+ {OID: blobB, ObjectName: []byte("LICENSE")},
+ {OID: blobC, ObjectName: []byte("README.md")},
+ }
},
},
{
- desc: "includes submodule",
- revision: "cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
- expectedResults: []RevisionResult{
- {OID: "470ad2fcf1e33798f1afc5781d08e60c40f51e7a", ObjectName: []byte(".gitignore")},
- {OID: "fdaada1754989978413d618ee1fb1c0469d6a664", ObjectName: []byte(".gitmodules")},
- {OID: "c1788657b95998a2f177a4f86d68a60f2a80117f", ObjectName: []byte("CONTRIBUTING.md")},
- {OID: "50b27c6518be44c42c4d87966ae2481ce895624c", ObjectName: []byte("LICENSE")},
- {OID: "faaf198af3a36dbf41961466703cc1d47c61d051", ObjectName: []byte("README.md")},
- {OID: "409f37c4f05865e4fb208c771485f211a22c4c2d", ObjectName: []byte("six")},
+ desc: "includes submodule",
+ setup: func(t *testing.T, repoPath string) (git.Revision, []RevisionResult) {
+ blob := gittest.WriteBlob(t, cfg, repoPath, []byte("a"))
+ commit := gittest.WriteCommit(t, cfg, repoPath)
+
+ tree := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "blob", Mode: "100644", OID: blob},
+ {Path: "submodule", Mode: "160000", OID: commit},
+ })
+
+ return tree.Revision(), []RevisionResult{
+ {OID: blob, ObjectName: []byte("blob")},
+ {OID: commit, ObjectName: []byte("submodule")},
+ }
},
},
{
- desc: "filter blobs only",
- revision: "cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
+ desc: "filter blobs only",
+ setup: func(t *testing.T, repoPath string) (git.Revision, []RevisionResult) {
+ blob := gittest.WriteBlob(t, cfg, repoPath, []byte("a"))
+ commit := gittest.WriteCommit(t, cfg, repoPath)
+
+ tree := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {
+ Path: "blob",
+ Mode: "100644",
+ OID: blob,
+ },
+ {
+ Path: "submodule",
+ Mode: "160000",
+ OID: commit,
+ },
+ {
+ Path: "subtree",
+ Mode: "040000",
+ OID: gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "blob-in-subtree", Mode: "100644", Content: "something"},
+ }),
+ },
+ })
+
+ return tree.Revision(), []RevisionResult{
+ {OID: blob, ObjectName: []byte("blob")},
+ }
+ },
options: []LsTreeOption{
LsTreeWithBlobFilter(),
},
- expectedResults: []RevisionResult{
- {OID: "470ad2fcf1e33798f1afc5781d08e60c40f51e7a", ObjectName: []byte(".gitignore")},
- {OID: "fdaada1754989978413d618ee1fb1c0469d6a664", ObjectName: []byte(".gitmodules")},
- {OID: "c1788657b95998a2f177a4f86d68a60f2a80117f", ObjectName: []byte("CONTRIBUTING.md")},
- {OID: "50b27c6518be44c42c4d87966ae2481ce895624c", ObjectName: []byte("LICENSE")},
- {OID: "faaf198af3a36dbf41961466703cc1d47c61d051", ObjectName: []byte("README.md")},
- },
},
{
- desc: "empty tree",
- revision: "7efb185dd22fd5c51ef044795d62b7847900c341",
+ desc: "empty tree",
+ setup: func(t *testing.T, repoPath string) (git.Revision, []RevisionResult) {
+ return gittest.DefaultObjectHash.EmptyTreeOID.Revision(), nil
+ },
},
{
- desc: "non-recursive",
- revision: "913c66a37b4a45b9769037c55c2d238bd0942d2e",
- expectedResults: []RevisionResult{
- {OID: "fd90a3d2d21d6b4f9bec2c33fb7f49780c55f0d2", ObjectName: []byte(".DS_Store")},
- {OID: "470ad2fcf1e33798f1afc5781d08e60c40f51e7a", ObjectName: []byte(".gitignore")},
- {OID: "fdaada1754989978413d618ee1fb1c0469d6a664", ObjectName: []byte(".gitmodules")},
- {OID: "c74175afd117781cbc983664339a0f599b5bb34e", ObjectName: []byte("CHANGELOG")},
- {OID: "c1788657b95998a2f177a4f86d68a60f2a80117f", ObjectName: []byte("CONTRIBUTING.md")},
- {OID: "50b27c6518be44c42c4d87966ae2481ce895624c", ObjectName: []byte("LICENSE")},
- {OID: "95d9f0a5e7bb054e9dd3975589b8dfc689e20e88", ObjectName: []byte("MAINTENANCE.md")},
- {OID: "bf757025c40c62e6ffa6f11d3819c769a76dbe09", ObjectName: []byte("PROCESS.md")},
- {OID: "faaf198af3a36dbf41961466703cc1d47c61d051", ObjectName: []byte("README.md")},
- {OID: "998707b421c89bd9a3063333f9f728ef3e43d101", ObjectName: []byte("VERSION")},
- {OID: "3c122d2b7830eca25235131070602575cf8b41a1", ObjectName: []byte("encoding")},
- {OID: "ab746f8ad0b84b147290041dc13cc9c7adc52930", ObjectName: []byte("files")},
- {OID: "409f37c4f05865e4fb208c771485f211a22c4c2d", ObjectName: []byte("six")},
+ desc: "non-recursive",
+ setup: func(t *testing.T, repoPath string) (git.Revision, []RevisionResult) {
+ blob := gittest.WriteBlob(t, cfg, repoPath, []byte("a"))
+ subtree := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "blob-in-subtree", Mode: "100644", Content: "something"},
+ })
+
+ tree := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "blob", Mode: "100644", OID: blob},
+ {Path: "subtree", Mode: "040000", OID: subtree},
+ })
+
+ return tree.Revision(), []RevisionResult{
+ {OID: blob, ObjectName: []byte("blob")},
+ {OID: subtree, ObjectName: []byte("subtree")},
+ }
},
},
{
- desc: "recursive",
- revision: "913c66a37b4a45b9769037c55c2d238bd0942d2e",
+ desc: "recursive",
+ setup: func(t *testing.T, repoPath string) (git.Revision, []RevisionResult) {
+ blob := gittest.WriteBlob(t, cfg, repoPath, []byte("a"))
+ blobInSubtree := gittest.WriteBlob(t, cfg, repoPath, []byte("b"))
+
+ tree := gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {
+ Path: "blob",
+ Mode: "100644",
+ OID: blob,
+ },
+ {
+ Path: "subtree",
+ Mode: "040000",
+ OID: gittest.WriteTree(t, cfg, repoPath, []gittest.TreeEntry{
+ {Path: "blob-in-subtree", Mode: "100644", OID: blobInSubtree},
+ }),
+ },
+ })
+
+ return tree.Revision(), []RevisionResult{
+ {OID: blob, ObjectName: []byte("blob")},
+ {OID: blobInSubtree, ObjectName: []byte("subtree/blob-in-subtree")},
+ }
+ },
options: []LsTreeOption{
LsTreeWithRecursive(),
},
- expectedResults: []RevisionResult{
- {OID: "fd90a3d2d21d6b4f9bec2c33fb7f49780c55f0d2", ObjectName: []byte(".DS_Store")},
- {OID: "470ad2fcf1e33798f1afc5781d08e60c40f51e7a", ObjectName: []byte(".gitignore")},
- {OID: "fdaada1754989978413d618ee1fb1c0469d6a664", ObjectName: []byte(".gitmodules")},
- {OID: "c74175afd117781cbc983664339a0f599b5bb34e", ObjectName: []byte("CHANGELOG")},
- {OID: "c1788657b95998a2f177a4f86d68a60f2a80117f", ObjectName: []byte("CONTRIBUTING.md")},
- {OID: "50b27c6518be44c42c4d87966ae2481ce895624c", ObjectName: []byte("LICENSE")},
- {OID: "95d9f0a5e7bb054e9dd3975589b8dfc689e20e88", ObjectName: []byte("MAINTENANCE.md")},
- {OID: "bf757025c40c62e6ffa6f11d3819c769a76dbe09", ObjectName: []byte("PROCESS.md")},
- {OID: "faaf198af3a36dbf41961466703cc1d47c61d051", ObjectName: []byte("README.md")},
- {OID: "998707b421c89bd9a3063333f9f728ef3e43d101", ObjectName: []byte("VERSION")},
- {OID: "8af7f880ce38649fc49f66e3f38857bfbec3f0b7", ObjectName: []byte("encoding/feature-1.txt")},
- {OID: "16ca0b267f82cd2f5ca1157dd162dae98745eab8", ObjectName: []byte("encoding/feature-2.txt")},
- {OID: "0fb47f093f769008049a0b0976ac3fa6d6125033", ObjectName: []byte("encoding/hotfix-1.txt")},
- {OID: "4ae6c5e14452a35d04156277ae63e8356eb17cae", ObjectName: []byte("encoding/hotfix-2.txt")},
- {OID: "570f8e1dfe8149c1d17002712310d43dfeb43159", ObjectName: []byte("encoding/russian.rb")},
- {OID: "7a17968582c21c9153ec24c6a9d5f33592ad9103", ObjectName: []byte("encoding/test.txt")},
- {OID: "f3064a3aa9c14277483f690250072e987e2c8356", ObjectName: []byte("encoding/\343\203\206\343\202\271\343\203\210.txt")},
- {OID: "3a26c18b02e843b459732e7ade7ab9a154a1002b", ObjectName: []byte("encoding/\343\203\206\343\202\271\343\203\210.xls")},
- {OID: "60d7a906c2fd9e4509aeb1187b98d0ea7ce827c9", ObjectName: []byte("files/.DS_Store")},
- {OID: "c84b9e90e4bee2666f5cb3688690d9824d88f3ee", ObjectName: []byte("files/html/500.html")},
- {OID: "4a96572d570108366da2cf5aa8213f69b591a2a3", ObjectName: []byte("files/images/logo-black.png")},
- {OID: "bc2ef601a538d69ef99d5bdafa605e63f902e8e4", ObjectName: []byte("files/images/logo-white.png")},
- {OID: "4a393dbfe81113d35d9aedeb5c76f763190c1b2f", ObjectName: []byte("files/js/application.js")},
- {OID: "5f53439ca4b009096571d3c8bc3d09d30e7431b3", ObjectName: []byte("files/js/commit.js.coffee")},
- {OID: "3da5c4ddbaf17d37aea52c485d8bb85b07d77816", ObjectName: []byte("files/markdown/ruby-style-guide.md")},
- {OID: "e2fbafb389911ef68e4da2da7da917f6acb9e86a", ObjectName: []byte("files/ruby/popen.rb")},
- {OID: "d18fc8bf2cecbe21bbbd5da692eaf83e32c48638", ObjectName: []byte("files/ruby/regex.rb")},
- {OID: "6ee41e85cc9bf33c10b690df09ca735b22f3790f", ObjectName: []byte("files/ruby/version_info.rb")},
- {OID: "409f37c4f05865e4fb208c771485f211a22c4c2d", ObjectName: []byte("six")},
- },
},
{
- desc: "invalid revision",
- revision: "refs/heads/does-not-exist",
+ desc: "invalid revision",
+ setup: func(t *testing.T, repoPath string) (git.Revision, []RevisionResult) {
+ return "refs/heads/does-not-exist", nil
+ },
expectedErr: errors.New("ls-tree pipeline command: exit status 128, stderr: " +
"\"fatal: Not a valid object name refs/heads/does-not-exist\\n\""),
},
} {
t.Run(tc.desc, func(t *testing.T) {
- it := LsTree(ctx, repo, tc.revision, tc.options...)
+ repoProto, repoPath := gittest.CreateRepository(ctx, t, cfg, gittest.CreateRepositoryConfig{
+ SkipCreationViaService: true,
+ })
+ repo := localrepo.NewTestRepo(t, cfg, repoProto)
+
+ revision, expectedResults := tc.setup(t, repoPath)
+
+ it := LsTree(ctx, repo, revision.String(), tc.options...)
var results []RevisionResult
for it.Next() {
@@ -149,7 +182,7 @@ func TestLsTree(t *testing.T) {
}
require.Equal(t, tc.expectedErr, err)
- require.Equal(t, tc.expectedResults, results)
+ require.Equal(t, expectedResults, results)
})
}
}