| 'use strict'; |
| |
| // Tests that attempting to send too many non-acknowledged |
| // settings frames will result in an error |
| |
| const common = require('../common'); |
| if (!common.hasCrypto) |
| common.skip('missing crypto'); |
| const assert = require('assert'); |
| const h2 = require('http2'); |
| |
| const maxOutstandingSettings = 2; |
| |
| function doTest(session) { |
| session.on('error', common.expectsError({ |
| code: 'ERR_HTTP2_MAX_PENDING_SETTINGS_ACK', |
| type: Error |
| })); |
| for (let n = 0; n < maxOutstandingSettings; n++) { |
| session.settings({ enablePush: false }); |
| assert.strictEqual(session.pendingSettingsAck, true); |
| } |
| } |
| |
| { |
| const server = h2.createServer({ maxOutstandingSettings }); |
| server.on('stream', common.mustNotCall()); |
| server.once('session', common.mustCall((session) => doTest(session))); |
| |
| server.listen(0, common.mustCall(() => { |
| const client = h2.connect(`http://localhost:${server.address().port}`); |
| client.on('error', common.expectsError({ |
| code: 'ERR_HTTP2_SESSION_ERROR', |
| message: 'Session closed with error code 2', |
| })); |
| client.on('close', common.mustCall(() => server.close())); |
| })); |
| } |
| |
| { |
| const server = h2.createServer(); |
| server.on('stream', common.mustNotCall()); |
| |
| server.listen(0, common.mustCall(() => { |
| const client = h2.connect(`http://localhost:${server.address().port}`, |
| { maxOutstandingSettings }); |
| client.on('connect', () => doTest(client)); |
| client.on('close', () => server.close()); |
| })); |
| } |