blob: ffeb37a57532a62e2cdf0128e696eb4e6629117a [file] [log] [blame]
package org.eclipse.jst.j2ee.archive.test;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.swingui.TestRunner;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jst.j2ee.application.Module;
import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleRef;
import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveInit;
import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.RuntimeClasspathEntry;
import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseApplication;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseConfigRegister;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseConfiguration;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseLibrary;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseModule;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseWARFile;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseconfigFactory;
import org.eclipse.jst.j2ee.commonarchivecore.looseconfig.internal.LooseconfigPackage;
import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
public class LooseArchiveTests extends AbstractArchiveTest {
/** The current working directory */
protected String cwd;
protected URI looseConfigLoc;
protected URI looseAppLoc;
protected String looseModuleWorkspace;
protected String looseEARUri;
protected static final String EJB_JAR_URI = "LooseEAREjb.jar";
protected static final String WAR_URI = "LooseEARWeb.war";
protected static final String UTIL_JAR_URI = "util.jar";
protected static final String WEBLIB_URI = "WEB-INF/lib/library.jar";
protected static final String WEBLIB_FULL_URI = "WEB-INF/lib/library.jar";
protected static final String OUTPUT_EAR_FILE_URI = AutomatedBVT.baseDirectory +"testOutput/LooseArchiveTests/LooseApp.ear";
protected static char sep = java.io.File.separatorChar;
/**
* Constructor for LooseArchiveTests.
* @param name
*/
public LooseArchiveTests(String name) {
super(name);
}
public void testLooseConfigCreation() throws Exception {
Resource resource = Resource.Factory.Registry.INSTANCE.getFactory(looseConfigLoc).createResource(looseConfigLoc);
resource.getContents().add(createLooseConfig());
resource.save(new java.util.HashMap());
}
public void testLooseAppCreation() throws Exception {
Resource resource = Resource.Factory.Registry.INSTANCE.getFactory(looseAppLoc).createResource(looseAppLoc);
resource.getContents().add(createLooseApplication());
resource.save(new java.util.HashMap());
}
public void testLooseConfigOpenAndSave() throws Exception {
System.setProperty(LooseConfigRegister.LOOSE_CONFIG_PROPERTY, looseConfigLoc.toString());
EARFile ear = getArchiveFactory().openEARFile(looseEARUri);
verify(ear);
//printClasspaths(ear);
ear.saveAs(OUTPUT_EAR_FILE_URI);
ear.close();
ear = getArchiveFactory().openEARFile(OUTPUT_EAR_FILE_URI);
verify(ear);
ear.close();
}
public void testLooseConfigUnimodeOpenAndSave() throws Exception {
System.setProperty(LooseConfigRegister.LOOSE_CONFIG_PROPERTY, "");
LooseConfigRegister.singleton().addLooseMapping(looseEARUri, looseAppLoc.toString());
EARFile ear = getArchiveFactory().openEARFile(looseEARUri);
verify(ear);
//printClasspaths(ear);
ear.saveAs(OUTPUT_EAR_FILE_URI);
ear.close();
ear = getArchiveFactory().openEARFile(OUTPUT_EAR_FILE_URI);
verify(ear);
ear.close();
}
public void testLooseConfigOpenAndReOpen() throws Exception {
System.setProperty(LooseConfigRegister.LOOSE_CONFIG_PROPERTY, looseConfigLoc.toString());
EARFile ear = getArchiveFactory().openEARFile(looseEARUri);
ear.close();
ear.reopen();
List jars = ear.getArchiveFiles();
for (int i = 0; i < jars.size(); i++) {
Archive archive = (Archive) jars.get(i);
archive.close();
archive.reopen(ear);
}
ear.close();
}
protected void verify(EARFile ear) throws Exception {
verifyModules(ear);
verifyModuleRefs(ear);
verifyUtilAndLib(ear);
}
/**
* Another level of verification that for each module, the module files exists
* and the deployment descriptor can be read
*/
protected void verifyModuleRefs(EARFile ear) throws Exception {
List moduleRefs = ear.getModuleRefs();
int size = moduleRefs.size();
assertEquals("Wrong number of modules", 2, size);
for (int i = 0; i < size; i++) {
ModuleRef ref = (ModuleRef) moduleRefs.get(i);
assertNotNull("ModuleRef should have a module file:"+ref.getModule().getUri(), ref.getModuleFile());
assertNotNull("Deployment descriptor should not be null", ref.getDeploymentDescriptor());
}
}
/**
* Verify that the util jar in the ear and the library in the war exist and are not empty
*/
protected void verifyUtilAndLib(EARFile ear) throws Exception {
verifyJAR(ear, UTIL_JAR_URI);
verifyJAR((Archive)ear.getFile(WAR_URI), WEBLIB_FULL_URI);
}
protected void verifyJAR(Archive parent, String uri) throws Exception {
assertTrue("Should contain JAR: "+uri, parent.containsFile(uri));
Archive jar = (Archive)parent.getFile(uri);
//at lease one file plus the manifest
assertTrue("JAR should contain a class file: "+uri, containsClassFile(jar));
}
protected boolean containsClassFile(Archive jar) {
List files = jar.getFiles();
for (int i = 0; i < files.size(); i++) {
File aFile = (File) files.get(i);
if (aFile.getURI().endsWith(".class"));
return true;
}
return false;
}
/**
* Make sure {@link Container#containsFile(String) works for loose modules
*/
public void verifyModules(EARFile ear) throws Exception {
List modules = ear.getDeploymentDescriptor().getModules();
int size = modules.size();
for (int i = 0; i < modules.size(); i++) {
Module m = (Module) modules.get(i);
assertTrue("EAR file should contain module file: "+m.getUri(), ear.containsFile(m.getUri()));
}
assertEquals("Wrong number of modules", 2, size);
for (int i = 0; i < modules.size(); i++) {
Module m = (Module) modules.get(i);
assertTrue("EAR file should contain module file: "+m.getUri(), ear.containsFile(m.getUri()));
}
}
protected LooseConfiguration createLooseConfig() {
LooseConfiguration config = looseConfigFactory().createLooseConfiguration();
config.getApplications().add(createLooseApplication());
return config;
}
protected LooseApplication createLooseApplication() {
LooseApplication app = looseConfigFactory().createLooseApplication();
app.setUri(looseEARUri);
app.setResourcesPath(looseEARUri);
app.setBinariesPath(looseEARUri);
List looseArchives = app.getLooseArchives();
looseArchives.add(createLooseEJB());
looseArchives.add(createLooseWEB());
looseArchives.add(createLooseUtil());
return app;
}
protected LooseModule createLooseEJB() {
LooseModule mod = looseConfigFactory().createLooseModule();
mod.setUri(EJB_JAR_URI);
String absPath = looseModuleWorkspace+sep+"LooseEAREjb"+sep+"bin";
mod.setBinariesPath(absPath);
mod.setResourcesPath(absPath);
return mod;
}
protected LooseModule createLooseWEB() {
LooseWARFile mod = looseConfigFactory().createLooseWARFile();
mod.setUri(WAR_URI);
String absPath = looseModuleWorkspace+sep+"LooseEARWeb"+sep+"webApplication";
mod.setBinariesPath(absPath);
mod.setResourcesPath(absPath);
mod.getLooseLibs().add(createLooseWebLib());
return mod;
}
protected LooseLibrary createLooseUtil() {
LooseLibrary lib = looseConfigFactory().createLooseLibrary();
lib.setUri(UTIL_JAR_URI);
String absPath = looseModuleWorkspace+sep+"LooseJavaUtil"+sep+"bin";
lib.setBinariesPath(absPath);
lib.setResourcesPath(absPath);
return lib;
}
protected LooseLibrary createLooseWebLib() {
LooseLibrary lib = looseConfigFactory().createLooseLibrary();
lib.setUri(WEBLIB_URI);
String absPath = looseModuleWorkspace+sep+"LooseJavaWebLib"+sep+"bin";
lib.setBinariesPath(absPath);
lib.setResourcesPath(absPath);
return lib;
}
protected LooseconfigFactory looseConfigFactory() {
return LooseconfigPackage.eINSTANCE.getLooseconfigFactory();
}
protected void printClasspaths(EARFile ear) {
List archives = ear.getArchiveFiles();
for (int i = 0; i < archives.size(); i++) {
Archive archive = (Archive) archives.get(i);
System.out.println("Local runtime classpath for: "+archive.getURI());
RuntimeClasspathEntry[] entries = archive.getLocalRuntimeClassPath();
for (int j = 0; j < entries.length; j++) {
System.out.println(entries[j]);
}
System.out.println("Full runtime classpath for: "+archive.getURI());
entries = archive.getFullRuntimeClassPath();
for (int j = 0; j < entries.length; j++) {
System.out.println(entries[j]);
}
}
}
public static void main(String[] args) {
String[] className = { "com.ibm.etools.archive.test.LooseArchiveTests", "-noloading" };
TestRunner.main(className);
}
public static Test suite() {
TestSuite suite = new TestSuite("LooseArchiveTests");
suite.addTest(new LooseArchiveTests("testLooseConfigCreation"));
suite.addTest(new LooseArchiveTests("testLooseAppCreation"));
suite.addTest(new LooseArchiveTests("testLooseConfigOpenAndSave"));
suite.addTest(new LooseArchiveTests("testLooseConfigOpenAndReOpen"));
suite.addTest(new LooseArchiveTests("testLooseConfigUnimodeOpenAndSave"));
return suite;
}
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
ArchiveInit.init();
LooseConfigRegister.singleton().flush();
cwd = AutomatedBVT.baseDirectory;
looseModuleWorkspace = cwd+"loose_module_workspace";
looseConfigLoc = URI.createFileURI(looseModuleWorkspace+sep+".metadata"+sep+".plugins"+sep+"com.ibm.etools.j2ee"+sep+"looseConfig.xmi");
looseAppLoc = URI.createFileURI(looseModuleWorkspace+sep+".metadata"+sep+".plugins"+sep+"com.ibm.etools.j2ee"+sep+"looseApp.xmi");
looseEARUri = ArchiveUtil.getOSUri(looseModuleWorkspace+sep+"LooseEAR");
}
}