From a83fceafc743f6b6ee75f58446b535e9ec0a7a88 Mon Sep 17 00:00:00 2001 From: robobun Date: Thu, 27 Nov 2025 16:46:15 -0800 Subject: [PATCH] fix(http2): return server from setTimeout for method chaining (#25138) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Make `Http2Server.setTimeout()` and `Http2SecureServer.setTimeout()` return `this` to enable method chaining - Matches Node.js behavior where `server.setTimeout(1000).listen()` works Fixes #24924 ## Test plan - [x] Test that `Http2Server.setTimeout()` returns server instance - [x] Test that `Http2SecureServer.setTimeout()` returns server instance - [x] Test method chaining works (e.g., `server.setTimeout(1000).close()`) - [x] Tests pass with debug build, fail with system bun 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Bot Co-authored-by: Claude Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- src/js/node/http2.ts | 2 + test/regression/issue/24924.test.ts | 75 +++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 test/regression/issue/24924.test.ts diff --git a/src/js/node/http2.ts b/src/js/node/http2.ts index 813af05d43..0b2a968766 100644 --- a/src/js/node/http2.ts +++ b/src/js/node/http2.ts @@ -3807,6 +3807,7 @@ class Http2Server extends net.Server { if (typeof callback === "function") { this.on("timeout", callback); } + return this; } updateSettings(settings) { assertSettings(settings); @@ -3900,6 +3901,7 @@ class Http2SecureServer extends tls.Server { if (typeof callback === "function") { this.on("timeout", callback); } + return this; } updateSettings(settings) { assertSettings(settings); diff --git a/test/regression/issue/24924.test.ts b/test/regression/issue/24924.test.ts new file mode 100644 index 0000000000..b2cd6912a1 --- /dev/null +++ b/test/regression/issue/24924.test.ts @@ -0,0 +1,75 @@ +import { expect, test } from "bun:test"; +import * as http2 from "http2"; + +test("Http2Server.setTimeout returns server instance for method chaining", () => { + const server = http2.createServer(); + + try { + const result = server.setTimeout(1000); + expect(result).toBe(server); + } finally { + server.close(); + } +}); + +test("Http2Server.setTimeout with callback returns server instance", () => { + const server = http2.createServer(); + const callback = () => {}; + + try { + const result = server.setTimeout(1000, callback); + expect(result).toBe(server); + } finally { + server.close(); + } +}); + +test("Http2Server.setTimeout allows method chaining with close", () => { + const server = http2.createServer(); + + // This should not throw - chaining should work + expect(() => { + server.setTimeout(1000).close(); + }).not.toThrow(); +}); + +test("Http2SecureServer.setTimeout returns server instance for method chaining", () => { + const server = http2.createSecureServer({ + key: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7VJTUt9Us8cKj\nMzEfYyjiWA4R4/M2bS1+fWIcPm15A8+raZ4dp+/PJE0NOsmuurvzNCS138P6AqQ0\njdsEYDbPszN+X9XYqXqYfKmSBGbGwPqaqCGhqtRaKNl1s1x5dn/7CJPxr/vHNQXL\nJZ+kP1Mb9FsMqmHbYJFuJB/T8fJuMJRKqY7J1W3J+cVvvvQy2eJXqZqVj1/lXZXR\nUH0WqWdQnfnPj3Lh6qKm8Cf8qh3Uug2o3GWG0UE6YwLqNfBCULrOeRLtCqkbMdHb\nF7XvL0kHNvf3eFiVZ8cJ/KcIVIEhiqOQkZj3qMRqGqEP0H9dqYHK1Dj5cLxqxXCL\nLKxKP0SZAgMBAAECggEAZj3P3V3fKKvqZgPpzLQrjwHpBKZOhRWTR+zQfAVqN7rW\nc3MrdOzP7cVLN7CYsPZF7JpXY5/hYvjOXPQr5tqKJZ/+T5hYJ4CUYhJbMlxL0pIR\njXNLJFVz3ZQJNmWAe3h3H0TpE7oZcYR7nHVWKZ4I3WxX1TxT3a8QN6BXGCbJwYEk\n5QI4SLFiV3f3Hh0xQZPPfZGP/M3EVGfEOxZWqkZxkDCj5F9DH+r0J2VxLM5zWMjR\n5xNLkH1TlJ3Lg6w2YWmLKV5KdQcX+fKJJCx7oGhPIkvHCfKJ1MK3Y/QG9TFG3qF0\ndJVWBVLLU7K7iLaBN3jZHJJhZqhGXPxGUMaZ6EfgQQKBgQDmrE3PVB8uZLb0Gjzn\nNx0C+A8MX4J4fW0r5WfXZfL7V7fR9V9P3bN6Q9FVyp3mZJ9T/xHpCQQJ1KhKqS0k\nV7NcJL5ZWU1nX1MxFcJMCYYRVpXVp3Jh0O2Q7tWxR+zYV9JxJL1Q1Q3Z1dFqL9JQ\nK8qVxV3hGgXJFqKGdKxKqKqKqQKBgQDQfWZI/YQqv8JhxVWdJbP8O5J1Z0xVFqQP\n6LF3x6vJ0Z+7xI9QxJpQF9xN1K6hJ9JpF+ZQ7J3V1F0L5Q0J9V0xL+F1J0xF9F1J\nV0J0F1J9V0J0F1J9V0J0F9V1J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1J\nV0J0F1JV0J0F1JQKBgFqF3V1F0L5Q0J9V0xL+F1J0xF9F1JV0J0F1J9V0J0F1J9\nV0J0F9V1J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1Jp\nAoGBAKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqp\nAoGAV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0\nF1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F\n1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1\nJV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1J\nV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n-----END PRIVATE KEY-----", + cert: "-----BEGIN CERTIFICATE-----\nMIIDazCCAlOgAwIBAgIUXqYYXq7XqYq7q7q7q7q7q7q7q7owDQYJKoZIhvcNAQEL\nBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM\nGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDAxMDEwMDAwMDBaFw0yNTAx\nMDEwMDAwMDBaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw\nHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB\nAQUAA4IBDwAwggEKAoIBAQC7VJTUt9Us8cKjMzEfYyjiWA4R4/M2bS1+fWIcPm15\nA8+raZ4dp+/PJE0NOsmuurvzNCS138P6AqQ0jdsEYDbPszN+X9XYqXqYfKmSBGbG\nwPqaqCGhqtRaKNl1s1x5dn/7CJPxr/vHNQXLJZ+kP1Mb9FsMqmHbYJFuJB/T8fJu\nMJRKqY7J1W3J+cVvvvQy2eJXqZqVj1/lXZXRUH0WqWdQnfnPj3Lh6qKm8Cf8qh3U\nug2o3GWG0UE6YwLqNfBCULrOeRLtCqkbMdHbF7XvL0kHNvf3eFiVZ8cJ/KcIVIEh\niqOQkZj3qMRqGqEP0H9dqYHK1Dj5cLxqxXCLLKxKP0SZAgMBAAGjUzBRMB0GA1Ud\nDgQWBBQQXqYYXq7XqYq7q7q7q7q7q7q7qzAfBgNVHSMEGDAWgBQQXqYYXq7XqYq7\nq7q7q7q7q7q7qzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC7\nVJTUt9Us8cKjMzEfYyjiWA4R4/M2bS1+fWIcPm15A8+raZ4dp+/PJE0NOsmuurvz\nNCS138P6AqQ0jdsEYDbPszN+X9XYqXqYfKmSBGbGwPqaqCGhqtRaKNl1s1x5dn/7\nCJPxr/vHNQXLJZ+kP1Mb9FsMqmHbYJFuJB/T8fJuMJRKqY7J1W3J+cVvvvQy2eJX\nqZqVj1/lXZXRUH0WqWdQnfnPj3Lh6qKm8Cf8qh3Uug2o3GWG0UE6YwLqNfBCULrO\neRLtCqkbMdHbF7XvL0kHNvf3eFiVZ8cJ/KcIVIEhiqOQkZj3qMRqGqEP0H9dqYHK\n1Dj5cLxqxXCLLKxKP0SZ\n-----END CERTIFICATE-----", + }); + + try { + const result = server.setTimeout(1000); + expect(result).toBe(server); + } finally { + server.close(); + } +}); + +test("Http2SecureServer.setTimeout with callback returns server instance", () => { + const server = http2.createSecureServer({ + key: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7VJTUt9Us8cKj\nMzEfYyjiWA4R4/M2bS1+fWIcPm15A8+raZ4dp+/PJE0NOsmuurvzNCS138P6AqQ0\njdsEYDbPszN+X9XYqXqYfKmSBGbGwPqaqCGhqtRaKNl1s1x5dn/7CJPxr/vHNQXL\nJZ+kP1Mb9FsMqmHbYJFuJB/T8fJuMJRKqY7J1W3J+cVvvvQy2eJXqZqVj1/lXZXR\nUH0WqWdQnfnPj3Lh6qKm8Cf8qh3Uug2o3GWG0UE6YwLqNfBCULrOeRLtCqkbMdHb\nF7XvL0kHNvf3eFiVZ8cJ/KcIVIEhiqOQkZj3qMRqGqEP0H9dqYHK1Dj5cLxqxXCL\nLKxKP0SZAgMBAAECggEAZj3P3V3fKKvqZgPpzLQrjwHpBKZOhRWTR+zQfAVqN7rW\nc3MrdOzP7cVLN7CYsPZF7JpXY5/hYvjOXPQr5tqKJZ/+T5hYJ4CUYhJbMlxL0pIR\njXNLJFVz3ZQJNmWAe3h3H0TpE7oZcYR7nHVWKZ4I3WxX1TxT3a8QN6BXGCbJwYEk\n5QI4SLFiV3f3Hh0xQZPPfZGP/M3EVGfEOxZWqkZxkDCj5F9DH+r0J2VxLM5zWMjR\n5xNLkH1TlJ3Lg6w2YWmLKV5KdQcX+fKJJCx7oGhPIkvHCfKJ1MK3Y/QG9TFG3qF0\ndJVWBVLLU7K7iLaBN3jZHJJhZqhGXPxGUMaZ6EfgQQKBgQDmrE3PVB8uZLb0Gjzn\nNx0C+A8MX4J4fW0r5WfXZfL7V7fR9V9P3bN6Q9FVyp3mZJ9T/xHpCQQJ1KhKqS0k\nV7NcJL5ZWU1nX1MxFcJMCYYRVpXVp3Jh0O2Q7tWxR+zYV9JxJL1Q1Q3Z1dFqL9JQ\nK8qVxV3hGgXJFqKGdKxKqKqKqQKBgQDQfWZI/YQqv8JhxVWdJbP8O5J1Z0xVFqQP\n6LF3x6vJ0Z+7xI9QxJpQF9xN1K6hJ9JpF+ZQ7J3V1F0L5Q0J9V0xL+F1J0xF9F1J\nV0J0F1J9V0J0F1J9V0J0F9V1J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1J\nV0J0F1JV0J0F1JQKBgFqF3V1F0L5Q0J9V0xL+F1J0xF9F1JV0J0F1J9V0J0F1J9\nV0J0F9V1J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1Jp\nAoGBAKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqp\nAoGAV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0\nF1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F\n1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1\nJV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1J\nV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n-----END PRIVATE KEY-----", + cert: "-----BEGIN CERTIFICATE-----\nMIIDazCCAlOgAwIBAgIUXqYYXq7XqYq7q7q7q7q7q7q7q7owDQYJKoZIhvcNAQEL\nBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM\nGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDAxMDEwMDAwMDBaFw0yNTAx\nMDEwMDAwMDBaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw\nHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB\nAQUAA4IBDwAwggEKAoIBAQC7VJTUt9Us8cKjMzEfYyjiWA4R4/M2bS1+fWIcPm15\nA8+raZ4dp+/PJE0NOsmuurvzNCS138P6AqQ0jdsEYDbPszN+X9XYqXqYfKmSBGbG\nwPqaqCGhqtRaKNl1s1x5dn/7CJPxr/vHNQXLJZ+kP1Mb9FsMqmHbYJFuJB/T8fJu\nMJRKqY7J1W3J+cVvvvQy2eJXqZqVj1/lXZXRUH0WqWdQnfnPj3Lh6qKm8Cf8qh3U\nug2o3GWG0UE6YwLqNfBCULrOeRLtCqkbMdHbF7XvL0kHNvf3eFiVZ8cJ/KcIVIEh\niqOQkZj3qMRqGqEP0H9dqYHK1Dj5cLxqxXCLLKxKP0SZAgMBAAGjUzBRMB0GA1Ud\nDgQWBBQQXqYYXq7XqYq7q7q7q7q7q7q7qzAfBgNVHSMEGDAWgBQQXqYYXq7XqYq7\nq7q7q7q7q7q7qzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC7\nVJTUt9Us8cKjMzEfYyjiWA4R4/M2bS1+fWIcPm15A8+raZ4dp+/PJE0NOsmuurvz\nNCS138P6AqQ0jdsEYDbPszN+X9XYqXqYfKmSBGbGwPqaqCGhqtRaKNl1s1x5dn/7\nCJPxr/vHNQXLJZ+kP1Mb9FsMqmHbYJFuJB/T8fJuMJRKqY7J1W3J+cVvvvQy2eJX\nqZqVj1/lXZXRUH0WqWdQnfnPj3Lh6qKm8Cf8qh3Uug2o3GWG0UE6YwLqNfBCULrO\neRLtCqkbMdHbF7XvL0kHNvf3eFiVZ8cJ/KcIVIEhiqOQkZj3qMRqGqEP0H9dqYHK\n1Dj5cLxqxXCLLKxKP0SZ\n-----END CERTIFICATE-----", + }); + const callback = () => {}; + + try { + const result = server.setTimeout(1000, callback); + expect(result).toBe(server); + } finally { + server.close(); + } +}); + +test("Http2SecureServer.setTimeout allows method chaining with close", () => { + const server = http2.createSecureServer({ + key: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7VJTUt9Us8cKj\nMzEfYyjiWA4R4/M2bS1+fWIcPm15A8+raZ4dp+/PJE0NOsmuurvzNCS138P6AqQ0\njdsEYDbPszN+X9XYqXqYfKmSBGbGwPqaqCGhqtRaKNl1s1x5dn/7CJPxr/vHNQXL\nJZ+kP1Mb9FsMqmHbYJFuJB/T8fJuMJRKqY7J1W3J+cVvvvQy2eJXqZqVj1/lXZXR\nUH0WqWdQnfnPj3Lh6qKm8Cf8qh3Uug2o3GWG0UE6YwLqNfBCULrOeRLtCqkbMdHb\nF7XvL0kHNvf3eFiVZ8cJ/KcIVIEhiqOQkZj3qMRqGqEP0H9dqYHK1Dj5cLxqxXCL\nLKxKP0SZAgMBAAECggEAZj3P3V3fKKvqZgPpzLQrjwHpBKZOhRWTR+zQfAVqN7rW\nc3MrdOzP7cVLN7CYsPZF7JpXY5/hYvjOXPQr5tqKJZ/+T5hYJ4CUYhJbMlxL0pIR\njXNLJFVz3ZQJNmWAe3h3H0TpE7oZcYR7nHVWKZ4I3WxX1TxT3a8QN6BXGCbJwYEk\n5QI4SLFiV3f3Hh0xQZPPfZGP/M3EVGfEOxZWqkZxkDCj5F9DH+r0J2VxLM5zWMjR\n5xNLkH1TlJ3Lg6w2YWmLKV5KdQcX+fKJJCx7oGhPIkvHCfKJ1MK3Y/QG9TFG3qF0\ndJVWBVLLU7K7iLaBN3jZHJJhZqhGXPxGUMaZ6EfgQQKBgQDmrE3PVB8uZLb0Gjzn\nNx0C+A8MX4J4fW0r5WfXZfL7V7fR9V9P3bN6Q9FVyp3mZJ9T/xHpCQQJ1KhKqS0k\nV7NcJL5ZWU1nX1MxFcJMCYYRVpXVp3Jh0O2Q7tWxR+zYV9JxJL1Q1Q3Z1dFqL9JQ\nK8qVxV3hGgXJFqKGdKxKqKqKqQKBgQDQfWZI/YQqv8JhxVWdJbP8O5J1Z0xVFqQP\n6LF3x6vJ0Z+7xI9QxJpQF9xN1K6hJ9JpF+ZQ7J3V1F0L5Q0J9V0xL+F1J0xF9F1J\nV0J0F1J9V0J0F1J9V0J0F9V1J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1J\nV0J0F1JV0J0F1JQKBgFqF3V1F0L5Q0J9V0xL+F1J0xF9F1JV0J0F1J9V0J0F1J9\nV0J0F9V1J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1Jp\nAoGBAKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK\nqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqKqp\nAoGAV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0\nF1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F\n1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1\nJV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1J\nV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV0J0F1JV\n-----END PRIVATE KEY-----", + cert: "-----BEGIN CERTIFICATE-----\nMIIDazCCAlOgAwIBAgIUXqYYXq7XqYq7q7q7q7q7q7q7q7owDQYJKoZIhvcNAQEL\nBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM\nGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDAxMDEwMDAwMDBaFw0yNTAx\nMDEwMDAwMDBaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw\nHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB\nAQUAA4IBDwAwggEKAoIBAQC7VJTUt9Us8cKjMzEfYyjiWA4R4/M2bS1+fWIcPm15\nA8+raZ4dp+/PJE0NOsmuurvzNCS138P6AqQ0jdsEYDbPszN+X9XYqXqYfKmSBGbG\nwPqaqCGhqtRaKNl1s1x5dn/7CJPxr/vHNQXLJZ+kP1Mb9FsMqmHbYJFuJB/T8fJu\nMJRKqY7J1W3J+cVvvvQy2eJXqZqVj1/lXZXRUH0WqWdQnfnPj3Lh6qKm8Cf8qh3U\nug2o3GWG0UE6YwLqNfBCULrOeRLtCqkbMdHbF7XvL0kHNvf3eFiVZ8cJ/KcIVIEh\niqOQkZj3qMRqGqEP0H9dqYHK1Dj5cLxqxXCLLKxKP0SZAgMBAAGjUzBRMB0GA1Ud\nDgQWBBQQXqYYXq7XqYq7q7q7q7q7q7q7qzAfBgNVHSMEGDAWgBQQXqYYXq7XqYq7\nq7q7q7q7q7q7qzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC7\nVJTUt9Us8cKjMzEfYyjiWA4R4/M2bS1+fWIcPm15A8+raZ4dp+/PJE0NOsmuurvz\nNCS138P6AqQ0jdsEYDbPszN+X9XYqXqYfKmSBGbGwPqaqCGhqtRaKNl1s1x5dn/7\nCJPxr/vHNQXLJZ+kP1Mb9FsMqmHbYJFuJB/T8fJuMJRKqY7J1W3J+cVvvvQy2eJX\nqZqVj1/lXZXRUH0WqWdQnfnPj3Lh6qKm8Cf8qh3Uug2o3GWG0UE6YwLqNfBCULrO\neRLtCqkbMdHbF7XvL0kHNvf3eFiVZ8cJ/KcIVIEhiqOQkZj3qMRqGqEP0H9dqYHK\n1Dj5cLxqxXCLLKxKP0SZ\n-----END CERTIFICATE-----", + }); + + // This should not throw - chaining should work + expect(() => { + server.setTimeout(1000).close(); + }).not.toThrow(); +});