1'use strict'; 2 3const { 4 mustCall, 5 mustNotCall, 6 hasCrypto, 7 skip 8} = require('../common'); 9if (!hasCrypto) 10 skip('missing crypto'); 11const { createServer, connect } = require('http2'); 12const assert = require('assert'); 13{ 14 const server = createServer(); 15 server.listen(0, mustCall(() => { 16 const port = server.address().port; 17 const url = `http://localhost:${port}`; 18 const client = connect(url, mustCall(() => { 19 const request = client.request(); 20 request.resume(); 21 request.on('end', mustCall()); 22 request.on('close', mustCall(() => { 23 client.close(); 24 })); 25 })); 26 27 server.once('request', mustCall((request, response) => { 28 // response.write() returns true 29 assert(response.write('muahaha', 'utf8', mustCall())); 30 31 response.stream.close(0, mustCall(() => { 32 response.on('error', mustNotCall()); 33 34 // response.write() without cb returns error 35 response.write('muahaha', mustCall((err) => { 36 assert.strictEqual(err.code, 'ERR_HTTP2_INVALID_STREAM'); 37 38 // response.write() with cb returns falsy value 39 assert(!response.write('muahaha', mustCall())); 40 41 client.destroy(); 42 server.close(); 43 })); 44 })); 45 })); 46 })); 47} 48 49{ 50 // Http2ServerResponse.write ERR_STREAM_WRITE_AFTER_END 51 const server = createServer(); 52 server.listen(0, mustCall(() => { 53 const port = server.address().port; 54 const url = `http://localhost:${port}`; 55 const client = connect(url, mustCall(() => { 56 const request = client.request(); 57 request.resume(); 58 request.on('end', mustCall()); 59 request.on('close', mustCall(() => { 60 client.close(); 61 })); 62 })); 63 64 server.once('request', mustCall((request, response) => { 65 response.end(); 66 response.write('asd', mustCall((err) => { 67 assert.strictEqual(err.code, 'ERR_STREAM_WRITE_AFTER_END'); 68 client.destroy(); 69 server.close(); 70 })); 71 })); 72 })); 73} 74 75{ 76 const server = createServer(); 77 server.listen(0, mustCall(() => { 78 const port = server.address().port; 79 const url = `http://localhost:${port}`; 80 const client = connect(url, mustCall(() => { 81 client.request(); 82 })); 83 84 server.once('request', mustCall((request, response) => { 85 response.destroy(); 86 assert.strictEqual(response.write('asd', mustNotCall()), false); 87 client.destroy(); 88 server.close(); 89 })); 90 })); 91} 92