Skip to content
File

Blob: src/workerd/api/node/tests/net-nodejs-tcp-server.js

javascript98 lines
1// Copyright (c) 2017-2022 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5// This file is used as a sidecar for the net-nodejs-test tests.
6// It creates 2 TCP servers to act as a source of truth for the node:net tests.
7// We execute this command using Node.js, which makes net.createServer available.
8const net = require('node:net');
9 
10function reportPort(server) {
11 const address = server.address();
12 console.info(`Listening on ${address.address}:${address.port}`);
13}
14 
15const server = net.createServer((s) => {
16 s.on('error', () => {
17 // Do nothing
18 });
19 s.end();
20});
21server.listen(process.env.SERVER_PORT, process.env.SIDECAR_HOSTNAME, () =>
22 reportPort(server)
23);
24 
25const echoServer = net.createServer((s) => {
26 s.setTimeout(100);
27 s.on('error', () => {
28 // Do nothing
29 });
30 s.pipe(s);
31});
32echoServer.listen(
33 process.env.ECHO_SERVER_PORT,
34 process.env.SIDECAR_HOSTNAME,
35 () => reportPort(echoServer)
36);
37 
38const timeoutServer = net.createServer((s) => {
39 s.setTimeout(100);
40 s.resume();
41 s.once('timeout', () => {
42 // Try to reset the timeout.
43 s.write('WHAT.');
44 });
45 
46 s.on('end', () => {
47 s.end();
48 });
49 s.on('error', () => {
50 // Do nothing
51 });
52});
53timeoutServer.listen(
54 process.env.TIMEOUT_SERVER_PORT,
55 process.env.SIDECAR_HOSTNAME,
56 () => reportPort(timeoutServer)
57);
58 
59const endServer = net.createServer((s) => {
60 s.end();
61});
62endServer.listen(
63 process.env.END_SERVER_PORT,
64 process.env.SIDECAR_HOSTNAME,
65 () => reportPort(endServer)
66);
67 
68let count = 0;
69const serverThatDies = net.createServer(function (s) {
70 // We ignore the first event because wd_test checks for the connected state
71 // while preparing the sidecar test suite.
72 if (count++ > 0) {
73 serverThatDies.close();
74 }
75 s.end();
76});
77serverThatDies.listen(
78 process.env.SERVER_THAT_DIES_PORT,
79 process.env.SIDECAR_HOSTNAME,
80 () => reportPort(serverThatDies)
81);
82 
83const reconnectServer = net.createServer((s) => {
84 s.resume();
85 s.on('error', () => {
86 // Do nothing
87 });
88 s.write('hello\r\n');
89 s.on('end', () => {
90 s.end();
91 });
92});
93reconnectServer.listen(
94 process.env.RECONNECT_SERVER_PORT,
95 process.env.SIDECAR_HOSTNAME,
96 () => reportPort(reconnectServer)
97);