carlos / platform Public

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

Plain git — no account needed to clone.

Download

Download this file

1package hostactors
2
3import "testing"
4
5func TestPlan13SignedHomeAgreement(t *testing.T) {
6 for _, home := range []string{"", "ie", "ca", "@home", "IE"} {
7 r := Roster{HomeRegion: "ie"}
8 if r.MatchesHome(home) != (home == "ie") {
9 t.Fatal(home)
10 }
11 }
12 if !(Roster{}).MatchesHome("") || (Roster{}).MatchesHome("ie") {
13 t.Fatal("legacy roster grants alias")
14 }
15}
16
17func TestPlan13HomeDesignationIsSignedAndOptional(t *testing.T) {
18 d, sg, o := fixture(t)
19 if _, err := d.Read(t.Context()); err != nil {
20 t.Fatal("legacy roster", err)
21 }
22 next := Clone(o.Roster)
23 next.HomeRegion = "ie"
24 updated, err := d.Replace(t.Context(), sg, o, next)
25 if err != nil {
26 t.Fatal(err)
27 }
28 read, err := d.Read(t.Context())
29 if err != nil || !read.Roster.MatchesHome("ie") {
30 t.Fatal(read, err)
31 }
32 next = Clone(updated.Roster)
33 next.HomeRegion = "@home"
34 if _, err := d.Replace(t.Context(), sg, updated, next); err == nil {
35 t.Fatal("engine token accepted as designation")
36 }
37}
38
39func TestPlan13HomeDesignationWriteOnce(t *testing.T) {
40 t.Setenv("CARLOS_HOST_CLAIM", "1")
41 for _, home := range []string{"ie", "uk", ""} {
42 t.Run(home, func(t *testing.T) {
43 d, sg, o := fixture(t)
44 next := Clone(o.Roster)
45 next.HomeRegion = "ie"
46 o, err := d.Replace(t.Context(), sg, o, next)
47 if err != nil {
48 t.Fatal(err)
49 }
50 next = Clone(o.Roster)
51 next.HomeRegion = home
52 _, err = d.Replace(t.Context(), sg, o, next)
53 if (err == nil) != (home == "ie") {
54 t.Fatalf("change to %q: %v", home, err)
55 }
56 current, err := d.Read(t.Context())
57 if err != nil || current.Roster.HomeRegion != "ie" {
58 t.Fatalf("designation changed: %+v %v", current, err)
59 }
60 if home != "ie" && current.ETag != o.ETag {
61 t.Fatal("refusal wrote roster")
62 }
63 })
64 }
65}
66
67// With host claims off the roster keeps main's behaviour: the designation
68// can be changed or cleared like any other field.
69func TestPlan13HomeDesignationFlagOffIsUnpinned(t *testing.T) {
70 t.Setenv("CARLOS_HOST_CLAIM", "")
71 for _, home := range []string{"uk", ""} {
72 t.Run(home, func(t *testing.T) {
73 d, sg, o := fixture(t)
74 next := Clone(o.Roster)
75 next.HomeRegion = "ie"
76 o, err := d.Replace(t.Context(), sg, o, next)
77 if err != nil {
78 t.Fatal(err)
79 }
80 next = Clone(o.Roster)
81 next.HomeRegion = home
82 if _, err := d.Replace(t.Context(), sg, o, next); err != nil {
83 t.Fatalf("flag-off change to %q refused: %v", home, err)
84 }
85 current, err := d.Read(t.Context())
86 if err != nil || current.Roster.HomeRegion != home {
87 t.Fatalf("flag-off designation = %+v %v, want %q", current.Roster.HomeRegion, err, home)
88 }
89 })
90 }
91}
92