@@ -394,37 +394,55 @@ class NodeTestHelper extends EventEmitter {
394394 return request ( this . _httpAdmin ) ;
395395 }
396396
397- startServer ( done ) {
398- this . _app = express ( ) ;
399- const server = stoppable ( http . createServer ( ( req , res ) => {
400- this . _app ( req , res ) ;
401- } ) , 0 ) ;
402-
403- this . _RED . init ( server , {
404- logging :{ console :{ level :'off' } }
405- } ) ;
406- server . listen ( this . _listenPort , this . _address ) ;
407- server . on ( 'listening' , ( ) => {
408- this . _port = server . address ( ) . port ;
409- // internal API
410- this . _comms . start ( ) ;
411- done ( ) ;
412- } ) ;
413- this . _server = server ;
397+ async startServer ( done ) {
398+ try {
399+ await new Promise ( ( resolve , reject ) => {
400+ this . _app = express ( ) ;
401+ const server = stoppable (
402+ http . createServer ( ( req , res ) => this . _app ( req , res ) ) ,
403+ 0
404+ ) ;
405+
406+ this . _RED . init ( server , {
407+ logging : { console : { level : 'off' } } ,
408+ } ) ;
409+
410+ server . listen ( this . _listenPort , this . _address ) ;
411+
412+ server . on ( 'listening' , ( ) => {
413+ this . _port = server . address ( ) . port ;
414+ this . _comms . start ( ) ;
415+ this . _server = server ;
416+ resolve ( ) ;
417+ } ) ;
418+
419+ server . on ( 'error' , reject ) ;
420+ } ) ;
421+
422+ if ( done ) done ( ) ;
423+ } catch ( err ) {
424+ if ( done ) done ( err ) ;
425+ else throw err ;
426+ }
414427 }
415-
416- //TODO consider saving TCP handshake/server reinit on start/stop/start sequences
417- stopServer ( done ) {
418- if ( this . _server ) {
419- try {
420- // internal API
421- this . _comms . stop ( ) ;
422- this . _server . stop ( done ) ;
423- } catch ( e ) {
424- done ( ) ;
428+
429+ async stopServer ( done ) {
430+ try {
431+ if ( this . _server ) {
432+ await new Promise ( ( resolve , reject ) => {
433+ this . _comms . stop ( ) ;
434+
435+ this . _server . stop ( ( err ) => {
436+ if ( err ) reject ( err ) ;
437+ else resolve ( ) ;
438+ } ) ;
439+ } ) ;
425440 }
426- } else {
427- done ( ) ;
441+
442+ if ( done ) done ( ) ;
443+ } catch ( err ) {
444+ if ( done ) done ( err ) ;
445+ else throw err ;
428446 }
429447 }
430448
0 commit comments