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\n"; testHTML += "\n
No Request Times in Log
No Session Times in Log
\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\n"; assertTrue(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML)); testHTML = "\n
No Request Times in Log
No Session Times in Log
\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\n"; assertTrue(!(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML))); testHTML = "\n
No Request Times in Log
No Session Times in Log
\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\n"; assertTrue(!(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML))); testHTML = "\n
No Request Times in Log
No Session Times in Log
\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\n"; assertTrue(!(tmpSB.toString().substring(0,testHTML.length()).equals(testHTML))); testHTML = "\n
No Request Times in Log
No Session Times in Log
\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 += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "
Request Times
Minimum0.01 s
Maximum0.03 s
Median0.02 s
Session Times
Minimum0.1 s
Maximum0.9 s
Median0.5 s
\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 += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "\n"; testHTML += "
Request Times
Minimum0.0 s
Maximum0.05 s
Median0.025 s
Session Times
Minimum0.0 s
Maximum1.0 s
Median0.401 s
\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()); } }