Files
seaweedfs/weed/worker/tasks/vacuum/config_persistence_test.go
T

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)
}
})
}
}