@@ -4,6 +4,8 @@ const assert = require('assert');
4
4
const net = require ( 'net' ) ;
5
5
const pedding = require ( 'pedding' ) ;
6
6
const address = require ( 'address' ) ;
7
+ const mm = require ( 'mm' ) ;
8
+ const dns = require ( 'dns' ) ;
7
9
const detectPort = require ( '..' ) ;
8
10
9
11
describe ( 'detect port test' , ( ) => {
@@ -12,6 +14,9 @@ describe('detect port test', () => {
12
14
done = pedding ( 12 , done ) ;
13
15
const server = new net . Server ( ) ;
14
16
server . listen ( 3000 , 'localhost' , done ) ;
17
+ server . on ( 'error' , err => {
18
+ console . error ( 'listen localhost error:' , err ) ;
19
+ } ) ;
15
20
servers . push ( server ) ;
16
21
17
22
const server2 = new net . Server ( ) ;
@@ -34,6 +39,8 @@ describe('detect port test', () => {
34
39
servers . forEach ( server => server . close ( ) ) ;
35
40
} ) ;
36
41
42
+ afterEach ( mm . restore ) ;
43
+
37
44
it ( 'get random port' , done => {
38
45
detectPort ( ( _ , port ) => {
39
46
assert ( port >= 1024 && port < 65535 ) ;
@@ -57,6 +64,27 @@ describe('detect port test', () => {
57
64
} ) ;
58
65
} ) ;
59
66
67
+ it ( 'should listen next port 4001 when localhost is not binding' , done => {
68
+ // https://github.com/nodejs/node/blob/6af72d4b037eba38d94395f57a03a498a2efef09/lib/net.js#L1463
69
+ // mock dns.lookup
70
+ mm ( dns , '__rawLookup' , dns . lookup ) ;
71
+ mm ( dns , 'lookup' , ( address , callback ) => {
72
+ if ( address !== 'localhost' ) {
73
+ return dns . __rawLookup ( address , callback ) ;
74
+ }
75
+ process . nextTick ( ( ) => {
76
+ const err = new Error ( `getaddrinfo ENOTFOUND ${ address } ` ) ;
77
+ err . code = 'ENOTFOUND' ;
78
+ callback ( err ) ;
79
+ } ) ;
80
+ } ) ;
81
+ const port = 4000 ;
82
+ detectPort ( port , ( _ , realPort ) => {
83
+ assert ( realPort === 4001 ) ;
84
+ done ( ) ;
85
+ } ) ;
86
+ } ) ;
87
+
60
88
it ( 'work with listening next port 4001 because 4000 was listen by ' + address . ip ( ) , done => {
61
89
const port = 4000 ;
62
90
detectPort ( port , ( _ , realPort ) => {
0 commit comments