5aa6a8288d
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"},
|
|
})
|
|
}
|