From 23910c3393afc8932aad29c1a61acd9abaaa4e77 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Wed, 20 May 2026 14:53:50 +0700 Subject: [PATCH] docs(go): add godoc for pipeline and store exports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Уточнение godoc ExtractCIDRs; тесты repository (interface + optional integration). Co-authored-by: Cursor --- internal/pipeline/parse.go | 2 +- internal/repository/backend_test.go | 70 +++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 internal/repository/backend_test.go diff --git a/internal/pipeline/parse.go b/internal/pipeline/parse.go index 2f81c5f..3644e8d 100644 --- a/internal/pipeline/parse.go +++ b/internal/pipeline/parse.go @@ -39,7 +39,7 @@ func ParseCIDRLines(body string) []netip.Prefix { return out } -// ExtractCIDRs parses CIDRs from either plaintext lines or JSON payload. +// ExtractCIDRs parses CIDR prefixes from plaintext lines or a JSON payload (see sourceKind and prefixPath). // For sourceKind="json", prefixPath supports dotted traversal, with [] for arrays: // e.g. "prefixes[]", "data.items[].cidr". func ExtractCIDRs(body, sourceKind, prefixPath string) ([]netip.Prefix, error) { diff --git a/internal/repository/backend_test.go b/internal/repository/backend_test.go new file mode 100644 index 0000000..939bac5 --- /dev/null +++ b/internal/repository/backend_test.go @@ -0,0 +1,70 @@ +package repository + +import ( + "context" + "os" + "testing" + + "evobgp/internal/db" + "evobgp/internal/store" +) + +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 := "01TESTTENANT00000000000001" + 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) + } +}