/*
* JBoss, Home of Professional Open Source
* Copyright 2006, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.deployers.deploymentfactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jboss.deployers.client.spi.Deployment;
import org.jboss.deployers.client.spi.DeploymentFactory;
import org.jboss.deployers.spi.attachments.Attachments;
import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments;
import org.jboss.deployers.spi.structure.ClassPathEntry;
import org.jboss.deployers.spi.structure.ContextInfo;
import org.jboss.deployers.spi.structure.StructureMetaData;
import org.jboss.test.BaseTestCase;
/**
* AbstractDeploymentFactoryTest.
*
* @author <a href="adrian@jboss.org">Adrian Brock</a>
* @version $Revision: 1.1 $
*/
public abstract class AbstractDeploymentFactoryTest extends BaseTestCase
{
public AbstractDeploymentFactoryTest(String name)
{
super(name);
}
protected static void assertDefault(ContextInfo contextInfo)
{
assertDefaultPath(contextInfo);
assertDefaultMetaDataPath(contextInfo);
assertDefaultClassPath(contextInfo.getClassPath());
}
protected static void assertDefaultPath(ContextInfo contextInfo)
{
assertEquals("", contextInfo.getPath());
}
protected static void assertDefaultNonPath(ContextInfo contextInfo)
{
assertDefaultMetaDataPath(contextInfo);
assertDefaultClassPath(contextInfo.getClassPath());
}
protected static void assertDefaultMetaDataPath(ContextInfo contextInfo)
{
assertNotNull(contextInfo);
assertNotNull(contextInfo.getMetaDataPath());
assertTrue(contextInfo.getMetaDataPath().isEmpty());
}
protected static void assertDefaultMetaDataPath(List<String> metaDataPath)
{
assertEquals(1, metaDataPath.size());
assertEquals("metaDataPath", metaDataPath.get(0));
}
protected static void assertDefaultClassPath(List<ClassPathEntry> classPath)
{
assertNotNull(classPath);
assertEquals(1, classPath.size());
ClassPathEntry entry = classPath.get(0);
assertNotNull(entry);
assertEquals("", entry.getPath());
assertNull(entry.getSuffixes());
}
protected StructureMetaData assertStructureMetaData(PredeterminedManagedObjectAttachments attachments)
{
assertNotNull(attachments);
Attachments x = attachments.getPredeterminedManagedObjects();
assertNotNull(x);
StructureMetaData structure = x.getAttachment(StructureMetaData.class);
assertNotNull(structure);
return structure;
}
protected void assertContexts(PredeterminedManagedObjectAttachments attachments, ContextInfo... expected)
{
StructureMetaData structure = assertStructureMetaData(attachments);
assertContexts(structure, expected);
}
protected void assertContexts(StructureMetaData structure, ContextInfo... expected)
{
assertNotNull(structure);
List<ContextInfo> contexts = new ArrayList<ContextInfo>();
if (expected != null)
{
for (ContextInfo context : expected)
contexts.add(context);
}
assertEquals(contexts, structure.getContexts());
}
protected abstract DeploymentFactory createDeploymentFactory();
protected abstract Deployment createDeployment();
public void testCreateClassPathEntryPath()
{
DeploymentFactory factory = createDeploymentFactory();
ClassPathEntry entry = factory.createClassPathEntry("path");
assertEquals("path", entry.getPath());
assertNull(entry.getSuffixes());
}
public void testCreateClassPathEntryPathErrors()
{
DeploymentFactory factory = createDeploymentFactory();
try
{
factory.createClassPathEntry(null);
fail("Should not be here!");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
}
public void testCreateClassPathEntryPathAndSuffixes()
{
DeploymentFactory factory = createDeploymentFactory();
ClassPathEntry entry = factory.createClassPathEntry("path", "suffixes");
assertEquals("path", entry.getPath());
assertEquals("suffixes", entry.getSuffixes());
entry = factory.createClassPathEntry("path", null);
assertEquals("path", entry.getPath());
assertNull(entry.getSuffixes());
}
public void testCreateClassPathEntryPathAndSuffixesErrors()
{
DeploymentFactory factory = createDeploymentFactory();
try
{
factory.createClassPathEntry(null, "suffixes");
fail("Should not be here!");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
}
public void testCreateClassPathPath()
{
DeploymentFactory factory = createDeploymentFactory();
List<ClassPathEntry> expected = Collections.singletonList(factory.createClassPathEntry("path"));
List<ClassPathEntry> classPath = factory.createClassPath("path");
assertEquals(expected, classPath);
}
public void testCreateClassPathPathErrors()
{
DeploymentFactory factory = createDeploymentFactory();
try
{
factory.createClassPath(null);
fail("Should not be here!");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
}
public void testCreateClassPathPathAndSuffixes()
{
DeploymentFactory factory = createDeploymentFactory();
List<ClassPathEntry> expected = Collections.singletonList(factory.createClassPathEntry("path", "suffixes"));
List<ClassPathEntry> classPath = factory.createClassPath("path", "suffixes");
assertEquals(expected, classPath);
}
public void testCreateClassPathPathAndSuffixesErrors()
{
DeploymentFactory factory = createDeploymentFactory();
try
{
factory.createClassPath(null, "suffixes");
fail("Should not be here!");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
}
public void testAddContextPath()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
ContextInfo context = factory.addContext(deployment, "path");
assertEquals("path", context.getPath());
assertDefaultNonPath(context);
assertContexts(deployment, context);
}
public void testAddContextPathErrors()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
try
{
factory.addContext(null, "path");
fail("Should not be here");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
try
{
factory.addContext(deployment, null);
fail("Should not be here");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
}
public void testAddContextPathAndClassPath()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
List<ClassPathEntry> classPath = factory.createClassPath("ClassPath");
ContextInfo context = factory.addContext(deployment, "path", classPath);
assertEquals("path", context.getPath());
assertDefaultMetaDataPath(context);
assertEquals(classPath, context.getClassPath());
assertContexts(deployment, context);
deployment = createDeployment();
classPath = null;
context = factory.addContext(deployment, "path", classPath);
assertEquals("path", context.getPath());
assertDefaultMetaDataPath(context);
assertNull(context.getClassPath());
assertContexts(deployment, context);
}
public void testAddContextPathAndClassPathErrors()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
List<ClassPathEntry> classPath = factory.createClassPath("ClassPath");
try
{
factory.addContext(null, "path", classPath);
fail("Should not be here");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
try
{
factory.addContext(deployment, null, classPath);
fail("Should not be here");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
}
public void testAddContextPathAndMetaDataAndClassPath()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
List<ClassPathEntry> classPath = factory.createClassPath("ClassPath");
ContextInfo context = factory.addContext(deployment, "path", "metaDataPath", classPath);
assertEquals("path", context.getPath());
assertDefaultMetaDataPath(context.getMetaDataPath());
assertEquals(classPath, context.getClassPath());
assertContexts(deployment, context);
classPath = null;
deployment = createDeployment();
context = factory.addContext(deployment, "path", "metaDataPath", classPath);
assertEquals("path", context.getPath());
assertDefaultMetaDataPath(context.getMetaDataPath());
assertNull(context.getClassPath());
assertContexts(deployment, context);
}
public void testAddContextPathAndMetaDataPathAndAndClassPathErrors()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
List<ClassPathEntry> classPath = factory.createClassPath("ClassPath");
try
{
factory.addContext(null, "path", "metaData", classPath);
fail("Should not be here");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
try
{
factory.addContext(deployment, null, "metaData", classPath);
fail("Should not be here");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
try
{
factory.addContext(deployment, "path", (String)null, classPath);
fail("Should not be here");
}
catch (Exception e)
{
checkThrowable(IllegalArgumentException.class, e);
}
}
public void testAddContexts()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
ContextInfo context1 = factory.addContext(deployment, "path1");
assertEquals("path1", context1.getPath());
assertDefaultNonPath(context1);
ContextInfo context2 = factory.addContext(deployment, "path2");
assertEquals("path2", context2.getPath());
assertDefaultNonPath(context1);
ContextInfo context3 = factory.addContext(deployment, "path3");
assertEquals("path3", context3.getPath());
assertDefaultNonPath(context1);
assertContexts(deployment, context1, context2, context3);
}
public void testAddContextsToContext()
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
ContextInfo parent = factory.addContext(deployment, "parent");
assertEquals("parent", parent.getPath());
assertDefaultNonPath(parent);
ContextInfo context1 = factory.addContext(parent, "path1");
assertEquals("path1", context1.getPath());
assertDefaultNonPath(context1);
ContextInfo context2 = factory.addContext(parent, "path2");
assertEquals("path2", context2.getPath());
assertDefaultNonPath(context2);
ContextInfo context3 = factory.addContext(parent, "path3");
assertEquals("path3", context3.getPath());
assertDefaultNonPath(context3);
assertContexts(deployment, parent);
assertContexts(parent, context1, context2, context3);
}
public void testSerialization() throws Exception
{
DeploymentFactory factory = createDeploymentFactory();
Deployment deployment = createDeployment();
List<ClassPathEntry> classPath = factory.createClassPath("ClassPath");
ContextInfo context1 = factory.addContext(deployment, "path1", "metaDataPath", classPath);
assertEquals("path1", context1.getPath());
assertDefaultMetaDataPath(context1.getMetaDataPath());
assertEquals(classPath, context1.getClassPath());
StructureMetaData structure = assertStructureMetaData(deployment);
assertContexts(structure, context1);
deployment = serializeDeserialize(deployment, Deployment.class);
structure = assertStructureMetaData(deployment);
assertContexts(structure, context1);
ContextInfo context2 = factory.addContext(deployment, "path2");
assertEquals("path2", context2.getPath());
assertDefaultNonPath(context2);
structure = assertStructureMetaData(deployment);
assertContexts(structure, context1, context2);
deployment = serializeDeserialize(deployment, Deployment.class);
structure = assertStructureMetaData(deployment);
assertContexts(structure, context1, context2);
ContextInfo testContext = structure.getContext("path2");
ContextInfo child1 = factory.addContext(testContext, "child1");
assertEquals("child1", child1.getPath());
assertDefaultNonPath(child1);
ContextInfo child2 = factory.addContext(testContext, "child2");
assertEquals("child2", child2.getPath());
assertDefaultNonPath(child2);
ContextInfo child3 = factory.addContext(testContext, "child3");
assertEquals("child3", child3.getPath());
assertDefaultNonPath(child3);
assertContexts(structure, context1, context2);
StructureMetaData childStructure = assertStructureMetaData(testContext);
assertContexts(childStructure, child1, child2, child3);
structure = serializeDeserialize(structure, StructureMetaData.class);
assertContexts(structure, context1, context2);
testContext = structure.getContext("path2");
assertEquals(context2, testContext);
childStructure = assertStructureMetaData(testContext);
assertContexts(childStructure, child1, child2, child3);
}
}