package com.netflix.governator.guice.jetty;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.netflix.governator.InjectorBuilder;
import com.netflix.governator.LifecycleInjector;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.guice.JerseyServletModule;
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
public class PreDestroySingletonScopeBugTest {
private static final Logger LOG = LoggerFactory.getLogger(PreDestroySingletonScopeBugTest.class);
@Test
public void callingScopeOnSingletonDoesntBlowUp() throws Exception {
LifecycleInjector injector = InjectorBuilder
.fromModules(
new JerseyServletModule() {
@Override
protected void configureServlets() {
serve("/*").with(GuiceContainer.class, Collections.singletonMap(
PackagesResourceConfig.PROPERTY_PACKAGES, "com.netflix.governator.guice.jetty.resources2"));
}
},
new JettyModule())
.overrideWith(new AbstractModule() {
@Override
protected void configure() {
}
@Provides
JettyConfig getConfig() {
// Use emphemeral ports
return new DefaultJettyConfig().setPort(0);
}
})
.createInjector();
LOG.info("-----------------------------------");
Server server = injector.getInstance(Server.class);
int port = ((ServerConnector)server.getConnectors()[0]).getLocalPort();
LOG.info("Port : " + port);
URL url = new URL(String.format("http://localhost:%d/hello", port));
HttpURLConnection conn;
conn = (HttpURLConnection)url.openConnection();
Assert.assertEquals(200, conn.getResponseCode());
conn = (HttpURLConnection)url.openConnection();
LOG.info("Response : " + conn.getResponseCode());
Assert.assertEquals(200, conn.getResponseCode());
injector.close();
}
}