Skip to content

Commit

Permalink
adds new configuration parameters. Resolves issue arquillian#18.
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Soto authored and Alex Soto committed Aug 13, 2015
1 parent 8a51e82 commit 56c6a5a
Show file tree
Hide file tree
Showing 11 changed files with 320 additions and 27 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
*.ipr
*.iws
.idea
.DS_Store

# Maven
target/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,16 @@
import org.jboss.arquillian.container.spi.ConfigurationException;
import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
* A {@link org.jboss.arquillian.spi.client.container.ContainerConfiguration} common base for the Jetty Embedded containers
*
* @author Dan Allen
* @author Ales Justin
* @author Alex Soto
* @version $Revision: $
*/
public abstract class AbstractJettyEmbeddedConfiguration implements ContainerConfiguration
Expand All @@ -32,6 +37,12 @@ public abstract class AbstractJettyEmbeddedConfiguration implements ContainerCon

private int bindHttpPort = 9090;

private Map<String, String> mimeTypes;

private int headerBufferSize = 0;

private File realmProperties;

/**
* List of server configuration classes that can be used for
* establishing the configuration tasks for the WebApp being deployed.
Expand All @@ -45,6 +56,14 @@ public abstract class AbstractJettyEmbeddedConfiguration implements ContainerCon
*/
public void validate() throws ConfigurationException
{
if(this.realmProperties != null) {
if(!this.realmProperties.exists()) {
throw new ConfigurationException(String.format("Realm properties file %s must exists.", this.realmProperties.getAbsolutePath()));
}
if(this.realmProperties.isDirectory()) {
throw new ConfigurationException("Realm Properties should be a file and not a directory");
}
}
}

public int getBindHttpPort()
Expand Down Expand Up @@ -80,4 +99,54 @@ public void setConfigurationClasses(String configurationClasses)
{
this.configurationClasses = configurationClasses;
}

public int getHeaderBufferSize()
{
return this.headerBufferSize;
}

public boolean isHeaderBufferSizeSet() {
return this.headerBufferSize > 0;
}

public void setHeaderBufferSize(int headerBufferSize)
{
this.headerBufferSize = headerBufferSize;
}

public void setRealmProperties(String realmProperties)
{
this.realmProperties = new File(realmProperties);
}

public boolean isRealmPropertiesFileSet()
{
return this.realmProperties != null;
}

public File getRealmProperties()
{
return realmProperties;
}

public void setMimeTypes(String mimeTypes) {
this.mimeTypes = new HashMap<String, String>();
String[] splittedLines = mimeTypes.split(" ");
for(int i = 0; i < splittedLines.length; i+=2)
{
if(i+1 >= splittedLines.length)
{
throw new ConfigurationException(String.format("Mime Type definition should follow the format <extension> <type>[ <extension> <type>]*, for example js application/javascript but %s definition has been found.", mimeTypes));
}
this.mimeTypes.put(splittedLines[i], splittedLines[i+1]);
}
}

public boolean areMimeTypesSet() {
return this.mimeTypes != null;
}

