carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package registry
2
3import (
4 "errors"
5 "path/filepath"
6 "testing"
7)
8
9func TestClaimHoldCannotClearReplacementOrChangeProjection(t *testing.T) {
10 r, err := Open(filepath.Join(t.TempDir(), "registry.db"))
11 if err != nil {
12 t.Fatal(err)
13 }
14 defer r.Close()
15 owner := ClaimOwnership{"inc", 1, "owner", "row"}
16 rt := Route{Host: "shop.example", Status: "failed", ClaimOwnership: owner}
17 if err = r.Upsert(rt); err != nil {
18 t.Fatal(err)
19 }
20 if err = r.SetClaimHold(t.Context(), rt.Host, owner, "", "op1"); err != nil {
21 t.Fatal(err)
22 }
23 if err = r.SetClaimHold(t.Context(), rt.Host, owner, "op1", "op2"); err != nil {
24 t.Fatal(err)
25 }
26 if err = r.SetClaimHold(t.Context(), rt.Host, owner, "op1", ""); !errors.Is(err, ErrClaimOwnership) {
27 t.Fatalf("cleared replacement: %v", err)
28 }
29 if err = r.Upsert(rt); err != nil {
30 t.Fatal(err)
31 }
32 got, err := r.Get(rt.Host)
33 if err != nil || got.HoldOp != "op2" || got.Status != "failed" {
34 t.Fatalf("projection erased hold: %+v %v", got, err)
35 }
36 successor := owner
37 successor.ClaimStamp++
38 if err = r.SetClaimHold(t.Context(), rt.Host, successor, "op2", ""); !errors.Is(err, ErrClaimOwnership) {
39 t.Fatalf("wrong owner: %v", err)
40 }
41 if err = r.SetClaimHold(t.Context(), rt.Host, owner, "op2", ""); err != nil {
42 t.Fatal(err)
43 }
44 got, err = r.Get(rt.Host)
45 if err != nil || got.HoldOp != "" || got.Status != "failed" {
46 t.Fatalf("reset projection: %+v %v", got, err)
47 }
48}
49