X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=cachecontrol%2Fsrc%2Ftest%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2FRequestSizeTest.java;fp=cachecontrol%2Fsrc%2Ftest%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2FRequestSizeTest.java;h=4c7afa04df35b025b13746b93d6cdee2e08e60b1;hp=0000000000000000000000000000000000000000;hb=1bb1a0f0e1d347538ae93c23395bba172cd87342;hpb=3324545626f8f93c43e3b54cf56004d19af17da2 diff --git a/cachecontrol/src/test/java/de/halbekunst/juplo/cachecontrol/RequestSizeTest.java b/cachecontrol/src/test/java/de/halbekunst/juplo/cachecontrol/RequestSizeTest.java new file mode 100644 index 00000000..4c7afa04 --- /dev/null +++ b/cachecontrol/src/test/java/de/halbekunst/juplo/cachecontrol/RequestSizeTest.java @@ -0,0 +1,219 @@ +package de.halbekunst.juplo.cachecontrol; + +import com.meterware.httpunit.WebResponse; +import java.net.URLEncoder; +import org.junit.Test; +import org.junit.runner.RunWith; +import java.text.SimpleDateFormat; +import java.util.Locale; +import org.junit.Assert; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + + + +/** + * + * @author kai + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { + "classpath:/config.xml" +}) +public class RequestSizeTest extends HttpTestCase { + private final static Logger log = LoggerFactory.getLogger(RequestSizeTest.class); + + + @Test + public void testSimpleRequestWithGzip() throws Exception { + + log.info("-------- Test: gzipped simple request"); + + client.getClientProperties().setAcceptGzip(true); + + for (int i=0; i<33; i++) { + /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */ + WebResponse response = executeRequest("http://localhost/request-size?n=" + i*128); + Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG)); + Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED)); + if (i==0) + Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + else + Assert.assertEquals("gzip", response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL)); + Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE)); + Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE)); + Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES)); + SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US); + long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime(); + long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime(); + Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires); + } + } + + @Test + public void testSimpleRequestWithoutGzip() throws Exception { + + log.info("-------- Test: uncompressed simple request"); + + client.getClientProperties().setAcceptGzip(false); + + for (int i=0; i<33; i++) { + /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */ + WebResponse response = executeRequest("http://localhost/request-size?n=" + i*128); + Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG)); + Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED)); + Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL)); + Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE)); + Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE)); + Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES)); + SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US); + long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime(); + long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime(); + Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires); + } + } + + @Test + public void testForwardWithGzip() throws Exception { + + log.info("-------- Test: gzipped request with forward"); + + client.getClientProperties().setAcceptGzip(true); + + for (int i=0; i<33; i++) { + /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */ + StringBuilder uri = new StringBuilder(); + uri.append("http://localhost/request-size"); + uri.append("?n="); + uri.append(i*128); + uri.append("&f="); + uri.append(URLEncoder.encode("/forwarded?n=" + i*128, "UTF-8")); + WebResponse response = executeRequest(uri.toString()); + Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG)); + Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED)); + if (i==0) + Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + else + Assert.assertEquals("gzip", response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL)); + Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE)); + Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE)); + Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES)); + SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US); + long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime(); + long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime(); + Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires); + } + } + + @Test + public void testForwardWithoutGzip() throws Exception { + + log.info("-------- Test: uncompressed request with forward"); + + client.getClientProperties().setAcceptGzip(false); + + for (int i=0; i<33; i++) { + /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */ + StringBuilder uri = new StringBuilder(); + uri.append("http://localhost/request-size"); + uri.append("?n="); + uri.append(i*128); + uri.append("&f="); + uri.append(URLEncoder.encode("/forwarded?n=" + i*128, "UTF-8")); + try { + WebResponse response = executeRequest(uri.toString()); + if (i*128 > 2048) + Assert.fail("Error expected while forwarding after " + i*128 + " bytes written!"); + Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG)); + Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED)); + Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL)); + Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE)); + Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE)); + Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES)); + SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US); + long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime(); + long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime(); + Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires); + } + catch (IllegalStateException e) { + if (i*128 > 2048) + log.debug("Expected error while forwarding after {} bytes written: {}", i*128, e.getMessage()); + else + Assert.fail("Unexpected error while forwarding after " + i*128 + " bytes written: " + e.getMessage()); + } + } + } + + @Test + public void testIncludeWithGzip() throws Exception { + + log.info("-------- Test: gzipped request with includes"); + + client.getClientProperties().setAcceptGzip(true); + + for (int i=0; i<33; i++) { + /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */ + StringBuilder uri = new StringBuilder(); + uri.append("http://localhost/request-size"); + uri.append("?n="); + uri.append(i*128); + for (int j=0; j < i%4+1; j++) { + uri.append("&i="); + uri.append(URLEncoder.encode("/included?n=" + i*32*(4-j), "UTF-8")); + } + WebResponse response = executeRequest(uri.toString()); + Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG)); + Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED)); + if (i==0) + Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + else + Assert.assertEquals("gzip", response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL)); + Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE)); + Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE)); + Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES)); + SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US); + long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime(); + long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime(); + Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires); + } + } + + @Test + public void testIncludeWithoutGzip() throws Exception { + + log.info("-------- Test: uncompressed request with includes"); + + client.getClientProperties().setAcceptGzip(false); + + for (int i=0; i<33; i++) { + /** 33 requests ranging from 0 B to 4 KB - response ist buffered up to 1 KB */ + StringBuilder uri = new StringBuilder(); + uri.append("http://localhost/request-size"); + uri.append("?n="); + uri.append(i*128); + for (int j=0; j < i%4+1; j++) { + uri.append("&i="); + uri.append(URLEncoder.encode("/included?n=" + i*32*(4-j), "UTF-8")); + } + WebResponse response = executeRequest(uri.toString()); + Assert.assertEquals("W/\"Hallo Welt!\"", response.getHeaderField(Headers.HEADER_ETAG)); + Assert.assertEquals("Thu, 01 Jan 1970 00:00:00 GMT", response.getHeaderField(Headers.HEADER_LAST_MODIFIED)); + Assert.assertNull(response.getHeaderField(Headers.HEADER_CONTENT_ENCODING)); + Assert.assertEquals("max-age=3600", response.getHeaderField(Headers.HEADER_CACHE_CONTROL)); + Assert.assertEquals("text/plain; charset=iso-8859-1", response.getHeaderField(Headers.HEADER_CONTENT_TYPE)); + Assert.assertNotNull("Date-Header was not set!", response.getHeaderField(Headers.HEADER_DATE)); + Assert.assertNotNull("Expires-Header was not set!", response.getHeaderField(Headers.HEADER_EXPIRES)); + SimpleDateFormat df = new SimpleDateFormat(Headers.RFC_1123_DATE_FORMAT, Locale.US); + long date = df.parse(response.getHeaderField(Headers.HEADER_DATE)).getTime(); + long expires = df.parse(response.getHeaderField(Headers.HEADER_EXPIRES)).getTime(); + Assert.assertTrue("Expires-Header passt nicht zum Date-Header! Unterschied: " + (expires-date)/1000 + " Sekunden.", date + 3600000 == expires); + } + } +}