public Map<String, String> getMimeTypes() {
return mimeTypes;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.jboss.arquillian.container.jetty;

public class DummyJettyEmbeddedConfiguration extends AbstractJettyEmbeddedConfiguration
{



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.jboss.arquillian.container.jetty;


import org.junit.Test;

import java.util.Map;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

public class JettyEmbeddedConfigurationTest {

private static final String MIME_DEFINITIONS = "js application/javascript " +
"txt text/plain " +
"html text/html";

@Test
public void shouldConfigureMimeTypes() {
DummyJettyEmbeddedConfiguration dummyJettyEmbeddedConfiguration = new DummyJettyEmbeddedConfiguration();
dummyJettyEmbeddedConfiguration.setMimeTypes(MIME_DEFINITIONS);
Map<String, String> mimeTypes = dummyJettyEmbeddedConfiguration.getMimeTypes();
assertThat(mimeTypes.get("js"), is("application/javascript"));
assertThat(mimeTypes.get("txt"), is("text/plain"));
assertThat(mimeTypes.get("html"), is("text/html"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
*/
package org.jboss.arquillian.container.jetty.embedded_6_1;

import java.io.File;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

import org.jboss.arquillian.container.jetty.EnvUtil;
Expand All @@ -34,10 +37,12 @@
import org.jboss.shrinkwrap.jetty_6.api.ShrinkWrapWebAppContext;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.MimeTypes;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ContextHandlerCollection;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.security.HashUserRealm;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.jetty.webapp.WebAppContext;

Expand Down Expand Up @@ -133,6 +138,10 @@ public void start() throws LifecycleException

// Setup connector
Connector connector = new SelectChannelConnector();
if(this.containerConfig.isHeaderBufferSizeSet()) {
connector.setHeaderBufferSize(containerConfig.getHeaderBufferSize());
}

connector.setHost(containerConfig.getBindAddress());
connector.setPort(containerConfig.getBindHttpPort());
server.setConnectors(new Connector[] { connector });
Expand All @@ -144,7 +153,13 @@ public void start() throws LifecycleException
new DefaultHandler()
};
server.setHandlers(handlers);


if(containerConfig.isRealmPropertiesFileSet())
{
String realmName = getRealmName();
HashUserRealm hashUserRealm = new HashUserRealm(realmName, containerConfig.getRealmProperties().getAbsolutePath());
server.addUserRealm(hashUserRealm);
}
// Start Server
server.start();

Expand All @@ -166,6 +181,17 @@ public void start() throws LifecycleException
}
}

private String getRealmName() {
File realmProperties = containerConfig.getRealmProperties();
String fileName = realmProperties.getName();
int index = -1;
if((index = fileName.indexOf('.')) > -1)
{
fileName = fileName.substring(0, index);
}
return fileName;
}

private String[] getWebAppConfigurationClasses()
{
// If user has specified in Container Configuration, use it.
Expand Down Expand Up @@ -226,6 +252,11 @@ public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentExcept
{
wctx.setConfigurationClasses(webappConfigurationClasses);
}
if (containerConfig.areMimeTypesSet())
{
MimeTypes mimeTypes = getMimeTypes();
wctx.setMimeTypes(mimeTypes);
}
// possible configuration parameters
wctx.setExtractWAR(true);
wctx.setLogUrlOnStart(true);
Expand Down Expand Up @@ -254,6 +285,17 @@ public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentExcept
}
}

private MimeTypes getMimeTypes() {
Map<String, String> configuredMimeTypes = containerConfig.getMimeTypes();
Set<Map.Entry<String, String>> entries = configuredMimeTypes.entrySet();
MimeTypes mimeTypes = new MimeTypes();
for(Map.Entry<String, String> entry : entries)
{
mimeTypes.addMimeMapping(entry.getKey(), entry.getValue());
}
return mimeTypes;
}

public void undeploy(final Archive<?> archive) throws DeploymentException
{
WebAppContext wctx = webAppContextProducer.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
*/
package org.jboss.arquillian.container.jetty.embedded_7;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.security.HashLoginService;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
Expand All @@ -44,6 +42,13 @@
import org.jboss.shrinkwrap.descriptor.api.Descriptor;
import org.jboss.shrinkwrap.jetty_7.api.ShrinkWrapWebAppContext;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

/**
* <p>
* Jetty Embedded 7.x container for the Arquillian project.
Expand Down Expand Up @@ -131,7 +136,11 @@ public void start() throws LifecycleException
server = new Server();

// Setup connector
Connector connector = new SelectChannelConnector();
SelectChannelConnector connector = new SelectChannelConnector();
if(this.containerConfig.isHeaderBufferSizeSet()) {
connector.setRequestHeaderSize(containerConfig.getHeaderBufferSize());
connector.setResponseHeaderSize(containerConfig.getHeaderBufferSize());
}
connector.setHost(containerConfig.getBindAddress());
connector.setPort(containerConfig.getBindHttpPort());
server.setConnectors(new Connector[] { connector });
Expand All @@ -143,6 +152,13 @@ public void start() throws LifecycleException
handlers.addHandler(new DefaultHandler());
server.setHandler(handlers);

if(containerConfig.isRealmPropertiesFileSet())
{
String realmName = getRealmName();
HashLoginService hashUserRealm = new HashLoginService(realmName, containerConfig.getRealmProperties().getAbsolutePath());
server.addBean(hashUserRealm);
}

// Start Server
log.info("Starting Jetty Embedded Server " + Server.getVersion() + " [id:" + server.hashCode() + "]");
server.start();
Expand All @@ -161,6 +177,17 @@ public void start() throws LifecycleException
}
}

private String getRealmName() {
File realmProperties = containerConfig.getRealmProperties();
String fileName = realmProperties.getName();
int index = -1;
if((index = fileName.indexOf('.')) > -1)
{
fileName = fileName.substring(0, index);
}
return fileName;
}

@Override
public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentException
{
Expand All @@ -172,7 +199,11 @@ public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentExcept
{
wctx.setConfigurationClasses(webappConfigurationClasses);
}

if (containerConfig.areMimeTypesSet())
{
MimeTypes mimeTypes = getMimeTypes();
wctx.setMimeTypes(mimeTypes);
}
// possible configuration parameters
wctx.setExtractWAR(true);
wctx.setLogUrlOnStart(true);
Expand Down Expand Up @@ -202,6 +233,17 @@ public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentExcept
}
}

private MimeTypes getMimeTypes() {
Map<String, String> configuredMimeTypes = containerConfig.getMimeTypes();
Set<Map.Entry<String, String>> entries = configuredMimeTypes.entrySet();
MimeTypes mimeTypes = new MimeTypes();
for(Map.Entry<String, String> entry : entries)
{
mimeTypes.addMimeMapping(entry.getKey(), entry.getValue());
}
return mimeTypes;
}

private String[] getWebAppConfigurationClasses()
{
// If user has specified in Container Configuration, use it.
Expand Down

0 comments on commit 56c6a5a

Please sign in to comment.