Skip to content
File

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

javascript126 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 tls-nodejs-test tests.
6const tls = require('node:tls');
7 
8function reportPort(server) {
9 const address = server.address();
10 console.info(`Listening on ${address.address}:${address.port}`);
11}
12 
13// Taken from https://github.com/nodejs/node/blob/304743655d5236c2edc39094336ee2667600b684/test/fixtures/keys/agent1-key.pem
14const AGENT1_KEY_PEM = `-----BEGIN PRIVATE KEY-----
15MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCn5Ieb/G+/y5iD
16MPWMJTjHhUDb4U5UiWyD69/jJ3W3tKPS62PaOHaOyuhd4aqNT0q3Eq3VhwlqkuoU
17RUmE+8r7QkU9vnIcALf9/rvt8g9K1BAx+EUPjFwWOXgjCs/8Z5KPDrQ3cKxFTzkB
187TCcequLz/cKPet7lA16ZRe9d5QlhuUWqGlUuIAu78h0I7OZKrhE4bp5ZJcHGtO8
193JLp4CLxE28MZgzlxebvvLS+1fohoc1IFaxG0yxwYawPsjSFDaTLlM/IqL6imLUH
20+KHrI9QIEWkrsNfqaTu5FlsKA5OrecFePw5Mgm65ljtRz+hISW2YFYT0GB07oaUl
21c3HnNgLpAgMBAAECggEAGGIaR887s5EwDy2XG8l0G5YAu25XX/OtbONe2rCqagm0
22GTfSgqjcnxRc9vWFPYycf0YZNP+toGrB0DvX15Zx/le7kqIMFIEON7c9N+uFyQpP
23Z9J0xTNPVHL4Pa6eUjwAjwJFrh+RBWfiEaOPAcrXCzEi4bvobUQtSO9RqVSqkWBv
24wEp6oI0gJvIpK7pRrUTCTR0qfFXTsaabvpWZvdmMtoDgiTRJhg2Dhvzy4Ox1y4/Z
25fNKO/+KirKLS/FNje6b2LbzxFZ9YePDn0w3XD/iLaRduJ3UHNuMCl3tl3zVlgvKI
26HhlCBnXcAbSWn3WqcQAUF57eRbwlt11za/gZi57DGQKBgQDRUtQthF9JleEoZ2YF
27tQBanwz3AzEV2KHt3QrbjBxq3zhipx6K1iFr2SB6nDOigbJB/87gtoBdBbg9ujwj
282K3bO3FoQsCLTikXUJ5OD01vCY4RDAjddNVdnJEtbONEZOVSV1GGxtEzMsrJT1Gs
292LKmiSXEMRQhXJWgFaif8sFQ7wKBgQDNVKIS9Rh7ShSzXUhRwVmNvfHSiYEgeeGz
303mJpAUKMHp2WzWZrWfTOBfm4+2/dg7Q8dTE6okzS/I+6a3PPnB3lTSLYJmnI64DB
31YccKKuxpk4zixxTWQk6YtJfBCyb16qWQoXAHBM7OVr3hd5egArLGNKxafERH8orX
32kY2rtzs5pwKBgEZJX8Gg7zYQQ7iDb7h+3I2RVpMi2TqSsVzjmh+6Xlhsd8x4fUL1
33P+es0sEY7iWlEywiL185KMUThJgFjugie85fmWb+8xRTvGx9v4pKjR+5v6BtwBRM
34hNCYIA92vqFal74cX923qMteRMVwAubdJK/S4YGNUUsagYttel+q7cq1AoGAHvn4
35pYGCWv83FkQpZ+QSfZa9R7Tk3SBmE3umPw8omfj4b0q3e9SLYRV3sheErddztnc7
36oQvhKSdfC5GwXA7CV9iGPDO3W89jkkkM/RSyq87Nv1ynYReJwfHkvwPOseTfa21f
37eD+ab3iYls4y+rnNfKdvpQsARhZqKdFUnSY8chsCgYBKx7zcgqSg+bdM9DB8Wzph
384ZQBLo3n2HZGpNTfT5UaKguYXqswQ5F/zPfxJBIwTAfL92bJnzRZpzVPcPg6QHhR
390DNeltg5Ij061Zyz2/RnDHS16uyQNENb4lcSlqdanlOsluVqE0GQC8y+Rvf+tA10
40h0ttUVaTtmba2EGRzoaNWA==
41-----END PRIVATE KEY-----`;
42 
43// Taken from https://github.com/nodejs/node/blob/304743655d5236c2edc39094336ee2667600b684/test/fixtures/keys/agent1-cert.pem
44const AGENT1_CERT_PEM = `-----BEGIN CERTIFICATE-----
45MIIDeDCCAmCgAwIBAgIUdzLeCZ2khgssLeLiVYURZo/Tx8EwDQYJKoZIhvcNAQEL
46BQAwTTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxFDASBgNVBAcM
47C0plcnNleSBDaXR5MRMwEQYDVQQKDApDbG91ZGZsYXJlMB4XDTI1MDMwNTE2MTUy
48MVoXDTI3MDMwNTE2MTUyMVowRTELMAkGA1UEBhMCVVMxEzARBgNVBAgMClNvbWUt
49U3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJ
50KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKfkh5v8b7/LmIMw9YwlOMeFQNvhTlSJ
51bIPr3+Mndbe0o9LrY9o4do7K6F3hqo1PSrcSrdWHCWqS6hRFSYT7yvtCRT2+chwA
52t/3+u+3yD0rUEDH4RQ+MXBY5eCMKz/xnko8OtDdwrEVPOQHtMJx6q4vP9wo963uU
53DXplF713lCWG5RaoaVS4gC7vyHQjs5kquEThunlklwca07zckungIvETbwxmDOXF
545u+8tL7V+iGhzUgVrEbTLHBhrA+yNIUNpMuUz8iovqKYtQf4oesj1AgRaSuw1+pp
55O7kWWwoDk6t5wV4/DkyCbrmWO1HP6EhJbZgVhPQYHTuhpSVzcec2AukCAwEAAaNY
56MFYwFAYDVR0RBA0wC4IJbG9jYWxob3N0MB0GA1UdDgQWBBT1Uf2E3xOj0HPkG2e5
57ZiCx0GSYKDAfBgNVHSMEGDAWgBRlkgGmcLtZzVTUu0MvdYI8I2gwCTANBgkqhkiG
589w0BAQsFAAOCAQEAuv0c58unZvUOK2nL007Vp/bjjfKf/rpsvlHKgZ2Oa4Xik/Io
59O3Jh4/uTlTlq0GI5zSTQSdiI28yiKqGRmCtGkES9mjPzUkL+pTj/pFgyCjYfu/Z0
60lIn1zwVEp1AXxhID3QvUDEeEM5+sE3i1KlGpF/0eYFJN6/ClS+VbJXmacdJATGnU
61W3QKeel2BcFNDFreh8g+Ebb6K2P3k4+PHTWAuzcqu7eIEe4cKEjIDXI9vdckjq4Q
62Nbc7EfWb2Gh/6S/Uz6y+AIN3l7ybJTqzWnOWZPCzoMpJuS+d5ir36DJ3BpXKCTHT
63VRpM7av//cc39AeMvU6RTQSYVDy4NJx+mfRqLw==
64-----END CERTIFICATE-----`;
65 
66const options = {
67 key: AGENT1_KEY_PEM,
68 cert: AGENT1_CERT_PEM,
69 rejectUnauthorized: true,
70};
71 
72const echoServer = tls.createServer(options, (s) => {
73 s.setTimeout(100);
74 s.on('error', () => {
75 // Do nothing
76 });
77 s.pipe(s);
78});
79echoServer.listen(
80 process.env.ECHO_SERVER_PORT,
81 process.env.SIDECAR_HOSTNAME,
82 () => reportPort(echoServer)
83);
84 
85// Taken from test-tls-connect-given-socket.js
86const helloServer = tls.createServer(options, (socket) => {
87 socket.end('Hello');
88});
89helloServer.listen(
90 process.env.HELLO_SERVER_PORT,
91 process.env.SIDECAR_HOSTNAME,
92 () => reportPort(helloServer)
93);
94 
95const jsStreamServer = tls.createServer(options, (socket) => {
96 socket.resume();
97 socket.end('ohai');
98});
99jsStreamServer.listen(
100 process.env.JS_STREAM_SERVER_PORT,
101 process.env.SIDECAR_HOSTNAME,
102 () => reportPort(jsStreamServer)
103);
104 
105// Taken from test/parallel/test-tls-streamwrap-buffersize.js
106const streamWrapServer = tls.createServer(options, (socket) => {
107 let str = '';
108 socket.setEncoding('utf-8');
109 socket.on('data', (chunk) => {
110 str += chunk;
111 });
112 
113 socket.on(
114 'end',
115 common.mustCall(() => {
116 strictEqual(str, 'a'.repeat(iter - 1));
117 server.close();
118 })
119 );
120});
121streamWrapServer.listen(
122 process.env.STREAM_WRAP_SERVER_PORT,
123 process.env.SIDECAR_HOSTNAME,
124 () => reportPort(streamWrapServer)
125);