1'use strict'; 2 3const common = require('../common'); 4if (!common.hasCrypto) 5 common.skip('missing crypto'); 6const assert = require('assert'); 7const http2 = require('http2'); 8 9// Http2ServerResponse.writeHead should support arrays and nested arrays 10 11{ 12 const server = http2.createServer(); 13 server.listen(0, common.mustCall(() => { 14 const port = server.address().port; 15 16 server.once('request', common.mustCall((request, response) => { 17 const returnVal = response.writeHead(200, [ 18 ['foo', 'bar'], 19 ['ABC', 123], 20 ]); 21 assert.strictEqual(returnVal, response); 22 response.end(common.mustCall(() => { server.close(); })); 23 })); 24 25 const client = http2.connect(`http://localhost:${port}`, common.mustCall(() => { 26 const request = client.request(); 27 28 request.on('response', common.mustCall((headers) => { 29 assert.strictEqual(headers.foo, 'bar'); 30 assert.strictEqual(headers.abc, '123'); 31 assert.strictEqual(headers[':status'], 200); 32 }, 1)); 33 request.on('end', common.mustCall(() => { 34 client.close(); 35 })); 36 request.end(); 37 request.resume(); 38 })); 39 })); 40} 41 42{ 43 const server = http2.createServer(); 44 server.listen(0, common.mustCall(() => { 45 const port = server.address().port; 46 47 server.once('request', common.mustCall((request, response) => { 48 const returnVal = response.writeHead(200, ['foo', 'bar', 'ABC', 123]); 49 assert.strictEqual(returnVal, response); 50 response.end(common.mustCall(() => { server.close(); })); 51 })); 52 53 const client = http2.connect(`http://localhost:${port}`, common.mustCall(() => { 54 const request = client.request(); 55 56 request.on('response', common.mustCall((headers) => { 57 assert.strictEqual(headers.foo, 'bar'); 58 assert.strictEqual(headers.abc, '123'); 59 assert.strictEqual(headers[':status'], 200); 60 }, 1)); 61 request.on('end', common.mustCall(() => { 62 client.close(); 63 })); 64 request.end(); 65 request.resume(); 66 })); 67 })); 68} 69 70{ 71 const server = http2.createServer(); 72 server.listen(0, common.mustCall(() => { 73 const port = server.address().port; 74 75 server.once('request', common.mustCall((request, response) => { 76 try { 77 response.writeHead(200, ['foo', 'bar', 'ABC', 123, 'extra']); 78 } catch (err) { 79 assert.strictEqual(err.code, 'ERR_INVALID_ARG_VALUE'); 80 } 81 82 response.end(common.mustCall(() => { server.close(); })); 83 })); 84 85 const client = http2.connect(`http://localhost:${port}`, common.mustCall(() => { 86 const request = client.request(); 87 88 request.on('end', common.mustCall(() => { 89 client.close(); 90 })); 91 request.end(); 92 request.resume(); 93 })); 94 })); 95} 96