Public source validation / validate (push) Failing after 3m8s
88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package alert
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/itworx/pulse/internal/database"
|
|
)
|
|
|
|
func TestPostgreSQLRuleRepositoryLifecycle(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(), 30*time.Second)
|
|
defer cancel()
|
|
pool, err := database.NewPool(ctx, database.Config{URL: dsn, MaxConns: 4, MinConns: 1})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer pool.Close()
|
|
if err := database.Migrate(ctx, pool); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := database.Migrate(ctx, pool); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
document, registry := validDocument(t)
|
|
repository := Repository{Pool: pool, Registry: registry}
|
|
created, version, err := repository.Create(ctx, "integration-editor", document, "integration create")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if created.Revision != 1 || created.CurrentVersion != 1 || version.VersionNumber != 1 {
|
|
t.Fatalf("unexpected create: %#v %#v", created, version)
|
|
}
|
|
|
|
if _, _, err := repository.Create(ctx, "integration-editor", document, "duplicate"); !errors.Is(err, ErrConflict) {
|
|
t.Fatalf("duplicate create error = %v, want conflict", err)
|
|
}
|
|
loaded, err := repository.Get(ctx, document.ID)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if loaded.Name != document.Name || loaded.Condition.Metric != document.Condition.Metric {
|
|
t.Fatalf("loaded rule mismatch: %#v", loaded)
|
|
}
|
|
|
|
same, err := repository.Update(ctx, document.ID, "integration-editor", 1, document, "idempotent")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if same.Revision != 1 || same.CurrentVersion != 1 {
|
|
t.Fatalf("idempotent update changed revision: %#v", same)
|
|
}
|
|
|
|
changed := document
|
|
changed.Name = "CPU aandacht gewijzigd"
|
|
updated, err := repository.Update(ctx, document.ID, "integration-editor", 1, changed, "change")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if updated.Revision != 2 || updated.CurrentVersion != 2 {
|
|
t.Fatalf("unexpected update: %#v", updated)
|
|
}
|
|
if _, err := repository.Update(ctx, document.ID, "integration-editor", 1, changed, "stale"); !errors.Is(err, ErrConflict) {
|
|
t.Fatalf("stale update error = %v, want conflict", err)
|
|
}
|
|
enabled, err := repository.SetEnabled(ctx, document.ID, 2, true)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !enabled.Enabled || enabled.Revision != 3 {
|
|
t.Fatalf("unexpected enable: %#v", enabled)
|
|
}
|
|
versions, err := repository.Versions(ctx, document.ID, 10)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(versions) != 2 || versions[0].VersionNumber != 2 || versions[1].VersionNumber != 1 {
|
|
t.Fatalf("unexpected immutable versions: %#v", versions)
|
|
}
|
|
}
|