Public source validation / validate (push) Failing after 3m8s
57 lines
1.8 KiB
Go
57 lines
1.8 KiB
Go
package onboarding
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/itworx/pulse/internal/alert"
|
|
"github.com/itworx/pulse/internal/alertdefaults"
|
|
"github.com/itworx/pulse/internal/dashboard"
|
|
"github.com/itworx/pulse/internal/database"
|
|
"github.com/itworx/pulse/internal/metriccatalog"
|
|
)
|
|
|
|
func TestPostgreSQLOnboardingIsResumableAndIdempotent(t *testing.T) {
|
|
dsn := os.Getenv("PULSE_TEST_DATABASE_URL")
|
|
if dsn == "" {
|
|
t.Skip("PULSE_TEST_DATABASE_URL is not set")
|
|
}
|
|
ctx := context.Background()
|
|
pool, err := database.NewPool(ctx, database.Config{URL: dsn})
|
|
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)
|
|
}
|
|
alerts := alert.Repository{Pool: pool, Registry: registry}
|
|
if _, err := alertdefaults.Seed(ctx, alerts, registry, "system-defaults"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
service := Service{State: StateStore{Pool: pool}, Pool: pool, Dashboards: dashboard.Repository{Pool: pool}, Alerts: alerts, AuthMode: "mock"}
|
|
first, err := service.Complete(ctx, Choice{Dashboard: "default", Rules: "default"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, err := service.Complete(ctx, Choice{Dashboard: "default", Rules: "default"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !first.State.Completed || !second.State.Completed || first.State.DashboardID == "" || first.State.DashboardID != second.State.DashboardID {
|
|
t.Fatalf("non-idempotent completion: first=%+v second=%+v", first.State, second.State)
|
|
}
|
|
var dashboards int
|
|
if err := pool.QueryRow(ctx, `SELECT count(*) FROM dashboards WHERE slug=$1 AND archived_at IS NULL`, DefaultSlug).Scan(&dashboards); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if dashboards != 1 {
|
|
t.Fatalf("default dashboard count=%d, want 1", dashboards)
|
|
}
|
|
}
|