11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ciconst common = require('../common'); 41cb0ef41Sopenharmony_ciif (!common.hasCrypto) 51cb0ef41Sopenharmony_ci common.skip('missing crypto'); 61cb0ef41Sopenharmony_ciconst assert = require('assert'); 71cb0ef41Sopenharmony_ciconst http2 = require('http2'); 81cb0ef41Sopenharmony_ci 91cb0ef41Sopenharmony_ciconst server = http2.createServer(); 101cb0ef41Sopenharmony_ci 111cb0ef41Sopenharmony_ciconst src = Object.create(null); 121cb0ef41Sopenharmony_cisrc.accept = [ 'abc', 'def' ]; 131cb0ef41Sopenharmony_cisrc.Accept = 'ghijklmnop'; 141cb0ef41Sopenharmony_cisrc['www-authenticate'] = 'foo'; 151cb0ef41Sopenharmony_cisrc['WWW-Authenticate'] = 'bar'; 161cb0ef41Sopenharmony_cisrc['WWW-AUTHENTICATE'] = 'baz'; 171cb0ef41Sopenharmony_cisrc['proxy-authenticate'] = 'foo'; 181cb0ef41Sopenharmony_cisrc['Proxy-Authenticate'] = 'bar'; 191cb0ef41Sopenharmony_cisrc['PROXY-AUTHENTICATE'] = 'baz'; 201cb0ef41Sopenharmony_cisrc['x-foo'] = 'foo'; 211cb0ef41Sopenharmony_cisrc['X-Foo'] = 'bar'; 221cb0ef41Sopenharmony_cisrc['X-FOO'] = 'baz'; 231cb0ef41Sopenharmony_cisrc.constructor = 'foo'; 241cb0ef41Sopenharmony_cisrc.Constructor = 'bar'; 251cb0ef41Sopenharmony_cisrc.CONSTRUCTOR = 'baz'; 261cb0ef41Sopenharmony_ci// eslint-disable-next-line no-proto 271cb0ef41Sopenharmony_cisrc.__proto__ = 'foo'; 281cb0ef41Sopenharmony_cisrc.__PROTO__ = 'bar'; 291cb0ef41Sopenharmony_cisrc.__Proto__ = 'baz'; 301cb0ef41Sopenharmony_ci 311cb0ef41Sopenharmony_cifunction checkHeaders(headers) { 321cb0ef41Sopenharmony_ci assert.strictEqual(headers.accept, 'abc, def, ghijklmnop'); 331cb0ef41Sopenharmony_ci assert.strictEqual(headers['www-authenticate'], 'foo, bar, baz'); 341cb0ef41Sopenharmony_ci assert.strictEqual(headers['proxy-authenticate'], 'foo, bar, baz'); 351cb0ef41Sopenharmony_ci assert.strictEqual(headers['x-foo'], 'foo, bar, baz'); 361cb0ef41Sopenharmony_ci assert.strictEqual(headers.constructor, 'foo, bar, baz'); 371cb0ef41Sopenharmony_ci // eslint-disable-next-line no-proto 381cb0ef41Sopenharmony_ci assert.strictEqual(headers.__proto__, 'foo, bar, baz'); 391cb0ef41Sopenharmony_ci} 401cb0ef41Sopenharmony_ci 411cb0ef41Sopenharmony_ciserver.on('stream', common.mustCall((stream, headers) => { 421cb0ef41Sopenharmony_ci assert.strictEqual(headers[':path'], '/'); 431cb0ef41Sopenharmony_ci assert.strictEqual(headers[':scheme'], 'http'); 441cb0ef41Sopenharmony_ci assert.strictEqual(headers[':method'], 'GET'); 451cb0ef41Sopenharmony_ci checkHeaders(headers); 461cb0ef41Sopenharmony_ci stream.respond(src); 471cb0ef41Sopenharmony_ci stream.end(); 481cb0ef41Sopenharmony_ci})); 491cb0ef41Sopenharmony_ci 501cb0ef41Sopenharmony_ciserver.listen(0, common.mustCall(() => { 511cb0ef41Sopenharmony_ci const client = http2.connect(`http://localhost:${server.address().port}`); 521cb0ef41Sopenharmony_ci const req = client.request(src); 531cb0ef41Sopenharmony_ci req.on('response', common.mustCall(checkHeaders)); 541cb0ef41Sopenharmony_ci req.on('close', common.mustCall(() => { 551cb0ef41Sopenharmony_ci server.close(); 561cb0ef41Sopenharmony_ci client.close(); 571cb0ef41Sopenharmony_ci })); 581cb0ef41Sopenharmony_ci})); 59