1 5 package com.tctest.server.appserver.load; 6 7 import com.tc.test.server.appserver.load.Node; 8 import com.tc.test.server.appserver.unit.AbstractAppServerTestCase; 9 10 import java.io.IOException ; 11 import java.io.PrintWriter ; 12 import java.net.URL ; 13 14 import javax.servlet.http.HttpServlet ; 15 import javax.servlet.http.HttpServletRequest ; 16 import javax.servlet.http.HttpServletResponse ; 17 import javax.servlet.http.HttpSession ; 18 19 public class MultiNodeLoadTest extends AbstractAppServerTestCase { 20 private static final int SESSIONS_PER_NODE = 10; 21 22 private static final long TEST_DURATION = 4 * 60 * 1000; 23 24 26 public MultiNodeLoadTest() { 27 } 29 30 public void testFourNodeLoad() throws Throwable { 31 runFourNodeLoad(true); 32 } 33 34 protected void runFourNodeLoad(boolean sticky) throws Throwable { 35 collectVmStats(); 36 assertTimeDirection(); 37 startDsoServer(); 38 runNodes(4, sticky); 39 } 40 41 private void runNodes(int nodeCount, boolean sticky) throws Throwable { 42 Thread [] nodeRunners = new Thread [nodeCount]; 43 Node[] nodes = new Node[nodeCount]; 44 int[] ports = new int[nodeCount]; 45 46 URL [] allUrls = new URL [nodeCount]; 47 for (int i = 0; i < nodeCount; i++) { 48 ports[i] = startAppServer(true).serverPort(); 49 allUrls[i] = createUrl(ports[i], CounterServlet.class); 50 } 51 52 URL [] validateUrls = new URL [nodeCount]; 53 for (int i = 0; i < nodeCount; i++) { 54 validateUrls[i] = createUrl(ports[i], CounterServlet.class, "read=true"); 55 } 56 57 for (int i = 0; i < nodeCount; i++) { 58 if (sticky) { 59 URL validateUrl = createUrl(ports[(i + 1) % nodeCount], CounterServlet.class, "read=true"); 60 nodes[i] = new Node(allUrls[i], validateUrl, SESSIONS_PER_NODE, TEST_DURATION); 61 } else { 62 nodes[i] = new Node(allUrls, validateUrls, SESSIONS_PER_NODE, TEST_DURATION); 63 } 64 65 nodeRunners[i] = new Thread (nodes[i], "Runner[" + ports[i] + "]"); 66 } 67 68 for (int i = 0; i < nodeCount; i++) { 69 nodeRunners[i].start(); 70 } 71 72 for (int i = 0; i < nodeCount; i++) { 73 nodeRunners[i].join(); 74 } 75 76 for (int i = 0; i < nodeCount; i++) { 77 nodes[i].checkError(); 78 } 79 } 80 81 public static class CounterServlet extends HttpServlet { 82 83 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 84 HttpSession session = request.getSession(true); 85 response.setContentType("text/html"); 86 PrintWriter out = response.getWriter(); 87 88 Integer count = (Integer ) session.getAttribute("count"); 89 if (count == null) { 90 count = new Integer (0); 91 } 92 93 if (request.getParameter("read") != null) { 94 if (session.isNew()) { 95 out.println("session is new"); } else { 97 out.println(count.intValue()); 98 } 99 } else { 100 int newValue = count.intValue() + 1; 101 session.setAttribute("count", new Integer (newValue)); 102 out.println(newValue); 103 } 104 } 105 } 106 } 107 | Popular Tags |