package org.jboss.as.test.integration.web.servlet.buffersize; import org.apache.commons.io.IOUtils; import org.apache.http.Header; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OperateOnDeployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; @RunAsClient @RunWith(Arquillian.class) public class ResponseBufferSizeTestCase { private static final Logger log = LoggerFactory.getLogger(ResponseBufferSizeTestCase.class); public static final String DEPLOYMENT = "response-buffer-size.war"; @Deployment(name = DEPLOYMENT) public static Archive<?> getDeployment() { WebArchive war = ShrinkWrap.create(WebArchive.class, DEPLOYMENT); war.addClass(ResponseBufferSizeServlet.class); return war; } @Test @OperateOnDeployment(DEPLOYMENT) public void increaseBufferSizeTest(@ArquillianResource URL url) throws Exception { URL testURL = new URL(url.toString() + "ResponseBufferSizeServlet?" + ResponseBufferSizeServlet.SIZE_CHANGE_PARAM_NAME + "=1.5" + "&" + ResponseBufferSizeServlet.DATA_LENGTH_IN_PERCENTS_PARAM_NAME + "=0.8"); // more than original size, less than new buffer size final HttpGet request = new HttpGet(testURL.toString()); CloseableHttpClient httpClient = HttpClientBuilder.create().build(); CloseableHttpResponse response = null; try { response = httpClient.execute(request); Assert.assertEquals("Failed to access " + testURL, HttpURLConnection.HTTP_OK, response.getStatusLine().getStatusCode()); String content = EntityUtils.toString(response.getEntity()); Assert.assertFalse(content.contains(ResponseBufferSizeServlet.RESPONSE_COMMITED_MESSAGE)); final Header[] transferEncodingHeaders = response.getHeaders("Transfer-Encoding"); log.trace("transferEncodingHeaders: " + Arrays.toString(transferEncodingHeaders)); final Header[] contentLengthHeader = response.getHeaders("Content-Length"); log.trace("contentLengthHeader: " + Arrays.toString(contentLengthHeader)); for (Header transferEncodingHeader : transferEncodingHeaders) { Assert.assertNotEquals("Transfer-Encoding shouldn't be chunked as set BufferSize shouldn't be filled yet, " + "probably caused due https://bugzilla.redhat.com/show_bug.cgi?id=1212566", "chunked", transferEncodingHeader.getValue()); } Assert.assertFalse("Content-Length header not specified", contentLengthHeader.length == 0); } finally { IOUtils.closeQuietly(response); httpClient.close(); } } }