-
Notifications
You must be signed in to change notification settings - Fork 5
/
e2e.ts
81 lines (71 loc) · 2.26 KB
/
e2e.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { pipe } from 'it-pipe'
import {
createHandler,
createMux,
Server,
Client,
StreamConn,
ChannelStream,
combineUint8ArrayListTransform,
ChannelStreamOpts,
} from '../srpc/index.js'
import { EchoerDefinition, EchoerServer, runClientTest } from '../echo/index.js'
import {
runAbortControllerTest,
runRpcStreamTest,
} from '../echo/client-test.js'
async function runRPC() {
const mux = createMux()
const server = new Server(mux.lookupMethodFunc)
const echoer = new EchoerServer(server)
mux.register(createHandler(EchoerDefinition, echoer))
// StreamConn is unnecessary since ChannelStream has packet framing.
// Use it here to include yamux in this e2e test.
const clientConn = new StreamConn()
const serverConn = new StreamConn(server, { direction: 'inbound' })
// pipe clientConn -> messageStream -> serverConn -> messageStream -> clientConn
const { port1: clientPort, port2: serverPort } = new MessageChannel()
const opts: ChannelStreamOpts = {} // { idleTimeoutMs: 250, keepAliveMs: 100 }
const clientChannelStream = new ChannelStream('client', clientPort, opts)
const serverChannelStream = new ChannelStream('server', serverPort, opts)
// Pipe the client traffic via the client end of the MessageChannel.
pipe(
clientChannelStream,
clientConn,
combineUint8ArrayListTransform(),
clientChannelStream,
)
.catch((err: Error) => clientConn.close(err))
.then(() => clientConn.close())
// Pipe the server traffic via the server end of the MessageChannel.
pipe(
serverChannelStream,
serverConn,
combineUint8ArrayListTransform(),
serverChannelStream,
)
.catch((err: Error) => serverConn.close(err))
.then(() => serverConn.close())
// Build the client
const client = new Client(clientConn.buildOpenStreamFunc())
// Run the tests
await runClientTest(client)
await runAbortControllerTest(client)
await runRpcStreamTest(client)
// Make sure we have no uncaught promises
await new Promise<void>((resolve) => {
setTimeout(resolve, 500)
})
// Close cleanly
clientConn.close()
serverConn.close()
}
runRPC()
.then(() => {
console.log('finished successfully')
process.exit(0)
})
.catch((err) => {
console.error('e2e tests failed', err)
process.exit(1)
})