2023-07-26 10:02:53 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2023-10-19 16:16:11 +03:00
package repository_test
2023-07-26 10:02:53 +03:00
import (
"bytes"
"context"
"testing"
"time"
"code.gitea.io/gitea/models/db"
git_model "code.gitea.io/gitea/models/git"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/lfs"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/storage"
2023-10-19 16:16:11 +03:00
repo_service "code.gitea.io/gitea/services/repository"
2023-07-26 10:02:53 +03:00
"github.com/stretchr/testify/assert"
)
func TestGarbageCollectLFSMetaObjects ( t * testing . T ) {
2023-10-19 16:16:11 +03:00
unittest . PrepareTestEnv ( t )
2023-07-26 10:02:53 +03:00
setting . LFS . StartServer = true
err := storage . Init ( )
assert . NoError ( t , err )
repo , err := repo_model . GetRepositoryByOwnerAndName ( db . DefaultContext , "user2" , "repo1" )
assert . NoError ( t , err )
// add lfs object
lfsContent := [ ] byte ( "gitea1" )
lfsOid := storeObjectInRepo ( t , repo . ID , & lfsContent )
// gc
2023-10-19 16:16:11 +03:00
err = repo_service . GarbageCollectLFSMetaObjects ( context . Background ( ) , repo_service . GarbageCollectLFSMetaObjectsOptions {
2023-07-26 10:02:53 +03:00
AutoFix : true ,
OlderThan : time . Now ( ) . Add ( 7 * 24 * time . Hour ) . Add ( 5 * 24 * time . Hour ) ,
UpdatedLessRecentlyThan : time . Now ( ) . Add ( 7 * 24 * time . Hour ) . Add ( 3 * 24 * time . Hour ) ,
} )
assert . NoError ( t , err )
// lfs meta has been deleted
_ , err = git_model . GetLFSMetaObjectByOid ( db . DefaultContext , repo . ID , lfsOid )
assert . ErrorIs ( t , err , git_model . ErrLFSObjectNotExist )
}
func storeObjectInRepo ( t * testing . T , repositoryID int64 , content * [ ] byte ) string {
pointer , err := lfs . GeneratePointer ( bytes . NewReader ( * content ) )
assert . NoError ( t , err )
_ , err = git_model . NewLFSMetaObject ( db . DefaultContext , & git_model . LFSMetaObject { Pointer : pointer , RepositoryID : repositoryID } )
assert . NoError ( t , err )
contentStore := lfs . NewContentStore ( )
exist , err := contentStore . Exists ( pointer )
assert . NoError ( t , err )
if ! exist {
err := contentStore . Put ( pointer , bytes . NewReader ( * content ) )
assert . NoError ( t , err )
}
return pointer . Oid
}