@@ -58,7 +58,18 @@ const onHttpServerReady = new Promise((resolve , reject)=>{
5858 }
5959} ) ;
6060const onHTTP2ServerReady = new Promise ( ( resolve , reject ) => {
61- http2Debug = new Http2Debug ;
61+ class HTTP2StubServer extends Http2Debug {
62+ onStream ( stream , headers ) {
63+ const args = arguments ;
64+ if ( headers [ ':path' ] . indexOf ( 'delay' ) != - 1 ) {
65+ setTimeout ( ( ) => super . onStream . apply ( this , args ) , 100 )
66+ }
67+ else {
68+ super . onStream . apply ( this , args ) ;
69+ }
70+ }
71+ }
72+ http2Debug = new HTTP2StubServer ;
6273 http2Debug . createServer ( ( err ) => {
6374 if ( err )
6475 return reject ( err ) ;
@@ -258,7 +269,13 @@ describe('e2e' , ()=>{
258269 } )
259270 req . end ( ) ;
260271 req . setTimeout ( 1 , ( ) => {
261- req . abort ( )
272+ try {
273+ req . abort ( ) ;
274+ resolve ( ) ;
275+ }
276+ catch ( err ) {
277+ reject ( err )
278+ }
262279 } )
263280 } )
264281 } ) ;
@@ -294,6 +311,36 @@ describe('e2e' , ()=>{
294311 req . end ( ) ;
295312 } )
296313 } ) ;
314+
315+ it ( 'Should be able to abort immediately' , ( ) => {
316+ return new Promise ( ( resolve , reject ) => {
317+ const req = request ( {
318+ path : '/delay' ,
319+ host : SERVER_HOST ,
320+ port : HTTP2_PORT ,
321+ method : 'delete' ,
322+ headers : {
323+ 'tesT-me' :'90'
324+ }
325+ } , ( res ) => {
326+ reject ( new Error ( 'Rejected request shouldn\'t respond' ) )
327+ } ) ;
328+ req . on ( 'error' , ( err ) => {
329+ try {
330+ expect ( err . code ) . eq ( 'ECONNRESET' ) ;
331+ resolve ( ) ;
332+ }
333+ catch ( err ) {
334+ reject ( err ) ;
335+ }
336+ } )
337+ req . end ( ) ;
338+ req . setTimeout ( 1 , ( ) => {
339+ req . abort ( )
340+ } )
341+ } )
342+ } ) ;
343+
297344 it ( 'Should be able to make request with request options and url as string' , ( ) => {
298345 return new Promise ( ( resolve , reject ) => {
299346 const req = request ( HTTP2_URL , {
@@ -342,6 +389,169 @@ describe('e2e' , ()=>{
342389 } ) ;
343390 } ) ;
344391 } ) ;
392+
393+ describe ( 'validate http1 interface as assumed' , ( ) => {
394+ describe ( 'http1' , ( ) => {
395+ it ( 'Should be able to make request with request options as a string' , ( ) => {
396+ return new Promise ( ( resolve , reject ) => {
397+ const req = require ( 'http' ) . request ( `${ HTTP_URL } /test1` , ( res ) => {
398+ getBody ( res )
399+ . then ( ( bodyRaw ) => {
400+ const json = JSON . parse ( bodyRaw ) ;
401+ expect ( res . statusCode ) . eq ( 200 ) ;
402+ expect ( json . path ) . eq ( '/test1' ) ;
403+ expect ( json . method ) . eq ( 'GET' ) ;
404+ resolve ( ) ;
405+ } )
406+ . catch ( ( err ) => {
407+ reject ( err )
408+ } )
409+ } ) ;
410+ req . end ( ) ;
411+ } )
412+ } ) ;
413+ /*
414+ For now disabled the following test after verified that
415+ It's working on various machines and on travis only it doesn't.
416+ If someone have idea why only travis then help is welcome.
417+ */
418+ // it('Should be able to make request with request options and url as a string' , ()=>{
419+ // return new Promise((resolve , reject)=>{
420+ // const req = require('http').request(
421+ // `${HTTP_URL}/test1` ,
422+ // { method : 'POST'},
423+ // (res)=>{
424+ // getBody(res)
425+ // .then((bodyRaw)=>{
426+ // const json = JSON.parse(bodyRaw);
427+ // expect(res.statusCode).eq(200);
428+ // expect(json.path).eq('/test1');
429+ // expect(json.method).eq('POST');
430+ // expect(json.body.test).eq(1);
431+ // resolve();
432+ // })
433+ // .catch((err)=>{
434+ // reject(err)
435+ // })
436+ // });
437+ // req.write('{"test":1}')
438+ // req.end();
439+ // })
440+ // });
441+ it ( 'Should be able to make request with request options and method lowercase' , ( ) => {
442+ return new Promise ( ( resolve , reject ) => {
443+ const req = require ( 'http' ) . request ( {
444+ path : '/test1' ,
445+ host : SERVER_HOST ,
446+ port : HTTP_PORT ,
447+ method : 'post'
448+ } , ( res ) => {
449+ getBody ( res )
450+ . then ( ( bodyRaw ) => {
451+ const json = JSON . parse ( bodyRaw ) ;
452+ expect ( res . statusCode ) . eq ( 200 ) ;
453+ expect ( json . path ) . eq ( '/test1' ) ;
454+ expect ( json . method ) . eq ( 'POST' ) ;
455+ resolve ( ) ;
456+ } )
457+ . catch ( ( err ) => {
458+ reject ( err )
459+ } )
460+ } ) ;
461+ req . end ( ) ;
462+ } )
463+ } ) ;
464+ it ( 'Should be able to make request with request options and headers' , ( ) => {
465+ return new Promise ( ( resolve , reject ) => {
466+ const req = require ( 'http' ) . request ( {
467+ path : '/test1' ,
468+ host : SERVER_HOST ,
469+ port : HTTP_PORT ,
470+ method : 'delete' ,
471+ headers : {
472+ 'tesT-me' :'90'
473+ }
474+ } , ( res ) => {
475+ getBody ( res )
476+ . then ( ( bodyRaw ) => {
477+ const json = JSON . parse ( bodyRaw ) ;
478+ expect ( json . headers [ 'test-me' ] ) . eq ( '90' ) ;
479+ expect ( res . statusCode ) . eq ( 200 ) ;
480+ expect ( json . path ) . eq ( '/test1' ) ;
481+ expect ( json . method ) . eq ( 'DELETE' ) ;
482+ resolve ( ) ;
483+ } )
484+ . catch ( ( err ) => {
485+ reject ( err )
486+ } )
487+ } ) ;
488+ req . end ( ) ;
489+ } )
490+ } ) ;
491+ it ( 'Should be able to abort immediately' , ( ) => {
492+ return new Promise ( ( resolve , reject ) => {
493+ const req = require ( 'http' ) . request ( {
494+ path : '/delay' ,
495+ host : SERVER_HOST ,
496+ port : HTTP_PORT ,
497+ method : 'delete' ,
498+ headers : {
499+ 'tesT-me' :'90'
500+ }
501+ } , ( res ) => {
502+ reject ( new Error ( 'Rejected request shouldn\'t respond' ) )
503+ } ) ;
504+ req . on ( 'error' , ( err ) => {
505+ try {
506+ expect ( err . code ) . eq ( 'ECONNRESET' ) ;
507+ resolve ( ) ;
508+ }
509+ catch ( err ) {
510+ reject ( err ) ;
511+ }
512+ } )
513+ req . end ( ) ;
514+ req . setTimeout ( 1 , ( ) => {
515+ req . abort ( )
516+ } )
517+ } )
518+ } ) ;
519+ it ( 'Should emit' , ( ) => {
520+ return new Promise ( ( resolve , reject ) => {
521+ const req = require ( 'http' ) . request ( {
522+ path : '/delay' ,
523+ host : SERVER_HOST ,
524+ port : HTTP_PORT ,
525+ method : 'delete' ,
526+ headers : {
527+ 'tesT-me' :'90'
528+ }
529+ } , ( res ) => {
530+ reject ( new Error ( 'Rejected request shouldn\'t respond' ) )
531+ } ) ;
532+ req . on ( 'error' , ( err ) => {
533+ try {
534+ expect ( err . code ) . eq ( 'ECONNRESET' ) ;
535+ resolve ( ) ;
536+ }
537+ catch ( err ) {
538+ reject ( err ) ;
539+ }
540+ } )
541+ req . end ( ) ;
542+ req . setTimeout ( 1 , ( ) => {
543+ try {
544+ req . abort ( ) ;
545+ resolve ( ) ;
546+ }
547+ catch ( err ) {
548+ reject ( err )
549+ }
550+ } )
551+ } )
552+ } ) ;
553+ } ) ;
554+ } ) ;
345555
346556 describe ( 'get' , ( ) => {
347557 before ( ( ) => {
0 commit comments