package hostops import ( "crypto/ed25519" "testing" "time" "github.com/carlosframework/platform/internal/release" ) func TestPlan9Fix1RepeatedResetExpiryNeverPermanentlyPinsETag(t *testing.T) { tr, r, o, _ := resetTransportFixture(t) w, err := NewControlWriter(tr.Store, tr.Directory.PublicKey, tr.Now) if err != nil { t.Fatal(err) } h := o.Claim.Holder grant := lifecycleGrant{kind: "app", account: h.Account, app: h.App, appID: "app", operation: "reset", owner: r.Admission.Owner, epoch: 1, w: w, registration: RegistrationWakeRetryReset, incarnation: h.Incarnation} ctx := withLifecycleGrant(t.Context(), grant) signer := release.RootSigner(ed25519.NewKeyFromSeed(make([]byte, 32))) issue := func() (WakeResetRequest, error) { return w.RequestWakeReset(ctx, tr, signer, r.Console, r.ConsoleEnrollment, r.Namespace, o, r.Attempt) } first, err := issue() if err != nil { t.Fatal(err) } if err := tr.Store.Delete(t.Context(), first.Key()); err != nil { t.Fatal(err) } for round := uint64(0); round < 64; round++ { expired := first expired.Round = round expired.IssuedAt = tr.Now().Add(-3 * time.Minute) expired.Expires = expired.IssuedAt.Add(WakeResetLifetime) expired.ID = wakeResetID(expired) raw, err := release.SignRootEnvelope(signer, expired) if err != nil { t.Fatal(err) } if _, err := tr.Store.Put(t.Context(), wakeResetArchiveKey(expired), raw, ""); err != nil { t.Fatal(err) } } fresh, err := issue() if err != nil { t.Fatalf("repeated expiries permanently pinned claim ETag: %v", err) } if fresh.ClaimETag != first.ClaimETag || !fresh.Expires.After(tr.Now()) { t.Fatalf("did not issue a live reset for the same ETag: %+v", fresh) } }