You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by as...@apache.org on 2017/02/24 12:30:36 UTC
svn commit: r1784271 -
/sling/trunk/contrib/extensions/security/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java
Author: asanso
Date: Fri Feb 24 12:30:36 2017
New Revision: 1784271
URL: http://svn.apache.org/viewvc?rev=1784271&view=rev
Log:
SLING-6561 - Test case for SLING-6271
* applied patch from Rob Ryan. Thanks!!
Modified:
sling/trunk/contrib/extensions/security/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java
Modified: sling/trunk/contrib/extensions/security/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/security/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java?rev=1784271&r1=1784270&r2=1784271&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/security/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java (original)
+++ sling/trunk/contrib/extensions/security/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java Fri Feb 24 12:30:36 2017
@@ -1021,6 +1021,68 @@ public class ContentDispositionFilterTes
rewriterResponse.setContentType("text/html");
Assert.assertEquals(1, counter.intValue());
}
+
+ /**
+ * Test multiple calls of setContentType which each result in a content-disposition header being needed.
+ * Only one header should be added.
+ * @throws Throwable
+ */
+ @Test
+ public void test_doFilter21b() throws Throwable{
+ final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class);
+ final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class);
+ final Resource resource = context.mock(Resource.class, "resource" );
+ final ValueMap properties = context.mock(ValueMap.class);
+ callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{"/content"});
+
+ final AtomicInteger counter = new AtomicInteger();
+
+ context.checking(new Expectations() {
+ {
+ allowing(request).getMethod();
+ will(returnValue("GET"));
+ allowing(response).containsHeader("Content-Disposition");
+ will(returnValue(false));
+ exactly(1).of(response).reset();
+ exactly(1).of(request).removeAttribute(RewriterResponse.ATTRIBUTE_NAME);
+ allowing(request).getAttribute(RewriterResponse.ATTRIBUTE_NAME);
+ will(returnValue(null));
+ allowing(request).setAttribute(RewriterResponse.ATTRIBUTE_NAME, "text/html");
+ allowing(request).setAttribute(RewriterResponse.ATTRIBUTE_NAME, "text/html");
+ allowing(request).getResource();
+ will(returnValue(resource));
+ allowing(resource).getPath();
+ will(returnValue("/content/usergenerated"));
+ allowing(resource).adaptTo(ValueMap.class);
+ will(returnValue(properties));
+ allowing(properties).containsKey(PROP_JCR_DATA);
+ will(returnValue(true));
+
+ // Exactly 2 setContentType should reach the mock response.
+ exactly(1).of(response).setContentType("text/html");
+ exactly(1).of(response).setContentType("text/html");
+ //CONTENT DISPOSITION IS SET
+ exactly(1).of(response).addHeader("Content-Disposition", "attachment");
+ }
+ });
+ final ContentDispositionFilter.RewriterResponse rewriterResponse = contentDispositionFilter. new RewriterResponse(request, response) {
+ @Override
+ public void addHeader(String name, String value) {
+ counter.incrementAndGet();
+ }
+ };
+ rewriterResponse.setContentType("text/html");
+ Assert.assertEquals(1, counter.intValue());
+ rewriterResponse.reset();
+
+ /* Reset on the response clears all the headers, so if we setContentType again the content type header *and* the
+ * content disposition should both reappear. The counter counts each time the content disposition header is added.
+ * The setContentType calls on the mock response are enforced in the Expectations checked above.
+ */
+ rewriterResponse.setContentType("text/html");
+
+ Assert.assertEquals(2, counter.intValue());
+ }
@Test
public void test_doFilter22() throws Throwable{
@@ -1063,7 +1125,52 @@ public class ContentDispositionFilterTes
rewriterResponse.setContentType("text/html");
Assert.assertEquals(0, counter.intValue());
}
+
+ @Test
+ public void test_doFilter22b() throws Throwable{
+ final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class);
+ final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class);
+ final Resource resource = context.mock(Resource.class, "resource" );
+ final ValueMap properties = context.mock(ValueMap.class);
+ callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{"/content/usergenerated"});
+ final AtomicInteger counter = new AtomicInteger();
+ context.checking(new Expectations() {
+ {
+ allowing(request).getMethod();
+ will(returnValue("GET"));
+ allowing(response).containsHeader("Content-Disposition");
+ will(returnValue(false));
+ exactly(1).of(response).reset();
+ allowing(request).getAttribute(RewriterResponse.ATTRIBUTE_NAME);
+ will(returnValue(null));
+ allowing(request).setAttribute(RewriterResponse.ATTRIBUTE_NAME, "text/html");
+ exactly(1).of(request).removeAttribute(RewriterResponse.ATTRIBUTE_NAME);
+ allowing(request).getResource();
+ will(returnValue(resource));
+ allowing(resource).getPath();
+ will(returnValue("/content/usergenerated"));
+ allowing(resource).adaptTo(ValueMap.class);
+ will(returnValue(properties));
+ allowing(properties).containsKey(PROP_JCR_DATA);
+ will(returnValue(true));
+ exactly(2).of(response).setContentType("text/html");
+ //CONTENT DISPOSITION IS NOT SET
+ never(response).addHeader("Content-Disposition", "attachment");
+ }
+ });
+ final ContentDispositionFilter.RewriterResponse rewriterResponse = contentDispositionFilter. new RewriterResponse(request, response) {
+ @Override
+ public void addHeader(String name, String value) {
+ counter.incrementAndGet();
+ }
+ };
+
+ rewriterResponse.setContentType("text/html");
+ rewriterResponse.reset();
+ rewriterResponse.setContentType("text/html");
+ Assert.assertEquals(0, counter.intValue());
+ }
@Test
public void test_isJcrData1() throws Throwable {
contentDispositionFilter = new ContentDispositionFilter();