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:
authorjohn.mcdonnell <jmcdonnell@gitlab.com>2021-09-24 04:05:10 +0300
committerjohn.mcdonnell <jmcdonnell@gitlab.com>2021-09-24 05:41:22 +0300
commit35cec56a461e0eff8b749473a4a6705d72cd90d2 (patch)
tree933e9e1780db665a28f075fc6cde29c64c83e819
parent80b9699ea44b716e74edf32130a6a3966cb59cae (diff)
Add tests to cover possible conflicts between branch/tag create/delete“jmd-add-tests-branch-vs-tags-issues”
-rw-r--r--internal/gitaly/service/operations/branches_test.go102
-rw-r--r--internal/gitaly/service/operations/tags_test.go105
2 files changed, 207 insertions, 0 deletions
diff --git a/internal/gitaly/service/operations/branches_test.go b/internal/gitaly/service/operations/branches_test.go
index 2bb6c47b5..891deeacb 100644
--- a/internal/gitaly/service/operations/branches_test.go
+++ b/internal/gitaly/service/operations/branches_test.go
@@ -115,6 +115,57 @@ func TestSuccessfulCreateBranchRequest(t *testing.T) {
}
}
+func TestSuccessfulUserCreateBranchWithExistingTagOfSameName(t *testing.T) {
+ t.Parallel()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
+
+ preExistingTagName := "foobarTag"
+ gittest.Exec(t, cfg, "-C", repoPath, "tag", "-f", preExistingTagName)
+
+ testCases := []struct {
+ desc string
+ branchName string
+ }{
+ {
+ desc: "branch matches existing tag name",
+ branchName: preExistingTagName,
+ },
+ {
+ // This should create a branch under refs/heads/refs/tags/{something}
+ desc: "branch matches existing tag ref prefix",
+ branchName: "refs/tags/" + preExistingTagName,
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.desc, func(t *testing.T) {
+ refs := gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.NotContains(t, string(refs), "refs/heads/"+testCase.branchName)
+ require.Contains(t, string(refs), "refs/tags/"+preExistingTagName)
+
+ request := &gitalypb.UserCreateBranchRequest{
+ Repository: repoProto,
+ BranchName: []byte(testCase.branchName),
+ StartPoint: []byte("c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd"),
+ User: gittest.TestUser,
+ }
+
+ response, err := client.UserCreateBranch(ctx, request)
+ require.NoError(t, err)
+ require.Equal(t, testCase.branchName, string(response.Branch.Name))
+ require.Empty(t, response.PreReceiveError)
+
+ refs = gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.Contains(t, string(refs), "refs/heads/"+testCase.branchName)
+ require.Contains(t, string(refs), "refs/tags/"+preExistingTagName)
+ })
+ }
+}
+
func TestUserCreateBranchWithTransaction(t *testing.T) {
t.Parallel()
@@ -444,6 +495,57 @@ func TestSuccessfulUserDeleteBranchRequest(t *testing.T) {
}
}
+func TestSuccessfulDeleteBranchWithoutImpactingTagOfSameName(t *testing.T) {
+ t.Parallel()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
+
+ preExistingTagName := "foobarTag"
+ gittest.Exec(t, cfg, "-C", repoPath, "tag", "-f", preExistingTagName)
+
+ testCases := []struct {
+ desc string
+ branchName string
+ }{
+ {
+ desc: "branch matches existing tag name",
+ branchName: preExistingTagName,
+ },
+ {
+ // This should create a branch under refs/heads/refs/tags/{something}
+ desc: "branch matches existing tag ref prefix",
+ branchName: "refs/tags/" + preExistingTagName,
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.desc, func(t *testing.T) {
+ gittest.Exec(t, cfg, "-C", repoPath, "branch", "-f", testCase.branchName)
+
+ refs := gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.Contains(t, string(refs), "refs/heads/"+testCase.branchName)
+ require.Contains(t, string(refs), "refs/tags/"+preExistingTagName)
+
+ request := &gitalypb.UserDeleteBranchRequest{
+ Repository: repoProto,
+ BranchName: []byte(testCase.branchName),
+ User: gittest.TestUser,
+ }
+
+ response, err := client.UserDeleteBranch(ctx, request)
+ require.NoError(t, err)
+ require.Empty(t, response.PreReceiveError)
+
+ refs = gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.NotContains(t, string(refs), "refs/heads/"+testCase.branchName)
+ require.Contains(t, string(refs), "refs/tags/"+preExistingTagName)
+ })
+ }
+}
+
func TestSuccessfulGitHooksForUserDeleteBranchRequest(t *testing.T) {
t.Parallel()
ctx, cancel := testhelper.Context()
diff --git a/internal/gitaly/service/operations/tags_test.go b/internal/gitaly/service/operations/tags_test.go
index 0a51b392a..b9af65120 100644
--- a/internal/gitaly/service/operations/tags_test.go
+++ b/internal/gitaly/service/operations/tags_test.go
@@ -54,6 +54,60 @@ func TestSuccessfulUserDeleteTagRequest(t *testing.T) {
require.NotContains(t, string(tags), tagNameInput, "tag name still exists in tags list")
}
+func TestSuccessfulUserCreateTagWithExistingBranchOfSameName(t *testing.T) {
+ t.Parallel()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
+
+ preExistingBranchName := "foobarBranch"
+ gittest.Exec(t, cfg, "-C", repoPath, "branch", "-f", preExistingBranchName)
+
+ testCases := []struct {
+ desc string
+ tagName string
+ }{
+ {
+ desc: "branch matches existing tag name",
+ tagName: preExistingBranchName,
+ },
+ {
+ // This should create a tag under refs/tags/refs/heads/{something}
+ desc: "branch matches existing tag ref prefix",
+ tagName: "refs/heads/" + preExistingBranchName,
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.desc, func(t *testing.T) {
+ refs := gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.NotContains(t, string(refs), "refs/tags/"+testCase.tagName)
+ require.Contains(t, string(refs), "refs/heads/"+preExistingBranchName)
+
+ tags := gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs/tags/"+testCase.tagName)
+ require.NotContains(t, string(tags), "refs/tags/"+testCase.tagName)
+
+ request := &gitalypb.UserCreateTagRequest{
+ Repository: repoProto,
+ TagName: []byte(testCase.tagName),
+ TargetRevision: []byte("master"),
+ User: gittest.TestUser,
+ }
+
+ response, err := client.UserCreateTag(ctx, request)
+ require.NoError(t, err)
+ require.Equal(t, testCase.tagName, string(response.Tag.Name))
+ require.Empty(t, response.PreReceiveError)
+
+ refs = gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.Contains(t, string(refs), "refs/tags/"+testCase.tagName)
+ require.Contains(t, string(refs), "refs/heads/"+preExistingBranchName)
+ })
+ }
+}
+
func TestSuccessfulGitHooksForUserDeleteTagRequest(t *testing.T) {
t.Parallel()
ctx, cancel := testhelper.Context()
@@ -882,6 +936,57 @@ func TestUserCreateTagStableTagIDs(t *testing.T) {
}, response.Tag)
}
+func TestSuccessfulDeleteTagWithoutImpactingBranchOfSameName(t *testing.T) {
+ t.Parallel()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
+
+ preExistingBranchName := "foobarBranch"
+ gittest.Exec(t, cfg, "-C", repoPath, "branch", "-f", preExistingBranchName)
+
+ testCases := []struct {
+ desc string
+ tagName string
+ }{
+ {
+ desc: "tag matches existing branch name",
+ tagName: preExistingBranchName,
+ },
+ {
+ // This should create a branch under refs/heads/refs/tags/{something}
+ desc: "tag matches existing branch ref prefix",
+ tagName: "refs/tags/" + preExistingBranchName,
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.desc, func(t *testing.T) {
+ gittest.Exec(t, cfg, "-C", repoPath, "tag", "-f", testCase.tagName)
+
+ refs := gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.Contains(t, string(refs), "refs/tags/"+testCase.tagName)
+ require.Contains(t, string(refs), "refs/heads/"+preExistingBranchName)
+
+ request := &gitalypb.UserDeleteTagRequest{
+ Repository: repoProto,
+ TagName: []byte(testCase.tagName),
+ User: gittest.TestUser,
+ }
+
+ response, err := client.UserDeleteTag(ctx, request)
+ require.NoError(t, err)
+ require.Empty(t, response.PreReceiveError)
+
+ refs = gittest.Exec(t, cfg, "-C", repoPath, "for-each-ref", "--", "refs")
+ require.NotContains(t, string(refs), "refs/tags/"+testCase.tagName)
+ require.Contains(t, string(refs), "refs/heads/"+preExistingBranchName)
+ })
+ }
+}
+
func TestUserDeleteTagSuccessfulDeletionOfPrefixedTag(t *testing.T) {
t.Parallel()