/*
* JBoss, Home of Professional Open Source
* Copyright 2009 Red Hat Inc. and/or its affiliates and other contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.arquillian.protocol.servlet.v_3;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.jboss.arquillian.container.spi.client.deployment.Validate;
import org.jboss.arquillian.container.test.api.Testable;
import org.jboss.arquillian.container.test.spi.TestDeployment;
import org.jboss.arquillian.container.test.spi.client.deployment.ProtocolArchiveProcessor;
import org.jboss.arquillian.protocol.servlet.TestUtil;
import org.jboss.arquillian.protocol.servlet.arq514hack.descriptors.api.application.ApplicationDescriptor;
import org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.junit.Assert;
import org.junit.Test;
/**
* ServletProtocolDeploymentPackagerTestCase
*
* @author <a href="mailto:aslak@redhat.com">Aslak Knutsen</a>
* @version $Revision: $
*/
public class ServletProtocolDeploymentPackagerTestCase {
@Test
public void shouldHandleJavaArchive() throws Exception {
Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(JavaArchive.class, "applicationArchive.jar"),
createAuxiliaryArchives()),
processors());
Assert.assertTrue(
"Verify that a defined JavaArchive using EE6 JavaArchive protocol is build as WebArchive",
Validate.isArchiveOfType(WebArchive.class, archive));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
archive.contains(ArchivePaths.create("/WEB-INF/lib/arquillian-protocol.jar")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
archive.contains(ArchivePaths.create("/WEB-INF/lib/auxiliaryArchive2.jar")));
Assert.assertTrue(
"Verify that the applicationArchive is placed in /WEB-INF/lib",
archive.contains(ArchivePaths.create("/WEB-INF/lib/applicationArchive.jar")));
Assert.assertTrue(
"Verify protocol Processor SPI was called",
DummyProcessor.wasCalled);
}
@Test
public void shouldHandleWebArchive() throws Exception {
Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(WebArchive.class, "applicationArchive.war"),
createAuxiliaryArchives()),
processors());
Assert.assertTrue(
"Verify that a defined WebArchive using EE6 JavaArchive protocol is build as WebArchive",
Validate.isArchiveOfType(WebArchive.class, archive));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
archive.contains(ArchivePaths.create("/WEB-INF/lib/arquillian-protocol.jar")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
archive.contains(ArchivePaths.create("/WEB-INF/lib/auxiliaryArchive1.jar")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
archive.contains(ArchivePaths.create("/WEB-INF/lib/auxiliaryArchive2.jar")));
Assert.assertTrue(
"Verify protocol Processor SPI was called",
DummyProcessor.wasCalled);
}
@Test
public void shouldHandleEnterpriseArchive() throws Exception {
Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear"),
createAuxiliaryArchives()),
processors());
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /",
archive.contains(ArchivePaths.create("test.war")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive1.jar")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar")));
Assert.assertTrue(
"Verify protocol Processor SPI was called",
DummyProcessor.wasCalled);
}
@Test
public void shouldHandleEnterpriseArchiveWithApplicationXML() throws Exception {
Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear")
.setApplicationXML(createApplicationDescriptor()),
createAuxiliaryArchives()),
processors());
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /",
archive.contains(ArchivePaths.create("test.war")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive1.jar")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar")));
String applicationXmlContent =
TestUtil.convertToString(archive.get("META-INF/application.xml").getAsset().openStream());
Assert.assertTrue(
"verify that the arquillian-protocol.war was added to the application.xml",
applicationXmlContent.contains("<web-uri>test.war</web-uri>"));
// ARQ-670
Assert.assertTrue(
"verify that the arquillian-protocol.war has correct context-root in application.xml",
applicationXmlContent.contains("<context-root>test</context-root>"));
Assert.assertTrue(
"Verify protocol Processor SPI was called",
DummyProcessor.wasCalled);
}
@Test
public void shouldHandleEnterpriseArchiveWithWebArchive() throws Exception {
WebArchive applicationWar = ShrinkWrap.create(WebArchive.class, "applicationArchive.war");
Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear")
.addAsModule(applicationWar),
createAuxiliaryArchives()),
processors());
Assert.assertFalse(
"Verify that the auxiliaryArchives was not added",
archive.contains(ArchivePaths.create("arquillian-protocol.war")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive1.jar")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar")));
String webXmlContent = TestUtil.convertToString(
applicationWar.get("WEB-INF/lib/arquillian-protocol.jar/META-INF/web-fragment.xml").getAsset().openStream());
Assert.assertTrue(
"verify that the ServletTestRunner servlet was added to the web.xml of the existing web archive",
webXmlContent.contains(ServletTestRunner.class.getName()));
Assert.assertTrue(
"Verify protocol Processor SPI was called",
DummyProcessor.wasCalled);
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowExceptionOnUnknownArchiveType() throws Exception {
new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(ShrinkWrap.create(ResourceAdapterArchive.class), new ArrayList<Archive<?>>()),
processors()
);
}
@Test(expected = UnsupportedOperationException.class)
public void shouldThrowExceptionOnEnterpriseArchiveWithMultipleWebArchive() throws Exception {
new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear")
.addAsModule(ShrinkWrap.create(WebArchive.class))
.addAsModule(ShrinkWrap.create(WebArchive.class)),
createAuxiliaryArchives()),
processors());
}
@Test
public void shouldHandleEnterpriseArchiveWithMultipleWebArchiveAndOneMarkedWebArchive() throws Exception {
WebArchive testableArchive = Testable.archiveToTest(ShrinkWrap.create(WebArchive.class));
Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear")
.addAsModule(testableArchive)
.addAsModule(ShrinkWrap.create(WebArchive.class)),
createAuxiliaryArchives()),
processors());
Assert.assertFalse(
"Verify that the auxiliaryArchives was not added",
archive.contains(ArchivePaths.create("arquillian-protocol.war")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive1.jar")));
Assert.assertTrue(
"Verify that the auxiliaryArchives are placed in /lib",
archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar")));
String webXmlContent = TestUtil.convertToString(
testableArchive.get("WEB-INF/lib/arquillian-protocol.jar/META-INF/web-fragment.xml").getAsset().openStream());
Assert.assertTrue(
"verify that the ServletTestRunner servlet was added to the web.xml of the existing web archive",
webXmlContent.contains(ServletTestRunner.class.getName()));
Assert.assertTrue(
"Verify protocol Processor SPI was called",
DummyProcessor.wasCalled);
}
@Test(expected = UnsupportedOperationException.class)
public void shouldThrowExceptionOnEnterpriseArchiveWithMultipleMarkedWebArchives() throws Exception {
new ServletProtocolDeploymentPackager().generateDeployment(
new TestDeployment(
ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear")
.addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class)))
.addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class))),
createAuxiliaryArchives()),
processors());
}
private Collection<Archive<?>> createAuxiliaryArchives() {
List<Archive<?>> archives = new ArrayList<Archive<?>>();
archives.add(ShrinkWrap.create(JavaArchive.class, "auxiliaryArchive1.jar"));
archives.add(ShrinkWrap.create(JavaArchive.class, "auxiliaryArchive2.jar"));
return archives;
}
private Asset createApplicationDescriptor() {
return new StringAsset(
Descriptors.create(ApplicationDescriptor.class)
.version("6")
.ejbModule("test.jar")
.exportAsString());
}
private Collection<ProtocolArchiveProcessor> processors() {
List<ProtocolArchiveProcessor> pros = new ArrayList<ProtocolArchiveProcessor>();
pros.add(new DummyProcessor());
return pros;
}
private static class DummyProcessor implements ProtocolArchiveProcessor {
public static boolean wasCalled = false;
public DummyProcessor() {
wasCalled = false;
}
@Override
public void process(TestDeployment testDeployment, Archive<?> protocolArchive) {
wasCalled = true;
}
}
}