kra-new/internal/integration/runtimeconfig/store_test.go

86 lines
2.4 KiB
Go

package runtimeconfig
import (
"encoding/json"
"testing"
"time"
)
func TestStoreSetDeleteAndSubscribe(t *testing.T) {
store := NewStore()
updates := make(chan Config, 2)
stop := store.Subscribe("mq", "rabbitmq", func(config Config) { updates <- config })
defer stop()
store.Set(Config{Kind: "MQ", Provider: "RabbitMQ", Enabled: true, Values: json.RawMessage(`{"host":"localhost"}`)})
loaded, ok := store.Get("mq", "rabbitmq")
if !ok || !loaded.Enabled || string(loaded.Values) != `{"host":"localhost"}` {
t.Fatalf("loaded config = %#v, ok=%v", loaded, ok)
}
if update := <-updates; !update.Enabled {
t.Fatalf("set update = %#v", update)
}
store.Delete("mq", "rabbitmq")
if _, ok = store.Get("mq", "rabbitmq"); ok {
t.Fatal("deleted config remained in store")
}
if update := <-updates; update.Enabled {
t.Fatalf("delete update = %#v", update)
}
}
func TestStoreReplaceSkipsUnchangedValues(t *testing.T) {
store := NewStore()
updates := make(chan Config, 2)
stop := store.Subscribe("mq", "rabbitmq", func(config Config) { updates <- config })
defer stop()
config := Config{Kind: "mq", Provider: "rabbitmq", Enabled: true, Values: json.RawMessage(`{"host":"localhost"}`)}
store.Set(config)
select {
case <-updates:
case <-time.After(time.Second):
t.Fatal("initial set notification was not delivered")
}
store.Replace([]Config{config})
select {
case update := <-updates:
t.Fatalf("unchanged replace emitted notification: %#v", update)
case <-time.After(20 * time.Millisecond):
}
changed := config
changed.Values = json.RawMessage(`{"host":"other"}`)
store.Replace([]Config{changed})
select {
case update := <-updates:
if string(update.Values) != string(changed.Values) {
t.Fatalf("changed replace = %#v", update)
}
case <-time.After(time.Second):
t.Fatal("changed replace notification was not delivered")
}
}
func TestStoreSetSkipsUnchangedValues(t *testing.T) {
var store Store
updates := make(chan Config, 1)
stop := store.Subscribe("mq", "rabbitmq", func(config Config) { updates <- config })
defer stop()
config := Config{Kind: "mq", Provider: "rabbitmq", Enabled: true, Values: json.RawMessage(`{"host":"localhost"}`)}
store.Set(config)
select {
case <-updates:
case <-time.After(time.Second):
t.Fatal("initial set notification was not delivered")
}
store.Set(config)
select {
case update := <-updates:
t.Fatalf("unchanged set emitted notification: %#v", update)
case <-time.After(20 * time.Millisecond):
}
}