1+ 'use strict' ;
2+
3+ const http = require ( 'http' ) ;
4+ const EventEmitter = require ( 'events' ) . EventEmitter ;
5+ const mm = require ( 'mm' ) ;
6+ const expect = require ( 'expect.js' ) ;
7+ const { patchHttp } = require ( '../../patch/http' ) ;
8+
9+
10+ describe ( `patch http.createServer(cb)` , function ( ) {
11+ const requestTimes = 5 ;
12+ let triggerTimes = 0 ;
13+
14+ let liveRequest = 0 ;
15+ let closeRequest = 0 ;
16+ let sentRequest = 0 ;
17+
18+ function addLiveRequest ( ) {
19+ liveRequest ++ ;
20+ }
21+
22+ function addCloseRequest ( ) {
23+ closeRequest ++ ;
24+ }
25+
26+ function addSentRequest ( ) {
27+ sentRequest ++ ;
28+ }
29+
30+ function mockCreateServer ( opts , requestHandle ) {
31+ return new Promise ( resolve => {
32+ let times = 0 ;
33+ const interval = setInterval ( ( ) => {
34+ if ( times < requestTimes ) {
35+ const request = new EventEmitter ( ) ;
36+ const response = new EventEmitter ( ) ;
37+ if ( typeof opts === 'function' ) {
38+ opts ( request , response ) ;
39+ } else if ( typeof requestHandle === 'function' ) {
40+ requestHandle ( request , response ) ;
41+ }
42+ times ++ ;
43+ } else {
44+ clearInterval ( interval ) ;
45+ resolve ( ) ;
46+ }
47+ } , 100 ) ;
48+ } ) ;
49+ }
50+
51+ before ( async function ( ) {
52+ mm ( http , 'createServer' , mockCreateServer ) ;
53+ patchHttp ( addLiveRequest , addCloseRequest , addSentRequest ) ;
54+ await http . createServer ( function ( request , response ) {
55+ triggerTimes ++ ;
56+ response . emit ( 'finish' ) ;
57+ response . emit ( 'close' ) ;
58+ } ) ;
59+
60+ await http . createServer ( { } , function ( request , response ) {
61+ triggerTimes ++ ;
62+ response . emit ( 'finish' ) ;
63+ response . emit ( 'close' ) ;
64+ } ) ;
65+
66+ await http . createServer ( { } , { } , function ( request , response ) {
67+ triggerTimes ++ ;
68+ response . emit ( 'finish' ) ;
69+ response . emit ( 'close' ) ;
70+ } ) ;
71+ } ) ;
72+
73+ after ( function ( ) {
74+ mm . restore ( ) ;
75+ } ) ;
76+
77+ it ( 'patch should be ok' , function ( ) {
78+ expect ( http . createServer ) . not . to . be ( mockCreateServer ) ;
79+ } ) ;
80+
81+ it ( `request handler should trigger ${ requestTimes } * 2 times` , function ( ) {
82+ expect ( triggerTimes ) . to . be ( requestTimes * 2 ) ;
83+ } ) ;
84+
85+ it ( `live request shoule be ${ requestTimes } * 2` , function ( ) {
86+ expect ( liveRequest ) . to . be ( requestTimes * 2 ) ;
87+ } ) ;
88+
89+ it ( `close request shoule be ${ requestTimes } * 2` , function ( ) {
90+ expect ( closeRequest ) . to . be ( requestTimes * 2 ) ;
91+ } ) ;
92+
93+ it ( `sent request shoule be ${ requestTimes } * 2` , function ( ) {
94+ expect ( sentRequest ) . to . be ( requestTimes * 2 ) ;
95+ } ) ;
96+ } ) ;
0 commit comments