2019-10-01 21:40:17 +08:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2019-10-01 21:40:17 +08:00
2022-09-02 15:18:23 -04:00
package integration
2019-10-01 21:40:17 +08:00
import (
2020-12-02 19:36:06 +01:00
"context"
2019-10-01 21:40:17 +08:00
"testing"
2021-12-10 09:27:50 +08:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-16 16:53:21 +08:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 17:49:20 +08:00
user_model "code.gitea.io/gitea/models/user"
2019-10-01 21:40:17 +08:00
"code.gitea.io/gitea/modules/git"
2021-11-16 23:25:33 +08:00
"code.gitea.io/gitea/modules/migration"
2019-12-15 01:30:01 +08:00
"code.gitea.io/gitea/modules/repository"
2021-06-14 19:20:43 +02:00
mirror_service "code.gitea.io/gitea/services/mirror"
2019-10-01 21:40:17 +08:00
release_service "code.gitea.io/gitea/services/release"
2022-09-02 15:18:23 -04:00
"code.gitea.io/gitea/tests"
2019-10-01 21:40:17 +08:00
"github.com/stretchr/testify/assert"
)
2021-06-14 19:20:43 +02:00
func TestMirrorPull ( t * testing . T ) {
2022-09-02 15:18:23 -04:00
defer tests . PrepareTestEnv ( t ) ( )
2019-10-01 21:40:17 +08:00
2022-08-16 10:22:25 +08:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } )
2021-12-10 09:27:50 +08:00
repoPath := repo_model . RepoPath ( user . Name , repo . Name )
2019-10-01 21:40:17 +08:00
2020-09-11 00:29:19 +02:00
opts := migration . MigrateOptions {
2019-10-13 21:23:14 +08:00
RepoName : "test_mirror" ,
Description : "Test mirror" ,
Private : false ,
Mirror : true ,
CloneAddr : repoPath ,
Wiki : true ,
Releases : false ,
2019-10-01 21:40:17 +08:00
}
2019-10-13 21:23:14 +08:00
2022-08-25 10:31:57 +08:00
mirrorRepo , err := repository . CreateRepository ( user , user , repository . CreateRepoOptions {
2019-10-13 21:23:14 +08:00
Name : opts . RepoName ,
Description : opts . Description ,
IsPrivate : opts . Private ,
IsMirror : opts . Mirror ,
2021-12-10 09:27:50 +08:00
Status : repo_model . RepositoryBeingMigrated ,
2019-10-13 21:23:14 +08:00
} )
assert . NoError ( t , err )
2022-04-01 16:14:36 +02:00
assert . True ( t , mirrorRepo . IsMirror , "expected pull-mirror repo to be marked as a mirror immediately after its creation" )
2019-10-13 21:23:14 +08:00
2021-04-09 00:25:57 +02:00
ctx := context . Background ( )
2021-11-20 17:34:05 +08:00
mirror , err := repository . MigrateRepositoryGitData ( ctx , user , mirrorRepo , opts , nil )
2019-10-01 21:40:17 +08:00
assert . NoError ( t , err )
2022-03-29 21:13:41 +02:00
gitRepo , err := git . OpenRepository ( git . DefaultContext , repoPath )
2019-10-01 21:40:17 +08:00
assert . NoError ( t , err )
2019-11-13 07:01:19 +00:00
defer gitRepo . Close ( )
2019-10-01 21:40:17 +08:00
2022-08-25 10:31:57 +08:00
findOptions := repo_model . FindReleasesOptions { IncludeDrafts : true , IncludeTags : true }
initCount , err := repo_model . GetReleaseCountByRepoID ( mirror . ID , findOptions )
2019-10-01 21:40:17 +08:00
assert . NoError ( t , err )
2022-08-25 10:31:57 +08:00
assert . NoError ( t , release_service . CreateRelease ( gitRepo , & repo_model . Release {
2019-10-01 21:40:17 +08:00
RepoID : repo . ID ,
2021-06-25 16:28:55 +02:00
Repo : repo ,
2019-10-01 21:40:17 +08:00
PublisherID : user . ID ,
2021-06-25 16:28:55 +02:00
Publisher : user ,
2019-10-01 21:40:17 +08:00
TagName : "v0.2" ,
Target : "master" ,
Title : "v0.2 is released" ,
Note : "v0.2 is released" ,
IsDraft : false ,
IsPrerelease : false ,
IsTag : true ,
2021-03-01 03:57:45 +08:00
} , nil , "" ) )
2019-10-01 21:40:17 +08:00
2022-05-20 22:08:52 +08:00
_ , err = repo_model . GetMirrorByRepoID ( ctx , mirror . ID )
2019-10-01 21:40:17 +08:00
assert . NoError ( t , err )
2021-06-14 19:20:43 +02:00
ok := mirror_service . SyncPullMirror ( ctx , mirror . ID )
2019-10-01 21:40:17 +08:00
assert . True ( t , ok )
2022-08-25 10:31:57 +08:00
count , err := repo_model . GetReleaseCountByRepoID ( mirror . ID , findOptions )
2019-11-14 20:54:23 -08:00
assert . NoError ( t , err )
2019-10-01 21:40:17 +08:00
assert . EqualValues ( t , initCount + 1 , count )
2022-08-25 10:31:57 +08:00
release , err := repo_model . GetRelease ( repo . ID , "v0.2" )
2019-10-01 21:40:17 +08:00
assert . NoError ( t , err )
2022-01-19 23:26:57 +00:00
assert . NoError ( t , release_service . DeleteReleaseByID ( ctx , release . ID , user , true ) )
2019-10-01 21:40:17 +08:00
2021-06-14 19:20:43 +02:00
ok = mirror_service . SyncPullMirror ( ctx , mirror . ID )
2019-10-01 21:40:17 +08:00
assert . True ( t , ok )
2022-08-25 10:31:57 +08:00
count , err = repo_model . GetReleaseCountByRepoID ( mirror . ID , findOptions )
2019-11-14 20:54:23 -08:00
assert . NoError ( t , err )
2019-10-01 21:40:17 +08:00
assert . EqualValues ( t , initCount , count )
}