| 'use strict'; |
| const common = require('../common'); |
| const fixtures = require('../common/fixtures'); |
| |
| // This test verifies that http2 server support ALPNCallback option. |
| |
| if (!common.hasCrypto) common.skip('missing crypto'); |
| |
| const assert = require('assert'); |
| const h2 = require('http2'); |
| const tls = require('tls'); |
| |
| { |
| // Server sets two incompatible ALPN options: |
| assert.throws(() => h2.createSecureServer({ |
| ALPNCallback: () => 'a', |
| ALPNProtocols: ['b', 'c'] |
| }), (error) => error.code === 'ERR_TLS_ALPN_CALLBACK_WITH_PROTOCOLS'); |
| } |
| |
| { |
| const server = h2.createSecureServer({ |
| key: fixtures.readKey('rsa_private.pem'), |
| cert: fixtures.readKey('rsa_cert.crt'), |
| ALPNCallback: () => 'a', |
| }); |
| |
| server.on( |
| 'secureConnection', |
| common.mustCall((socket) => { |
| assert.strictEqual(socket.alpnProtocol, 'a'); |
| socket.end(); |
| server.close(); |
| }) |
| ); |
| |
| server.listen(0, common.mustCall(() => { |
| const client = tls.connect({ |
| port: server.address().port, |
| rejectUnauthorized: false, |
| ALPNProtocols: ['a'], |
| }, common.mustCall(() => { |
| assert.strictEqual(client.alpnProtocol, 'a'); |
| client.end(); |
| })); |
| })); |
| } |