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/create_fork_test.go')
-rw-r--r--internal/gitaly/service/repository/create_fork_test.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/internal/gitaly/service/repository/create_fork_test.go b/internal/gitaly/service/repository/create_fork_test.go
index 502a31f34..c699e40c0 100644
--- a/internal/gitaly/service/repository/create_fork_test.go
+++ b/internal/gitaly/service/repository/create_fork_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"github.com/stretchr/testify/require"
+ "gitlab.com/gitlab-org/gitaly/v16/internal/git"
"gitlab.com/gitlab-org/gitaly/v16/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config"
"gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage"
@@ -88,6 +89,97 @@ func TestCreateFork_successful(t *testing.T) {
}
}
+func TestCreateFork_revision(t *testing.T) {
+ t.Parallel()
+
+ mainRef := git.ReferenceName("refs/heads/main")
+ wipRef := git.ReferenceName("refs/heads/wip")
+ unknownRef := []byte("refs/heads/unknown")
+ invalidRef := []byte("v1.2.3")
+ ambiguousRef := git.ReferenceName("refs/heads/v1.0.0")
+
+ cfg, client := setupRepositoryService(t)
+
+ ctx := testhelper.Context(t)
+ ctx = testhelper.MergeOutgoingMetadata(ctx, testcfg.GitalyServersMetadataFromCfg(t, cfg))
+
+ for _, tt := range []struct {
+ name string
+ revision []byte
+ expectedRefs []git.ReferenceName
+ expectedErr bool
+ }{
+ {
+ name: "all branches",
+ revision: nil,
+ expectedRefs: []git.ReferenceName{mainRef, wipRef},
+ },
+ {
+ name: "single revision with success",
+ revision: []byte(wipRef),
+ expectedRefs: []git.ReferenceName{wipRef},
+ },
+ {
+ name: "single unknown revision with failure",
+ revision: unknownRef,
+ expectedErr: true,
+ },
+ {
+ name: "single invalid revision with failure",
+ revision: invalidRef,
+ expectedErr: true,
+ },
+ {
+ name: "ambiguous reference",
+ revision: []byte(ambiguousRef),
+ expectedErr: true,
+ },
+ } {
+ t.Run(tt.name, func(t *testing.T) {
+
+ repo, repoPath := gittest.CreateRepository(t, ctx, cfg)
+
+ commitID := gittest.WriteCommit(t, cfg, repoPath)
+ for _, ref := range []git.ReferenceName{
+ mainRef,
+ wipRef,
+ "refs/tags/v1.0.0",
+ } {
+ gittest.WriteRef(t, cfg, repoPath, ref, commitID)
+ }
+
+ forkedRepo := &gitalypb.Repository{
+ RelativePath: gittest.NewRepositoryName(t),
+ StorageName: repo.GetStorageName(),
+ }
+
+ _, err := client.CreateFork(ctx, &gitalypb.CreateForkRequest{
+ Repository: forkedRepo,
+ SourceRepository: repo,
+ Revision: tt.revision,
+ })
+
+ if tt.expectedErr {
+ require.Error(t, err)
+ } else {
+ require.NoError(t, err)
+
+ replicaPath := gittest.GetReplicaPath(t, ctx, cfg, forkedRepo)
+ forkedRepoPath := filepath.Join(cfg.Storages[0].Path, replicaPath)
+
+ actualRefs := strings.Split(strings.Trim(string(gittest.Exec(t, cfg, "-C", forkedRepoPath, "show-ref")), "\n"), "\n")
+ var expectedRefs []string
+
+ for _, ref := range tt.expectedRefs {
+ expectedRefs = append(expectedRefs, fmt.Sprintf("%s %s", commitID.String(), ref))
+ }
+
+ require.Equal(t, expectedRefs, actualRefs)
+ }
+ })
+ }
+}
+
func TestCreateFork_refs(t *testing.T) {
t.Parallel()
ctx := testhelper.Context(t)