package registry import "testing" func TestSeedSourceColumn(t *testing.T) { reg := openTestRegistry(t) const col = `{"id":"sd_aaaaaaaaaaaaaaaaaaaaaaaaaa","kind":"replica","state":"ready"}` if err := reg.Upsert(Route{Host: "c.example.com", Kind: "instance", SeedSource: col}); err != nil { t.Fatal(err) } // A re-add that knows nothing of seeds keeps the column. if err := reg.Upsert(Route{Host: "c.example.com", Kind: "instance"}); err != nil { t.Fatal(err) } if got, _ := reg.Get("c.example.com"); got.SeedSource != col { t.Fatalf("after a seedless Upsert: %q", got.SeedSource) } placed := `{"id":"sd_aaaaaaaaaaaaaaaaaaaaaaaaaa","kind":"replica","state":"placed"}` if err := reg.SetSeedSource("c.example.com", placed); err != nil { t.Fatal(err) } if got, _ := reg.Get("c.example.com"); got.SeedSource != placed { t.Fatalf("after SetSeedSource: %q", got.SeedSource) } if err := reg.SetSeedSource("nope.example.com", placed); err == nil { t.Fatal("SetSeedSource on no row: want an error") } before, _ := reg.Fingerprint() _ = reg.SetSeedSource("c.example.com", col) if after, _ := reg.Fingerprint(); after != before { t.Fatal("the seed column moved the edge's fingerprint") } } // The snapshot digest sees the column when it is set and digests exactly as // before when it is not (the golden in TestFingerprintsUnchangedForUnheldRows // covers the unseeded half against the pre-column hash). func TestSeedSourceSnapshotFingerprint(t *testing.T) { reg := openTestRegistry(t) if err := reg.Upsert(Route{Host: "c.example.com", Kind: "instance", CreatedAt: 1700000000}); err != nil { t.Fatal(err) } unseeded, err := reg.SnapshotFingerprint() if err != nil { t.Fatal(err) } if err := reg.SetSeedSource("c.example.com", `{"id":"sd_aaaaaaaaaaaaaaaaaaaaaaaaaa","kind":"replica","state":"ready"}`); err != nil { t.Fatal(err) } seeded, _ := reg.SnapshotFingerprint() if seeded == unseeded { t.Fatal("SnapshotFingerprint did not move when seed_source was set") } if err := reg.SetSeedSource("c.example.com", ""); err != nil { t.Fatal(err) } if back, _ := reg.SnapshotFingerprint(); back != unseeded { t.Fatal("clearing seed_source did not restore the unseeded digest") } }