package hostops import ( "github.com/carlosframework/platform/internal/hostclaim" "testing" ) func TestPlan12LossOwnerPolicy(t *testing.T) { for _, bad := range []string{"", "stamp", "executor", "rollback", "coverage", "intent"} { in := moveLossIntent{Kind: moveLossIntentKind, Move: "move", Incarnation: "inc", Rollback: "rb_abcdefghijklmnopqrstuvwxyz", Target: "target", Source: "source", TargetRegion: "uk", SourceRegion: "ie", RecordKey: "record", RecordETag: "etag", RecordState: moveLossRecordLanding} raw, _ := in.encode() r := hostclaim.LossRecord{ID: "loss_1", OpID: "move", Box: "target", HolderIncarnation: "inc", ConfirmedConsequences: hostclaim.LossConsequences{RecoveryIntent: raw}} c := hostclaim.Claim{Holder: &hostclaim.Holder{Incarnation: "inc", Key: "record", Stamp: 7}, Op: hostclaim.Op{Kind: hostclaim.KindRestoring, ID: "move", Phase: hostclaim.PhaseProbing, Exec: "source", Intent: map[string]string{"source": "source", "target": "target", "to": "uk", "rollback": in.Rollback}, Journal: map[string]string{hostclaim.JournalSourceStamp: "7", "lost_target_released": "loss_1"}}} a := hostclaim.Admission{Box: "source", Region: "ie", Mode: "cold"} switch bad { case "stamp": c.Holder.Stamp++ case "executor": c.Op.Exec = "target" case "rollback": c.Op.Intent["rollback"] = "other" case "coverage": a.Coverage = "clean-return" case "intent": r.ConfirmedConsequences.RecoveryIntent = []byte(`{}`) } err := MoveLossRecoveryOwner().ValidateLossRecovery(c, r, a) if (err == nil) != (bad == "") { t.Fatal(bad, err) } } for _, s := range []string{"replica:ie/gen", "seal:move"} { if _, _, _, err := ParseMoveLossBaseline(s); err != nil { t.Fatal(s, err) } } for _, s := range []string{"replica:ie/", "seal:", "replica:ie/gen/other"} { if _, _, _, err := ParseMoveLossBaseline(s); err == nil { t.Fatal(s) } } }