@@ -57,11 +57,25 @@ public ExpectationServer()
5757 this ( null );
5858 }
5959
60+ public ExpectationServer ( final int port )
61+ {
62+ this ( null , port );
63+ }
64+
6065 public ExpectationServer ( final String baseResource )
6166 {
6267 servlet = new ExpectationServlet ( baseResource );
6368 }
6469
70+ public ExpectationServer ( final String baseResource , final int port )
71+ {
72+ servlet = new ExpectationServlet ( baseResource );
73+ if ( port >= 80 )
74+ {
75+ this .port = port ;
76+ }
77+ }
78+
6579 public int getPort ()
6680 {
6781 return port ;
@@ -90,7 +104,6 @@ public void before()
90104 }
91105
92106 public ExpectationServer start ()
93- throws IOException
94107 {
95108 final ServletInfo si = Servlets .servlet ( "TEST" , ExpectationServlet .class )
96109 .addMapping ( "*" )
@@ -107,25 +120,42 @@ public ExpectationServer start()
107120 final DeploymentManager dm = Servlets .defaultContainer ().addDeployment ( di );
108121 dm .deploy ();
109122
110- final AtomicReference < Integer > foundPort = new AtomicReference <>() ;
111- server = PortFinder . findPortFor ( 16 , p -> {
112- foundPort . set ( Integer . valueOf ( p ) );
123+ boolean started = false ;
124+ if ( this . port != null && this . port >= 80 )
125+ {
113126 try
114127 {
115- Undertow s = Undertow .builder ().setHandler ( dm .start () ).addHttpListener ( p , "127.0.0.1" ).build ();
116- s .start ();
117-
118- return s ;
128+ server = Undertow .builder ().setHandler ( dm .start () ).addHttpListener ( this .port , "127.0.0.1" ).build ();
129+ server .start ();
130+ started = true ;
119131 }
120- catch ( ServletException e )
132+ catch ( Exception e )
121133 {
122- throw new IOException ( "Failed to start: " + e . getMessage (), e );
134+ logger . warn ( "The port {} is occupied, will find another port to try!" , this . port );
123135 }
124- } );
125-
126- this .port = foundPort .get ();
136+ }
137+ if ( !started )
138+ {
139+ final AtomicReference <Integer > foundPort = new AtomicReference <>();
140+ server = PortFinder .findPortFor ( 16 , p -> {
141+ foundPort .set ( p );
142+ try
143+ {
144+ Undertow s = Undertow .builder ().setHandler ( dm .start () ).addHttpListener ( p , "127.0.0.1" ).build ();
145+ s .start ();
146+
147+ return s ;
148+ }
149+ catch ( ServletException e )
150+ {
151+ throw new IOException ( "Failed to start: " + e .getMessage (), e );
152+ }
153+ } );
154+
155+ this .port = foundPort .get ();
156+ }
127157
128- logger .info ( "STARTED Test HTTP Server on 127.0.0.1:" + port );
158+ logger .info ( "STARTED Test HTTP Server on 127.0.0.1:{}" , port );
129159
130160 return this ;
131161 }
@@ -231,7 +261,7 @@ public void expect( final String method, final String testUrl, final int respons
231261 servlet .expect ( method , testUrl , responseCode , bodyStream );
232262 }
233263
234- public void expect ( final String method , final String testUrl , ExpectationHandler handler )
264+ public void expect ( final String method , final String testUrl , ExpectationHandler handler )
235265 throws Exception
236266 {
237267 servlet .expect ( method , testUrl , handler );
0 commit comments