diff --git a/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java b/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java index d5886b42e7..b761591e55 100644 --- a/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java +++ b/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java @@ -80,6 +80,10 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements Object toSerialize = respons.get("toSerialize"); ContentInfo contentInfo = (ContentInfo) respons.get("contentInfo"); + // set caching (MNT-13938) + res.setCache(ApiWebScript.CACHE_NEVER); + + // set content info setContentInfoOnResponse(res, contentInfo); if (toSerialize != null) diff --git a/source/test-java/org/alfresco/rest/api/tests/ApiTest.java b/source/test-java/org/alfresco/rest/api/tests/ApiTest.java index 162dbd9bad..5ced73c7a2 100644 --- a/source/test-java/org/alfresco/rest/api/tests/ApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/ApiTest.java @@ -28,7 +28,8 @@ import org.junit.runners.Suite; TestSiteMembershipRequests.class, TestFavourites.class, TestRemovePermissions.class, - TestPublicApi128.class + TestPublicApi128.class, + TestPublicApiCaching.class }) public class ApiTest { diff --git a/source/test-java/org/alfresco/rest/api/tests/TestPublicApiCaching.java b/source/test-java/org/alfresco/rest/api/tests/TestPublicApiCaching.java new file mode 100644 index 0000000000..5958fd2af9 --- /dev/null +++ b/source/test-java/org/alfresco/rest/api/tests/TestPublicApiCaching.java @@ -0,0 +1,60 @@ +package org.alfresco.rest.api.tests; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNotNull; + +import java.util.Iterator; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.alfresco.rest.api.tests.RepoService.TestNetwork; +import org.alfresco.rest.api.tests.client.HttpResponse; +import org.alfresco.rest.api.tests.client.RequestContext; +import org.junit.Test; + +/** + * HTTP cache header public api tests. + * + * @author Gavin Cornwell + * + */ +public class TestPublicApiCaching extends EnterpriseTestApi +{ + @Test + public void testMNT13938() throws Exception + { + Iterator accountsIt = getTestFixture().getNetworksIt(); + final TestNetwork account1 = accountsIt.next(); + Iterator personIt1 = account1.getPersonIds().iterator(); + final String person1 = personIt1.next(); + + // make a request to any API (we'll get our own profile) + { + publicApiClient.setRequestContext(new RequestContext(account1.getId(), person1)); + HttpResponse response = publicApiClient.get("public", "people", person1, null, null, null); + + int responseCode = response.getStatusCode(); + // make sure request was successful + assertTrue("Response code should be 200", responseCode == HttpServletResponse.SC_OK); + + Map headers = response.getHeaders(); + // assert headers are present + assertNotNull("HTTP headers should be present on response", headers); + + // assert the cache headers are present + String cacheControlHeader = headers.get("Cache-Control"); + assertNotNull("Cache-Control header should be present", cacheControlHeader); + assertTrue("Cache-Control header should be set to no-cache but it was: " + cacheControlHeader, + cacheControlHeader.equals("no-cache")); + + String pragmaHeader = headers.get("Pragma"); + assertNotNull("Pragma header should be present", pragmaHeader); + assertTrue("Pragma header should be set to no-cache but it was: " + pragmaHeader, + pragmaHeader.equals("no-cache")); + + String expiresHeader = headers.get("Expires"); + assertNotNull("Expires header should be present", expiresHeader); + } + } +} diff --git a/source/test-java/org/alfresco/rest/api/tests/client/HttpResponse.java b/source/test-java/org/alfresco/rest/api/tests/client/HttpResponse.java index fe252cffea..84c8dced25 100644 --- a/source/test-java/org/alfresco/rest/api/tests/client/HttpResponse.java +++ b/source/test-java/org/alfresco/rest/api/tests/client/HttpResponse.java @@ -1,5 +1,7 @@ package org.alfresco.rest.api.tests.client; +import java.util.Map; + import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.methods.DeleteMethod; @@ -16,14 +18,16 @@ public class HttpResponse private HttpMethod method; private String user; private String response; + private Map headers; private long time; - public HttpResponse(HttpMethod method, String user, String response, long time) + public HttpResponse(HttpMethod method, String user, String response, Map headers, long time) { super(); this.method = method; this.user = user; this.time = time; + this.headers = headers; this.response = response; } @@ -37,6 +41,11 @@ public class HttpResponse return response; } + public Map getHeaders() + { + return headers; + } + public String toString() { StringBuilder sb = new StringBuilder(); @@ -81,7 +90,7 @@ public class HttpResponse sb.append(requestBody != null ? " \nbody = " + requestBody + "\n" : ""); sb.append("user " + user); sb.append("\n"); - sb.append("returned " + method.getStatusCode() + " and took " + time + "ms"); + sb.append("returned " + method.getStatusCode() + " and took " + time + "ms"); sb.append("\n"); sb.append("Response content " + response); return sb.toString(); diff --git a/source/test-java/org/alfresco/rest/api/tests/client/PublicApiHttpClient.java b/source/test-java/org/alfresco/rest/api/tests/client/PublicApiHttpClient.java index 7c12a47906..edaa7aff0a 100644 --- a/source/test-java/org/alfresco/rest/api/tests/client/PublicApiHttpClient.java +++ b/source/test-java/org/alfresco/rest/api/tests/client/PublicApiHttpClient.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.MessageFormat; +import java.util.HashMap; import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; @@ -37,6 +38,7 @@ import org.alfresco.rest.framework.resource.EntityResource; import org.alfresco.rest.framework.resource.RelationshipResource; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.util.Pair; +import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.methods.DeleteMethod; @@ -227,7 +229,19 @@ public class PublicApiHttpClient public HttpResponse onCallSuccess(HttpMethod method) throws Exception { long end = System.currentTimeMillis(); - return new HttpResponse(method, rq.getRunAsUser(), method.getResponseBodyAsString(), (end - start)); + + Map headersMap = null; + Header[] headers = method.getResponseHeaders(); + if (headers != null) + { + headersMap = new HashMap(headers.length); + for (Header header : headers) + { + headersMap.put(header.getName(), header.getValue()); + } + } + + return new HttpResponse(method, rq.getRunAsUser(), method.getResponseBodyAsString(), headersMap, (end - start)); } @Override