1 package de.halbekunst.juplo.cachecontrol;
3 import com.meterware.httpunit.WebResponse;
4 import java.net.URLEncoder;
6 import org.junit.runner.RunWith;
7 import java.text.SimpleDateFormat;
8 import java.util.Locale;
9 import org.junit.Assert;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12 import org.springframework.test.context.ContextConfiguration;
13 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
21 @RunWith(SpringJUnit4ClassRunner.class)
22 @ContextConfiguration(locations = {
23 "classpath:/config.xml"
25 public class RequestSizeTest extends HttpTestCase {
26 private final static Logger log = LoggerFactory.getLogger(RequestSizeTest.class);
30 public void testSimpleRequestWithGzip() throws Exception {
32 log.info("-------- Test: gzipped simple request");
34 client.getClientProperties().setAcceptGzip(true);
36 for (int i=0; i<33; i++) {
37 /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */
38 WebResponse response = executeRequest("http://localhost/request-size?n=" + i*128);
39 Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG));
40 Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED));
42 Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
44 Assert.assertEquals("gzip", response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
45 Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL));
46 Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE));
47 Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE));
48 Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES));
49 SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US);
50 long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime();
51 long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime();
52 Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires);
57 public void testSimpleRequestWithoutGzip() throws Exception {
59 log.info("-------- Test: uncompressed simple request");
61 client.getClientProperties().setAcceptGzip(false);
63 for (int i=0; i<33; i++) {
64 /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */
65 WebResponse response = executeRequest("http://localhost/request-size?n=" + i*128);
66 Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG));
67 Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED));
68 Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
69 Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL));
70 Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE));
71 Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE));
72 Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES));
73 SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US);
74 long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime();
75 long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime();
76 Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires);
81 public void testForwardWithGzip() throws Exception {
83 log.info("-------- Test: gzipped request with forward");
85 client.getClientProperties().setAcceptGzip(true);
88 * Auf den Fehler bei einem Forward nach Überschreitung der Puffer-Größe
89 * des ursprünglichen Requests wird hier nicht geprüft, weil der Puffer
90 * durch die Komprimierung bei den hier gewählten Test-Parametern nie
91 * vollgeschrieben wird, so dass er stets ohne Fehler zurückgesetzt
94 * Dafür wird hier zusätzlich geprüft, ob die Komprimierung korrekt nur
95 * dann unterdrückt wird, wenn die gesamte Antwort leer ist (und nicht nur
96 * der initiale Request, der geforwarded wird).
98 for (int i=0; i<33; i++) {
99 /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */
100 StringBuilder uri = new StringBuilder();
101 uri.append("http://localhost/request-size");
105 uri.append(URLEncoder.encode("/forwarded?n=" + i*128, "UTF-8"));
106 WebResponse response = executeRequest(uri.toString());
107 Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG));
108 Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED));
110 Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
112 Assert.assertEquals("gzip", response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
113 Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL));
114 Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE));
115 Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE));
116 Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES));
117 SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US);
118 long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime();
119 long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime();
120 Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires);
125 public void testForwardWithoutGzip() throws Exception {
127 log.info("-------- Test: uncompressed request with forward");
129 client.getClientProperties().setAcceptGzip(false);
131 for (int i=0; i<33; i++) {
132 /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */
133 StringBuilder uri = new StringBuilder();
134 uri.append("http://localhost/request-size");
138 uri.append(URLEncoder.encode("/forwarded?n=" + i*128, "UTF-8"));
140 WebResponse response = executeRequest(uri.toString());
142 Assert.fail("Error expected while forwarding after " + i*128 + " bytes written!");
143 Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG));
144 Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED));
145 Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
146 Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL));
147 Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE));
148 Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE));
149 Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES));
150 SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US);
151 long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime();
152 long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime();
153 Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires);
155 catch (IllegalStateException e) {
157 log.debug("Expected error while forwarding after {} bytes written: {}", i*128, e.getMessage());
159 Assert.fail("Unexpected error while forwarding after " + i*128 + " bytes written: " + e.getMessage());
165 public void testIncludeWithGzip() throws Exception {
167 log.info("-------- Test: gzipped request with includes");
169 client.getClientProperties().setAcceptGzip(true);
171 for (int i=0; i<33; i++) {
172 /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */
173 StringBuilder uri = new StringBuilder();
174 uri.append("http://localhost/request-size");
177 for (int j=0; j < i%4+1; j++) {
179 uri.append(URLEncoder.encode("/included?n=" + i*32*(4-j), "UTF-8"));
181 WebResponse response = executeRequest(uri.toString());
182 Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG));
183 Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED));
185 Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
187 Assert.assertEquals("gzip", response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
188 Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL));
189 Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE));
190 Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE));
191 Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES));
192 SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US);
193 long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime();
194 long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime();
195 Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires);
200 public void testIncludeWithoutGzip() throws Exception {
202 log.info("-------- Test: uncompressed request with includes");
204 client.getClientProperties().setAcceptGzip(false);
206 for (int i=0; i<33; i++) {
207 /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */
208 StringBuilder uri = new StringBuilder();
209 uri.append("http://localhost/request-size");
212 for (int j=0; j < i%4+1; j++) {
214 uri.append(URLEncoder.encode("/included?n=" + i*32*(4-j), "UTF-8"));
216 WebResponse response = executeRequest(uri.toString());
217 Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG));
218 Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED));
219 Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING));
220 Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL));
221 Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE));
222 Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE));
223 Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES));
224 SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US);
225 long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime();
226 long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime();
227 Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires);