| 'use strict'; |
| |
| // Tests the basic operation of creating a plaintext or TLS |
| // HTTP2 server. The server does not do anything at this point |
| // other than start listening. |
| |
| const common = require('../common'); |
| const commonFixtures = require('../common/fixtures'); |
| |
| if (!common.hasCrypto) |
| common.skip('missing crypto'); |
| |
| const assert = require('assert'); |
| const http2 = require('http2'); |
| const tls = require('tls'); |
| const net = require('net'); |
| |
| const options = { |
| key: commonFixtures.readKey('agent2-key.pem'), |
| cert: commonFixtures.readKey('agent2-cert.pem') |
| }; |
| |
| // There should not be any throws. |
| const serverTLS = http2.createSecureServer(options, () => {}); |
| serverTLS.listen(0, common.mustCall(() => serverTLS.close())); |
| |
| // There should not be an error event reported either. |
| serverTLS.on('error', common.mustNotCall()); |
| |
| const server = http2.createServer(options, common.mustNotCall()); |
| server.listen(0, common.mustCall(() => server.close())); |
| |
| // There should not be an error event reported either. |
| server.on('error', common.mustNotCall()); |
| |
| // Test the plaintext server socket timeout. |
| { |
| let client; |
| const server = http2.createServer(); |
| server.on('timeout', common.mustCall(() => { |
| server.close(); |
| if (client) |
| client.end(); |
| })); |
| server.setTimeout(common.platformTimeout(1000), common.mustCall()); |
| server.listen(0, common.mustCall(() => { |
| const port = server.address().port; |
| client = net.connect(port, common.mustCall()); |
| })); |
| } |
| |
| // Test that `http2.createServer()` supports `net.Server` options. |
| { |
| const server = http2.createServer({ allowHalfOpen: true }); |
| |
| server.on('connection', common.mustCall((socket) => { |
| assert.strictEqual(socket.allowHalfOpen, true); |
| socket.end(); |
| server.close(); |
| })); |
| |
| assert.strictEqual(server.allowHalfOpen, true); |
| |
| server.listen(0, common.mustCall(() => { |
| const port = server.address().port; |
| const socket = net.connect(port, common.mustCall()); |
| socket.resume(); |
| })); |
| } |
| |
| // Test the secure server socket timeout. |
| { |
| let client; |
| const server = http2.createSecureServer(options); |
| server.on('timeout', common.mustCall(() => { |
| server.close(); |
| if (client) |
| client.end(); |
| })); |
| server.setTimeout(common.platformTimeout(1000), common.mustCall()); |
| server.listen(0, common.mustCall(() => { |
| const port = server.address().port; |
| client = tls.connect({ |
| port: port, |
| rejectUnauthorized: false, |
| ALPNProtocols: ['h2'] |
| }, common.mustCall()); |
| })); |
| } |
| |
| // Test that `http2.createSecureServer()` supports `net.Server` options. |
| { |
| const server = http2.createSecureServer({ |
| allowHalfOpen: true, |
| ...options |
| }); |
| |
| server.on('secureConnection', common.mustCall((socket) => { |
| assert.strictEqual(socket.allowHalfOpen, true); |
| socket.end(); |
| server.close(); |
| })); |
| |
| assert.strictEqual(server.allowHalfOpen, true); |
| |
| server.listen(0, common.mustCall(() => { |
| const port = server.address().port; |
| const socket = tls.connect({ |
| port: port, |
| rejectUnauthorized: false, |
| ALPNProtocols: ['h2'] |
| }, common.mustCall()); |
| socket.resume(); |
| })); |
| } |