Public source validation / validate (push) Failing after 3m8s
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package alertdefaults
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/itworx/pulse/internal/alert"
|
|
"github.com/itworx/pulse/internal/database"
|
|
"github.com/itworx/pulse/internal/metriccatalog"
|
|
)
|
|
|
|
func TestPostgreSQLDefaultSeedIsIdempotent(t *testing.T) {
|
|
dsn := os.Getenv("PULSE_TEST_DATABASE_URL")
|
|
if dsn == "" {
|
|
t.Skip("PULSE_TEST_DATABASE_URL is not set")
|
|
}
|
|
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
|
defer cancel()
|
|
pool, err := database.NewPool(ctx, database.Config{URL: dsn, MaxConns: 6, MinConns: 1})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer pool.Close()
|
|
if err := database.Migrate(ctx, pool); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
registry, err := metriccatalog.DefaultRegistry()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
repository := alert.Repository{Pool: pool, Registry: registry}
|
|
first, err := Seed(ctx, repository, registry, "system-defaults")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, err := Seed(ctx, repository, registry, "system-defaults")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if second.Added != 0 || second.Existing != first.Added+first.Existing {
|
|
t.Fatalf("seed reports first=%+v second=%+v", first, second)
|
|
}
|
|
rules, err := Load(registry)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, document := range rules {
|
|
loaded, err := repository.Get(ctx, document.ID)
|
|
if err != nil || loaded.ID != document.ID {
|
|
t.Fatalf("default %s was not readable after restart-safe seed: rule=%+v err=%v", document.ID, loaded, err)
|
|
}
|
|
}
|
|
}
|