@@ -1418,6 +1418,63 @@ describe('transmission', () => {
1418
1418
expect ( count ) . to . equal ( 1 ) ;
1419
1419
} ) ;
1420
1420
1421
+ it ( 'handles stream that is destroyed with no error' , async ( ) => {
1422
+
1423
+ const handler = ( request , h ) => {
1424
+
1425
+ const stream = new Stream . Readable ( { read : Hoek . ignore } ) ;
1426
+
1427
+ stream . push ( 'hello' ) ;
1428
+ Hoek . wait ( 1 ) . then ( ( ) => stream . destroy ( ) ) ;
1429
+
1430
+ return h . response ( stream ) . type ( 'text/html' ) ;
1431
+ } ;
1432
+
1433
+ const server = Hapi . server ( ) ;
1434
+ server . route ( { method : 'GET' , path : '/' , handler } ) ;
1435
+
1436
+ const log = server . events . once ( 'response' ) ;
1437
+ const err = await expect ( server . inject ( { url : '/' , headers : { 'accept-encoding' : 'gzip' } } ) ) . to . reject ( Boom . Boom ) ;
1438
+ expect ( err . output . statusCode ) . to . equal ( 499 ) ;
1439
+
1440
+ const [ request ] = await log ;
1441
+ expect ( request . response . isBoom ) . to . be . true ( ) ;
1442
+ expect ( request . response . output . statusCode ) . to . equal ( 499 ) ;
1443
+ } ) ;
1444
+
1445
+ it ( 'handles stream that is destroyed with error' , async ( ) => {
1446
+
1447
+ const handler = ( request , h ) => {
1448
+
1449
+ const stream = new Stream . Readable ( { read : Hoek . ignore } ) ;
1450
+ if ( stream . errored === undefined ) {
1451
+
1452
+ // Expose errored property on node 14 & 16 to enable coverage
1453
+
1454
+ stream . on ( 'error' , ( ) => {
1455
+
1456
+ stream . errored = true ;
1457
+ } ) ;
1458
+ }
1459
+
1460
+ stream . push ( 'hello' ) ;
1461
+ Hoek . wait ( 1 ) . then ( ( ) => stream . destroy ( new Error ( 'failed' ) ) ) ;
1462
+
1463
+ return h . response ( stream ) . type ( 'text/html' ) ;
1464
+ } ;
1465
+
1466
+ const server = Hapi . server ( ) ;
1467
+ server . route ( { method : 'GET' , path : '/' , handler } ) ;
1468
+
1469
+ const log = server . events . once ( 'response' ) ;
1470
+ const err = await expect ( server . inject ( { url : '/' , headers : { 'accept-encoding' : 'gzip' } } ) ) . to . reject ( Boom . Boom ) ;
1471
+ expect ( err . output . statusCode ) . to . equal ( 499 ) ;
1472
+
1473
+ const [ request ] = await log ;
1474
+ expect ( request . response . isBoom ) . to . be . true ( ) ;
1475
+ expect ( request . response . output . statusCode ) . to . equal ( 500 ) ;
1476
+ } ) ;
1477
+
1421
1478
describe ( 'response range' , ( ) => {
1422
1479
1423
1480
const fileStreamHandler = ( request , h ) => {
0 commit comments