http2: support ALPNCallback option · nodejs/node@b0ebd23

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,47 @@

1+

'use strict';

2+

const common = require('../common');

3+

const fixtures = require('../common/fixtures');

4+
5+

// This test verifies that http2 server support ALPNCallback option.

6+
7+

if (!common.hasCrypto) common.skip('missing crypto');

8+
9+

const assert = require('assert');

10+

const h2 = require('http2');

11+

const tls = require('tls');

12+
13+

{

14+

// Server sets two incompatible ALPN options:

15+

assert.throws(() => h2.createSecureServer({

16+

ALPNCallback: () => 'a',

17+

ALPNProtocols: ['b', 'c']

18+

}), (error) => error.code === 'ERR_TLS_ALPN_CALLBACK_WITH_PROTOCOLS');

19+

}

20+
21+

{

22+

const server = h2.createSecureServer({

23+

key: fixtures.readKey('rsa_private.pem'),

24+

cert: fixtures.readKey('rsa_cert.crt'),

25+

ALPNCallback: () => 'a',

26+

});

27+
28+

server.on(

29+

'secureConnection',

30+

common.mustCall((socket) => {

31+

assert.strictEqual(socket.alpnProtocol, 'a');

32+

socket.end();

33+

server.close();

34+

})

35+

);

36+
37+

server.listen(0, function() {

38+

const client = tls.connect({

39+

port: server.address().port,

40+

rejectUnauthorized: false,

41+

ALPNProtocols: ['a'],

42+

}, common.mustCall(() => {

43+

assert.strictEqual(client.alpnProtocol, 'a');

44+

client.end();

45+

}));

46+

});

47+

}