diff options
author | Pavlo Strokov <pstrokov@gitlab.com> | 2022-01-20 20:04:25 +0300 |
---|---|---|
committer | Pavlo Strokov <pstrokov@gitlab.com> | 2022-02-23 11:47:18 +0300 |
commit | bd4d523f0972c1bd46479ed8570b5e261cbdf0e4 (patch) | |
tree | dacb938c8bdf79b354a41487a6f2a488a73261ae | |
parent | a7ee0e1e10e0532852082e8788528888bb3923b3 (diff) |
repository: Extend test coverage for GarbageCollect RPC
Make sure NotFound code and specific message is returned
in case requested repository doesn't exist on the disk.
-rw-r--r-- | internal/gitaly/service/repository/gc.go | 5 | ||||
-rw-r--r-- | internal/gitaly/service/repository/gc_test.go | 37 |
2 files changed, 32 insertions, 10 deletions
diff --git a/internal/gitaly/service/repository/gc.go b/internal/gitaly/service/repository/gc.go index b92842d06..6e9d3533f 100644 --- a/internal/gitaly/service/repository/gc.go +++ b/internal/gitaly/service/repository/gc.go @@ -11,6 +11,7 @@ import ( "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" log "github.com/sirupsen/logrus" + gitalyerrors "gitlab.com/gitlab-org/gitaly/v14/internal/errors" "gitlab.com/gitlab-org/gitaly/v14/internal/git" "gitlab.com/gitlab-org/gitaly/v14/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v14/internal/git/housekeeping" @@ -27,6 +28,10 @@ func (s *server) GarbageCollect(ctx context.Context, in *gitalypb.GarbageCollect "WriteBitmaps": in.GetCreateBitmap(), }).Debug("GarbageCollect") + if in.GetRepository() == nil { + return nil, helper.ErrInvalidArgument(gitalyerrors.ErrEmptyRepository) + } + repo := s.localrepo(in.GetRepository()) if err := housekeeping.CleanupWorktrees(ctx, repo); err != nil { diff --git a/internal/gitaly/service/repository/gc_test.go b/internal/gitaly/service/repository/gc_test.go index d72be668b..d3c42e2c5 100644 --- a/internal/gitaly/service/repository/gc_test.go +++ b/internal/gitaly/service/repository/gc_test.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "testing" "time" @@ -18,6 +19,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testserver" "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) var ( @@ -356,23 +358,38 @@ func TestGarbageCollectFailure(t *testing.T) { t.Parallel() ctx := testhelper.Context(t) - _, repo, _, client := setupRepositoryService(ctx, t) + _, repo, repoPath, client := setupRepositoryService(ctx, t) + storagePath := strings.TrimSuffix(repoPath, "/"+repo.RelativePath) tests := []struct { repo *gitalypb.Repository - code codes.Code + err error }{ - {repo: nil, code: codes.InvalidArgument}, - {repo: &gitalypb.Repository{StorageName: "foo"}, code: codes.InvalidArgument}, - {repo: &gitalypb.Repository{RelativePath: "bar"}, code: codes.InvalidArgument}, - {repo: &gitalypb.Repository{StorageName: repo.GetStorageName(), RelativePath: "bar"}, code: codes.NotFound}, + { + repo: nil, + err: status.Error(codes.InvalidArgument, gitalyOrPraefect("empty Repository", "repo scoped: empty Repository")), + }, + { + repo: &gitalypb.Repository{StorageName: "foo"}, + err: status.Error(codes.InvalidArgument, gitalyOrPraefect(`GetStorageByName: no such storage: "foo"`, "repo scoped: invalid Repository")), + }, + { + repo: &gitalypb.Repository{StorageName: repo.StorageName, RelativePath: "bar"}, + err: status.Error( + codes.NotFound, + gitalyOrPraefect( + fmt.Sprintf(`GetRepoPath: not a git repository: "%s/bar"`, storagePath), + `mutator call: route repository mutator: get repository id: repository "default"/"bar" not found`, + ), + ), + }, } - for _, test := range tests { - t.Run(fmt.Sprintf("%v", test.repo), func(t *testing.T) { + for _, tc := range tests { + t.Run(fmt.Sprintf("%v", tc.repo), func(t *testing.T) { //nolint:staticcheck - _, err := client.GarbageCollect(ctx, &gitalypb.GarbageCollectRequest{Repository: test.repo}) - testhelper.RequireGrpcCode(t, err, test.code) + _, err := client.GarbageCollect(ctx, &gitalypb.GarbageCollectRequest{Repository: tc.repo}) + testhelper.RequireGrpcError(t, err, tc.err) }) } } |