it("defers restart while reply delivery is in flight", async () => {
let rpcConnected = true; const deliveredReplies: string[] = []; const deliveryStarted = createDeferred(); const allowDelivery = createDeferred();
// Hold delivery open so restart checks run while reply is in-flight. const dispatcher = createReplyDispatcher({
deliver: async (payload) => { if (!rpcConnected) { const error = "Error: imsg rpc not running";
replyErrors.push(error); thrownew Error(error);
}
deliveryStarted.resolve();
await allowDelivery.promise;
deliveredReplies.push(payload.text ?? "");
},
onError: () => { // Swallow delivery errors so the test can assert on replyErrors.
},
});
// Enqueue reply and immediately clear the reservation. // This is the critical sequence: after markComplete(), the ONLY thing // keeping pending > 0 is the in-flight delivery itself.
dispatcher.sendFinalReply({ text: "Configuration updated!" });
dispatcher.markComplete();
await deliveryStarted.promise;
// At this point: delivery is in flight; pending > 0 prevents restart.
expect(getTotalPendingReplies()).toBeGreaterThan(0);
let restartTriggered = false; for (let i = 0; i < 3; i += 1) {
await Promise.resolve(); const pending = getTotalPendingReplies(); if (pending === 0) {
restartTriggered = true;
rpcConnected = false; break;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.