• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 Square, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.squareup.okhttp;
17 
18 import java.util.concurrent.TimeUnit;
19 import org.junit.Test;
20 
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertFalse;
23 import static org.junit.Assert.assertNull;
24 import static org.junit.Assert.assertSame;
25 import static org.junit.Assert.assertTrue;
26 import static org.junit.Assert.fail;
27 
28 public final class CacheControlTest {
emptyBuilderIsEmpty()29   @Test public void emptyBuilderIsEmpty() throws Exception {
30     CacheControl cacheControl = new CacheControl.Builder().build();
31     assertEquals("", cacheControl.toString());
32     assertFalse(cacheControl.noCache());
33     assertFalse(cacheControl.noStore());
34     assertEquals(-1, cacheControl.maxAgeSeconds());
35     assertEquals(-1, cacheControl.sMaxAgeSeconds());
36     assertFalse(cacheControl.isPrivate());
37     assertFalse(cacheControl.isPublic());
38     assertFalse(cacheControl.mustRevalidate());
39     assertEquals(-1, cacheControl.maxStaleSeconds());
40     assertEquals(-1, cacheControl.minFreshSeconds());
41     assertFalse(cacheControl.onlyIfCached());
42     assertFalse(cacheControl.mustRevalidate());
43   }
44 
completeBuilder()45   @Test public void completeBuilder() throws Exception {
46     CacheControl cacheControl = new CacheControl.Builder()
47         .noCache()
48         .noStore()
49         .maxAge(1, TimeUnit.SECONDS)
50         .maxStale(2, TimeUnit.SECONDS)
51         .minFresh(3, TimeUnit.SECONDS)
52         .onlyIfCached()
53         .noTransform()
54         .build();
55     assertEquals("no-cache, no-store, max-age=1, max-stale=2, min-fresh=3, only-if-cached, "
56         + "no-transform", cacheControl.toString());
57     assertTrue(cacheControl.noCache());
58     assertTrue(cacheControl.noStore());
59     assertEquals(1, cacheControl.maxAgeSeconds());
60     assertEquals(2, cacheControl.maxStaleSeconds());
61     assertEquals(3, cacheControl.minFreshSeconds());
62     assertTrue(cacheControl.onlyIfCached());
63 
64     // These members are accessible to response headers only.
65     assertEquals(-1, cacheControl.sMaxAgeSeconds());
66     assertFalse(cacheControl.isPrivate());
67     assertFalse(cacheControl.isPublic());
68     assertFalse(cacheControl.mustRevalidate());
69   }
70 
parseEmpty()71   @Test public void parseEmpty() throws Exception {
72     CacheControl cacheControl = CacheControl.parse(
73         new Headers.Builder().set("Cache-Control", "").build());
74     assertEquals("", cacheControl.toString());
75     assertFalse(cacheControl.noCache());
76     assertFalse(cacheControl.noStore());
77     assertEquals(-1, cacheControl.maxAgeSeconds());
78     assertEquals(-1, cacheControl.sMaxAgeSeconds());
79     assertFalse(cacheControl.isPublic());
80     assertFalse(cacheControl.mustRevalidate());
81     assertEquals(-1, cacheControl.maxStaleSeconds());
82     assertEquals(-1, cacheControl.minFreshSeconds());
83     assertFalse(cacheControl.onlyIfCached());
84     assertFalse(cacheControl.mustRevalidate());
85   }
86 
parse()87   @Test public void parse() throws Exception {
88     String header = "no-cache, no-store, max-age=1, s-maxage=2, private, public, must-revalidate, "
89         + "max-stale=3, min-fresh=4, only-if-cached, no-transform";
90     CacheControl cacheControl = CacheControl.parse(new Headers.Builder()
91         .set("Cache-Control", header)
92         .build());
93     assertTrue(cacheControl.noCache());
94     assertTrue(cacheControl.noStore());
95     assertEquals(1, cacheControl.maxAgeSeconds());
96     assertEquals(2, cacheControl.sMaxAgeSeconds());
97     assertTrue(cacheControl.isPrivate());
98     assertTrue(cacheControl.isPublic());
99     assertTrue(cacheControl.mustRevalidate());
100     assertEquals(3, cacheControl.maxStaleSeconds());
101     assertEquals(4, cacheControl.minFreshSeconds());
102     assertTrue(cacheControl.onlyIfCached());
103     assertTrue(cacheControl.noTransform());
104     assertEquals(header, cacheControl.toString());
105   }
106 
parseIgnoreCacheControlExtensions()107   @Test public void parseIgnoreCacheControlExtensions() throws Exception {
108     // Example from http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.6
109     String header = "private, community=\"UCI\"";
110     CacheControl cacheControl = CacheControl.parse(new Headers.Builder()
111         .set("Cache-Control", header)
112         .build());
113     assertFalse(cacheControl.noCache());
114     assertFalse(cacheControl.noStore());
115     assertEquals(-1, cacheControl.maxAgeSeconds());
116     assertEquals(-1, cacheControl.sMaxAgeSeconds());
117     assertTrue(cacheControl.isPrivate());
118     assertFalse(cacheControl.isPublic());
119     assertFalse(cacheControl.mustRevalidate());
120     assertEquals(-1, cacheControl.maxStaleSeconds());
121     assertEquals(-1, cacheControl.minFreshSeconds());
122     assertFalse(cacheControl.onlyIfCached());
123     assertFalse(cacheControl.noTransform());
124     assertEquals(header, cacheControl.toString());
125   }
126 
parseCacheControlAndPragmaAreCombined()127   @Test public void parseCacheControlAndPragmaAreCombined() {
128     Headers headers =
129         Headers.of("Cache-Control", "max-age=12", "Pragma", "must-revalidate", "Pragma", "public");
130     CacheControl cacheControl = CacheControl.parse(headers);
131     assertEquals("max-age=12, public, must-revalidate", cacheControl.toString());
132   }
133 
134   @SuppressWarnings("RedundantStringConstructorCall") // Testing instance equality.
parseCacheControlHeaderValueIsRetained()135   @Test public void parseCacheControlHeaderValueIsRetained() {
136     String value = new String("max-age=12");
137     Headers headers = Headers.of("Cache-Control", value);
138     CacheControl cacheControl = CacheControl.parse(headers);
139     assertSame(value, cacheControl.toString());
140   }
141 
parseCacheControlHeaderValueInvalidatedByPragma()142   @Test public void parseCacheControlHeaderValueInvalidatedByPragma() {
143     Headers headers = Headers.of("Cache-Control", "max-age=12", "Pragma", "must-revalidate");
144     CacheControl cacheControl = CacheControl.parse(headers);
145     assertNull(cacheControl.headerValue);
146   }
147 
parseCacheControlHeaderValueInvalidatedByTwoValues()148   @Test public void parseCacheControlHeaderValueInvalidatedByTwoValues() {
149     Headers headers = Headers.of("Cache-Control", "max-age=12", "Cache-Control", "must-revalidate");
150     CacheControl cacheControl = CacheControl.parse(headers);
151     assertNull(cacheControl.headerValue);
152   }
153 
parsePragmaHeaderValueIsNotRetained()154   @Test public void parsePragmaHeaderValueIsNotRetained() {
155     Headers headers = Headers.of("Pragma", "must-revalidate");
156     CacheControl cacheControl = CacheControl.parse(headers);
157     assertNull(cacheControl.headerValue);
158   }
159 
computedHeaderValueIsCached()160   @Test public void computedHeaderValueIsCached() {
161     CacheControl cacheControl = new CacheControl.Builder()
162         .maxAge(2, TimeUnit.DAYS)
163         .build();
164     assertNull(cacheControl.headerValue);
165     assertEquals("max-age=172800", cacheControl.toString());
166     assertEquals("max-age=172800", cacheControl.headerValue);
167     cacheControl.headerValue = "Hi";
168     assertEquals("Hi", cacheControl.toString());
169   }
170 
timeDurationTruncatedToMaxValue()171   @Test public void timeDurationTruncatedToMaxValue() throws Exception {
172     CacheControl cacheControl = new CacheControl.Builder()
173         .maxAge(365 * 100, TimeUnit.DAYS) // Longer than Integer.MAX_VALUE seconds.
174         .build();
175     assertEquals(Integer.MAX_VALUE, cacheControl.maxAgeSeconds());
176   }
177 
secondsMustBeNonNegative()178   @Test public void secondsMustBeNonNegative() throws Exception {
179     CacheControl.Builder builder = new CacheControl.Builder();
180     try {
181       builder.maxAge(-1, TimeUnit.SECONDS);
182       fail();
183     } catch (IllegalArgumentException expected) {
184     }
185   }
186 
timePrecisionIsTruncatedToSeconds()187   @Test public void timePrecisionIsTruncatedToSeconds() throws Exception {
188     CacheControl cacheControl = new CacheControl.Builder()
189         .maxAge(4999, TimeUnit.MILLISECONDS)
190         .build();
191     assertEquals(4, cacheControl.maxAgeSeconds());
192   }
193 }
194