Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Repeated WebServer creation/stopping breaks after a couple of iterations. #141

Open
bpicode opened this issue May 11, 2017 · 1 comment
Open

Comments

@bpicode
Copy link

bpicode commented May 11, 2017

Affects version: 2.105

When I repeatedly create/stop a WebServer, at some point the created WebServers are unable to dispatch connection attempts.

Here is a test to reproduce:

package testing;

import lombok.extern.slf4j.Slf4j;
import net.codestory.http.WebServer;
import net.codestory.http.routes.NoParamRouteWithContext;
import org.apache.commons.io.IOUtils;
import org.junit.Test;

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

@Slf4j
public class WebServerTest {

    @Test
    public void testName() throws Exception {
        for (int i = 0; i < 100; i++) {
            WebServer webServer = new WebServer()
                    .configure(routes -> routes.url("/").get((NoParamRouteWithContext) context -> "responseText"))
                    .start();
            URLConnection urlConnection = new URL("http://localhost:" + webServer.port() + "/").openConnection();
            urlConnection.connect();
            try (InputStream is = urlConnection.getInputStream()) {
                log.info("RUN {} :: read :: {}", i, IOUtils.toString(is));
            } finally {
                webServer.stop();
            }
        }
    }
}

In my case I get an error at the 24th attempt:

Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:39.063 [main] INFO testing.WebServerTest - RUN 0 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:39.364 [main] INFO testing.WebServerTest - RUN 1 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:39.529 [main] INFO testing.WebServerTest - RUN 2 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:39.764 [main] INFO testing.WebServerTest - RUN 3 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:39.876 [main] INFO testing.WebServerTest - RUN 4 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:40.149 [main] INFO testing.WebServerTest - RUN 5 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:40.407 [main] INFO testing.WebServerTest - RUN 6 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:40.538 [main] INFO testing.WebServerTest - RUN 7 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:40.778 [main] INFO testing.WebServerTest - RUN 8 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:40.991 [main] INFO testing.WebServerTest - RUN 9 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.074 [main] INFO testing.WebServerTest - RUN 10 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.155 [main] INFO testing.WebServerTest - RUN 11 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.261 [main] INFO testing.WebServerTest - RUN 12 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.351 [main] INFO testing.WebServerTest - RUN 13 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.437 [main] INFO testing.WebServerTest - RUN 14 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.512 [main] INFO testing.WebServerTest - RUN 15 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.623 [main] INFO testing.WebServerTest - RUN 16 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.702 [main] INFO testing.WebServerTest - RUN 17 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.746 [main] INFO testing.WebServerTest - RUN 18 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.797 [main] INFO testing.WebServerTest - RUN 19 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.861 [main] INFO testing.WebServerTest - RUN 20 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.921 [main] INFO testing.WebServerTest - RUN 21 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...
20:32:41.989 [main] INFO testing.WebServerTest - RUN 22 :: read :: responseText
Dev mode. Start with -DPROD_MODE=true to run in production mode.
Server started on port 8080
Reloading configuration...

java.net.SocketException: Unexpected end of file from server
	at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:792)
	at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
	at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:789)
	at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
	at testing.WebServerTest.testName(WebServerTest.java:24)

Note that the same effects are observed if one starts the server on a random port.
Any help is appreciated.

Greets

@ElKiwos
Copy link

ElKiwos commented Jan 22, 2018

+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants