Skip to content

Commit 4bf9c3b

Browse files
authored
Merge pull request #23 from ligangty/1.x
Let ExpectationServer support specified port
2 parents 21bc083 + 6075dec commit 4bf9c3b

File tree

1 file changed

+45
-15
lines changed

1 file changed

+45
-15
lines changed

src/main/java/org/commonjava/test/http/expect/ExpectationServer.java

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)