@@ -25,6 +25,8 @@ import { expect } from "chai";
2525import { beforeEach , describe } from "mocha" ;
2626import sinon from "sinon" ;
2727
28+ import { waitForEvent } from "./test_utils.js" ;
29+
2830import { ReliableChannel } from "./index.js" ;
2931
3032const TEST_CONTENT_TOPIC = "/my-tests/0/topic-name/proto" ;
@@ -63,18 +65,12 @@ describe("Reliable Channel", () => {
6365
6466 // Setting up message tracking
6567 const messageId = reliableChannel . send ( message ) ;
66- let messageSending = false ;
67- reliableChannel . addEventListener ( "sending-message" , ( event ) => {
68- if ( event . detail === messageId ) {
69- messageSending = true ;
70- }
71- } ) ;
7268
73- while ( ! messageSending ) {
74- await delay ( 50 ) ;
75- }
76-
77- expect ( messageSending ) . to . be . true ;
69+ await waitForEvent < string > (
70+ reliableChannel ,
71+ "sending-message" ,
72+ ( id ) => id === messageId
73+ ) ;
7874 } ) ;
7975
8076 it ( "Outgoing message is emitted as sent" , async ( ) => {
@@ -90,19 +86,11 @@ describe("Reliable Channel", () => {
9086
9187 const messageId = reliableChannel . send ( message ) ;
9288
93- // Setting up message tracking
94- let messageSent = false ;
95- reliableChannel . addEventListener ( "message-sent" , ( event ) => {
96- if ( event . detail === messageId ) {
97- messageSent = true ;
98- }
99- } ) ;
100-
101- while ( ! messageSent ) {
102- await delay ( 50 ) ;
103- }
104-
105- expect ( messageSent ) . to . be . true ;
89+ await waitForEvent < string > (
90+ reliableChannel ,
91+ "message-sent" ,
92+ ( id ) => id === messageId
93+ ) ;
10694 } ) ;
10795
10896 it ( "Encoder error raises irrecoverable error" , async ( ) => {
@@ -130,22 +118,11 @@ describe("Reliable Channel", () => {
130118 encoder . contentTopic = "..." ;
131119 const messageId = reliableChannel . send ( message ) ;
132120
133- // Setting up message tracking
134- let irrecoverableError = false ;
135- reliableChannel . addEventListener (
121+ await waitForEvent < { messageId : string ; error : any } > (
122+ reliableChannel ,
136123 "sending-message-irrecoverable-error" ,
137- ( event ) => {
138- if ( event . detail . messageId === messageId ) {
139- irrecoverableError = true ;
140- }
141- }
124+ ( detail ) => detail . messageId === messageId
142125 ) ;
143-
144- while ( ! irrecoverableError ) {
145- await delay ( 50 ) ;
146- }
147-
148- expect ( irrecoverableError ) . to . be . true ;
149126 } ) ;
150127
151128 it ( "Outgoing message is not emitted as acknowledged from own outgoing messages" , async ( ) => {
@@ -205,39 +182,32 @@ describe("Reliable Channel", () => {
205182
206183 // Alice sets up message tracking for first message
207184 const firstMessageId = ReliableChannel . getMessageId ( messages [ 0 ] ) ;
208- let firstMessagePossiblyAcknowledged = false ;
209- reliableChannelAlice . addEventListener (
210- "message-possibly-acknowledged" ,
211- ( event ) => {
212- if ( event . detail . messageId === firstMessageId ) {
213- firstMessagePossiblyAcknowledged = true ;
214- }
215- }
185+
186+ const bobReceivedThirdPromise = waitForEvent < IDecodedMessage > (
187+ reliableChannelBob ,
188+ "message-received" ,
189+ ( msg ) => bytesToUtf8 ( msg . payload ) === "third"
216190 ) ;
217191
218- let messageReceived = false ;
219- reliableChannelBob . addEventListener ( "message-received" , ( event ) => {
220- if ( bytesToUtf8 ( event . detail . payload ) === "third" ) {
221- messageReceived = true ;
222- }
223- } ) ;
192+ const firstMessagePossiblyAckPromise = waitForEvent < {
193+ messageId : string ;
194+ possibleAckCount : number ;
195+ } > (
196+ reliableChannelAlice ,
197+ "message-possibly-acknowledged" ,
198+ ( detail ) => detail . messageId === firstMessageId
199+ ) ;
224200
225201 for ( const m of messages ) {
226202 reliableChannelAlice . send ( m ) ;
227203 }
228204
229205 // Wait for Bob to receive last message to ensure it is all included in filter
230- while ( ! messageReceived ) {
231- await delay ( 50 ) ;
232- }
206+ await bobReceivedThirdPromise ;
233207
234- // Bobs sends a message now, it should include first one in bloom filter
208+ // Bob sends a message now, it should include first one in bloom filter
235209 reliableChannelBob . send ( utf8ToBytes ( "message back" ) ) ;
236- while ( ! firstMessagePossiblyAcknowledged ) {
237- await delay ( 50 ) ;
238- }
239-
240- expect ( firstMessagePossiblyAcknowledged ) . to . be . true ;
210+ await firstMessagePossiblyAckPromise ;
241211 } ) ;
242212
243213 it ( "Outgoing message is acknowledged" , async ( ) => {
@@ -264,31 +234,23 @@ describe("Reliable Channel", () => {
264234
265235 const messageId = reliableChannelAlice . send ( message ) ;
266236
267- // Alice sets up message tracking
268- let messageAcknowledged = false ;
269- reliableChannelAlice . addEventListener ( "message-acknowledged" , ( event ) => {
270- if ( event . detail === messageId ) {
271- messageAcknowledged = true ;
272- }
273- } ) ;
237+ const bobReceivedPromise = waitForEvent < IDecodedMessage > (
238+ reliableChannelBob ,
239+ "message-received"
240+ ) ;
274241
275- let bobReceivedMessage = false ;
276- reliableChannelBob . addEventListener ( "message-received" , ( ) => {
277- bobReceivedMessage = true ;
278- } ) ;
242+ const messageAcknowledgedPromise = waitForEvent < string > (
243+ reliableChannelAlice ,
244+ "message-acknowledged" ,
245+ ( id ) => id === messageId
246+ ) ;
279247
280248 // Wait for bob to receive the message to ensure it's included in causal history
281- while ( ! bobReceivedMessage ) {
282- await delay ( 50 ) ;
283- }
249+ await bobReceivedPromise ;
284250
285- // Bobs sends a message now, it should include first one in causal history
251+ // Bob sends a message now, it should include first one in causal history
286252 reliableChannelBob . send ( utf8ToBytes ( "second message in channel" ) ) ;
287- while ( ! messageAcknowledged ) {
288- await delay ( 50 ) ;
289- }
290-
291- expect ( messageAcknowledged ) . to . be . true ;
253+ await messageAcknowledgedPromise ;
292254 } ) ;
293255
294256 it ( "Incoming message is emitted as received" , async ( ) => {
@@ -300,19 +262,17 @@ describe("Reliable Channel", () => {
300262 decoder
301263 ) ;
302264
303- let receivedMessage : IDecodedMessage ;
304- reliableChannel . addEventListener ( "message-received" , ( event ) => {
305- receivedMessage = event . detail ;
306- } ) ;
307-
308265 const message = utf8ToBytes ( "message in channel" ) ;
309266
267+ const receivedPromise = waitForEvent < IDecodedMessage > (
268+ reliableChannel ,
269+ "message-received"
270+ ) ;
271+
310272 reliableChannel . send ( message ) ;
311- while ( ! receivedMessage ! ) {
312- await delay ( 50 ) ;
313- }
273+ const receivedMessage = await receivedPromise ;
314274
315- expect ( bytesToUtf8 ( receivedMessage ! . payload ) ) . to . eq ( bytesToUtf8 ( message ) ) ;
275+ expect ( bytesToUtf8 ( receivedMessage . payload ) ) . to . eq ( bytesToUtf8 ( message ) ) ;
316276 } ) ;
317277
318278 describe ( "Retries" , ( ) => {
@@ -355,20 +315,29 @@ describe("Reliable Channel", () => {
355315 }
356316 } ) ;
357317
358- reliableChannelAlice . send ( message ) ;
318+ // Wait for first message
319+ const firstMessagePromise = waitForEvent < IDecodedMessage > (
320+ reliableChannelBob ,
321+ "message-received" ,
322+ ( msg ) => bytesToUtf8 ( msg . payload ) === msgTxt
323+ ) ;
359324
360- while ( messageCount < 1 ) {
361- await delay ( 10 ) ;
362- }
325+ reliableChannelAlice . send ( message ) ;
326+ await firstMessagePromise ;
363327 expect ( messageCount ) . to . equal ( 1 , "Bob received Alice's message once" ) ;
364328
329+ // Wait for retry - Bob should receive the same message again
330+ const retryMessagePromise = waitForEvent < IDecodedMessage > (
331+ reliableChannelBob ,
332+ "message-received" ,
333+ ( msg ) => bytesToUtf8 ( msg . payload ) === msgTxt
334+ ) ;
335+
365336 // No response from Bob should trigger a retry from Alice
366- while ( messageCount < 2 ) {
367- await delay ( 10 ) ;
368- }
337+ await retryMessagePromise ;
369338 expect ( messageCount ) . to . equal ( 2 , "retried once" ) ;
370339
371- // Bobs sends a message now, it should include first one in causal history
340+ // Bob sends a message now, it should include first one in causal history
372341 reliableChannelBob . send ( utf8ToBytes ( "second message in channel" ) ) ;
373342
374343 // Wait long enough to confirm no retry is executed
0 commit comments