import junit.framework.*;
import java.io.*;
import java.util.*;
import java.lang.*;
public class SummaryHandlerTestCase extends TestCase {
// declare these here for convenience
private SummaryHandler testSH;
private StartSessionHandler testSSH;
private EndSessionHandler testESH;
private StartTimerHandler testSTH;
private EndTimerHandler testETH;
private Map testSessionMap;
private Map testLogMap;
private Timer testTimer;
private Log log;
private StringBuffer tmpSB;
private HttpRequest req;
private String testHTML;
private boolean bool;
public SummaryHandlerTestCase(String name) {
super (name);
}
protected void setUp() {
log = new LocalLog(100);
testTimer = new Timer();
testSTH = new StartTimerHandler(testTimer, "remoteGetFile/.*", HandlerOrder.NO_PREFERENCE);
testETH = new EndTimerHandler(testTimer, "remoteGetFile/.*", log, HandlerOrder.NO_PREFERENCE);
testSessionMap = new TreeMap();
testLogMap = new TreeMap();
testSSH = new StartSessionHandler(testSessionMap, HandlerOrder.NO_PREFERENCE);
testESH = new EndSessionHandler(testSessionMap, testLogMap, HandlerOrder.NO_PREFERENCE);
testSH = new SummaryHandler(testLogMap, HandlerOrder.NO_PREFERENCE);
}
protected void tearDown() {
}
public void testCompareTo() {
SummaryHandler tmpSH1 = new SummaryHandler(testLogMap, HandlerOrder.EARLY);
SummaryHandler tmpSH2 = new SummaryHandler(testLogMap, HandlerOrder.NO_PREFERENCE);
SummaryHandler tmpSH3 = new SummaryHandler(testLogMap, HandlerOrder.LATE);
assertTrue(testSH.compareTo(tmpSH1) > 0);
assertTrue(testSH.compareTo(tmpSH2) == 0);
assertTrue(testSH.compareTo(tmpSH3) < 0);
}
public void testIsExclusive() {
assertTrue(testSH.isExclusive());
}
public void testMatchRequest() {
req = new HttpGetRequestSimple("blah", "HTTP/1.1" ,"GET");
assertTrue(!(testSH.matchRequest(req)));
req = new HttpGetRequestSimple("getFile/ravens.html", "HTTP/1.1" ,"GET");
assertTrue(!(testSH.matchRequest(req)));
req = new HttpGetRequestSimple("getRecords/RaidersLog/methodExit.*", "HTTP/1.1" ,"GET");
assertTrue(!(testSH.matchRequest(req)));
req = new HttpGetRequestSimple("summary/.*", "HTTP/1.1" ,"GET");
assertTrue((testSH.matchRequest(req)));
req = new HttpGetRequestSimple("summary/log", "HTTP/1.1" ,"GET");
assertTrue((testSH.matchRequest(req)));
req = new HttpGetRequestSimple("summary/someLog", "HTTP/1.1" ,"GET");
assertTrue((testSH.matchRequest(req)));
req = new HttpGetRequestSimple("summary/", "HTTP/1.1" ,"GET");
assertTrue((testSH.matchRequest(req)));
req = new HttpGetRequestSimple("Summary/someLog", "HTTP/1.1" ,"GET");
assertTrue(!(testSH.matchRequest(req)));
}
public void testHandleRequest1() {
// Remember: startSession should be called before endSession.
// Additionally, remember: a StartTimerHandler should be run before
// an EndTimerHandler.
req = new HttpGetRequestSimple("blah", "HTTP/1.1" ,"GET");
tmpSB = new StringBuffer();
try {
assertTrue(!(testSH.handleRequest(req, tmpSB)));
} catch (HandlerException e) { }
assertTrue(tmpSB.toString().equals(""));
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
bool = false;
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { bool = true; }
assertTrue(bool);
assertTrue(tmpSB.toString().equals(""));
// Test with empty log
testLogMap.put("myLog", new LocalLog(500));
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
testHTML = "
\n| No Request Times in Log |
\n";
testHTML += "| No Session Times in Log |
\n
\n";
assertTrue(tmpSB.toString().equals(testHTML));
// "Delete" log from map
testLogMap.put("myLog", null);
assertTrue(testLogMap.get("myLog") == null);
// startSession
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("startSession/myKey", "HTTP/1.1" ,"GET");
try {
assertTrue(testSSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// endSession
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("endSession/myKey/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testESH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Check that there is a record in the log
assertTrue(testLogMap.get("myLog") != null);
assertTrue( ((Log)testLogMap.get("myLog")).getAll(0).length == 1 );
// Test output of SummaryHandler with endSession records,
// but no endTimer records
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
testHTML = "\n| No Request Times in Log |
\n";
assertTrue(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML));
testHTML = "| No Session Times in Log |
\n
\n";
assertTrue(!(tmpSB.toString().substring(tmpSB.toString().length() - testHTML.length()).equals(testHTML)));
// "Delete" log from map
testLogMap.put("myLog", null);
assertTrue(testLogMap.get("myLog") == null);
// Run StartTimerHandler and EndTimerHandler
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("remoteGetFile/www.cnn.com", "HTTP/1.1" ,"GET");
try {
assertTrue(testSTH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
try {
assertTrue((testETH.handleRequest(req, tmpSB)));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Set myLog to the Start/EndTimerHandler log and
// check that there is a record in the log.
testLogMap.put("myLog", log);
assertTrue(testLogMap.get("myLog") != null);
assertTrue( ((Log)testLogMap.get("myLog")).getAll(0).length == 1 );
// Test output of SummaryHandler with endTimer records,
// but no endSession records
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
testHTML = "\n| No Request Times in Log |
\n";
assertTrue(!(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML)));
testHTML = "| No Session Times in Log |
\n
\n";
assertTrue(tmpSB.toString().substring(tmpSB.toString().length() - testHTML.length()).equals(testHTML));
// "Delete" log from map and reset Start/EndTimerHandler log
testLogMap.put("myLog", null);
assertTrue(testLogMap.get("myLog") == null);
log = new LocalLog(100);
// reset
setUp();
}
public void testHandleRequest2() {
// Remember: startSession should be called before endSession.
// Additionally, remember: a StartTimerHandler should be run before
// an EndTimerHandler.
// Set myLog to the Start/EndTimerHandler log and
// check that there is a record in the log.
testLogMap.put("myLog", log);
assertTrue(testLogMap.get("myLog") != null);
// startSession
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("startSession/myKey", "HTTP/1.1" ,"GET");
try {
assertTrue(testSSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Run StartTimerHandler
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("remoteGetFile/www.cnn.com", "HTTP/1.1" ,"GET");
try {
assertTrue(testSTH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
// Sleep for .5 seconds
try { Thread.sleep(500); } catch (InterruptedException e) { assertTrue(false); }
// Run EndTimerHandler
try {
assertTrue((testETH.handleRequest(req, tmpSB)));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Run StartTimerHandler
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("remoteGetFile/www.cnn.com", "HTTP/1.1" ,"GET");
try {
assertTrue(testSTH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
// Sleep for .5 seconds
try { Thread.sleep(500); } catch (InterruptedException e) { assertTrue(false); }
// Run EndTimerHandler
try {
assertTrue((testETH.handleRequest(req, tmpSB)));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// endSession
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("endSession/myKey/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testESH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Check that there are three records in the log
assertTrue(testLogMap.get("myLog") != null);
assertTrue( ((Log)testLogMap.get("myLog")).getAll(0).length == 3 );
// Test output of SummaryHandler with endSession records
// *and* endTimer records
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
testHTML = "\n| No Request Times in Log |
\n";
assertTrue(!(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML)));
testHTML = "| No Session Times in Log |
\n
\n";
assertTrue(!(tmpSB.toString().substring(tmpSB.toString().length() - testHTML.length()).equals(testHTML)));
// Let's run another session!!
// startSession
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("startSession/myKey", "HTTP/1.1" ,"GET");
try {
assertTrue(testSSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Run StartTimerHandler
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("remoteGetFile/www.cnn.com", "HTTP/1.1" ,"GET");
try {
assertTrue(testSTH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
// Sleep for .5 seconds
try { Thread.sleep(500); } catch (InterruptedException e) { assertTrue(false); }
// Run EndTimerHandler
try {
assertTrue((testETH.handleRequest(req, tmpSB)));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Run StartTimerHandler
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("remoteGetFile/www.cnn.com", "HTTP/1.1" ,"GET");
try {
assertTrue(testSTH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
// Sleep for .5 seconds
try { Thread.sleep(500); } catch (InterruptedException e) { assertTrue(false); }
// Run EndTimerHandler
try {
assertTrue((testETH.handleRequest(req, tmpSB)));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// endSession
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("endSession/myKey/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testESH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
assertTrue(tmpSB.toString().equals(""));
// Check that there are six records in the log
assertTrue(testLogMap.get("myLog") != null);
assertTrue( ((Log)testLogMap.get("myLog")).getAll(0).length == 6 );
// Test output of SummaryHandler with endSession records
// *and* endTimer records
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
testHTML = "\n| No Request Times in Log |
\n";
assertTrue(!(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML)));
testHTML = "| No Session Times in Log |
\n
\n";
assertTrue(!(tmpSB.toString().substring(tmpSB.toString().length() - testHTML.length()).equals(testHTML)));
// "Delete" log from map and reset Start/EndTimerHandler log
testLogMap.put("myLog", null);
assertTrue(testLogMap.get("myLog") == null);
log = new LocalLog(100);
// reset
setUp();
}
public void testHandleRequest3() {
// Remember: startSession should be called before endSession.
// Additionally, remember: a StartTimerHandler should be run before
// an EndTimerHandler.
// Set myLog to a new Log that we can "rig"
testLogMap.put("myLog", new LocalLog(500));
assertTrue(testLogMap.get("myLog") != null);
// Populate the log with "rigged" records so we can check
// the EXACT output of SummaryHandler
Log myLog = (Log) testLogMap.get("myLog");
myLog.add(new LogRecord(new String("endTimer/30/ Request...")));
myLog.add(new LogRecord(new String("endTimer/10/ Request...")));
myLog.add(new LogRecord(new String("endTimer/20/ Request...")));
myLog.add(new LogRecord(new String("endSession/myKey/500")));
myLog.add(new LogRecord(new String("endSession/myKey/900")));
myLog.add(new LogRecord(new String("endSession/myKey/100")));
// Check that there are six records in the log
assertTrue(testLogMap.get("myLog") != null);
assertTrue( ((Log)testLogMap.get("myLog")).getAll(0).length == 6 );
// Test EXACT output of SummaryHandler with endSession records
// *and* endTimer records
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
testHTML = "\n";
testHTML += "| Request Times |
\n";
testHTML += "| Minimum | 0.01 s |
\n";
testHTML += "| Maximum | 0.03 s |
\n";
testHTML += "| Median | 0.02 s |
\n";
testHTML += "| Session Times |
\n";
testHTML += "| Minimum | 0.1 s |
\n";
testHTML += "| Maximum | 0.9 s |
\n";
testHTML += "| Median | 0.5 s |
\n";
testHTML += "
\n";
assertTrue(tmpSB.toString().equals(testHTML));
// Populate the log with more "rigged" records so we can check
// the EXACT output of SummaryHandler again
myLog.add(new LogRecord(new String("endTimer/0/ Request...")));
myLog.add(new LogRecord(new String("endTimer/40/ Request...")));
myLog.add(new LogRecord(new String("endTimer/50/ Request...")));
myLog.add(new LogRecord(new String("endSession/myKey/1000")));
myLog.add(new LogRecord(new String("endSession/myKey/303")));
myLog.add(new LogRecord(new String("endSession/myKey/0")));
// Populate with junk records that should be ignored
myLog.add(new LogRecord(new String("some junk")));
myLog.add(new LogRecord(new String("some more junk")));
// Check that there are fourteen records in the log
assertTrue(testLogMap.get("myLog") != null);
assertTrue( ((Log)testLogMap.get("myLog")).getAll(0).length == 14 );
// Test EXACT output of SummaryHandler with endSession records
// *and* endTimer records
tmpSB = new StringBuffer();
req = new HttpGetRequestSimple("summary/myLog", "HTTP/1.1" ,"GET");
try {
assertTrue(testSH.handleRequest(req, tmpSB));
} catch (HandlerException e) { assertTrue(false); }
testHTML = "\n";
testHTML += "| Request Times |
\n";
testHTML += "| Minimum | 0.0 s |
\n";
testHTML += "| Maximum | 0.05 s |
\n";
testHTML += "| Median | 0.025 s |
\n";
testHTML += "| Session Times |
\n";
testHTML += "| Minimum | 0.0 s |
\n";
testHTML += "| Maximum | 1.0 s |
\n";
testHTML += "| Median | 0.401 s |
\n";
testHTML += "
\n";
assertTrue(tmpSB.toString().equals(testHTML));
// "Delete" log from map
testLogMap.put("myLog", null);
assertTrue(testLogMap.get("myLog") == null);
// reset
setUp();
}
public static Test suite() {
return new TestSuite(SummaryHandlerTestCase.class);
}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}