diff --git a/jspwiki-api/src/test/java/org/apache/wiki/api/spi/WikiTest.java b/jspwiki-api/src/test/java/org/apache/wiki/api/spi/WikiTest.java index 1edbbba432..06ca0b3cbe 100644 --- a/jspwiki-api/src/test/java/org/apache/wiki/api/spi/WikiTest.java +++ b/jspwiki-api/src/test/java/org/apache/wiki/api/spi/WikiTest.java @@ -43,7 +43,7 @@ public class WikiTest { public void testWikiInit() { Mockito.doReturn( sc ).when( conf ).getServletContext(); final Properties properties = Wiki.init( sc ); - Assertions.assertEquals( 5, properties.size() ); + Assertions.assertEquals( 6, properties.size() ); // verify SPIs are initialized and can be invoked Assertions.assertNull( Wiki.acls().acl() ); diff --git a/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListener.java b/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListener.java index dd677c048b..f2332ca7e5 100644 --- a/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListener.java +++ b/jspwiki-bootstrap/src/main/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListener.java @@ -47,7 +47,6 @@ public class WikiBootstrapServletContextListener implements ServletContextListen public void contextInitialized( final ServletContextEvent sce ) { final Properties properties = initWikiSPIs( sce ); initWikiLoggingFramework( properties ); - setWorkDir(properties, sce.getServletContext()); } /** @@ -100,34 +99,4 @@ ConfigurationSource createConfigurationSource( final Properties properties ) { @Override public void contextDestroyed( final ServletContextEvent sce ) { } - - /** - * This method sets the JSPWiki working directory (jspwiki.workDir). It first checks if this property - * is already set. If it isn't, it attempts to use the servlet container's temporary directory - * (javax.servlet.context.tempdir). If that is also unavailable, it defaults to the system's temporary - * directory (java.io.tmpdir). - *
- * This method is package-private to allow for unit testing.
- *
- * @param properties the JSPWiki properties
- * @param servletContext the Servlet context from which to fetch the tempdir if needed
- * @since JSPWiki 2.11.1
- */
- void setWorkDir(final Properties properties, final ServletContext servletContext) {
- final String workDir = TextUtil.getStringProperty(properties, "jspwiki.workDir", null);
- if (workDir == null) {
- final File tempDir = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
- if (tempDir != null) {
- properties.setProperty("jspwiki.workDir", tempDir.getAbsolutePath());
- LOG.info("Setting jspwiki.workDir to ServletContext's temporary directory: {}", tempDir.getAbsolutePath());
- } else {
- final String defaultTmpDir = System.getProperty("java.io.tmpdir");
- properties.setProperty("jspwiki.workDir", defaultTmpDir);
- LOG.info("ServletContext's temporary directory not found. Setting jspwiki.workDir to system's temporary directory: {}", defaultTmpDir);
- }
- } else {
- LOG.info("jspwiki.workDir is already set to: {}", workDir);
- }
- }
-
}
diff --git a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListenerTest.java b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListenerTest.java
index 0dc87b6d1c..866563ecd8 100644
--- a/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListenerTest.java
+++ b/jspwiki-bootstrap/src/test/java/org/apache/wiki/bootstrap/WikiBootstrapServletContextListenerTest.java
@@ -26,12 +26,9 @@ Licensed to the Apache Software Foundation (ASF) under one
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
-import java.io.File;
import java.util.Properties;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
@ExtendWith( MockitoExtension.class )
@@ -46,7 +43,7 @@ public void testWikiInit() {
final WikiBootstrapServletContextListener listener = new WikiBootstrapServletContextListener();
final Properties properties = listener.initWikiSPIs( sce );
- assertEquals( 35, properties.size() );
+ Assertions.assertEquals( 36, properties.size() );
}
@Test
@@ -67,20 +64,4 @@ public void testServletContextListenerLifeCycle() {
Assertions.assertDoesNotThrow( () -> listener.contextInitialized( sce ) );
Assertions.assertDoesNotThrow( () -> listener.contextDestroyed( sce ) );
}
-
- @Test
- public void testSetWorkDir() {
- // Given
- final WikiBootstrapServletContextListener listener = new WikiBootstrapServletContextListener();
- final Properties properties = new Properties();
- final ServletContext servletContext = mock(ServletContext.class);
- final File tempDir = new File(System.getProperty("java.io.tmpdir"));
- when(servletContext.getAttribute("javax.servlet.context.tempdir")).thenReturn(tempDir);
-
- // When
- listener.setWorkDir(properties, servletContext);
-
- // Then
- assertEquals(properties.getProperty("jspwiki.workDir"), tempDir.getAbsolutePath());
- }
}
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/Installer.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/Installer.java
index 489f222f4d..570d9722e0 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/Installer.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/Installer.java
@@ -86,7 +86,7 @@ public Installer( final HttpServletRequest request, final ServletConfig config )
// Stash the request
m_request = request;
m_validated = false;
- TMP_DIR = m_engine.getWikiProperties().getProperty( "java.io.tmpdir" );
+ TMP_DIR = m_engine.getWikiProperties().getProperty( "jspwiki.workDir" );
}
/**
diff --git a/jspwiki-util/pom.xml b/jspwiki-util/pom.xml
index 1d6ac7b552..7304bddb03 100644
--- a/jspwiki-util/pom.xml
+++ b/jspwiki-util/pom.xml
@@ -99,5 +99,12 @@
+ * This method is package-private to allow for unit testing. + * + * @param properties the JSPWiki properties + * @param servletContext the Servlet context from which to fetch the tempdir if needed + * @since JSPWiki 2.11.1 + */ + static void setWorkDir( final ServletContext servletContext, final Properties properties ) { + final String workDir = TextUtil.getStringProperty(properties, "jspwiki.workDir", null); + if (workDir == null) { + final File tempDir = (File) servletContext.getAttribute("javax.servlet.context.tempdir"); + if (tempDir != null) { + properties.setProperty("jspwiki.workDir", tempDir.getAbsolutePath()); + LOG.info("Setting jspwiki.workDir to ServletContext's temporary directory: {}", tempDir.getAbsolutePath()); + } else { + final String defaultTmpDir = System.getProperty("java.io.tmpdir"); + properties.setProperty("jspwiki.workDir", defaultTmpDir); + LOG.info("ServletContext's temporary directory not found. Setting jspwiki.workDir to system's temporary directory: {}", defaultTmpDir); + } + } else { + LOG.info("jspwiki.workDir is already set to: {}", workDir); + } + } + } diff --git a/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java b/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java index 09358a0ecb..1d208db179 100644 --- a/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java +++ b/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java @@ -22,11 +22,16 @@ Licensed to the Apache Software Foundation (ASF) under one import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import javax.servlet.ServletContext; +import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Properties; +import static org.mockito.Mockito.mock; + /** * Unit test for PropertyReader. @@ -122,4 +127,30 @@ public void testCollectPropertiesFrom() { Assertions.assertNull( test.get( "secretEnv" ) ); } + @Test + public void testSetWorkDir() { + final Properties properties = new Properties(); + final ServletContext servletContext = mock(ServletContext.class); + Mockito.when(servletContext.getAttribute("javax.servlet.context.tempdir")).thenReturn(new File("/tmp")); + + PropertyReader.setWorkDir(servletContext, properties); + + // Test when the "jspwiki.workDir" is not set, it should get set to servlet's temporary directory + String workDir = properties.getProperty("jspwiki.workDir"); + Assertions.assertEquals("/tmp", workDir); + + // Test when the "jspwiki.workDir" is set, it should remain as it is + properties.setProperty("jspwiki.workDir", "/custom/dir"); + PropertyReader.setWorkDir(servletContext, properties); + workDir = properties.getProperty("jspwiki.workDir"); + Assertions.assertEquals("/custom/dir", workDir); + + // Test when the servlet's temporary directory is null, it should get set to system's temporary directory + Mockito.when(servletContext.getAttribute("javax.servlet.context.tempdir")).thenReturn(null); + properties.remove("jspwiki.workDir"); + PropertyReader.setWorkDir(servletContext, properties); + workDir = properties.getProperty("jspwiki.workDir"); + Assertions.assertEquals(System.getProperty("java.io.tmpdir"), workDir); + } + }