package hostops import ( "encoding/json" "github.com/carlosframework/platform/internal/hostactors" "github.com/carlosframework/platform/internal/hostclaim" "github.com/carlosframework/platform/internal/park" "github.com/carlosframework/platform/internal/provision" "testing" ) func TestPlan13BeginClaimMoveHomeAndNamed(t *testing.T) { for _, tc := range []struct{ name, home, from, to, target, want string }{ {"out-home", "ie", "", "uk", "uk-box", "uk"}, {"into-home", "uk", "ie", "", "uk-box", park.HomeRegion}, {"named", "", "ie", "uk", "uk-box", "uk"}, } { t.Run(tc.name, func(t *testing.T) { f := newMoveStartFixture(t, func(r *hostactors.Roster) { r.HomeRegion = tc.home }) rec, etag, err := provision.GetRecordETag(t.Context(), f.raw, "bab", "app", f.host) if err != nil { t.Fatal(err) } rec.Region = tc.from raw, err := json.Marshal(rec) if err != nil { t.Fatal(err) } if _, err = f.raw.Store.Put(t.Context(), f.raw.recordKey, raw, etag); err != nil { t.Fatal(err) } o := f.read(t) // This is an existing claim, including its named touched region. h, err := f.authority.RegisterMove(t.Context(), o, "canonical", moveStartID) if err != nil { t.Fatal(err) } got, err := BeginClaimMove(t.Context(), f.raw, f.authority.Directory, h, o, moveStartID, "operator", tc.target, tc.to, f.now, tc.home) if err != nil { t.Fatal(err) } if got.Claim.Op.Intent["to"] != tc.want || got.Claim.Touched.Regions[0] != "ie" { t.Fatalf("%+v", got.Claim) } if got.Claim.Op.Intent["home_region"] != tc.home { t.Fatal("lost home binding") } _ = hostclaim.KindMoving }) } } func TestPlan13MoveStartRefusesFalseHome(t *testing.T) { f := newMoveStartFixture(t, func(r *hostactors.Roster) { r.HomeRegion = "ie" }) o := f.read(t) h, err := f.authority.RegisterMove(t.Context(), o, "canonical", moveStartID) if err != nil { t.Fatal(err) } if _, err := BeginClaimMove(t.Context(), f.raw, f.authority.Directory, h, o, moveStartID, "operator", "uk-box", "", f.now, "uk"); err == nil { t.Fatal("operation home overrode signed fleet home") } if f.read(t).ETag != o.ETag { t.Fatal("refusal mutated claim") } }