| index 24fd37f79..11121c7aa 100644 |
| --- a/internal/provision/lifetime_judge_test.go |
| +++ b/internal/provision/lifetime_judge_test.go |
| @@ -891,3 +891,37 @@ func TestInstanceRecordKeyOfIsTheRecordKeyShape(t *testing.T) { |
| } |
| } |
| } |
| + |
| +// TestListRecordReplicasJudged: the judged replica listing leaves out a |
| +// replica record its slot no longer vouches for; a nil judge is |
| +// ListRecordReplicas. |
| +func TestListRecordReplicasJudged(t *testing.T) { |
| + ctx := context.Background() |
| + s := release.NewDirStore(t.TempDir()) |
| + stale := Record{Schema: 1, Account: "bab", App: "shop", Host: judgeHost, Channel: "edge", Role: "replica"} |
| + legacy := Record{Schema: 1, Account: "bab", App: "shop", Host: "eu." + judgeHost, Channel: "edge", Role: "replica"} |
| + home := Record{Schema: 1, Account: "bab", App: "shop", Host: "home." + judgeHost, Channel: "edge"} |
| + for _, rec := range []Record{stale, legacy, home} { |
| + judgePut(t, s, RecordKey("bab", "shop", rec.Host), rec) |
| + } |
| + judgePut(t, s, HostIncarnationKey(judgeHost), judgeSlot(1, SlotRetired)) |
| + hosts := func(recs []Record) []string { |
| + var out []string |
| + for _, r := range recs { |
| + out = append(out, r.Host) |
| + } |
| + return out |
| + } |
| + judged, err := ListRecordReplicasJudged(ctx, s, NewLifetimeJudge(), "bab", "shop", 10) |
| + if err != nil || !reflect.DeepEqual(hosts(judged), []string{legacy.Host}) { |
| + t.Fatalf("judged replicas %v, %v; want only %s", hosts(judged), err, legacy.Host) |
| + } |
| + plain, err := ListRecordReplicas(ctx, s, "bab", "shop", 10) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + nilJudged, err := ListRecordReplicasJudged(ctx, s, nil, "bab", "shop", 10) |
| + if err != nil || !reflect.DeepEqual(nilJudged, plain) || !reflect.DeepEqual(hosts(plain), []string{legacy.Host, judgeHost}) { |
| + t.Fatalf("nil judge %v (%v), unjudged %v", hosts(nilJudged), err, hosts(plain)) |
| + } |
| +} |