Очередь job получила lease и fencing, телеметрия и прогресс deploy сохраняются, ревизия пишет manifest входов. Обновление префиксов не переписывает неизменённый снимок, большие наборы идут через COPY, а устаревшая ревизия не попадает в deploy. Бандл ноды кэшируется, prune и постановка job больше не держат горячий путь. Co-authored-by: Cursor <[email protected]>
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"evobgp/internal/db"
|
|
"evobgp/internal/store"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func TestPostgresImplementsBackend(t *testing.T) {
|
|
var _ store.Backend = (*Postgres)(nil)
|
|
}
|
|
|
|
func TestPostgresPingIntegration(t *testing.T) {
|
|
dsn := os.Getenv("EVOBGP_TEST_DATABASE_URL")
|
|
if dsn == "" {
|
|
t.Skip("EVOBGP_TEST_DATABASE_URL not set")
|
|
}
|
|
ctx := context.Background()
|
|
pool, err := db.OpenPostgresPool(ctx, dsn)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer pool.Close()
|
|
pg, err := NewPostgres(ctx, pool, false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := pg.Ping(ctx); err != nil {
|
|
t.Fatalf("ping: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestPostgresModuleCRUDIntegration(t *testing.T) {
|
|
dsn := os.Getenv("EVOBGP_TEST_DATABASE_URL")
|
|
if dsn == "" {
|
|
t.Skip("EVOBGP_TEST_DATABASE_URL not set")
|
|
}
|
|
ctx := context.Background()
|
|
pool, err := db.OpenPostgresPool(ctx, dsn)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer pool.Close()
|
|
pg, err := NewPostgres(ctx, pool, false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tenant := uuid.NewString()
|
|
if _, err := pool.Exec(ctx, `INSERT INTO tenant (id, name, slug) VALUES ($1, $2, $3)`, tenant, "integration", "integration-"+tenant); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _, _ = pool.Exec(ctx, `DELETE FROM tenant WHERE id = $1`, tenant) }()
|
|
mod, err := pg.CreateModule(tenant, &store.Module{
|
|
Name: "audit-test",
|
|
Type: "IP_RANGES",
|
|
Enabled: true,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := pg.GetModule(tenant, mod.ID)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got.Name != "audit-test" {
|
|
t.Fatalf("name: got %q", got.Name)
|
|
}
|
|
if err := pg.SoftDeleteModule(tenant, mod.ID); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|