Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/WebappConfigLocatorTest.java')
-rwxr-xr-xorg.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/WebappConfigLocatorTest.java193
1 files changed, 193 insertions, 0 deletions
diff --git a/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/WebappConfigLocatorTest.java b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/WebappConfigLocatorTest.java
new file mode 100755
index 0000000..1dd19c9
--- /dev/null
+++ b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/WebappConfigLocatorTest.java
@@ -0,0 +1,193 @@
+package org.eclipse.gemini.web.tomcat.internal;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+
+import org.apache.catalina.Container;
+import org.apache.catalina.Engine;
+import org.apache.catalina.Host;
+import org.eclipse.gemini.web.core.spi.ServletContainerException;
+import org.eclipse.virgo.util.io.IOUtils;
+import org.junit.Before;
+import org.junit.Test;
+
+public class WebappConfigLocatorTest {
+ private static final String CONTEXT_PATH_1 = "test";
+ private static final String CONTEXT_PATH_2 = "test1";
+ private static final String CONTEXT_PATH_3 = "/";
+ private static final String CONTEXT_PATH_4 = "/test/test";
+ private static final String CONTEXT_PATH_5 = "test/test";
+
+ private static final String CONFIG_FILE_LOCATION_1 = "file:src/test/resources/test.xml";
+ private static final String CONFIG_FILE_LOCATION_2 = "file:src/test/resources/META-INF/context.xml";
+ private static final String CONFIG_FILE_LOCATION_3 = "file:target/test-classes/test1.xml";
+ private static final String CONFIG_FILE_LOCATION_4 = "file:target/test-classes/ROOT.xml";
+ private static final String CONFIG_FILE_LOCATION_5 = "file:target/test-classes/test%23test.xml";
+
+ private static final String CONFIG_DIR_LOCATION_1 = "file:src/test/resources";
+ private static final String CONFIG_DIR_LOCATION_2 = "file:src/test";
+ private static final String CONFIG_DIR_LOCATION_3 = "file:target/test-classes";
+
+ private static final String CORRUPTED_JAR_NAME = "file:target/test-classes/corrupted.jar";
+ private static final String JAR_NAME_1 = "file:target/test-classes/test1.jar";
+ private static final String JAR_NAME_2 = "file:target/test-classes/test2.jar";
+ private static final String JAR_ENTRY_NAME = "META-INF/context.xml";
+
+ private static final String HOST_NAME = "localhost";
+ private static final String ENGINE_NAME = "Catalina";
+
+ @Before
+ public void setUp() throws Exception {
+ URL urlFile2 = new URL(CONFIG_FILE_LOCATION_2);
+ URL jarFile1 = new URL(JAR_NAME_1);
+ URL jarFile2 = new URL(JAR_NAME_2);
+ URL corruptedJarFile = new URL(CORRUPTED_JAR_NAME);
+ new File(corruptedJarFile.getPath()).createNewFile();
+
+ byte[] buffer = new byte[1024];
+ int bytesRead;
+
+ FileOutputStream stream = null;
+ JarOutputStream out = null;
+ FileInputStream file = null;
+ try {
+ stream = new FileOutputStream(jarFile1.getPath());
+ out = new JarOutputStream(stream, new Manifest());
+ file = new FileInputStream(new File(urlFile2.getPath()));
+ JarEntry jarAdd = new JarEntry(JAR_ENTRY_NAME);
+ out.putNextEntry(jarAdd);
+ while ((bytesRead = file.read(buffer)) != -1) {
+ out.write(buffer, 0, bytesRead);
+ }
+ out.closeEntry();
+ } finally {
+ IOUtils.closeQuietly(file);
+ IOUtils.closeQuietly(out);
+ IOUtils.closeQuietly(stream);
+ }
+
+ try {
+ stream = new FileOutputStream(jarFile2.getPath());
+ out = new JarOutputStream(stream, new Manifest());
+ } finally {
+ IOUtils.closeQuietly(out);
+ IOUtils.closeQuietly(stream);
+ }
+ }
+
+ @Test
+ public void testResolveWebappContextXml() throws Exception {
+ URL urlFile1 = new URL(CONFIG_FILE_LOCATION_1);
+ URL urlDir1 = new URL(CONFIG_DIR_LOCATION_1);
+ // context.xml exists in the configuration directory
+ assertEquals(new File(urlFile1.getPath()), WebappConfigLocator.resolveWebappContextXml(CONTEXT_PATH_1, null,
+ new File(urlDir1.getPath())));
+
+ URL urlFile2 = new URL(CONFIG_FILE_LOCATION_2);
+ URL urlDir2 = new URL(CONFIG_DIR_LOCATION_2);
+ // context.xml does not exist in the configuration directory, but exists
+ // in doc base
+ // doc base is directory
+ assertEquals(new File(urlFile2.getPath()), WebappConfigLocator.resolveWebappContextXml(CONTEXT_PATH_2, urlDir1
+ .getPath(), new File(urlDir1.getPath())));
+ // context.xml does not exist in the configuration directory and in doc
+ // base
+ // doc base is directory
+ assertEquals(null, WebappConfigLocator.resolveWebappContextXml(CONTEXT_PATH_2, urlDir2.getPath(), new File(
+ urlDir1.getPath())));
+
+ try {
+ // context.xml does not exist in the configuration directory, doc
+ // base is jar and does not exist
+ URL corruptedJarFile = new URL(CORRUPTED_JAR_NAME);
+ WebappConfigLocator.resolveWebappContextXml(CONTEXT_PATH_2, corruptedJarFile.getPath(), new File(urlDir1
+ .getPath()));
+ } catch (ServletContainerException e) {
+ assertTrue(e.getCause() instanceof IOException);
+ }
+
+ URL jarFile1 = new URL(JAR_NAME_1);
+ URL jarFile2 = new URL(JAR_NAME_2);
+ URL urlDir3 = new URL(CONFIG_DIR_LOCATION_3);
+ URL urlFile3 = new URL(CONFIG_FILE_LOCATION_3);
+ // context.xml does not exist in the configuration directory, but exists
+ // in doc base
+ // doc base is jar
+ // copy will be performed
+ assertEquals(new File(urlFile3.getPath()), WebappConfigLocator.resolveWebappContextXml(CONTEXT_PATH_2, jarFile1
+ .getPath(), new File(urlDir3.getPath())));
+ // context.xml does not exist in the configuration directory and in doc
+ // base
+ // doc base is jar
+ assertEquals(null, WebappConfigLocator.resolveWebappContextXml(CONTEXT_PATH_2, jarFile2.getPath(), new File(
+ urlDir1.getPath())));
+
+ URL urlFile4 = new URL(CONFIG_FILE_LOCATION_4);
+ URL urlFile5 = new URL(CONFIG_FILE_LOCATION_5);
+ // different types of context path
+ assertEquals(new File(urlFile4.getPath()), WebappConfigLocator.resolveWebappContextXml(CONTEXT_PATH_3, jarFile1
+ .getPath(), new File(urlDir3.getPath())));
+ assertEquals(new File(urlFile5.toURI().getSchemeSpecificPart()), WebappConfigLocator.resolveWebappContextXml(
+ CONTEXT_PATH_4, jarFile1.getPath(), new File(urlDir3.getPath())));
+ assertEquals(new File(urlFile5.toURI().getSchemeSpecificPart()), WebappConfigLocator.resolveWebappContextXml(
+ CONTEXT_PATH_5, jarFile1.getPath(), new File(urlDir3.getPath())));
+ }
+
+ @Test
+ public void testResolveWebappConfigDir() {
+ Host mockHost = createMock(Host.class);
+ Engine mockEngine = createMock(Engine.class);
+ Container mockContainer = createMock(Container.class);
+ expect(mockHost.getParent()).andReturn(mockEngine).andReturn(mockContainer).andReturn(null).andReturn(
+ mockEngine).andReturn(mockContainer).andReturn(null);
+ expect(mockHost.getName()).andReturn(HOST_NAME).times(6);
+ expect(mockEngine.getName()).andReturn(ENGINE_NAME).times(2);
+
+ replay(mockHost, mockEngine);
+
+ File configDir = new File("");
+ File expected = new File(configDir, ENGINE_NAME);
+ expected = new File(expected, HOST_NAME);
+ assertEquals(expected, WebappConfigLocator.resolveWebappConfigDir(configDir, mockHost));
+
+ expected = new File(configDir, HOST_NAME);
+ assertEquals(expected, WebappConfigLocator.resolveWebappConfigDir(configDir, mockHost));
+ assertEquals(expected, WebappConfigLocator.resolveWebappConfigDir(configDir, mockHost));
+
+ configDir = new File(WebappConfigLocator.DEFAULT_CONFIG_DIRECTORY);
+ expected = new File(configDir, ENGINE_NAME);
+ expected = new File(expected, HOST_NAME);
+ assertEquals(expected, WebappConfigLocator.resolveWebappConfigDir(null, mockHost));
+
+ expected = new File(configDir, HOST_NAME);
+ assertEquals(expected, WebappConfigLocator.resolveWebappConfigDir(null, mockHost));
+ assertEquals(expected, WebappConfigLocator.resolveWebappConfigDir(null, mockHost));
+
+ verify(mockHost, mockEngine);
+ }
+
+ @Test
+ public void testResolveDefaultContextXml() throws Exception {
+ assertEquals(null, WebappConfigLocator.resolveDefaultContextXml(null));
+
+ URL urlFile = new URL(CONFIG_FILE_LOCATION_2);
+ assertEquals(urlFile.getPath(), WebappConfigLocator.resolveDefaultContextXml(new File(urlFile.getPath())
+ .getParentFile()));
+
+ assertEquals(null, WebappConfigLocator.resolveDefaultContextXml(new File(urlFile.getPath()).getParentFile()
+ .getParentFile()));
+ }
+}

Back to the top