| 1 | package hostclaim |
| 2 | |
| 3 | import "testing" |
| 4 | |
| 5 | // m-2: transition authority and observation catch-up are different questions. |
| 6 | func TestPlan9Fix2ObservationCatchesUpAcrossAdjacentTableEdgesOnly(t *testing.T) { |
| 7 | for _, c := range []struct { |
| 8 | kind, from, to string |
| 9 | observes bool |
| 10 | }{ |
| 11 | {KindLanding, PhaseLandingProbing, PhaseLandingProbing, true}, |
| 12 | {KindLanding, PhaseLandingProbing, PhaseLandingProbed, true}, |
| 13 | {KindLanding, PhaseLandingProbing, PhaseLandingCommitted, true}, |
| 14 | {KindLanding, PhaseLandingProbed, PhaseLandingCommitted, true}, |
| 15 | {KindLanding, PhaseLandingCommitted, PhaseLandingProbed, false}, |
| 16 | {KindLanding, PhaseLandingProbed, PhaseLandingProbing, false}, |
| 17 | {KindLanding, PhaseLandingProbing, "restored", false}, |
| 18 | {KindLanding, "restored", PhaseLandingCommitted, false}, |
| 19 | {KindRestoring, "releasing", "released", false}, |
| 20 | {"", PhaseLandingProbing, PhaseLandingProbed, false}, |
| 21 | } { |
| 22 | if got := SessionObserves(c.kind, c.from, c.to); got != c.observes { |
| 23 | t.Errorf("SessionObserves(%q,%q,%q) = %v, want %v", c.kind, c.from, c.to, got, c.observes) |
| 24 | } |
| 25 | } |
| 26 | // Write authority for an actual transition still never skips a step. |
| 27 | if SessionContinues(KindLanding, PhaseLandingProbing, PhaseLandingCommitted) { |
| 28 | t.Fatal("SessionContinues allows a skipped transition") |
| 29 | } |
| 30 | } |
| 31 | |