package org.jbos.pitbull.test; import org.jboss.pitbull.servlet.DeploymentServletContext; import org.jboss.pitbull.servlet.EmbeddedServletContainer; import org.jboss.pitbull.servlet.EmbeddedServletContainerBuilder; import org.jboss.pitbull.stress.StressClient; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; /** * Stress against PitbulServlet * * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class PitbullServletStressClientTest { public static byte[] readFromStream(int bufferSize, InputStream entityStream) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[bufferSize]; int wasRead = 0; do { wasRead = entityStream.read(buffer); if (wasRead > 0) { baos.write(buffer, 0, wasRead); } } while (wasRead > -1); return baos.toByteArray(); } public static class StressServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setStatus(200); resp.setContentType("text/plain"); resp.getOutputStream().write("DO GET".getBytes()); } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setStatus(204); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { byte[] bytes = readFromStream(1024, req.getInputStream()); resp.setStatus(200); resp.setContentType("text/plain"); resp.getOutputStream().write(bytes); } } protected static EmbeddedServletContainer server; protected static int PORT = 8080; @BeforeClass public static void startup() throws Exception { server = new EmbeddedServletContainerBuilder() .connector().port(PORT).add() .maxRequestThreads(4) .workers(2) .build(); DeploymentServletContext ctx = server.newDeployment(""); ctx.addServlet("stress", new StressServlet()).addMapping("/*"); server.start(); } @AfterClass public static void shutdown() throws Exception { server.stop(); } @Test public void testClientStressMultiple() throws Exception { System.out.println("************************"); System.out.println(" Pitbull Servlet Stress"); System.out.println("************************"); for (int i = 5; i < 21; i += 5) { System.out.println(); System.out.println(); System.out.println("-- Test with client thread num: " + (i + 1) * 3); StressClient.stress(i + 1, 5); } } }