KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > performance > http > load > webapp > SimpleHttpFieldReplicationTest


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

4 package com.tctest.performance.http.load.webapp;
5
6 import org.apache.commons.httpclient.HttpState;
7
8 import com.tctest.performance.http.load.HttpClientAdapter;
9 import com.tctest.performance.http.load.SessionWorkItem;
10 import com.tctest.performance.http.load.WorkItem;
11
12 import java.util.Random JavaDoc;
13
14 public final class SimpleHttpFieldReplicationTest extends ValidateHttpFieldReplicationTest {
15
16   private static final int CHANGES = 20;
17   private static final int GRAPH_SIZE = 10;
18
19   private final Random JavaDoc random = new Random JavaDoc(0);
20   private final HttpClientAdapter[] sessions;
21   private int sessionCounter;
22
23   private SimpleHttpFieldReplicationTest(String JavaDoc[] args) {
24     super(args);
25     final int sessionsCount = testProperties.getSessionsCount();
26     final String JavaDoc[] hosts = testProperties.getHosts();
27     int hostCounter = 0;
28     sessions = new HttpClientAdapter[sessionsCount];
29     for (int i = 0; i < sessionsCount; i++) {
30       HttpState state = new HttpState();
31       sessions[i] = new HttpClientAdapter(state, hosts[hostCounter]);
32       hostCounter = (hostCounter + 1) % hosts.length;
33     }
34
35   }
36
37   public static void main(String JavaDoc[] args) throws Exception JavaDoc {
38     new SimpleHttpFieldReplicationTest(args).execute();
39   }
40
41   protected WorkItem[] generateWarmUpWorkItems() {
42     WorkItem[] rv = new WorkItem[testProperties.getSessionsCount()];
43     for (int i = 0; i < rv.length; i++) {
44       final String JavaDoc urlPart = "/perftest/OrganicObjectGraphServlet?create=" + graphSize() + "&changes=0";
45       final WorkItem workItem = makeNewWorkItem(i, urlPart, false, Long.MAX_VALUE);
46       rv[i] = workItem;
47     }
48     return rv;
49   }
50
51   protected WorkItem generateWorkItem(long endtime) {
52     final String JavaDoc urlPart = "/perftest/OrganicObjectGraphServlet?create=0&changes=" + CHANGES;
53     final WorkItem workItem = makeNewWorkItem(sessionCounter, urlPart, true, endtime);
54     sessionCounter = (sessionCounter + 1) % testProperties.getSessionsCount();
55     return workItem;
56   }
57
58   protected WorkItem[] generateFinishWorkItems() {
59     WorkItem[] rv = new WorkItem[testProperties.getSessionsCount()];
60     for (int i = 0; i < testProperties.getSessionsCount(); i++) {
61       final String JavaDoc urlPart = "/perftest/OrganicObjectGraphServlet?finished=true";
62       final WorkItem workItem = makeNewWorkItem(i, urlPart, false, Long.MAX_VALUE);
63       rv[i] = workItem;
64     }
65     return rv;
66   }
67
68   private int getRandom(int bound) {
69     return random.nextInt(bound);
70   }
71
72   private WorkItem makeNewWorkItem(int sessionIndex, String JavaDoc urlPart, boolean gatherStats, long endtime) {
73     final HttpClientAdapter clientAdapter = sessions[sessionIndex];
74
75     // sticky sessions
76
int randomValue = getRandom(100) + 1;
77     if (randomValue > testProperties.getStickyRatio()) {
78       String JavaDoc prevHost = clientAdapter.getHost();
79       String JavaDoc newHost;
80       do {
81         final String JavaDoc[] hosts = testProperties.getHosts();
82         newHost = hosts[getRandom(hosts.length)];
83       } while (newHost.equals(prevHost));
84       clientAdapter.setHost(newHost);
85     }
86
87     WorkItem rv = new SessionWorkItem(clientAdapter, urlPart, gatherStats, endtime);
88     return rv;
89   }
90
91   protected int changes() {
92     return CHANGES;
93   }
94
95   protected int graphSize() {
96     return GRAPH_SIZE;
97   }
98 }
99
Popular Tags