test: http2 compat response.write() error checks
PR-URL: https://github.com/nodejs/node/pull/18859 Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
5782c51dfb
commit
a926c1a18f
@ -1,95 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const { mustCall,
|
|
||||||
mustNotCall,
|
|
||||||
expectsError,
|
|
||||||
hasCrypto, skip } = require('../common');
|
|
||||||
if (!hasCrypto)
|
|
||||||
skip('missing crypto');
|
|
||||||
const { createServer, connect } = require('http2');
|
|
||||||
|
|
||||||
// Http2ServerResponse.write does not imply there is a callback
|
|
||||||
|
|
||||||
{
|
|
||||||
const server = createServer();
|
|
||||||
server.listen(0, mustCall(() => {
|
|
||||||
const port = server.address().port;
|
|
||||||
const url = `http://localhost:${port}`;
|
|
||||||
const client = connect(url, mustCall(() => {
|
|
||||||
const request = client.request();
|
|
||||||
request.resume();
|
|
||||||
request.on('end', mustCall());
|
|
||||||
request.on('close', mustCall(() => {
|
|
||||||
client.close();
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
|
|
||||||
server.once('request', mustCall((request, response) => {
|
|
||||||
client.destroy();
|
|
||||||
response.stream.session.on('close', mustCall(() => {
|
|
||||||
response.on('error', mustNotCall());
|
|
||||||
expectsError(
|
|
||||||
() => { response.write('muahaha'); },
|
|
||||||
{
|
|
||||||
code: 'ERR_HTTP2_INVALID_STREAM'
|
|
||||||
}
|
|
||||||
);
|
|
||||||
server.close();
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
const server = createServer();
|
|
||||||
server.listen(0, mustCall(() => {
|
|
||||||
const port = server.address().port;
|
|
||||||
const url = `http://localhost:${port}`;
|
|
||||||
const client = connect(url, mustCall(() => {
|
|
||||||
const request = client.request();
|
|
||||||
request.resume();
|
|
||||||
request.on('end', mustCall());
|
|
||||||
request.on('close', mustCall(() => client.close()));
|
|
||||||
}));
|
|
||||||
|
|
||||||
server.once('request', mustCall((request, response) => {
|
|
||||||
client.destroy();
|
|
||||||
response.stream.session.on('close', mustCall(() => {
|
|
||||||
expectsError(
|
|
||||||
() => response.write('muahaha'),
|
|
||||||
{
|
|
||||||
code: 'ERR_HTTP2_INVALID_STREAM'
|
|
||||||
}
|
|
||||||
);
|
|
||||||
server.close();
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
const server = createServer();
|
|
||||||
server.listen(0, mustCall(() => {
|
|
||||||
const port = server.address().port;
|
|
||||||
const url = `http://localhost:${port}`;
|
|
||||||
const client = connect(url, mustCall(() => {
|
|
||||||
const request = client.request();
|
|
||||||
request.resume();
|
|
||||||
request.on('end', mustCall());
|
|
||||||
request.on('close', mustCall(() => client.close()));
|
|
||||||
}));
|
|
||||||
|
|
||||||
server.once('request', mustCall((request, response) => {
|
|
||||||
response.stream.session.on('close', mustCall(() => {
|
|
||||||
expectsError(
|
|
||||||
() => response.write('muahaha', 'utf8'),
|
|
||||||
{
|
|
||||||
code: 'ERR_HTTP2_INVALID_STREAM'
|
|
||||||
}
|
|
||||||
);
|
|
||||||
server.close();
|
|
||||||
}));
|
|
||||||
client.destroy();
|
|
||||||
}));
|
|
||||||
}));
|
|
||||||
}
|
|
52
test/parallel/test-http2-compat-serverresponse-write.js
Normal file
52
test/parallel/test-http2-compat-serverresponse-write.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const {
|
||||||
|
mustCall,
|
||||||
|
mustNotCall,
|
||||||
|
expectsError,
|
||||||
|
hasCrypto,
|
||||||
|
skip
|
||||||
|
} = require('../common');
|
||||||
|
if (!hasCrypto)
|
||||||
|
skip('missing crypto');
|
||||||
|
const { createServer, connect } = require('http2');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
const server = createServer();
|
||||||
|
server.listen(0, mustCall(() => {
|
||||||
|
const port = server.address().port;
|
||||||
|
const url = `http://localhost:${port}`;
|
||||||
|
const client = connect(url, mustCall(() => {
|
||||||
|
const request = client.request();
|
||||||
|
request.resume();
|
||||||
|
request.on('end', mustCall());
|
||||||
|
request.on('close', mustCall(() => {
|
||||||
|
client.close();
|
||||||
|
}));
|
||||||
|
}));
|
||||||
|
|
||||||
|
server.once('request', mustCall((request, response) => {
|
||||||
|
// response.write() returns true
|
||||||
|
assert(response.write('muahaha', 'utf8', mustCall()));
|
||||||
|
|
||||||
|
response.stream.close(0, mustCall(() => {
|
||||||
|
response.on('error', mustNotCall());
|
||||||
|
|
||||||
|
// response.write() without cb returns error
|
||||||
|
expectsError(
|
||||||
|
() => { response.write('muahaha'); },
|
||||||
|
{
|
||||||
|
type: Error,
|
||||||
|
code: 'ERR_HTTP2_INVALID_STREAM',
|
||||||
|
message: 'The stream has been destroyed'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// response.write() with cb returns falsy value
|
||||||
|
assert(!response.write('muahaha', mustCall()));
|
||||||
|
|
||||||
|
client.destroy();
|
||||||
|
server.close();
|
||||||
|
}));
|
||||||
|
}));
|
||||||
|
}));
|
Loading…
x
Reference in New Issue
Block a user