diff --git a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java
index 72d41432df..1d197abacc 100644
--- a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java
+++ b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java
@@ -93,7 +93,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer
*/
public void setup()
{
- File tempDirectory = new File(TempFileProvider.getTempDir(), tempDirectoryName);
+ File tempDirectory = TempFileProvider.getTempDir(tempDirectoryName);
this.streamFactory = ThresholdOutputStreamFactory.newInstance(tempDirectory, memoryThreshold, maxContentSize, encryptTempFiles);
}
diff --git a/source/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java b/source/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java
index b17fa50685..4dd8bbbd88 100644
--- a/source/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java
+++ b/source/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java
@@ -86,7 +86,7 @@ public abstract class ApiWebScript extends AbstractWebScript
public void init()
{
- File tempDirectory = new File(TempFileProvider.getTempDir(), tempDirectoryName);
+ File tempDirectory = TempFileProvider.getTempDir(tempDirectoryName);
this.streamFactory = ThresholdOutputStreamFactory.newInstance(tempDirectory, memoryThreshold, maxContentSize, encryptTempFiles);
}
diff --git a/source/test-java/org/alfresco/repo/web/scripts/RepositoryContainerTest.java b/source/test-java/org/alfresco/repo/web/scripts/RepositoryContainerTest.java
index 4d0c43ca82..7508df30f6 100644
--- a/source/test-java/org/alfresco/repo/web/scripts/RepositoryContainerTest.java
+++ b/source/test-java/org/alfresco/repo/web/scripts/RepositoryContainerTest.java
@@ -18,13 +18,16 @@
*/
package org.alfresco.repo.web.scripts;
+import java.util.Arrays;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
+import org.alfresco.util.CronTriggerBean;
import org.alfresco.util.PropertyMap;
import org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest;
+import org.springframework.extensions.webscripts.TestWebScriptServer.PutRequest;
import org.springframework.extensions.webscripts.TestWebScriptServer.Response;
import static org.springframework.extensions.webscripts.Status.*;
@@ -41,6 +44,7 @@ public class RepositoryContainerTest extends BaseWebScriptTest
private static final String USER_ONE = "RunAsOne";
private static final String USER_TWO = "RunAsTwo";
+ private static final String SUCCESS = "success";
@Override
protected void setUp() throws Exception
@@ -109,4 +113,34 @@ public class RepositoryContainerTest extends BaseWebScriptTest
RepositoryContainer repoContainer = (RepositoryContainer) getServer().getApplicationContext().getBean("webscripts.container");
repoContainer.reset();
}
+
+ /*
+ * Test for MNT-11237 : CMIS uploading file larger the 4mb fails
+ *
+ * Tests that requests with content larger than 4mb (default memoryThreshold value) can be successfully handled by repository container
+ */
+ public void testLargeContentRequest() throws Exception
+ {
+ authenticationComponent.setCurrentUser(USER_ONE);
+
+ // create the 5 mb size buffer of zero bytes
+ byte[] content = new byte[5 * 1024 * 1024];
+ Arrays.fill(content, (byte)0);
+
+ // chek that we can upload file larger than 4 mb
+ Response response = sendRequest(new PutRequest("/test/largecontenttest", content, "text/plain"), STATUS_OK);
+ assertEquals(SUCCESS, response.getContentAsString());
+
+ // trigger the webscript temp folder cleaner job
+ CronTriggerBean webscriptsTempFileCleanerJobTrigger = (CronTriggerBean) getServer().getApplicationContext().getBean("webscripts.tempFileCleanerTrigger");
+
+ webscriptsTempFileCleanerJobTrigger.getScheduler().triggerJobWithVolatileTrigger(
+ webscriptsTempFileCleanerJobTrigger.getJobDetail().getName(),
+ webscriptsTempFileCleanerJobTrigger.getJobDetail().getGroup(),
+ webscriptsTempFileCleanerJobTrigger.getJobDetail().getJobDataMap());
+
+ // check that we still can upload file larger than 4 mb, i.e. ensure that cleaner has not deleted temp folder
+ response = sendRequest(new PutRequest("/test/largecontenttest", content, "text/plain"), STATUS_OK);
+ assertEquals(SUCCESS, response.getContentAsString());
+ }
}
diff --git a/source/test-java/org/alfresco/repo/web/scripts/test/LargeContentTestPut.java b/source/test-java/org/alfresco/repo/web/scripts/test/LargeContentTestPut.java
new file mode 100644
index 0000000000..306e399805
--- /dev/null
+++ b/source/test-java/org/alfresco/repo/web/scripts/test/LargeContentTestPut.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco 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 Alfresco. If not, see .
+ */
+package org.alfresco.repo.web.scripts.test;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.extensions.webscripts.Cache;
+import org.springframework.extensions.webscripts.DeclarativeWebScript;
+import org.springframework.extensions.webscripts.Status;
+import org.springframework.extensions.webscripts.WebScriptException;
+import org.springframework.extensions.webscripts.WebScriptRequest;
+
+/**
+ * Test webscript class that simply read request content. Used in unit test for MNT-11237 issue.
+ *
+ * @author pavel.yurkevich
+ */
+public class LargeContentTestPut extends DeclarativeWebScript
+{
+ @Override
+ protected Map executeImpl(WebScriptRequest req, Status status, Cache cache)
+ {
+ Map model = new HashMap();
+
+ try
+ {
+ req.getContent().getInputStream().close();
+ model.put("result", "success");
+ }
+ catch (IOException e)
+ {
+ throw new WebScriptException(Status.STATUS_INTERNAL_SERVER_ERROR, "Fail to read request content.");
+ }
+ return model;
+ }
+
+}
diff --git a/source/test-resources/alfresco/templates/webscripts/org/alfresco/runas/largecontent.put.desc.xml b/source/test-resources/alfresco/templates/webscripts/org/alfresco/runas/largecontent.put.desc.xml
new file mode 100644
index 0000000000..d3aa6fa3e8
--- /dev/null
+++ b/source/test-resources/alfresco/templates/webscripts/org/alfresco/runas/largecontent.put.desc.xml
@@ -0,0 +1,8 @@
+
+ Large Request Test
+ Large Request Test
+ /test/largecontenttest
+ argument
+ user
+ required
+
diff --git a/source/test-resources/alfresco/templates/webscripts/org/alfresco/runas/largecontent.put.html.ftl b/source/test-resources/alfresco/templates/webscripts/org/alfresco/runas/largecontent.put.html.ftl
new file mode 100644
index 0000000000..967faeb995
--- /dev/null
+++ b/source/test-resources/alfresco/templates/webscripts/org/alfresco/runas/largecontent.put.html.ftl
@@ -0,0 +1 @@
+${result}
\ No newline at end of file
diff --git a/source/test-resources/alfresco/web-scripts-application-context-test.xml b/source/test-resources/alfresco/web-scripts-application-context-test.xml
index cdc0549a4c..783d32f06a 100644
--- a/source/test-resources/alfresco/web-scripts-application-context-test.xml
+++ b/source/test-resources/alfresco/web-scripts-application-context-test.xml
@@ -23,4 +23,7 @@
+
+
+
\ No newline at end of file