package park import ( "context" "errors" "testing" "time" "github.com/carlosframework/platform/internal/hostclaim" ) func TestSweepObservedRefusesChangedCompleteCensus(t *testing.T) { f, obs, view, versions := sweepFixture(t) f.e.View = func(_ context.Context, current hostclaim.Observed) (View, error) { v := view v.ClaimETag = current.ETag return v, nil } // A later version of an already-listed key must be detected too; checking // only current keys would silently attach old evidence to this residue. f.b.Put("data", versions[0].Key, []byte("late noncurrent version")) if _, err := f.e.SweepObserved(t.Context(), obs, versions, f.ob.Park.Incarnation, f.ob.Park.EvidenceAt, time.Second); !errors.Is(err, ErrChanged) { t.Fatalf("SweepObserved = %v", err) } current, err := hostclaim.Read(t.Context(), f.e.Claims, f.w.Host) if err != nil || len(current.Claim.Obligations) != 0 { t.Fatalf("claim mutated: %+v, %v", current.Claim.Obligations, err) } } func TestSweepObservedRefusesChangedClaim(t *testing.T) { f, obs, view, versions := sweepFixture(t) f.e.View = func(_ context.Context, current hostclaim.Observed) (View, error) { v := view v.ClaimETag = current.ETag return v, nil } if _, err := hostclaim.Update(t.Context(), f.e.Claims, obs, func(c *hostclaim.Claim) error { c.Op.Phase = "changed" return nil }); err != nil { t.Fatal(err) } if _, err := f.e.SweepObserved(t.Context(), obs, versions, f.ob.Park.Incarnation, f.ob.Park.EvidenceAt, time.Second); !errors.Is(err, ErrChanged) { t.Fatalf("SweepObserved = %v", err) } current, err := hostclaim.Read(t.Context(), f.e.Claims, f.w.Host) if err != nil || len(current.Claim.Obligations) != 0 { t.Fatalf("claim mutated: %+v, %v", current.Claim.Obligations, err) } }