Testfall für juplo-cachecontrol implementiert
[percentcodec] / cachecontrol / src / test / java / de / halbekunst / juplo / cachecontrol / RequestSizeTest.java
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 (file)
index 0000000..4c7afa0
--- /dev/null
@@ -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);
+    }
+  }
+}