package pipeline import ( "context" "net/http" "net/http/httptest" "testing" "evobgp/internal/store" ) func TestCollectCDNPrefixRows_StaleOnFetchError(t *testing.T) { t.Setenv("EVOBGP_STALE_ON_UPSTREAM_ERROR", "1") t.Setenv("EVOBGP_CDN_ALLOW_PRIVATE", "1") srv := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { http.Error(w, "upstream down", http.StatusServiceUnavailable) })) defer srv.Close() st := store.NewMemory() st.SeedDemo() tenant, _, _, _, _ := st.DemoIDs() mod, err := st.CreateModule(tenant, &store.Module{Type: "CDN_CIDRS", Name: "cdn", Enabled: true}) if err != nil { t.Fatal(err) } if _, err := st.CreateCDNSource(tenant, mod.ID, &store.CDNSource{ ID: "s1", URL: srv.URL, SourceKind: "plain", }); err != nil { t.Fatal(err) } prior := []store.PrefixRow{ {Prefix: "203.0.113.0/24", Source: "cdn:s1"}, } rows, err := collectCDNPrefixRows(context.Background(), st, srv.Client(), tenant, mod, []*store.CDNSource{{ID: "s1", URL: srv.URL, SourceKind: "plain"}}, prior) if err != nil { t.Fatalf("expected stale fallback, got err: %v", err) } if len(rows) != 1 || rows[0].Prefix != "203.0.113.0/24" { t.Fatalf("unexpected rows: %+v", rows) } } func TestCollectCDNPrefixRows_FailFastWhenNoStale(t *testing.T) { t.Setenv("EVOBGP_STALE_ON_UPSTREAM_ERROR", "0") t.Setenv("EVOBGP_CDN_ALLOW_PRIVATE", "1") srv := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { http.Error(w, "upstream down", http.StatusServiceUnavailable) })) defer srv.Close() st := store.NewMemory() st.SeedDemo() tenant, _, _, _, _ := st.DemoIDs() mod, err := st.CreateModule(tenant, &store.Module{Type: "CDN_CIDRS", Name: "cdn", Enabled: true}) if err != nil { t.Fatal(err) } if _, err := st.CreateCDNSource(tenant, mod.ID, &store.CDNSource{ ID: "s1", URL: srv.URL, SourceKind: "plain", }); err != nil { t.Fatal(err) } _, err = collectCDNPrefixRows(context.Background(), st, srv.Client(), tenant, mod, []*store.CDNSource{{ID: "s1", URL: srv.URL, SourceKind: "plain"}}, nil) if err == nil { t.Fatal("expected error when stale disabled and no cache") } }