From 72120d8ea3fe09e0419bab6542a5cdd7c0764712 Mon Sep 17 00:00:00 2001 From: Kyle Lieber Date: Wed, 5 Oct 2016 19:13:21 -0500 Subject: [PATCH] upgrade to jetty 9.2 (#309) --- pom.xml | 2 +- .../coffee/HandlesRequestsForCoffee.java | 6 ++-- .../jasmine/mojo/AbstractJasmineMojo.java | 20 ++++------- .../searls/jasmine/mojo/ServerMojo.java | 3 +- .../github/searls/jasmine/mojo/TestMojo.java | 3 +- .../server/JasmineResourceHandler.java | 1 - .../server/ResourceHandlerConfigurator.java | 34 +++++++++---------- .../searls/jasmine/server/ServerManager.java | 29 ++++++++-------- ...AbstractThirdPartyLibsResourceHandler.java | 6 ++-- .../coffee/HandlesRequestsForCoffeeTest.java | 10 +++--- ...onvertsFileToUriStringIntegrationTest.java | 1 + .../searls/jasmine/mojo/ServerMojoTest.java | 25 ++++++++------ .../jasmine/server/ServerManagerTest.java | 11 +++--- .../java/org/eclipse/jetty/server/Server.java | 4 +++ 14 files changed, 78 insertions(+), 77 deletions(-) diff --git a/pom.xml b/pom.xml index af8b0de43..4b0aca270 100644 --- a/pom.xml +++ b/pom.xml @@ -137,7 +137,7 @@ 1.6.5 - 8.2.0.v20160908 + 9.2.19.v20160908 2.53.1 2.4.1 2.19 diff --git a/src/main/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffee.java b/src/main/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffee.java index b91eacbe5..e50bf04bc 100644 --- a/src/main/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffee.java +++ b/src/main/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffee.java @@ -3,7 +3,7 @@ import com.github.searls.jasmine.config.JasmineConfiguration; import com.github.searls.jasmine.format.BuildsJavaScriptToWriteFailureHtml; import org.apache.commons.io.IOUtils; -import org.eclipse.jetty.http.HttpHeaders; +import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.util.resource.Resource; @@ -41,10 +41,10 @@ private void writeResponse(HttpServletResponse response, String javascript) thro private void setHeaders(HttpServletResponse response, Resource resource, String javascript) { response.setCharacterEncoding("UTF-8"); response.setContentType("text/javascript"); - response.setDateHeader(HttpHeaders.LAST_MODIFIED, resource.lastModified()); + response.setDateHeader(HttpHeader.LAST_MODIFIED.asString(), resource.lastModified()); try { int contentLength = javascript.getBytes("UTF-8").length; - response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(contentLength)); + response.setHeader(HttpHeader.CONTENT_LENGTH.asString(), Integer.toString(contentLength)); } catch (UnsupportedEncodingException e) { throw new RuntimeException( "The JVM does not support the compiler's default encoding.", e); diff --git a/src/main/java/com/github/searls/jasmine/mojo/AbstractJasmineMojo.java b/src/main/java/com/github/searls/jasmine/mojo/AbstractJasmineMojo.java index db1675cf2..b3d9e7b35 100644 --- a/src/main/java/com/github/searls/jasmine/mojo/AbstractJasmineMojo.java +++ b/src/main/java/com/github/searls/jasmine/mojo/AbstractJasmineMojo.java @@ -15,7 +15,8 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.resource.ResourceManager; -import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import java.io.File; import java.util.ArrayList; @@ -523,18 +524,11 @@ public List getContexts() { return contexts; } - protected Connector getConnector() throws MojoExecutionException { - try { - @SuppressWarnings("unchecked") - Class c = (Class) Class.forName(connectorClass); - return c.newInstance(); - } catch (InstantiationException e) { - throw new MojoExecutionException("Unable to instantiate.", e); - } catch (IllegalAccessException e) { - throw new MojoExecutionException("Unable to instantiate.", e); - } catch (ClassNotFoundException e) { - throw new MojoExecutionException("Unable to instantiate.", e); - } + protected ServerConnector getConnector() throws MojoExecutionException { + Server server = new Server(); + ServerConnector connector = new ServerConnector(server); + server.addConnector(connector); + return connector; } protected boolean isSkipTests() { diff --git a/src/main/java/com/github/searls/jasmine/mojo/ServerMojo.java b/src/main/java/com/github/searls/jasmine/mojo/ServerMojo.java index c9f044fd3..b38c0f51c 100644 --- a/src/main/java/com/github/searls/jasmine/mojo/ServerMojo.java +++ b/src/main/java/com/github/searls/jasmine/mojo/ServerMojo.java @@ -10,7 +10,6 @@ import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.ResolutionScope; -import org.eclipse.jetty.server.Server; import java.io.File; import java.io.IOException; @@ -74,7 +73,7 @@ private ServerManager getServerManager() throws MojoExecutionException { this.relativizesFilePaths, createsRunner); - return new ServerManager(new Server(), getConnector(), configurator); + return ServerManager.newInstance(configurator); } private String getRelativePath(File absolutePath) throws IOException { diff --git a/src/main/java/com/github/searls/jasmine/mojo/TestMojo.java b/src/main/java/com/github/searls/jasmine/mojo/TestMojo.java index 5a6c1615e..5be322363 100644 --- a/src/main/java/com/github/searls/jasmine/mojo/TestMojo.java +++ b/src/main/java/com/github/searls/jasmine/mojo/TestMojo.java @@ -23,7 +23,6 @@ import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.jetty.server.Server; import org.openqa.selenium.WebDriver; import javax.inject.Inject; @@ -217,7 +216,7 @@ private ServerManager getServerManager() throws MojoExecutionException { this.relativizesFilePaths, createsRunner); - return new ServerManager(new Server(), getConnector(), configurator); + return ServerManager.newInstance(configurator); } private void setPortProperty(int port) { diff --git a/src/main/java/com/github/searls/jasmine/server/JasmineResourceHandler.java b/src/main/java/com/github/searls/jasmine/server/JasmineResourceHandler.java index 0159233e1..ed4dc8130 100644 --- a/src/main/java/com/github/searls/jasmine/server/JasmineResourceHandler.java +++ b/src/main/java/com/github/searls/jasmine/server/JasmineResourceHandler.java @@ -29,7 +29,6 @@ public JasmineResourceHandler(CreatesRunner createsRunner, this.detectsCoffee = detectsCoffee; this.createsRunner = createsRunner; this.handlesRequestsForCoffee = handlesRequestsForCoffee; - setAliases(true); } @Override diff --git a/src/main/java/com/github/searls/jasmine/server/ResourceHandlerConfigurator.java b/src/main/java/com/github/searls/jasmine/server/ResourceHandlerConfigurator.java index 396bc99e9..9b0041932 100644 --- a/src/main/java/com/github/searls/jasmine/server/ResourceHandlerConfigurator.java +++ b/src/main/java/com/github/searls/jasmine/server/ResourceHandlerConfigurator.java @@ -8,6 +8,7 @@ import com.github.searls.jasmine.thirdpartylibs.WebJarResourceHandler; import org.apache.commons.lang3.StringUtils; import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.handler.AllowSymLinkAliasChecker; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.ResourceHandler; @@ -34,30 +35,29 @@ public Handler createHandler() throws IOException { for (Context context : this.configuration.getContexts()) { String contextRoot = StringUtils.prependIfMissing(context.getContextRoot(), "/"); - ContextHandler handler = contexts.addContext(contextRoot, ""); - handler.setAliases(true); - handler.setHandler(this.createResourceHandler(true, context.getDirectory().getCanonicalPath(), null)); + addContext(contexts, contextRoot, this.createResourceHandler(true, context.getDirectory().getCanonicalPath())); } - ContextHandler rootContextHandler = contexts.addContext("/", ""); - rootContextHandler.setHandler(this.createResourceHandler(false, this.configuration.getBasedir().getCanonicalPath(), new String[]{this.getWelcomeFilePath()})); - rootContextHandler.setAliases(true); - - ContextHandler classPathContextHandler = contexts.addContext("/classpath", ""); - classPathContextHandler.setHandler(new ClassPathResourceHandler(configuration.getProjectClassLoader())); - classPathContextHandler.setAliases(true); - - ContextHandler webJarsContextHandler = contexts.addContext("/webjars", ""); - webJarsContextHandler.setHandler(new WebJarResourceHandler(configuration.getProjectClassLoader())); - webJarsContextHandler.setAliases(true); - + addContext(contexts, "/", this.createResourceHandler( + false, + this.configuration.getBasedir().getCanonicalPath(), + this.getWelcomeFilePath() + )); + addContext(contexts, "/classpath", new ClassPathResourceHandler(configuration.getProjectClassLoader())); + addContext(contexts, "/webjars", new WebJarResourceHandler(configuration.getProjectClassLoader())); return contexts; } - private ResourceHandler createResourceHandler(boolean directory, String absolutePath, String[] welcomeFiles) { + private void addContext(ContextHandlerCollection contexts, String contextPath, Handler handler) { + ContextHandler contextHandler = contexts.addContext(contextPath, ""); + contextHandler.setHandler(handler); + contextHandler.addAliasCheck(new AllowSymLinkAliasChecker()); + } + + private ResourceHandler createResourceHandler(boolean directory, String absolutePath, String ... welcomeFiles) { ResourceHandler resourceHandler = new JasmineResourceHandler(this.createsRunner, this.configuration); resourceHandler.setDirectoriesListed(directory); - if (welcomeFiles != null) { + if (welcomeFiles.length > 0) { resourceHandler.setWelcomeFiles(welcomeFiles); } resourceHandler.setResourceBase(absolutePath); diff --git a/src/main/java/com/github/searls/jasmine/server/ServerManager.java b/src/main/java/com/github/searls/jasmine/server/ServerManager.java index b0bb08c59..f713a12f6 100644 --- a/src/main/java/com/github/searls/jasmine/server/ServerManager.java +++ b/src/main/java/com/github/searls/jasmine/server/ServerManager.java @@ -1,20 +1,17 @@ package com.github.searls.jasmine.server; -import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; public class ServerManager { private static final int ANY_PORT = 0; - private final Server server; - private final Connector connector; + private final ServerConnector connector; private final ResourceHandlerConfigurator configurator; - public ServerManager(Server server, - Connector connector, - ResourceHandlerConfigurator configurator) { - this.server = server; + protected ServerManager(ServerConnector connector, + ResourceHandlerConfigurator configurator) { this.connector = connector; this.configurator = configurator; } @@ -29,20 +26,24 @@ public void start(int port) throws Exception { private int startServer(int port) throws Exception { connector.setPort(port); - - this.server.setHandler(this.configurator.createHandler()); - this.server.addConnector(connector); - - this.server.start(); + connector.getServer().setHandler(this.configurator.createHandler()); + connector.getServer().start(); return connector.getLocalPort(); } public void stop() throws Exception { - this.server.stop(); + connector.getServer().stop(); } public void join() throws Exception { - this.server.join(); + connector.getServer().join(); + } + + public static ServerManager newInstance(ResourceHandlerConfigurator configurator) { + Server server = new Server(); + ServerConnector connector = new ServerConnector(server); + server.addConnector(connector); + return new ServerManager(connector, configurator); } } diff --git a/src/main/java/com/github/searls/jasmine/thirdpartylibs/AbstractThirdPartyLibsResourceHandler.java b/src/main/java/com/github/searls/jasmine/thirdpartylibs/AbstractThirdPartyLibsResourceHandler.java index ff9fdd047..ef5c0bbea 100644 --- a/src/main/java/com/github/searls/jasmine/thirdpartylibs/AbstractThirdPartyLibsResourceHandler.java +++ b/src/main/java/com/github/searls/jasmine/thirdpartylibs/AbstractThirdPartyLibsResourceHandler.java @@ -1,7 +1,7 @@ package com.github.searls.jasmine.thirdpartylibs; import org.apache.commons.io.IOUtils; -import org.eclipse.jetty.http.HttpHeaders; +import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.ResourceHandler; @@ -50,10 +50,10 @@ private void setHeaders(HttpServletResponse response, String resourcePath, Strin response.setContentType("text/javascript"); } response.addDateHeader("EXPIRES", 0L); - response.setDateHeader(HttpHeaders.LAST_MODIFIED, new Date().getTime()); + response.setDateHeader(HttpHeader.LAST_MODIFIED.asString(), new Date().getTime()); try { int contentLength = content.getBytes("UTF-8").length; - response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(contentLength)); + response.setHeader(HttpHeader.CONTENT_LENGTH.asString(), Integer.toString(contentLength)); } catch (UnsupportedEncodingException e) { throw new RuntimeException("The JVM does not support javascript default encoding.", e); } diff --git a/src/test/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffeeTest.java b/src/test/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffeeTest.java index 91c84d9f8..05291239b 100644 --- a/src/test/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffeeTest.java +++ b/src/test/java/com/github/searls/jasmine/coffee/HandlesRequestsForCoffeeTest.java @@ -2,7 +2,7 @@ import com.github.searls.jasmine.config.JasmineConfiguration; import com.github.searls.jasmine.format.BuildsJavaScriptToWriteFailureHtml; -import org.eclipse.jetty.http.HttpHeaders; +import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.util.resource.Resource; import org.junit.Before; @@ -84,7 +84,7 @@ public void setsResourceLastModifiedOnResponseHeader() throws IOException { subject.handle(baseRequest, response, resource); - verify(response).setDateHeader(HttpHeaders.LAST_MODIFIED, expected); + verify(response).setDateHeader(HttpHeader.LAST_MODIFIED.asString(), expected); } @Test @@ -95,7 +95,7 @@ public void whenCoffeeCompilesThenWriteIt() throws IOException { subject.handle(baseRequest, response, resource); verify(response.getWriter()).write(expected); - verify(response).setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(expected.length())); + verify(response).setHeader(HttpHeader.CONTENT_LENGTH.asString(), Integer.toString(expected.length())); } @Test @@ -106,7 +106,7 @@ public void whenCoffeeCompilesHasMultiByteThenWriteIt() throws IOException { subject.handle(baseRequest, response, resource); verify(response.getWriter()).write(expected); - verify(response).setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(expected.getBytes("UTF-8").length)); + verify(response).setHeader(HttpHeader.CONTENT_LENGTH.asString(), Integer.toString(expected.getBytes("UTF-8").length)); } @Test @@ -130,7 +130,7 @@ public void whenCoffeeRequestWithREQUIRE_JSThenWriteCoffee() throws IOException subject.handle(baseRequest, response, resource); verify(response.getWriter()).write(COFFEE); - verify(response).setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(COFFEE.length())); + verify(response).setHeader(HttpHeader.CONTENT_LENGTH.asString(), Integer.toString(COFFEE.length())); } } diff --git a/src/test/java/com/github/searls/jasmine/io/scripts/ConvertsFileToUriStringIntegrationTest.java b/src/test/java/com/github/searls/jasmine/io/scripts/ConvertsFileToUriStringIntegrationTest.java index f0f85469f..81c72a1b3 100644 --- a/src/test/java/com/github/searls/jasmine/io/scripts/ConvertsFileToUriStringIntegrationTest.java +++ b/src/test/java/com/github/searls/jasmine/io/scripts/ConvertsFileToUriStringIntegrationTest.java @@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; + public class ConvertsFileToUriStringIntegrationTest { private final ConvertsFileToUriString subject = new ConvertsFileToUriString(); diff --git a/src/test/java/com/github/searls/jasmine/mojo/ServerMojoTest.java b/src/test/java/com/github/searls/jasmine/mojo/ServerMojoTest.java index 77bacda22..50b3a59e2 100644 --- a/src/test/java/com/github/searls/jasmine/mojo/ServerMojoTest.java +++ b/src/test/java/com/github/searls/jasmine/mojo/ServerMojoTest.java @@ -9,8 +9,6 @@ import com.github.searls.jasmine.server.ServerManager; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; -import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.Server; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -20,14 +18,13 @@ import java.io.File; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isA; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.whenNew; @RunWith(PowerMockRunner.class) -@PrepareForTest(ServerMojo.class) +@PrepareForTest({ServerMojo.class, ServerManager.class}) public class ServerMojoTest { private static final String SPECS_DIR = "spec dir"; @@ -38,31 +35,39 @@ public class ServerMojoTest { private static final String MANUAL_SPEC_RUNNER_NAME = "nacho specs"; private static final String BASE_DIR = "my-base-dir"; - private static final String connectorClassString = "org.eclipse.jetty.server.nio.SelectChannelConnector"; - private static final Class connectorClass = org.eclipse.jetty.server.nio.SelectChannelConnector.class; - @Mock private Log log; + @Mock private MavenProject mavenProject; + @Mock private RelativizesFilePaths relativizesFilePaths; + @Mock private File baseDir; + @Mock private File targetDir; + @Mock private File sourceDir; + @Mock private File specDir; + @Mock private ScriptSearch sources; + @Mock private ScriptSearch specs; + @Mock private CreatesRunner createsRunner; + @Mock private ResourceHandlerConfigurator configurator; + @Mock private ServerManager serverManager; @@ -81,7 +86,6 @@ public void arrangeAndAct() throws Exception { this.subject.manualSpecRunnerHtmlFileName = MANUAL_SPEC_RUNNER_NAME; this.subject.specRunnerTemplate = SpecRunnerTemplate.DEFAULT; this.subject.debug = true; - this.subject.connectorClass = connectorClassString; when(this.sourceDir.getAbsolutePath()).thenReturn(SOURCE_DIR); when(this.specDir.getAbsolutePath()).thenReturn(SPECS_DIR); when(this.sources.getDirectory()).thenReturn(this.sourceDir); @@ -103,7 +107,8 @@ public void arrangeAndAct() throws Exception { this.relativizesFilePaths, createsRunner).thenReturn(configurator); - whenNew(ServerManager.class).withArguments(isA(Server.class), isA(connectorClass), eq(configurator)).thenReturn(serverManager); + mockStatic(ServerManager.class); + when(ServerManager.newInstance(configurator)).thenReturn(serverManager); this.subject.run(); } diff --git a/src/test/java/com/github/searls/jasmine/server/ServerManagerTest.java b/src/test/java/com/github/searls/jasmine/server/ServerManagerTest.java index 50c6f2f4a..2f3bf1945 100644 --- a/src/test/java/com/github/searls/jasmine/server/ServerManagerTest.java +++ b/src/test/java/com/github/searls/jasmine/server/ServerManagerTest.java @@ -2,6 +2,7 @@ import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -11,6 +12,7 @@ import org.mockito.runners.MockitoJUnitRunner; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ServerManagerTest { @@ -22,7 +24,7 @@ public class ServerManagerTest { private Server server; @Mock - private Connector connector; + private ServerConnector connector; private ServerManager serverManager; @@ -31,22 +33,19 @@ public class ServerManagerTest { @Before public void before() { - this.serverManager = new ServerManager(server, connector, configurator); + when(connector.getServer()).thenReturn(server); + this.serverManager = new ServerManager(connector, configurator); } @Test public void testStartAnyPort() throws Exception { this.serverManager.start(); - - verify(this.server).addConnector(this.connector); verify(this.connector).setPort(0); } @Test public void testStartOnSpecificPort() throws Exception { this.serverManager.start(1234); - - verify(this.server).addConnector(connectorCaptor.capture()); verify(this.connector).setPort(1234); } diff --git a/src/test/java/org/eclipse/jetty/server/Server.java b/src/test/java/org/eclipse/jetty/server/Server.java index c9de041d0..2e4c17a60 100644 --- a/src/test/java/org/eclipse/jetty/server/Server.java +++ b/src/test/java/org/eclipse/jetty/server/Server.java @@ -5,6 +5,10 @@ //Link Seam for jetty server. public class Server { + public static String getVersion() { + return ""; + } + public void addConnector(Connector connector) { }