Skip to content

Commit 1d0e343

Browse files
authored
test (eventsource): refactor tests for eventsource, speed them up (#4493)
* reduce time for test/eventsource/eventsource-close.js * import once properly, use createDeferredPromise * use createDeferredPromise in eventsource-reconnect.js * optimize further * improve eventsource-reconnect.js * improve time of eventsource-message * reduce lines * use tspl instead of createDeferredPromise
1 parent d2bb04e commit 1d0e343

9 files changed

Lines changed: 222 additions & 369 deletions

test/eventsource/eventsource-attributes.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const assert = require('node:assert')
4-
const events = require('node:events')
4+
const { once } = require('node:events')
55
const http = require('node:http')
66
const { test, describe } = require('node:test')
77
const { EventSource } = require('../../lib/web/eventsource/eventsource')
@@ -11,8 +11,7 @@ describe('EventSource - eventhandler idl', async () => {
1111
res.writeHead(200, 'dummy')
1212
})
1313

14-
server.listen(0)
15-
await events.once(server, 'listening')
14+
await once(server.listen(0), 'listening')
1615
const port = server.address().port
1716

1817
let done = 0
Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,63 @@
11
'use strict'
22

3-
const assert = require('node:assert')
4-
const events = require('node:events')
3+
const { tspl } = require('@matteo.collina/tspl')
4+
const { once } = require('node:events')
55
const http = require('node:http')
6-
const { setTimeout } = require('node:timers/promises')
7-
const { test, describe } = require('node:test')
6+
const { test, describe, after } = require('node:test')
87
const { EventSource } = require('../../lib/web/eventsource/eventsource')
98

109
describe('EventSource - close', () => {
11-
test('should not emit error when closing the EventSource Instance', async () => {
10+
test('should not emit error when closing the EventSource Instance', async (t) => {
11+
t = tspl(t, { plan: 1 })
12+
1213
const server = http.createServer({ joinDuplicateHeaders: true }, (req, res) => {
13-
assert.strictEqual(req.headers.connection, 'keep-alive')
14+
t.strictEqual(req.headers.connection, 'keep-alive')
1415
res.writeHead(200, 'OK', { 'Content-Type': 'text/event-stream' })
1516
res.write('data: hello\n\n')
17+
18+
res.on('close', () => {
19+
server.close()
20+
})
1621
})
1722

18-
server.listen(0)
19-
await events.once(server, 'listening')
23+
await once(server.listen(0), 'listening')
2024
const port = server.address().port
2125

2226
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
23-
eventSourceInstance.onopen = async () => {
27+
eventSourceInstance.onopen = () => {
2428
eventSourceInstance.close()
25-
await setTimeout(1000, { ref: false })
26-
server.close()
2729
}
2830

2931
eventSourceInstance.onerror = () => {
30-
assert.fail('Should not have errored')
32+
t.fail('Should not have errored')
3133
}
34+
35+
await t.completed
3236
})
3337

34-
test('should set readyState to CLOSED', async () => {
38+
test('should set readyState to CLOSED', async (t) => {
39+
t = tspl(t, { plan: 3 })
3540
const server = http.createServer({ joinDuplicateHeaders: true }, (req, res) => {
36-
assert.strictEqual(req.headers.connection, 'keep-alive')
41+
t.strictEqual(req.headers.connection, 'keep-alive')
3742
res.writeHead(200, 'OK', { 'Content-Type': 'text/event-stream' })
3843
res.write('data: hello\n\n')
3944
})
4045

41-
server.listen(0)
42-
await events.once(server, 'listening')
46+
after(() => server.close())
47+
await once(server.listen(0), 'listening')
4348
const port = server.address().port
4449

4550
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
4651
eventSourceInstance.onopen = () => {
47-
assert.strictEqual(eventSourceInstance.readyState, EventSource.OPEN)
52+
t.strictEqual(eventSourceInstance.readyState, EventSource.OPEN)
4853
eventSourceInstance.close()
49-
assert.strictEqual(eventSourceInstance.readyState, EventSource.CLOSED)
54+
t.strictEqual(eventSourceInstance.readyState, EventSource.CLOSED)
5055
}
5156

5257
eventSourceInstance.onerror = () => {
53-
assert.fail('Should not have errored')
58+
t.fail('Should not have errored')
5459
}
5560

56-
await setTimeout(2000, { ref: false })
57-
server.close()
61+
await t.completed
5862
})
5963
})

test/eventsource/eventsource-connect.js

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const assert = require('node:assert')
4-
const events = require('node:events')
4+
const { once } = require('node:events')
55
const http = require('node:http')
66
const { test, describe, after } = require('node:test')
77
const FakeTimers = require('@sinonjs/fake-timers')
@@ -16,8 +16,7 @@ describe('EventSource - sending correct request headers', () => {
1616
res.end()
1717
})
1818

19-
server.listen(0)
20-
await events.once(server, 'listening')
19+
await once(server.listen(0), 'listening')
2120
const port = server.address().port
2221

2322
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -38,8 +37,7 @@ describe('EventSource - sending correct request headers', () => {
3837
res.end()
3938
})
4039

41-
server.listen(0)
42-
await events.once(server, 'listening')
40+
await once(server.listen(0), 'listening')
4341
const port = server.address().port
4442

4543
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -61,8 +59,7 @@ describe('EventSource - sending correct request headers', () => {
6159
res.end()
6260
})
6361

64-
server.listen(0)
65-
await events.once(server, 'listening')
62+
await once(server.listen(0), 'listening')
6663
const port = server.address().port
6764

6865
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -83,8 +80,7 @@ describe('EventSource - sending correct request headers', () => {
8380
res.end()
8481
})
8582

86-
server.listen(0)
87-
await events.once(server, 'listening')
83+
await once(server.listen(0), 'listening')
8884
const port = server.address().port
8985

9086
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -106,8 +102,7 @@ describe('EventSource - received response must have content-type to be text/even
106102
res.end()
107103
})
108104

109-
server.listen(0)
110-
await events.once(server, 'listening')
105+
await once(server.listen(0), 'listening')
111106
const port = server.address().port
112107

113108
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -127,8 +122,7 @@ describe('EventSource - received response must have content-type to be text/even
127122
res.end()
128123
})
129124

130-
server.listen(0)
131-
await events.once(server, 'listening')
125+
await once(server.listen(0), 'listening')
132126
const port = server.address().port
133127

134128
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -148,8 +142,7 @@ describe('EventSource - received response must have content-type to be text/even
148142
res.end()
149143
})
150144

151-
server.listen(0)
152-
await events.once(server, 'listening')
145+
await once(server.listen(0), 'listening')
153146
const port = server.address().port
154147

155148
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -169,8 +162,7 @@ describe('EventSource - received response must have content-type to be text/even
169162
res.end()
170163
})
171164

172-
server.listen(0)
173-
await events.once(server, 'listening')
165+
await once(server.listen(0), 'listening')
174166
const port = server.address().port
175167

176168
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -199,15 +191,15 @@ describe('EventSource - received response must have content-type to be text/even
199191
}
200192
clock.tick(reconnectionTime)
201193

202-
await events.once(eventSourceInstance, 'error')
194+
await once(eventSourceInstance, 'error')
203195

204196
const start = Date.now()
205197
clock.tick(reconnectionTime)
206-
await events.once(eventSourceInstance, 'error')
198+
await once(eventSourceInstance, 'error')
207199
clock.tick(reconnectionTime)
208-
await events.once(eventSourceInstance, 'error')
200+
await once(eventSourceInstance, 'error')
209201
clock.tick(reconnectionTime)
210-
await events.once(eventSourceInstance, 'error')
202+
await once(eventSourceInstance, 'error')
211203
const end = Date.now()
212204

213205
eventSourceInstance.close()
@@ -234,15 +226,15 @@ describe('EventSource - received response must have content-type to be text/even
234226
onerrorCalls.push(error)
235227
}
236228

237-
await events.once(eventSourceInstance, 'error')
229+
await once(eventSourceInstance, 'error')
238230

239231
const start = Date.now()
240232
clock.tick(reconnectionTime)
241-
await events.once(eventSourceInstance, 'error')
233+
await once(eventSourceInstance, 'error')
242234
clock.tick(reconnectionTime)
243-
await events.once(eventSourceInstance, 'error')
235+
await once(eventSourceInstance, 'error')
244236
clock.tick(reconnectionTime)
245-
await events.once(eventSourceInstance, 'error')
237+
await once(eventSourceInstance, 'error')
246238
const end = Date.now()
247239

248240
eventSourceInstance.close()

test/eventsource/eventsource-constructor-stringify.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const assert = require('node:assert')
4-
const events = require('node:events')
4+
const { once } = require('node:events')
55
const http = require('node:http')
66
const { test, describe } = require('node:test')
77
const { EventSource } = require('../../lib/web/eventsource/eventsource')
@@ -14,8 +14,7 @@ describe('EventSource - constructor stringify', () => {
1414
res.end()
1515
})
1616

17-
server.listen(0)
18-
await events.once(server, 'listening')
17+
await once(server.listen(0), 'listening')
1918
const port = server.address().port
2019

2120
const eventSourceInstance = new EventSource({ toString: function () { return `http://localhost:${port}` } })

test/eventsource/eventsource-constructor.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const assert = require('node:assert')
4-
const events = require('node:events')
4+
const { once } = require('node:events')
55
const http = require('node:http')
66
const { test, describe } = require('node:test')
77
const { EventSource } = require('../../lib/web/eventsource/eventsource')
@@ -13,8 +13,7 @@ describe('EventSource - withCredentials', () => {
1313
res.end()
1414
})
1515

16-
server.listen(0)
17-
await events.once(server, 'listening')
16+
await once(server.listen(0), 'listening')
1817
const port = server.address().port
1918

2019
const eventSourceInstance = new EventSource(`http://localhost:${port}`)
@@ -35,8 +34,7 @@ describe('EventSource - withCredentials', () => {
3534
res.end()
3635
})
3736

38-
server.listen(0)
39-
await events.once(server, 'listening')
37+
await once(server.listen(0), 'listening')
4038
const port = server.address().port
4139

4240
const eventSourceInstance = new EventSource(`http://localhost:${port}`, { withCredentials: true })

0 commit comments

Comments
 (0)