mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 06:21:11 +00:00 
			
		
		
		
	Backport #26271 by @lunny
This PR will fix #26264, caused by #23911.
The package configuration derive is totally wrong when storage type is
local in that PR.
This PR fixed the inherit logic when storage type is local with some
unit tests.
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
(cherry picked from commit 88f6f7579c)
		
	
			
		
			
				
	
	
		
			251 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2020 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package setting
 | |
| 
 | |
| import (
 | |
| 	"path/filepath"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func Test_getStorageMultipleName(t *testing.T) {
 | |
| 	iniStr := `
 | |
| [lfs]
 | |
| MINIO_BUCKET = gitea-lfs
 | |
| 
 | |
| [attachment]
 | |
| MINIO_BUCKET = gitea-attachment
 | |
| 
 | |
| [storage]
 | |
| STORAGE_TYPE = minio
 | |
| MINIO_BUCKET = gitea-storage
 | |
| `
 | |
| 	cfg, err := NewConfigProviderFromData(iniStr)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	assert.NoError(t, loadAttachmentFrom(cfg))
 | |
| 	assert.EqualValues(t, "gitea-attachment", Attachment.Storage.MinioConfig.Bucket)
 | |
| 
 | |
| 	assert.NoError(t, loadLFSFrom(cfg))
 | |
| 	assert.EqualValues(t, "gitea-lfs", LFS.Storage.MinioConfig.Bucket)
 | |
| 
 | |
| 	assert.NoError(t, loadAvatarsFrom(cfg))
 | |
| 	assert.EqualValues(t, "gitea-storage", Avatar.Storage.MinioConfig.Bucket)
 | |
| }
 | |
| 
 | |
| func Test_getStorageUseOtherNameAsType(t *testing.T) {
 | |
| 	iniStr := `
 | |
| [attachment]
 | |
| STORAGE_TYPE = lfs
 | |
| 
 | |
| [storage.lfs]
 | |
| STORAGE_TYPE = minio
 | |
| MINIO_BUCKET = gitea-storage
 | |
| `
 | |
| 	cfg, err := NewConfigProviderFromData(iniStr)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	assert.NoError(t, loadAttachmentFrom(cfg))
 | |
| 	assert.EqualValues(t, "gitea-storage", Attachment.Storage.MinioConfig.Bucket)
 | |
| 
 | |
| 	assert.NoError(t, loadLFSFrom(cfg))
 | |
| 	assert.EqualValues(t, "gitea-storage", LFS.Storage.MinioConfig.Bucket)
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageType(t *testing.T) {
 | |
| 	iniStr := `
 | |
| [storage]
 | |
| STORAGE_TYPE = minio
 | |
| `
 | |
| 	cfg, err := NewConfigProviderFromData(iniStr)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	assert.NoError(t, loadPackagesFrom(cfg))
 | |
| 	assert.EqualValues(t, "minio", Packages.Storage.Type)
 | |
| 	assert.EqualValues(t, "gitea", Packages.Storage.MinioConfig.Bucket)
 | |
| 	assert.EqualValues(t, "packages/", Packages.Storage.MinioConfig.BasePath)
 | |
| 
 | |
| 	assert.NoError(t, loadRepoArchiveFrom(cfg))
 | |
| 	assert.EqualValues(t, "minio", RepoArchive.Storage.Type)
 | |
| 	assert.EqualValues(t, "gitea", RepoArchive.Storage.MinioConfig.Bucket)
 | |
| 	assert.EqualValues(t, "repo-archive/", RepoArchive.Storage.MinioConfig.BasePath)
 | |
| 
 | |
| 	assert.NoError(t, loadActionsFrom(cfg))
 | |
| 	assert.EqualValues(t, "minio", Actions.LogStorage.Type)
 | |
| 	assert.EqualValues(t, "gitea", Actions.LogStorage.MinioConfig.Bucket)
 | |
| 	assert.EqualValues(t, "actions_log/", Actions.LogStorage.MinioConfig.BasePath)
 | |
| 
 | |
| 	assert.EqualValues(t, "minio", Actions.ArtifactStorage.Type)
 | |
| 	assert.EqualValues(t, "gitea", Actions.ArtifactStorage.MinioConfig.Bucket)
 | |
| 	assert.EqualValues(t, "actions_artifacts/", Actions.ArtifactStorage.MinioConfig.BasePath)
 | |
| 
 | |
| 	assert.NoError(t, loadAvatarsFrom(cfg))
 | |
| 	assert.EqualValues(t, "minio", Avatar.Storage.Type)
 | |
| 	assert.EqualValues(t, "gitea", Avatar.Storage.MinioConfig.Bucket)
 | |
| 	assert.EqualValues(t, "avatars/", Avatar.Storage.MinioConfig.BasePath)
 | |
| 
 | |
| 	assert.NoError(t, loadRepoAvatarFrom(cfg))
 | |
| 	assert.EqualValues(t, "minio", RepoAvatar.Storage.Type)
 | |
| 	assert.EqualValues(t, "gitea", RepoAvatar.Storage.MinioConfig.Bucket)
 | |
| 	assert.EqualValues(t, "repo-avatars/", RepoAvatar.Storage.MinioConfig.BasePath)
 | |
| }
 | |
| 
 | |
| type testLocalStoragePathCase struct {
 | |
| 	loader       func(rootCfg ConfigProvider) error
 | |
| 	storagePtr   **Storage
 | |
| 	expectedPath string
 | |
| }
 | |
| 
 | |
| func testLocalStoragePath(t *testing.T, appDataPath, iniStr string, cases []testLocalStoragePathCase) {
 | |
| 	cfg, err := NewConfigProviderFromData(iniStr)
 | |
| 	assert.NoError(t, err)
 | |
| 	AppDataPath = appDataPath
 | |
| 	for _, c := range cases {
 | |
| 		assert.NoError(t, c.loader(cfg))
 | |
| 		storage := *c.storagePtr
 | |
| 
 | |
| 		assert.EqualValues(t, "local", storage.Type)
 | |
| 		assert.True(t, filepath.IsAbs(storage.Path))
 | |
| 		assert.EqualValues(t, filepath.Clean(c.expectedPath), filepath.Clean(storage.Path))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocal(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage]
 | |
| STORAGE_TYPE = local
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/appdata/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/appdata/repo-archive"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/appdata/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/appdata/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/appdata/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalPath(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage]
 | |
| STORAGE_TYPE = local
 | |
| PATH = /data/gitea
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/data/gitea/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/data/gitea/repo-archive"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/data/gitea/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/data/gitea/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/data/gitea/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalRelativePath(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage]
 | |
| STORAGE_TYPE = local
 | |
| PATH = storages
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/appdata/storages/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/appdata/storages/repo-archive"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/appdata/storages/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/appdata/storages/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/appdata/storages/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalPathOverride(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage]
 | |
| STORAGE_TYPE = local
 | |
| PATH = /data/gitea
 | |
| 
 | |
| [repo-archive]
 | |
| PATH = /data/gitea/the-archives-dir
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/data/gitea/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/data/gitea/the-archives-dir"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/data/gitea/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/data/gitea/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/data/gitea/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalPathOverrideEmpty(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage]
 | |
| STORAGE_TYPE = local
 | |
| PATH = /data/gitea
 | |
| 
 | |
| [repo-archive]
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/data/gitea/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/data/gitea/repo-archive"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/data/gitea/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/data/gitea/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/data/gitea/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalRelativePathOverride(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage]
 | |
| STORAGE_TYPE = local
 | |
| PATH = /data/gitea
 | |
| 
 | |
| [repo-archive]
 | |
| PATH = the-archives-dir
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/data/gitea/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/data/gitea/the-archives-dir"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/data/gitea/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/data/gitea/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/data/gitea/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalPathOverride3(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage.repo-archive]
 | |
| STORAGE_TYPE = local
 | |
| PATH = /data/gitea/archives
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/appdata/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/data/gitea/archives"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/appdata/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/appdata/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/appdata/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalPathOverride4(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage.repo-archive]
 | |
| STORAGE_TYPE = local
 | |
| PATH = /data/gitea/archives
 | |
| 
 | |
| [repo-archive]
 | |
| PATH = /tmp/gitea/archives
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/appdata/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/tmp/gitea/archives"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/appdata/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/appdata/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/appdata/repo-avatars"},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func Test_getStorageInheritStorageTypeLocalPathOverride5(t *testing.T) {
 | |
| 	testLocalStoragePath(t, "/appdata", `
 | |
| [storage.repo-archive]
 | |
| STORAGE_TYPE = local
 | |
| PATH = /data/gitea/archives
 | |
| 
 | |
| [repo-archive]
 | |
| `, []testLocalStoragePathCase{
 | |
| 		{loadPackagesFrom, &Packages.Storage, "/appdata/packages"},
 | |
| 		{loadRepoArchiveFrom, &RepoArchive.Storage, "/data/gitea/archives"},
 | |
| 		{loadActionsFrom, &Actions.LogStorage, "/appdata/actions_log"},
 | |
| 		{loadAvatarsFrom, &Avatar.Storage, "/appdata/avatars"},
 | |
| 		{loadRepoAvatarFrom, &RepoAvatar.Storage, "/appdata/repo-avatars"},
 | |
| 	})
 | |
| }
 |