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:
Diffstat (limited to 'internal/gitaly/service/repository/search_files_test.go')
-rw-r--r--internal/gitaly/service/repository/search_files_test.go110
1 files changed, 110 insertions, 0 deletions
diff --git a/internal/gitaly/service/repository/search_files_test.go b/internal/gitaly/service/repository/search_files_test.go
index ff4f20f13..9aeab951a 100644
--- a/internal/gitaly/service/repository/search_files_test.go
+++ b/internal/gitaly/service/repository/search_files_test.go
@@ -337,6 +337,116 @@ func TestSearchFilesByNameSuccessful(t *testing.T) {
}
}
+func TestSearchFilesByNameUnusualFileNamesSuccessful(t *testing.T) {
+ t.Parallel()
+ ctx := testhelper.Context(t)
+
+ cfg, repo, repoPath, client := setupRepositoryService(ctx, t)
+
+ gittest.WriteCommit(t, cfg, repoPath,
+ gittest.WithBranch("unusual_file_names"),
+ gittest.WithMessage("commit message"),
+ gittest.WithTreeEntries(
+ gittest.TreeEntry{Path: "\"file with quote.txt", Mode: "100644", Content: "something"},
+ gittest.TreeEntry{Path: ".vimrc", Mode: "100644", Content: "something"},
+ gittest.TreeEntry{Path: "cuộc đời là những chuyến đi.md", Mode: "100644", Content: "something"},
+ gittest.TreeEntry{Path: "编码 'foo'.md", Mode: "100644", Content: "something"},
+ ),
+ )
+
+ testCases := []struct {
+ desc string
+ ref []byte
+ query string
+ filter string
+ testFiles [][]byte
+ }{
+ {
+ desc: "file with quote",
+ ref: []byte("unusual_file_names"),
+ query: "\"file with quote.txt",
+ testFiles: [][]byte{[]byte("\"file with quote.txt")},
+ },
+ {
+ desc: "dotfiles",
+ ref: []byte("unusual_file_names"),
+ query: ".vimrc",
+ testFiles: [][]byte{[]byte(".vimrc")},
+ },
+ {
+ desc: "latin-base language",
+ ref: []byte("unusual_file_names"),
+ query: "cuộc đời là những chuyến đi.md",
+ testFiles: [][]byte{[]byte("cuộc đời là những chuyến đi.md")},
+ },
+ {
+ desc: "non-latin language",
+ ref: []byte("unusual_file_names"),
+ query: "编码 'foo'.md",
+ testFiles: [][]byte{[]byte("编码 'foo'.md")},
+ },
+ {
+ desc: "filter file with quote",
+ ref: []byte("unusual_file_names"),
+ query: ".",
+ filter: "^\"file.*",
+ testFiles: [][]byte{[]byte("\"file with quote.txt")},
+ },
+ {
+ desc: "filter dotfiles",
+ ref: []byte("unusual_file_names"),
+ query: ".",
+ filter: "^\\..*",
+ testFiles: [][]byte{[]byte(".vimrc")},
+ },
+ {
+ desc: "filter latin-base language",
+ ref: []byte("unusual_file_names"),
+ query: ".",
+ filter: "cuộc đời .*\\.md",
+ testFiles: [][]byte{[]byte("cuộc đời là những chuyến đi.md")},
+ },
+ {
+ desc: "filter non-latin language",
+ ref: []byte("unusual_file_names"),
+ query: ".",
+ filter: "编码 'foo'\\.(md|txt|rdoc)",
+ testFiles: [][]byte{[]byte("编码 'foo'.md")},
+ },
+ {
+ desc: "wildcard filter",
+ ref: []byte("unusual_file_names"),
+ query: ".",
+ filter: ".*",
+ testFiles: [][]byte{
+ []byte("\"file with quote.txt"),
+ []byte(".vimrc"),
+ []byte("cuộc đời là những chuyến đi.md"),
+ []byte("编码 'foo'.md"),
+ },
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.desc, func(t *testing.T) {
+ stream, err := client.SearchFilesByName(ctx, &gitalypb.SearchFilesByNameRequest{
+ Repository: repo,
+ Ref: tc.ref,
+ Query: tc.query,
+ Filter: tc.filter,
+ })
+ require.NoError(t, err)
+
+ var files [][]byte
+ files, err = consumeFilenameByName(stream)
+ require.NoError(t, err)
+ require.Equal(t, len(tc.testFiles), len(files))
+ for i, f := range tc.testFiles {
+ require.Equal(t, f, files[i])
+ }
+ })
+ }
+}
+
func TestSearchFilesByNameFailure(t *testing.T) {
t.Parallel()
cfg := testcfg.Build(t)