byoutline / MockServer

Simple REST server that makes simulating API easy.
Apache License 2.0
30 stars 4 forks source link

Auto select port #8

Closed Naitbit closed 6 years ago

Naitbit commented 6 years ago

By default MockServer will try to open range of ports. Failure will throw exception.

This is supposed to help with case where 2 application have same port in config. Previously if the return value was not checked it may not be apparent what was wrong.

This was tested on Linux only, but it probably should also for on other platforms. Example output of launching 6 servers at once (with temporary debug prints): Sample jar build via /gradlew clean sampleCompleteJar launched by $ java -cp sample/build/libs/sample.jar com.byoutline.mockserver.sample.ConfigServer sample/src/main/resources/ with config without port defined

#1
connected to port: 8099

#2
failed to connect to port: 8099
connected to port: 8100

#3
failed to connect to port: 8099
failed to connect to port: 8100
connected to port: 8101

#4
failed to connect to port: 8099
failed to connect to port: 8100
failed to connect to port: 8101
connected to port: 8102

#5
failed to connect to port: 8099
failed to connect to port: 8100
failed to connect to port: 8101
failed to connect to port: 8102
connected to port: 8103

#6
failed to connect to port: 8099
failed to connect to port: 8100
failed to connect to port: 8101
failed to connect to port: 8102
failed to connect to port: 8103
connected to port: 8104

#7
failed to connect to port: 8099
failed to connect to port: 8100
failed to connect to port: 8101
failed to connect to port: 8102
failed to connect to port: 8103
failed to connect to port: 8104
Exception in thread "main" java.net.BindException: Adres jest już w użyciu
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.simpleframework.transport.connect.SocketAcceptor.bind(SocketAcceptor.java:183)
        at org.simpleframework.transport.connect.SocketAcceptor.<init>(SocketAcceptor.java:100)
        at org.simpleframework.transport.connect.SocketListener.<init>(SocketListener.java:81)
        at org.simpleframework.transport.connect.SocketListenerManager.listen(SocketListenerManager.java:98)
        at org.simpleframework.transport.connect.SocketListenerManager.listen(SocketListenerManager.java:81)
        at org.simpleframework.transport.connect.SocketConnection.connect(SocketConnection.java:106)
        at com.byoutline.mockserver.internal.HttpServerConnector.connectToPort(AutoPortConnect.java:56)
        at com.byoutline.mockserver.internal.AutoPortConnect.connectToPortFromRange(AutoPortConnect.java:34)
        at com.byoutline.mockserver.HttpMockServer.<init>(HttpMockServer.java:44)
        at com.byoutline.mockserver.HttpMockServer.startMockApiServer(HttpMockServer.java:59)
        at com.byoutline.mockserver.sample.ConfigServer.runServerWithPath(ConfigServer.java:95)
        at com.byoutline.mockserver.sample.ConfigServer.searchMockPathAndRunServer(ConfigServer.java:67)
        at com.byoutline.mockserver.sample.ConfigServer.main(ConfigServer.java:47)
coveralls commented 6 years ago

Coverage Status

Coverage increased (+1.2%) to 64.815% when pulling 04394e7cc0d557685a016d33f5b45a77d664f672 on feature/auto_connect_to_port_range into 05bb7e5b41e3b789417b79fed9952671de00849c on release/2.0.0.