mirror of
https://github.com/go-gitea/gitea.git
synced 2026-05-25 16:08:46 +09:00
chore: clean up tests (#37715)
1. use MockVariableValue as much as possible 2. use wg.Go as much as possible instead of Add/Done 3. simplify global lock's DefaultLocker logic to make it easier to test 4. introduce a general approach for getting external service config in CI 5. remove unclear & unnecessary "t.Skip" 6. use modern generic syntax for remaining "DecodeJSON" calls 7. clarify test result for "list gitignore templates" and "list licenses"
This commit is contained in:
@@ -6,31 +6,39 @@ package globallock
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
)
|
||||
|
||||
var (
|
||||
defaultLocker Locker
|
||||
initOnce sync.Once
|
||||
initFunc = func() {
|
||||
switch setting.GlobalLock.ServiceType {
|
||||
case "redis":
|
||||
defaultLocker = NewRedisLocker(setting.GlobalLock.ServiceConnStr)
|
||||
case "memory":
|
||||
fallthrough
|
||||
default:
|
||||
defaultLocker = NewMemoryLocker()
|
||||
}
|
||||
} // define initFunc as a variable to make it possible to change it in tests
|
||||
defaultLocker atomic.Pointer[Locker]
|
||||
defaultMutex sync.Mutex
|
||||
)
|
||||
|
||||
func initDefaultLocker() Locker {
|
||||
switch setting.GlobalLock.ServiceType {
|
||||
case "redis":
|
||||
return NewRedisLocker(setting.GlobalLock.ServiceConnStr)
|
||||
default: // "memory"
|
||||
return NewMemoryLocker()
|
||||
}
|
||||
}
|
||||
|
||||
// DefaultLocker returns the default locker.
|
||||
func DefaultLocker() Locker {
|
||||
initOnce.Do(func() {
|
||||
initFunc()
|
||||
})
|
||||
return defaultLocker
|
||||
ptr := defaultLocker.Load()
|
||||
if ptr == nil {
|
||||
defaultMutex.Lock()
|
||||
ptr = defaultLocker.Load()
|
||||
if ptr == nil {
|
||||
ptr = new(initDefaultLocker())
|
||||
defaultLocker.Store(ptr)
|
||||
}
|
||||
defaultMutex.Unlock()
|
||||
ptr = defaultLocker.Load()
|
||||
}
|
||||
return *ptr
|
||||
}
|
||||
|
||||
// Lock tries to acquire a lock for the given key, it uses the default locker.
|
||||
|
||||
Reference in New Issue
Block a user