1// Flags: --expose-internals 2'use strict'; 3 4const common = require('../common'); 5if (!common.hasCrypto) 6 common.skip('missing crypto'); 7 8// Test coverage for the updateOptionsBuffer method used internally 9// by the http2 implementation. 10 11const { updateOptionsBuffer } = require('internal/http2/util'); 12const { internalBinding } = require('internal/test/binding'); 13const { optionsBuffer } = internalBinding('http2'); 14const { ok, strictEqual } = require('assert'); 15 16const IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE = 0; 17const IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS = 1; 18const IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH = 2; 19const IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS = 3; 20const IDX_OPTIONS_PADDING_STRATEGY = 4; 21const IDX_OPTIONS_MAX_HEADER_LIST_PAIRS = 5; 22const IDX_OPTIONS_MAX_OUTSTANDING_PINGS = 6; 23const IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS = 7; 24const IDX_OPTIONS_MAX_SESSION_MEMORY = 8; 25const IDX_OPTIONS_MAX_SETTINGS = 9; 26const IDX_OPTIONS_FLAGS = 10; 27 28{ 29 updateOptionsBuffer({ 30 maxDeflateDynamicTableSize: 1, 31 maxReservedRemoteStreams: 2, 32 maxSendHeaderBlockLength: 3, 33 peerMaxConcurrentStreams: 4, 34 paddingStrategy: 5, 35 maxHeaderListPairs: 6, 36 maxOutstandingPings: 7, 37 maxOutstandingSettings: 8, 38 maxSessionMemory: 9, 39 maxSettings: 10, 40 }); 41 42 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE], 1); 43 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS], 2); 44 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH], 3); 45 strictEqual(optionsBuffer[IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS], 4); 46 strictEqual(optionsBuffer[IDX_OPTIONS_PADDING_STRATEGY], 5); 47 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_HEADER_LIST_PAIRS], 6); 48 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_OUTSTANDING_PINGS], 7); 49 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS], 8); 50 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_SESSION_MEMORY], 9); 51 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_SETTINGS], 10); 52 53 const flags = optionsBuffer[IDX_OPTIONS_FLAGS]; 54 55 ok(flags & (1 << IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE)); 56 ok(flags & (1 << IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS)); 57 ok(flags & (1 << IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH)); 58 ok(flags & (1 << IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS)); 59 ok(flags & (1 << IDX_OPTIONS_PADDING_STRATEGY)); 60 ok(flags & (1 << IDX_OPTIONS_MAX_HEADER_LIST_PAIRS)); 61 ok(flags & (1 << IDX_OPTIONS_MAX_OUTSTANDING_PINGS)); 62 ok(flags & (1 << IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS)); 63 ok(flags & (1 << IDX_OPTIONS_MAX_SETTINGS)); 64} 65 66{ 67 optionsBuffer[IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH] = 0; 68 optionsBuffer[IDX_OPTIONS_MAX_OUTSTANDING_PINGS] = 0; 69 70 updateOptionsBuffer({ 71 maxDeflateDynamicTableSize: 1, 72 maxReservedRemoteStreams: 2, 73 peerMaxConcurrentStreams: 4, 74 paddingStrategy: 5, 75 maxHeaderListPairs: 6 76 }); 77 78 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE], 1); 79 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS], 2); 80 strictEqual(optionsBuffer[IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS], 4); 81 strictEqual(optionsBuffer[IDX_OPTIONS_PADDING_STRATEGY], 5); 82 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_HEADER_LIST_PAIRS], 6); 83 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH], 0); 84 strictEqual(optionsBuffer[IDX_OPTIONS_MAX_OUTSTANDING_PINGS], 0); 85 86 const flags = optionsBuffer[IDX_OPTIONS_FLAGS]; 87 88 ok(flags & (1 << IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE)); 89 ok(flags & (1 << IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS)); 90 ok(flags & (1 << IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS)); 91 ok(flags & (1 << IDX_OPTIONS_PADDING_STRATEGY)); 92 ok(flags & (1 << IDX_OPTIONS_MAX_HEADER_LIST_PAIRS)); 93 94 ok(!(flags & (1 << IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH))); 95 ok(!(flags & (1 << IDX_OPTIONS_MAX_OUTSTANDING_PINGS))); 96} 97