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:
authorKarthik Nayak <knayak@gitlab.com>2022-08-09 14:51:34 +0300
committerKarthik Nayak <knayak@gitlab.com>2022-08-09 19:51:07 +0300
commitc71c54c94caa8599c90dcfbffd3a6c2ba1d8acd4 (patch)
tree43bfe6b830ee985f313b86e4947f253517376898
parent9765a9733ed7f433d0241a589b45bbf712b1a0ab (diff)
usermergebranch: add validation for user.{email, name}4257-usermergebranch-does-not-verify-it-got-a-user-name-and-email
While 'UserMergeBranch' verifies that it got a user as part of the first request, it doesn't verify that the user actually has a name and email set. This leads to an Internal error at a later point when trying to create the merge commit because you cannot create merge commits with either of them being empty. This commit improves our validation to check these parameters and return an InvalidArgument error if unset. We add a new test 'TestUserMergeBranch_failure' to test the validation logic in 'UserMergeBranch'. Signed-off-by: Karthik Nayak <knayak@gitlab.com>
-rw-r--r--internal/gitaly/service/operations/merge.go8
-rw-r--r--internal/gitaly/service/operations/merge_test.go119
2 files changed, 127 insertions, 0 deletions
diff --git a/internal/gitaly/service/operations/merge.go b/internal/gitaly/service/operations/merge.go
index 8237ec034..d54b7b8d4 100644
--- a/internal/gitaly/service/operations/merge.go
+++ b/internal/gitaly/service/operations/merge.go
@@ -21,6 +21,14 @@ func validateMergeBranchRequest(request *gitalypb.UserMergeBranchRequest) error
return fmt.Errorf("empty user")
}
+ if len(request.User.Email) == 0 {
+ return fmt.Errorf("empty user email")
+ }
+
+ if len(request.User.Name) == 0 {
+ return fmt.Errorf("empty user name")
+ }
+
if len(request.Branch) == 0 {
return fmt.Errorf("empty branch name")
}
diff --git a/internal/gitaly/service/operations/merge_test.go b/internal/gitaly/service/operations/merge_test.go
index 41c5038c8..d16fab2b3 100644
--- a/internal/gitaly/service/operations/merge_test.go
+++ b/internal/gitaly/service/operations/merge_test.go
@@ -120,6 +120,125 @@ func TestUserMergeBranch_successful(t *testing.T) {
}
}
+func TestUserMergeBranch_failure(t *testing.T) {
+ t.Parallel()
+ ctx := testhelper.Context(t)
+
+ ctx, cfg, repoProto, repoPath, client := setupOperationsService(t, ctx)
+
+ _ = localrepo.NewTestRepo(t, cfg, repoProto)
+
+ gittest.Exec(t, cfg, "-C", repoPath, "branch", mergeBranchName, mergeBranchHeadBefore)
+
+ testCases := []struct {
+ user *gitalypb.User
+ repo *gitalypb.Repository
+ desc string
+ commitID string
+ errMessage string
+ branch []byte
+ message []byte
+ code codes.Code
+ }{
+ {
+ desc: "empty repository",
+ user: gittest.TestUser,
+ branch: []byte(mergeBranchName),
+ commitID: commitToMerge,
+ code: codes.InvalidArgument,
+ message: []byte("sample-message"),
+ errMessage: "",
+ },
+ {
+ desc: "empty user",
+ repo: repoProto,
+ branch: []byte(mergeBranchName),
+ commitID: commitToMerge,
+ code: codes.InvalidArgument,
+ message: []byte("sample-message"),
+ errMessage: "empty user",
+ },
+ {
+ desc: "empty user name",
+ user: &gitalypb.User{
+ GlId: gittest.TestUser.GlId,
+ GlUsername: gittest.TestUser.GlUsername,
+ Email: gittest.TestUser.Email,
+ Timezone: gittest.TestUser.Timezone,
+ },
+ repo: repoProto,
+ branch: []byte(mergeBranchName),
+ commitID: commitToMerge,
+ code: codes.InvalidArgument,
+ message: []byte("sample-message"),
+ errMessage: "empty user name",
+ },
+ {
+ desc: "empty user email",
+ user: &gitalypb.User{
+ GlId: gittest.TestUser.GlId,
+ Name: gittest.TestUser.Name,
+ GlUsername: gittest.TestUser.GlUsername,
+ Timezone: gittest.TestUser.Timezone,
+ },
+ repo: repoProto,
+ branch: []byte(mergeBranchName),
+ commitID: commitToMerge,
+ code: codes.InvalidArgument,
+ message: []byte("sample-message"),
+ errMessage: "empty user email",
+ },
+ {
+ desc: "empty commit",
+ repo: repoProto,
+ user: gittest.TestUser,
+ branch: []byte(mergeBranchName),
+ code: codes.InvalidArgument,
+ message: []byte("sample-message"),
+ errMessage: "empty commit ID",
+ },
+ {
+ desc: "empty branch",
+ repo: repoProto,
+ user: gittest.TestUser,
+ commitID: commitToMerge,
+ code: codes.InvalidArgument,
+ message: []byte("sample-message"),
+ errMessage: "empty branch name",
+ },
+ {
+ desc: "empty message",
+ repo: repoProto,
+ user: gittest.TestUser,
+ branch: []byte(mergeBranchName),
+ commitID: commitToMerge,
+ code: codes.InvalidArgument,
+ errMessage: "empty message",
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.desc, func(t *testing.T) {
+ request := &gitalypb.UserMergeBranchRequest{
+ Repository: testCase.repo,
+ User: testCase.user,
+ Branch: testCase.branch,
+ CommitId: testCase.commitID,
+ Message: testCase.message,
+ }
+
+ mergeBidi, err := client.UserMergeBranch(ctx)
+ require.NoError(t, err)
+
+ require.NoError(t, mergeBidi.Send(request), "apply merge")
+ _, err = mergeBidi.Recv()
+
+ testhelper.RequireGrpcCode(t, err, testCase.code)
+ require.ErrorContains(t, err, testCase.errMessage)
+ })
+ }
+}
+
func TestUserMergeBranch_quarantine(t *testing.T) {
t.Parallel()