mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-16 19:40:43 +02:00
76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
package vacuum
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/worker_pb"
|
|
)
|
|
|
|
type stubVacuumStore struct {
|
|
policy *worker_pb.TaskPolicy
|
|
err error
|
|
}
|
|
|
|
func (s *stubVacuumStore) LoadVacuumTaskPolicy() (*worker_pb.TaskPolicy, error) {
|
|
return s.policy, s.err
|
|
}
|
|
|
|
// wrongShapedStore is what the maintenance manager used to be handed: a non-nil value that
|
|
// does not satisfy the accessor the loader asserts on. It has to keep falling back to the
|
|
// defaults, but no longer silently: a fallback the operator cannot see reads as a disabled task
|
|
// that keeps running.
|
|
type wrongShapedStore struct{}
|
|
|
|
func (wrongShapedStore) SomethingElse() {}
|
|
|
|
func TestLoadConfigFromPersistenceUsesPersistedPolicy(t *testing.T) {
|
|
persisted := NewDefaultConfig()
|
|
persisted.Enabled = false
|
|
persisted.GarbageThreshold = 0.75
|
|
persisted.MaxConcurrent = 5
|
|
|
|
loaded := LoadConfigFromPersistence(&stubVacuumStore{policy: persisted.ToTaskPolicy()})
|
|
if loaded == nil {
|
|
t.Fatal("LoadConfigFromPersistence returned nil")
|
|
}
|
|
if loaded.Enabled {
|
|
t.Error("enabled = true, want the persisted false")
|
|
}
|
|
if loaded.GarbageThreshold != 0.75 {
|
|
t.Errorf("garbage threshold = %v, want the persisted 0.75", loaded.GarbageThreshold)
|
|
}
|
|
if loaded.MaxConcurrent != 5 {
|
|
t.Errorf("max concurrent = %d, want the persisted 5", loaded.MaxConcurrent)
|
|
}
|
|
}
|
|
|
|
func TestLoadConfigFromPersistenceFallsBackToDefaults(t *testing.T) {
|
|
defaults := NewDefaultConfig()
|
|
|
|
cases := map[string]interface{}{
|
|
"no store configured": nil,
|
|
"store without the value": &stubVacuumStore{},
|
|
"store that errors": &stubVacuumStore{err: errors.New("disk on fire")},
|
|
"store of the wrong type": wrongShapedStore{},
|
|
}
|
|
|
|
for name, store := range cases {
|
|
t.Run(name, func(t *testing.T) {
|
|
loaded := LoadConfigFromPersistence(store)
|
|
if loaded == nil {
|
|
t.Fatal("LoadConfigFromPersistence returned nil")
|
|
}
|
|
if !loaded.Enabled {
|
|
t.Error("enabled = false, want the compiled-in default true")
|
|
}
|
|
if loaded.GarbageThreshold != defaults.GarbageThreshold {
|
|
t.Errorf("garbage threshold = %v, want the default %v", loaded.GarbageThreshold, defaults.GarbageThreshold)
|
|
}
|
|
if loaded.ScanIntervalSeconds != defaults.ScanIntervalSeconds {
|
|
t.Errorf("scan interval = %d, want the default %d", loaded.ScanIntervalSeconds, defaults.ScanIntervalSeconds)
|
|
}
|
|
})
|
|
}
|
|
}
|