Applies Virgo standard format
diff --git a/org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook/src/test/java/org/eclipse/virgo/web/enterprise/persistence/openejb/classloading/hook/AppLoaderClasspathExtenderClassLoadingHookTests.java b/org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook/src/test/java/org/eclipse/virgo/web/enterprise/persistence/openejb/classloading/hook/AppLoaderClasspathExtenderClassLoadingHookTests.java
index 7dd862c..8b7589b 100755
--- a/org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook/src/test/java/org/eclipse/virgo/web/enterprise/persistence/openejb/classloading/hook/AppLoaderClasspathExtenderClassLoadingHookTests.java
+++ b/org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook/src/test/java/org/eclipse/virgo/web/enterprise/persistence/openejb/classloading/hook/AppLoaderClasspathExtenderClassLoadingHookTests.java
@@ -18,316 +18,325 @@
import java.util.Dictionary;
import java.util.Hashtable;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Test;
import org.easymock.EasyMock;
-import org.eclipse.osgi.baseadaptor.BaseData;
import org.eclipse.osgi.baseadaptor.loader.BaseClassLoader;
import org.eclipse.osgi.baseadaptor.loader.ClasspathEntry;
import org.eclipse.osgi.baseadaptor.loader.ClasspathManager;
-import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
-import org.eclipse.osgi.framework.log.FrameworkLog;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
public class AppLoaderClasspathExtenderClassLoadingHookTests {
- private static final String TESTAPP = "testapp";
- private static final String SOME_FAKE_FILE = "some.fake.file";
- private static final String PERSISTENCE_INTEGRATION_JAR = "org.apache.openejb.jpa.integration.jar";
- private static final String PERSISTENCE_INTEGRATION_JAR_NAME = "org.apache.openejb.jpa.integration";
- private static final String PERSISTENCE_INTEGRATION_JAR_PROP_NAME = "persistence.integration.jar.name";
- private static final String CONFIGURATION_DIR = "configuration";
- private static final String FILE_SCHEME = "file:";
- private static final String CONFIG_AREA = "osgi.configuration.area";
- private static final String LIB_DIR = "lib";
- private static final String PERSISTENCE_DIR = "persistence";
- private static final String WEB_CONTEXTPATH_HEADER = "Web-ContextPath";
- private static final String PERSISTENCE_INTEGRATION_JAR1 = "org.apache.openejb.jpa.integration.jar_v1.1";
-
- @Test
- public void testAddClassPathEntryPositive() throws IOException {
- File jpaIntegrationFile = prepare();
- ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
- BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
- BaseDataStub data = new BaseDataStub(0, null);
- Dictionary<String, String> manifest = new Hashtable<String, String>();
- manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
- data.setManifest(manifest);
- ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[]{}, classloader);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
- Assert.assertTrue("Classpath entry should be added successfully but it is not", result);
- Assert.assertTrue("There should be added only one classapth entry, but they are " + cpEntries.size(), cpEntries.size() == 1);
- ClasspathEntry entry = cpEntries.get(0);
- String classpath = ((BundleFileStub)entry.getBundleFile()).getClassPath();
- Assert.assertEquals("Classpath entry created with wrong path: ", jpaIntegrationFile.getAbsolutePath(), classpath);
- }
-
- @Test
- public void testAddClassPathEntryNegativeNotAppBundle() {
- ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
- BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
- BaseDataStub data = new BaseDataStub(0, null);
- Dictionary<String, String> manifest = new Hashtable<String, String>();
- data.setManifest(manifest);
- ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[]{}, classloader);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
- Assert.assertFalse("Classpath entry should not be added because this is not an application bundle but it is", result);
- }
-
- @Test
- public void testAddClassPathEntryNegativeAlreadyAdded() {
- ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
- BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
- BaseDataStub data = new BaseDataStub(0, null);
- Dictionary<String, String> manifest = new Hashtable<String, String>();
- data.setManifest(manifest);
- ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[]{}, classloader);
- File libDir = new File(new File("."), LIB_DIR);
- File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
- String classpath = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR).getAbsolutePath();
- ClasspathEntry entry = new ClasspathEntry(new BundleFileStub(classpath), null);
- cpEntries.add(entry);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
- Assert.assertFalse("Classpath entry should not be added because it is already added", result);
- }
-
- @Test
- public void testAddClassPathEntryNegativeExceptionThrown() {
- ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
- BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
- BaseDataStub data = new BaseDataStub(0, null);
- Dictionary<String, String> manifest = new Hashtable<String, String>();
- manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
- data.setManifest(manifest);
- ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[]{}, classloader);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
- Assert.assertFalse("Classpath entry should not be added because the persistence integration jar is not found", result);
- }
- private File prepare() throws IOException {
- File configDir = new File(new File("."), CONFIGURATION_DIR);
- configDir.mkdir();
- File libDir = new File(new File("."), LIB_DIR);
- libDir.mkdir();
- File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
- libPersistenceDir.mkdir();
- File jpaIntegrationFile = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR);
- jpaIntegrationFile.createNewFile();
- String configurationFilePath = FILE_SCHEME + configDir.getAbsolutePath();
- System.setProperty(CONFIG_AREA, configurationFilePath);
- System.setProperty(PERSISTENCE_INTEGRATION_JAR_PROP_NAME, PERSISTENCE_INTEGRATION_JAR_NAME);
- return jpaIntegrationFile;
- }
-
- @After
- public void cleanUp() {
- if(System.getProperty(CONFIG_AREA) != null) {
- System.getProperties().remove(CONFIG_AREA);
- }
- File configDir = new File(new File("."), CONFIGURATION_DIR);
- if (configDir.exists()) {
- configDir.delete();
- }
-
- File libDir = new File(new File("."), LIB_DIR);
- File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
- File jpaIntegrationFile = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR);
-
- if (jpaIntegrationFile.exists()) {
- jpaIntegrationFile.delete();
- }
-
- File jpaIntegrationFile1 = new File(libDir, PERSISTENCE_INTEGRATION_JAR1);
- if (jpaIntegrationFile1.exists()) {
- jpaIntegrationFile1.delete();
- }
-
- if (libPersistenceDir.exists()) {
- libPersistenceDir.delete();
- }
-
- if (libDir.exists()) {
- libDir.delete();
- }
- }
-
- @Test
- public void testShouldAddPositive() {
- boolean result = checkForFile(SOME_FAKE_FILE);
- Assert.assertTrue("Check should succeed since the classpath entries list does not contain one for the jpa integration jar", result);
- }
-
- @Test
- public void testShouldAddNegative() {
- boolean result = checkForFile(PERSISTENCE_INTEGRATION_JAR);
- Assert.assertFalse("Check should fail since the classpath entries list already contains one for the jpa integration jar", result);
- }
-
- private boolean checkForFile(String filename) {
- ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
- File libDir = new File(new File("."), LIB_DIR);
- File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
- String classpath = new File(libPersistenceDir, filename).getAbsolutePath();
- ClasspathEntry entry = new ClasspathEntry(new BundleFileStub(classpath), null);
- cpEntries.add(entry);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- return hook.shouldAdd(cpEntries);
- }
-
- @Test
- public void testIsAppBundlePositive() {
- boolean result = checkForApp(TESTAPP, false);
- Assert.assertTrue("Check should succeed since the manifest contains Web-ContextPath header", result);
- }
-
- @Test
- public void testIsAppBundleNegative() {
- boolean result = checkForApp(null, false);
- Assert.assertFalse("Check should fail since the manifest does not contain Web-ContextPath header", result);
- }
-
- @Test
- public void testIsAppBundleThrowsException() {
- boolean result = checkForApp(TESTAPP, true);
- Assert.assertFalse("Check should fail because exception is thrown", result);
- }
-
- private boolean checkForApp(String contextpathHeaderValue, boolean shouldThrowException) {
- BaseDataStub baseData = new BaseDataStub(0, null);
- Dictionary<String, String> manifest = new Hashtable<String, String>();
- if (contextpathHeaderValue != null) {
- manifest.put(WEB_CONTEXTPATH_HEADER, contextpathHeaderValue);
- }
- baseData.setManifest(manifest);
- baseData.setShouldThrowException(shouldThrowException);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- return hook.isAppBundle(baseData);
- }
-
- @Test
- public void testNormalizeActual() {
- String filepath = FILE_SCHEME + SOME_FAKE_FILE;
- checkNormalize(filepath);
- }
-
- @Test
- public void testNormalizeIdentity() {
- checkNormalize(SOME_FAKE_FILE);
- }
-
- private void checkNormalize(String filepath) {
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- String normalizedFilepath = hook.normalize(filepath);
- Assert.assertEquals("Normalized path should be [" + SOME_FAKE_FILE + "] but it is [" + normalizedFilepath + "] instead", SOME_FAKE_FILE, normalizedFilepath);
- }
-
- @Test
- public void testFindPersistenceIntegrationJarPositive() throws IOException {
- File jpaIntegrationFile = prepare();
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- try {
- hook.findPersistenceIntegrationJar();
- Assert.assertEquals("Jpa integration jar not discovered correctly", hook.persistenceIntegrationJar.getAbsolutePath(), jpaIntegrationFile.getAbsolutePath());
- } catch (ClasspathExtenderClassLoadingHookException e) {
- Assert.fail("No exception should be thrown here");
- }
- }
-
- @Test
- public void testFindPersistenceIntegrationJarNoConfigurationPropertyDefined() {
- checkForException("Property [" + CONFIG_AREA + "] is missing");
- }
-
- @Test
- public void testFindPersistenceIntegrationJarMissingLibFolder() {
- File configDir = new File(new File("."), CONFIGURATION_DIR);
- String configurationFilePath = FILE_SCHEME + configDir.getAbsolutePath();
- System.setProperty(CONFIG_AREA, configurationFilePath);
- checkForException("lib folder is missing");
- }
-
- @Test
- public void testFindPersistenceIntegrationJarMissingIntegrationJar() {
- File configDir = new File(new File("."), CONFIGURATION_DIR);
- configDir.mkdir();
- File libDir = new File(new File("."), LIB_DIR);
- libDir.mkdir();
- File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
- libPersistenceDir.mkdir();
- String configurationFilePath = FILE_SCHEME + configDir.getAbsolutePath();
- System.setProperty(CONFIG_AREA, configurationFilePath);
- checkForException("No file with name starting with [" + PERSISTENCE_INTEGRATION_JAR_NAME + "] was found in lib/persistence folder");
- }
-
- @Test
- public void testFindPersistenceIntegrationJarMultipleIntegrationJars() throws IOException {
- File jpaIntegrationFile = prepare();
- File libDir = new File(new File("."), LIB_DIR);
- File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
- File jpaIntegrationFile1 = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR1);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- try {
- hook.findPersistenceIntegrationJar();
- String actualPath = hook.persistenceIntegrationJar.getAbsolutePath();
- Assert.assertTrue("Jpa integration jar not discovered correctly", actualPath.equals(jpaIntegrationFile.getAbsolutePath()) ||
- actualPath.equals(jpaIntegrationFile1.getAbsolutePath()));
- } catch (ClasspathExtenderClassLoadingHookException e) {
- Assert.fail("No exception should be thrown here");
- }
- }
-
- private void checkForException(String exceptionMessage) {
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- try {
- hook.findPersistenceIntegrationJar();
- Assert.fail("This code should not be reached - an exception is expected");
- } catch (ClasspathExtenderClassLoadingHookException e) {
- Assert.assertEquals(exceptionMessage, e.getMessage());
- }
- }
-
- @Test
- public void determinePersistenceIntegrationPathPositive() throws IOException {
- File jpaIntegrationFile = prepare();
- BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
- BaseDataStub data = new BaseDataStub(0, null);
- Dictionary<String, String> manifest = new Hashtable<String, String>();
- manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
- data.setManifest(manifest);
- ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[]{}, classloader);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- ClasspathEntry entry;
- try {
- entry = hook.determinePersistenceIntegrationPath(classpathmanager, data, new ProtectionDomain(null, null));
- String classpath = ((BundleFileStub)entry.getBundleFile()).getClassPath();
- Assert.assertEquals("Classpath entry created with wrong path: ", jpaIntegrationFile.getAbsolutePath(), classpath);
- } catch (ClasspathExtenderClassLoadingHookException e) {
- Assert.fail("No exception should be thrown here");
- }
- }
-
- @Test
- public void determinePersistenceIntegrationPathThrowsException() throws IOException {
- prepare();
- BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
- BaseDataStub data = new BaseDataStub(0, null);
- Dictionary<String, String> manifest = new Hashtable<String, String>();
- manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
- data.setManifest(manifest);
- ClasspathManagerStub classpathmanager = new ClasspathManagerStub(data, new String[]{}, classloader);
- classpathmanager.setShouldReturnNull(true);
- AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
- try {
- hook.determinePersistenceIntegrationPath(classpathmanager, data, new ProtectionDomain(null, null));
- Assert.fail("This code should not be reached - an exception is expected");
- } catch (ClasspathExtenderClassLoadingHookException e) {
- Assert.assertEquals("Failed to create classpath entry for file [" + PERSISTENCE_INTEGRATION_JAR_NAME + "]", e.getMessage());
- }
- }
-
-
-
+ private static final String TESTAPP = "testapp";
+
+ private static final String SOME_FAKE_FILE = "some.fake.file";
+
+ private static final String PERSISTENCE_INTEGRATION_JAR = "org.apache.openejb.jpa.integration.jar";
+
+ private static final String PERSISTENCE_INTEGRATION_JAR_NAME = "org.apache.openejb.jpa.integration";
+
+ private static final String PERSISTENCE_INTEGRATION_JAR_PROP_NAME = "persistence.integration.jar.name";
+
+ private static final String CONFIGURATION_DIR = "configuration";
+
+ private static final String FILE_SCHEME = "file:";
+
+ private static final String CONFIG_AREA = "osgi.configuration.area";
+
+ private static final String LIB_DIR = "lib";
+
+ private static final String PERSISTENCE_DIR = "persistence";
+
+ private static final String WEB_CONTEXTPATH_HEADER = "Web-ContextPath";
+
+ private static final String PERSISTENCE_INTEGRATION_JAR1 = "org.apache.openejb.jpa.integration.jar_v1.1";
+
+ @Test
+ public void testAddClassPathEntryPositive() throws IOException {
+ File jpaIntegrationFile = prepare();
+ ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
+ BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
+ BaseDataStub data = new BaseDataStub(0, null);
+ Dictionary<String, String> manifest = new Hashtable<String, String>();
+ manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
+ data.setManifest(manifest);
+ ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[] {}, classloader);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
+ Assert.assertTrue("Classpath entry should be added successfully but it is not", result);
+ Assert.assertTrue("There should be added only one classapth entry, but they are " + cpEntries.size(), cpEntries.size() == 1);
+ ClasspathEntry entry = cpEntries.get(0);
+ String classpath = ((BundleFileStub) entry.getBundleFile()).getClassPath();
+ Assert.assertEquals("Classpath entry created with wrong path: ", jpaIntegrationFile.getAbsolutePath(), classpath);
+ }
+
+ @Test
+ public void testAddClassPathEntryNegativeNotAppBundle() {
+ ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
+ BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
+ BaseDataStub data = new BaseDataStub(0, null);
+ Dictionary<String, String> manifest = new Hashtable<String, String>();
+ data.setManifest(manifest);
+ ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[] {}, classloader);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
+ Assert.assertFalse("Classpath entry should not be added because this is not an application bundle but it is", result);
+ }
+
+ @Test
+ public void testAddClassPathEntryNegativeAlreadyAdded() {
+ ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
+ BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
+ BaseDataStub data = new BaseDataStub(0, null);
+ Dictionary<String, String> manifest = new Hashtable<String, String>();
+ data.setManifest(manifest);
+ ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[] {}, classloader);
+ File libDir = new File(new File("."), LIB_DIR);
+ File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
+ String classpath = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR).getAbsolutePath();
+ ClasspathEntry entry = new ClasspathEntry(new BundleFileStub(classpath), null);
+ cpEntries.add(entry);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
+ Assert.assertFalse("Classpath entry should not be added because it is already added", result);
+ }
+
+ @Test
+ public void testAddClassPathEntryNegativeExceptionThrown() {
+ ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
+ BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
+ BaseDataStub data = new BaseDataStub(0, null);
+ Dictionary<String, String> manifest = new Hashtable<String, String>();
+ manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
+ data.setManifest(manifest);
+ ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[] {}, classloader);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ boolean result = hook.addClassPathEntry(cpEntries, "", classpathmanager, data, new ProtectionDomain(null, null));
+ Assert.assertFalse("Classpath entry should not be added because the persistence integration jar is not found", result);
+ }
+
+ private File prepare() throws IOException {
+ File configDir = new File(new File("."), CONFIGURATION_DIR);
+ configDir.mkdir();
+ File libDir = new File(new File("."), LIB_DIR);
+ libDir.mkdir();
+ File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
+ libPersistenceDir.mkdir();
+ File jpaIntegrationFile = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR);
+ jpaIntegrationFile.createNewFile();
+ String configurationFilePath = FILE_SCHEME + configDir.getAbsolutePath();
+ System.setProperty(CONFIG_AREA, configurationFilePath);
+ System.setProperty(PERSISTENCE_INTEGRATION_JAR_PROP_NAME, PERSISTENCE_INTEGRATION_JAR_NAME);
+ return jpaIntegrationFile;
+ }
+
+ @After
+ public void cleanUp() {
+ if (System.getProperty(CONFIG_AREA) != null) {
+ System.getProperties().remove(CONFIG_AREA);
+ }
+ File configDir = new File(new File("."), CONFIGURATION_DIR);
+ if (configDir.exists()) {
+ configDir.delete();
+ }
+
+ File libDir = new File(new File("."), LIB_DIR);
+ File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
+ File jpaIntegrationFile = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR);
+
+ if (jpaIntegrationFile.exists()) {
+ jpaIntegrationFile.delete();
+ }
+
+ File jpaIntegrationFile1 = new File(libDir, PERSISTENCE_INTEGRATION_JAR1);
+ if (jpaIntegrationFile1.exists()) {
+ jpaIntegrationFile1.delete();
+ }
+
+ if (libPersistenceDir.exists()) {
+ libPersistenceDir.delete();
+ }
+
+ if (libDir.exists()) {
+ libDir.delete();
+ }
+ }
+
+ @Test
+ public void testShouldAddPositive() {
+ boolean result = checkForFile(SOME_FAKE_FILE);
+ Assert.assertTrue("Check should succeed since the classpath entries list does not contain one for the jpa integration jar", result);
+ }
+
+ @Test
+ public void testShouldAddNegative() {
+ boolean result = checkForFile(PERSISTENCE_INTEGRATION_JAR);
+ Assert.assertFalse("Check should fail since the classpath entries list already contains one for the jpa integration jar", result);
+ }
+
+ private boolean checkForFile(String filename) {
+ ArrayList<ClasspathEntry> cpEntries = new ArrayList<ClasspathEntry>();
+ File libDir = new File(new File("."), LIB_DIR);
+ File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
+ String classpath = new File(libPersistenceDir, filename).getAbsolutePath();
+ ClasspathEntry entry = new ClasspathEntry(new BundleFileStub(classpath), null);
+ cpEntries.add(entry);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ return hook.shouldAdd(cpEntries);
+ }
+
+ @Test
+ public void testIsAppBundlePositive() {
+ boolean result = checkForApp(TESTAPP, false);
+ Assert.assertTrue("Check should succeed since the manifest contains Web-ContextPath header", result);
+ }
+
+ @Test
+ public void testIsAppBundleNegative() {
+ boolean result = checkForApp(null, false);
+ Assert.assertFalse("Check should fail since the manifest does not contain Web-ContextPath header", result);
+ }
+
+ @Test
+ public void testIsAppBundleThrowsException() {
+ boolean result = checkForApp(TESTAPP, true);
+ Assert.assertFalse("Check should fail because exception is thrown", result);
+ }
+
+ private boolean checkForApp(String contextpathHeaderValue, boolean shouldThrowException) {
+ BaseDataStub baseData = new BaseDataStub(0, null);
+ Dictionary<String, String> manifest = new Hashtable<String, String>();
+ if (contextpathHeaderValue != null) {
+ manifest.put(WEB_CONTEXTPATH_HEADER, contextpathHeaderValue);
+ }
+ baseData.setManifest(manifest);
+ baseData.setShouldThrowException(shouldThrowException);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ return hook.isAppBundle(baseData);
+ }
+
+ @Test
+ public void testNormalizeActual() {
+ String filepath = FILE_SCHEME + SOME_FAKE_FILE;
+ checkNormalize(filepath);
+ }
+
+ @Test
+ public void testNormalizeIdentity() {
+ checkNormalize(SOME_FAKE_FILE);
+ }
+
+ private void checkNormalize(String filepath) {
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ String normalizedFilepath = hook.normalize(filepath);
+ Assert.assertEquals("Normalized path should be [" + SOME_FAKE_FILE + "] but it is [" + normalizedFilepath + "] instead", SOME_FAKE_FILE,
+ normalizedFilepath);
+ }
+
+ @Test
+ public void testFindPersistenceIntegrationJarPositive() throws IOException {
+ File jpaIntegrationFile = prepare();
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ try {
+ hook.findPersistenceIntegrationJar();
+ Assert.assertEquals("Jpa integration jar not discovered correctly", hook.persistenceIntegrationJar.getAbsolutePath(),
+ jpaIntegrationFile.getAbsolutePath());
+ } catch (ClasspathExtenderClassLoadingHookException e) {
+ Assert.fail("No exception should be thrown here");
+ }
+ }
+
+ @Test
+ public void testFindPersistenceIntegrationJarNoConfigurationPropertyDefined() {
+ checkForException("Property [" + CONFIG_AREA + "] is missing");
+ }
+
+ @Test
+ public void testFindPersistenceIntegrationJarMissingLibFolder() {
+ File configDir = new File(new File("."), CONFIGURATION_DIR);
+ String configurationFilePath = FILE_SCHEME + configDir.getAbsolutePath();
+ System.setProperty(CONFIG_AREA, configurationFilePath);
+ checkForException("lib folder is missing");
+ }
+
+ @Test
+ public void testFindPersistenceIntegrationJarMissingIntegrationJar() {
+ File configDir = new File(new File("."), CONFIGURATION_DIR);
+ configDir.mkdir();
+ File libDir = new File(new File("."), LIB_DIR);
+ libDir.mkdir();
+ File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
+ libPersistenceDir.mkdir();
+ String configurationFilePath = FILE_SCHEME + configDir.getAbsolutePath();
+ System.setProperty(CONFIG_AREA, configurationFilePath);
+ checkForException("No file with name starting with [" + PERSISTENCE_INTEGRATION_JAR_NAME + "] was found in lib/persistence folder");
+ }
+
+ @Test
+ public void testFindPersistenceIntegrationJarMultipleIntegrationJars() throws IOException {
+ File jpaIntegrationFile = prepare();
+ File libDir = new File(new File("."), LIB_DIR);
+ File libPersistenceDir = new File(libDir, PERSISTENCE_DIR);
+ File jpaIntegrationFile1 = new File(libPersistenceDir, PERSISTENCE_INTEGRATION_JAR1);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ try {
+ hook.findPersistenceIntegrationJar();
+ String actualPath = hook.persistenceIntegrationJar.getAbsolutePath();
+ Assert.assertTrue("Jpa integration jar not discovered correctly",
+ actualPath.equals(jpaIntegrationFile.getAbsolutePath()) || actualPath.equals(jpaIntegrationFile1.getAbsolutePath()));
+ } catch (ClasspathExtenderClassLoadingHookException e) {
+ Assert.fail("No exception should be thrown here");
+ }
+ }
+
+ private void checkForException(String exceptionMessage) {
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ try {
+ hook.findPersistenceIntegrationJar();
+ Assert.fail("This code should not be reached - an exception is expected");
+ } catch (ClasspathExtenderClassLoadingHookException e) {
+ Assert.assertEquals(exceptionMessage, e.getMessage());
+ }
+ }
+
+ @Test
+ public void determinePersistenceIntegrationPathPositive() throws IOException {
+ File jpaIntegrationFile = prepare();
+ BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
+ BaseDataStub data = new BaseDataStub(0, null);
+ Dictionary<String, String> manifest = new Hashtable<String, String>();
+ manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
+ data.setManifest(manifest);
+ ClasspathManager classpathmanager = new ClasspathManagerStub(data, new String[] {}, classloader);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ ClasspathEntry entry;
+ try {
+ entry = hook.determinePersistenceIntegrationPath(classpathmanager, data, new ProtectionDomain(null, null));
+ String classpath = ((BundleFileStub) entry.getBundleFile()).getClassPath();
+ Assert.assertEquals("Classpath entry created with wrong path: ", jpaIntegrationFile.getAbsolutePath(), classpath);
+ } catch (ClasspathExtenderClassLoadingHookException e) {
+ Assert.fail("No exception should be thrown here");
+ }
+ }
+
+ @Test
+ public void determinePersistenceIntegrationPathThrowsException() throws IOException {
+ prepare();
+ BaseClassLoader classloader = EasyMock.createMock(BaseClassLoader.class);
+ BaseDataStub data = new BaseDataStub(0, null);
+ Dictionary<String, String> manifest = new Hashtable<String, String>();
+ manifest.put(WEB_CONTEXTPATH_HEADER, TESTAPP);
+ data.setManifest(manifest);
+ ClasspathManagerStub classpathmanager = new ClasspathManagerStub(data, new String[] {}, classloader);
+ classpathmanager.setShouldReturnNull(true);
+ AppLoaderClasspathExtenderClassLoadingHook hook = new AppLoaderClasspathExtenderClassLoadingHook();
+ try {
+ hook.determinePersistenceIntegrationPath(classpathmanager, data, new ProtectionDomain(null, null));
+ Assert.fail("This code should not be reached - an exception is expected");
+ } catch (ClasspathExtenderClassLoadingHookException e) {
+ Assert.assertEquals("Failed to create classpath entry for file [" + PERSISTENCE_INTEGRATION_JAR_NAME + "]", e.getMessage());
+ }
+ }
+
}