package pipeline import ( "context" "errors" "testing" "evobgp/internal/store" ) type failingSnapshotUpdate struct{ store.Backend } func (f failingSnapshotUpdate) UpdateModulePrefixSnapshot(context.Context, string, string, store.ModuleSnapshotUpdate) error { return context.DeadlineExceeded } func TestMergeCDNSourceRefusesWriteWhenAtomicUpdateFails(t *testing.T) { m := store.NewMemory() m.SeedDemo() tenant, _, _, _, _ := m.DemoIDs() mod, err := m.CreateModule(tenant, &store.Module{Type: "CDN_CIDRS", Name: "cdn-lock-failure", Enabled: true}) if err != nil { t.Fatal(err) } err = mergeCDNSourceIntoModuleSnapshot(context.Background(), failingSnapshotUpdate{m}, tenant, mod, "source-a", []store.PrefixRow{{Prefix: "192.0.2.0/24", Source: "cdn:source-a"}}) if !errors.Is(err, context.DeadlineExceeded) { t.Fatalf("expected update failure, got %v", err) } if _, ok, err := m.GetModulePrefixSnapshot(context.Background(), tenant, mod.ID); err != nil || ok { t.Fatalf("snapshot written without lock: ok=%v err=%v", ok, err) } }