package org.civilian.processor; import org.civilian.CivTest; import org.civilian.context.test.TestRequest; import org.civilian.response.ResponseHeaders; import org.junit.Test; public class CompressorTest extends CivTest { @Test public void test() throws Exception { request_ = new TestRequest(); compressor_ = new Compressor(); // no Accept-encoding header assertProcess(null, null, null, null, "a"); // Accept-encoding = identity assertProcess("identity", null, null, null, "a"); // Accept-encoding = deflate assertProcess("deflate", "Accept-Encoding", "deflate", null, (byte)120, (byte)-100); // Accept-encoding = deflate, also modifies etag request_.getTestResponse().getHeaders().set("Etag", "a"); assertProcess("deflate", "Accept-Encoding", "deflate", "a-deflate", (byte)120, (byte)-100); // no compression if someone else applied a content-encoding request_.getTestResponse().getHeaders().set("Content-encoding", "someotherenc"); assertProcess("deflate", "Accept-Encoding", "someotherenc", null, "a"); // no compression if someone else applied a content-encoding request_.getTestResponse().getHeaders().setNull("Content-encoding"); request_.setAttribute(Compressor.NO_COMPRESSION, Boolean.TRUE); assertProcess("deflate", "Accept-Encoding", null, null, "a"); } private void assertProcess(String acceptEncoding, String vary, String contentEncoding, String etag, String content) throws Exception { assertProcess(acceptEncoding, vary, contentEncoding, etag, content.getBytes()); } private void assertProcess(String acceptEncoding, String vary, String contentEncoding, String etag, byte... content) throws Exception { request_.getHeaders().set("Accept-Encoding", acceptEncoding); ResponseHeaders headers = request_.getResponse().getHeaders(); // process always returns false assertFalse(compressor_.process(request_, ProcessorChain.EMPTY)); request_.getResponse().getContentWriter().print("a"); assertArrayEquals(content, request_.getTestResponse().getContentBytes(true)); assertEquals(vary, headers.get("Vary")); assertEquals(contentEncoding, headers.get("Content-encoding")); assertEquals(etag, headers.get("Etag")); request_.getTestResponse().clear(); } private TestRequest request_; private Compressor compressor_; }