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