View Javadoc

1   package com.atlassian.plugin.servlet;
2   
3   import javax.servlet.http.HttpServletResponse;
4   import javax.servlet.http.HttpServletRequest;
5   
6   import junit.framework.TestCase;
7   import org.mockito.ArgumentCaptor;
8   import org.mockito.Mock;
9   import static org.mockito.Mockito.*;
10  
11  public class TestResourceDownloadUtils extends TestCase
12  {
13      private static final long ONE_YEAR = 60L * 60L * 24L *365L;
14      private static final long ONE_YEAR_MS = ONE_YEAR * 1000;
15      private static final String CACHE_CONTROL = "Cache-Control";
16  
17      @Mock
18      private HttpServletRequest mockRequest;
19  
20      @Mock
21      private HttpServletResponse mockResponse;
22  
23      public void setUp() {
24          mockRequest = mock(HttpServletRequest.class);
25          mockResponse = mock(HttpServletResponse.class);
26      }
27  
28      public void testAddPublicCachingHeaders()
29      {
30          when(mockRequest.getParameter(eq("cache"))).thenReturn("true");
31  
32          // This is part of a ghetto assert for time. We could freeze time if we were using jodatime.
33          long expectedTime = aboutNowPlusAYear();
34  
35          ResourceDownloadUtils.addPublicCachingHeaders(mockRequest, mockResponse);
36  
37          ArgumentCaptor<Long> argument = ArgumentCaptor.forClass(Long.class);
38          verify(mockResponse).setDateHeader(eq("Expires"), argument.capture());
39          assertTrue("Set expires header beyond one year from now", expectedTime <= argument.getValue());
40  
41          verify(mockResponse).setHeader(CACHE_CONTROL, "max-age=" + ONE_YEAR);
42      }
43  
44      public void testAddCachingHeadersWithCacheControls()
45      {
46          when(mockRequest.getParameter(eq("cache"))).thenReturn("true");
47  
48          // This is part of a ghetto assert for time. We could freeze time if we were using jodatime.
49          long expectedTime = aboutNowPlusAYear();
50  
51          ResourceDownloadUtils.addCachingHeaders(mockRequest, mockResponse, "private", "foo");
52  
53          ArgumentCaptor<Long> argument = ArgumentCaptor.forClass(Long.class);
54          verify(mockResponse).setDateHeader(eq("Expires"), argument.capture());
55          assertTrue("Set expires header beyond one year from now", expectedTime <= argument.getValue());
56  
57          verify(mockResponse).setHeader(CACHE_CONTROL, "max-age=" + ONE_YEAR);
58          verify(mockResponse).addHeader(CACHE_CONTROL, "private");
59          verify(mockResponse).addHeader(CACHE_CONTROL, "foo");
60      }
61  
62      public void testNoCachingHeadersWhenCachingDisabled()
63      {
64          when(mockRequest.getParameter(eq("cache"))).thenReturn("false");
65  
66          ResourceDownloadUtils.addPublicCachingHeaders(mockRequest, mockResponse);
67  
68          verifyNoMoreInteractions(mockResponse);
69      }
70  
71      private static long aboutNowPlusAYear()
72      {
73          return System.currentTimeMillis() + ONE_YEAR_MS;
74      }
75  }