1 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 ; 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 random = new Random (0); 20 private final HttpClientAdapter[] sessions; 21 private int sessionCounter; 22 23 private SimpleHttpFieldReplicationTest(String [] args) { 24 super(args); 25 final int sessionsCount = testProperties.getSessionsCount(); 26 final String [] 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 [] args) throws Exception { 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 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 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 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 urlPart, boolean gatherStats, long endtime) { 73 final HttpClientAdapter clientAdapter = sessions[sessionIndex]; 74 75 int randomValue = getRandom(100) + 1; 77 if (randomValue > testProperties.getStickyRatio()) { 78 String prevHost = clientAdapter.getHost(); 79 String newHost; 80 do { 81 final String [] 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 |