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 h2 = require('http2'); 81cb0ef41Sopenharmony_ci 91cb0ef41Sopenharmony_ci// Tests behavior of the proxied socket in Http2ServerRequest 101cb0ef41Sopenharmony_ci// & Http2ServerResponse - specifically property setters 111cb0ef41Sopenharmony_ci 121cb0ef41Sopenharmony_ciconst errMsg = { 131cb0ef41Sopenharmony_ci code: 'ERR_HTTP2_NO_SOCKET_MANIPULATION', 141cb0ef41Sopenharmony_ci name: 'Error', 151cb0ef41Sopenharmony_ci message: 'HTTP/2 sockets should not be directly manipulated ' + 161cb0ef41Sopenharmony_ci '(e.g. read and written)' 171cb0ef41Sopenharmony_ci}; 181cb0ef41Sopenharmony_ci 191cb0ef41Sopenharmony_ciconst server = h2.createServer(); 201cb0ef41Sopenharmony_ci 211cb0ef41Sopenharmony_ciserver.on('request', common.mustCall(function(request, response) { 221cb0ef41Sopenharmony_ci const noop = () => {}; 231cb0ef41Sopenharmony_ci 241cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.destroyed, false); 251cb0ef41Sopenharmony_ci request.socket.destroyed = true; 261cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.destroyed, true); 271cb0ef41Sopenharmony_ci request.socket.destroyed = false; 281cb0ef41Sopenharmony_ci 291cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.readable, true); 301cb0ef41Sopenharmony_ci request.socket.readable = false; 311cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.readable, false); 321cb0ef41Sopenharmony_ci 331cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.writable, true); 341cb0ef41Sopenharmony_ci request.socket.writable = false; 351cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.writable, false); 361cb0ef41Sopenharmony_ci 371cb0ef41Sopenharmony_ci const realOn = request.stream.on; 381cb0ef41Sopenharmony_ci request.socket.on = noop; 391cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.on, noop); 401cb0ef41Sopenharmony_ci request.stream.on = realOn; 411cb0ef41Sopenharmony_ci 421cb0ef41Sopenharmony_ci const realOnce = request.stream.once; 431cb0ef41Sopenharmony_ci request.socket.once = noop; 441cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.once, noop); 451cb0ef41Sopenharmony_ci request.stream.once = realOnce; 461cb0ef41Sopenharmony_ci 471cb0ef41Sopenharmony_ci const realEnd = request.stream.end; 481cb0ef41Sopenharmony_ci request.socket.end = noop; 491cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.end, noop); 501cb0ef41Sopenharmony_ci request.socket.end = common.mustCall(); 511cb0ef41Sopenharmony_ci request.socket.end(); 521cb0ef41Sopenharmony_ci request.stream.end = realEnd; 531cb0ef41Sopenharmony_ci 541cb0ef41Sopenharmony_ci const realEmit = request.stream.emit; 551cb0ef41Sopenharmony_ci request.socket.emit = noop; 561cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.emit, noop); 571cb0ef41Sopenharmony_ci request.stream.emit = realEmit; 581cb0ef41Sopenharmony_ci 591cb0ef41Sopenharmony_ci const realDestroy = request.stream.destroy; 601cb0ef41Sopenharmony_ci request.socket.destroy = noop; 611cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.destroy, noop); 621cb0ef41Sopenharmony_ci request.stream.destroy = realDestroy; 631cb0ef41Sopenharmony_ci 641cb0ef41Sopenharmony_ci request.socket.setTimeout = noop; 651cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.session.setTimeout, noop); 661cb0ef41Sopenharmony_ci 671cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.session.socket._isProcessing, undefined); 681cb0ef41Sopenharmony_ci request.socket._isProcessing = true; 691cb0ef41Sopenharmony_ci assert.strictEqual(request.stream.session.socket._isProcessing, true); 701cb0ef41Sopenharmony_ci 711cb0ef41Sopenharmony_ci assert.throws(() => request.socket.read = noop, errMsg); 721cb0ef41Sopenharmony_ci assert.throws(() => request.socket.write = noop, errMsg); 731cb0ef41Sopenharmony_ci assert.throws(() => request.socket.pause = noop, errMsg); 741cb0ef41Sopenharmony_ci assert.throws(() => request.socket.resume = noop, errMsg); 751cb0ef41Sopenharmony_ci 761cb0ef41Sopenharmony_ci response.stream.destroy(); 771cb0ef41Sopenharmony_ci})); 781cb0ef41Sopenharmony_ci 791cb0ef41Sopenharmony_ciserver.listen(0, common.mustCall(function() { 801cb0ef41Sopenharmony_ci const port = server.address().port; 811cb0ef41Sopenharmony_ci const url = `http://localhost:${port}`; 821cb0ef41Sopenharmony_ci const client = h2.connect(url, common.mustCall(function() { 831cb0ef41Sopenharmony_ci const headers = { 841cb0ef41Sopenharmony_ci ':path': '/', 851cb0ef41Sopenharmony_ci ':method': 'GET', 861cb0ef41Sopenharmony_ci ':scheme': 'http', 871cb0ef41Sopenharmony_ci ':authority': `localhost:${port}` 881cb0ef41Sopenharmony_ci }; 891cb0ef41Sopenharmony_ci const request = client.request(headers); 901cb0ef41Sopenharmony_ci request.on('end', common.mustCall(() => { 911cb0ef41Sopenharmony_ci client.close(); 921cb0ef41Sopenharmony_ci server.close(); 931cb0ef41Sopenharmony_ci })); 941cb0ef41Sopenharmony_ci request.end(); 951cb0ef41Sopenharmony_ci request.resume(); 961cb0ef41Sopenharmony_ci })); 971cb0ef41Sopenharmony_ci})); 98