code.gitea.io/gitea@v1.22.3/tests/integration/mirror_pull_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "context" 8 "testing" 9 10 "code.gitea.io/gitea/models/db" 11 repo_model "code.gitea.io/gitea/models/repo" 12 "code.gitea.io/gitea/models/unittest" 13 user_model "code.gitea.io/gitea/models/user" 14 "code.gitea.io/gitea/modules/git" 15 "code.gitea.io/gitea/modules/gitrepo" 16 "code.gitea.io/gitea/modules/migration" 17 mirror_service "code.gitea.io/gitea/services/mirror" 18 release_service "code.gitea.io/gitea/services/release" 19 repo_service "code.gitea.io/gitea/services/repository" 20 "code.gitea.io/gitea/tests" 21 22 "github.com/stretchr/testify/assert" 23 ) 24 25 func TestMirrorPull(t *testing.T) { 26 defer tests.PrepareTestEnv(t)() 27 28 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 29 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 30 repoPath := repo_model.RepoPath(user.Name, repo.Name) 31 32 opts := migration.MigrateOptions{ 33 RepoName: "test_mirror", 34 Description: "Test mirror", 35 Private: false, 36 Mirror: true, 37 CloneAddr: repoPath, 38 Wiki: true, 39 Releases: false, 40 } 41 42 mirrorRepo, err := repo_service.CreateRepositoryDirectly(db.DefaultContext, user, user, repo_service.CreateRepoOptions{ 43 Name: opts.RepoName, 44 Description: opts.Description, 45 IsPrivate: opts.Private, 46 IsMirror: opts.Mirror, 47 Status: repo_model.RepositoryBeingMigrated, 48 }) 49 assert.NoError(t, err) 50 assert.True(t, mirrorRepo.IsMirror, "expected pull-mirror repo to be marked as a mirror immediately after its creation") 51 52 ctx := context.Background() 53 54 mirror, err := repo_service.MigrateRepositoryGitData(ctx, user, mirrorRepo, opts, nil) 55 assert.NoError(t, err) 56 57 gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo) 58 assert.NoError(t, err) 59 defer gitRepo.Close() 60 61 findOptions := repo_model.FindReleasesOptions{ 62 IncludeDrafts: true, 63 IncludeTags: true, 64 RepoID: mirror.ID, 65 } 66 initCount, err := db.Count[repo_model.Release](db.DefaultContext, findOptions) 67 assert.NoError(t, err) 68 69 assert.NoError(t, release_service.CreateRelease(gitRepo, &repo_model.Release{ 70 RepoID: repo.ID, 71 Repo: repo, 72 PublisherID: user.ID, 73 Publisher: user, 74 TagName: "v0.2", 75 Target: "master", 76 Title: "v0.2 is released", 77 Note: "v0.2 is released", 78 IsDraft: false, 79 IsPrerelease: false, 80 IsTag: true, 81 }, nil, "")) 82 83 _, err = repo_model.GetMirrorByRepoID(ctx, mirror.ID) 84 assert.NoError(t, err) 85 86 ok := mirror_service.SyncPullMirror(ctx, mirror.ID) 87 assert.True(t, ok) 88 89 count, err := db.Count[repo_model.Release](db.DefaultContext, findOptions) 90 assert.NoError(t, err) 91 assert.EqualValues(t, initCount+1, count) 92 93 release, err := repo_model.GetRelease(db.DefaultContext, repo.ID, "v0.2") 94 assert.NoError(t, err) 95 assert.NoError(t, release_service.DeleteReleaseByID(ctx, repo, release, user, true)) 96 97 ok = mirror_service.SyncPullMirror(ctx, mirror.ID) 98 assert.True(t, ok) 99 100 count, err = db.Count[repo_model.Release](db.DefaultContext, findOptions) 101 assert.NoError(t, err) 102 assert.EqualValues(t, initCount, count) 103 }