Skip to content

Commit 98052bd

Browse files
committed
test: pin the abort dispatch order and the end latch
Nothing caught `maybeDispatchEnd` moving above `timeline.close` in `abort`, or `unshift` clearing the latch after `end` was emitted.
1 parent f3c3771 commit 98052bd

1 file changed

Lines changed: 9 additions & 4 deletions

File tree

packages/utils/test/message-stream-end.spec.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ describe('message stream end event', () => {
156156
])
157157

158158
expect(inbound.readStatus).to.equal('closed')
159-
expect(inbound).to.have.property('readableEnded', true)
160159
})
161160

162161
it('should finish closing before emitting end when the transport fails', async () => {
@@ -212,8 +211,11 @@ describe('message stream end event', () => {
212211

213212
const order: string[] = []
214213

214+
let closeTime: number | undefined
215+
215216
inbound.addEventListener('end', () => {
216217
order.push('end')
218+
closeTime = inbound.timeline.close
217219
})
218220
inbound.addEventListener('close', () => {
219221
order.push('close')
@@ -222,7 +224,9 @@ describe('message stream end event', () => {
222224
inbound.abort(new Error('urk!'))
223225

224226
expect(order).to.deep.equal(['end', 'close'])
225-
expect(inbound).to.have.property('readableEnded', true)
227+
228+
// the stream must be fully closed before listeners run
229+
expect(closeTime).to.be.a('number')
226230
})
227231

228232
it('should emit end before close when the remote resets with no buffered data', async () => {
@@ -241,7 +245,6 @@ describe('message stream end event', () => {
241245
conn.onRemoteReset()
242246

243247
expect(order).to.deep.equal(['end', 'close'])
244-
expect(conn).to.have.property('readableEnded', true)
245248
})
246249

247250
it('should emit end after buffered data has been read when the remote resets', async () => {
@@ -270,7 +273,6 @@ describe('message stream end event', () => {
270273
await pEvent(conn, 'end')
271274

272275
expect(received).to.deep.equal([uint8ArrayFromString('hello world')])
273-
expect(conn).to.have.property('readableEnded', true)
274276
})
275277

276278
it('should not emit end while buffered data cannot be delivered', async () => {
@@ -319,6 +321,9 @@ describe('message stream end event', () => {
319321
inbound.unshift(uint8ArrayFromString('world'))
320322
inbound.unshift(uint8ArrayFromString('hello '))
321323

324+
// data arriving after 'end' does not un-emit it
325+
expect(inbound).to.have.property('readableEnded', true)
326+
322327
const messages: string[] = []
323328

324329
inbound.addEventListener('message', (evt) => {

0 commit comments

Comments
 (0)