KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > server > appserver > load > MultiNodeLoadTest


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

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 JavaDoc;
11 import java.io.PrintWriter JavaDoc;
12 import java.net.URL JavaDoc;
13
14 import javax.servlet.http.HttpServlet JavaDoc;
15 import javax.servlet.http.HttpServletRequest JavaDoc;
16 import javax.servlet.http.HttpServletResponse JavaDoc;
17 import javax.servlet.http.HttpSession JavaDoc;
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 // private static final long TEST_DURATION = 10 * 1000;
25

26   public MultiNodeLoadTest() {
27     // this.disableAllUntil("2006-10-24");
28
}
29
30   public void testFourNodeLoad() throws Throwable JavaDoc {
31     runFourNodeLoad(true);
32   }
33
34   protected void runFourNodeLoad(boolean sticky) throws Throwable JavaDoc {
35     collectVmStats();
36     assertTimeDirection();
37     startDsoServer();
38     runNodes(4, sticky);
39   }
40
41   private void runNodes(int nodeCount, boolean sticky) throws Throwable JavaDoc {
42     Thread JavaDoc[] nodeRunners = new Thread JavaDoc[nodeCount];
43     Node[] nodes = new Node[nodeCount];
44     int[] ports = new int[nodeCount];
45
46     URL JavaDoc[] allUrls = new URL JavaDoc[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 JavaDoc[] validateUrls = new URL JavaDoc[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 JavaDoc 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 JavaDoc(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 JavaDoc {
82
83     public void doGet(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws IOException JavaDoc {
84       HttpSession JavaDoc session = request.getSession(true);
85       response.setContentType("text/html");
86       PrintWriter JavaDoc out = response.getWriter();
87
88       Integer JavaDoc count = (Integer JavaDoc) session.getAttribute("count");
89       if (count == null) {
90         count = new Integer JavaDoc(0);
91       }
92
93       if (request.getParameter("read") != null) {
94         if (session.isNew()) {
95           out.println("session is new"); // this is an error condition (client will fail trying to parse this as int)
96
} else {
97           out.println(count.intValue());
98         }
99       } else {
100         int newValue = count.intValue() + 1;
101         session.setAttribute("count", new Integer JavaDoc(newValue));
102         out.println(newValue);
103       }
104     }
105   }
106 }
107
Popular Tags