package org.ggp.base.apps.logging; import java.io.IOException; import java.net.Socket; import java.net.SocketTimeoutException; import org.ggp.base.util.game.Game; import org.ggp.base.util.http.HttpReader; import org.ggp.base.util.http.HttpWriter; import org.ggp.base.util.logging.GamerLogger; import org.ggp.base.util.logging.LogSummaryGenerator; import org.ggp.base.util.match.Match; import org.junit.Assert; import org.junit.Before; import org.junit.Test; class TestLogSummaryGenerator extends LogSummaryGenerator { @Override public String getSummaryFromLogsDirectory(String theLogsDirectory) { return "fake log for " + theLogsDirectory; } } class StuckTestLogSummaryGenerator extends LogSummaryGenerator { @Override public String getSummaryFromLogsDirectory(String theLogsDirectory) { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } return "fake log for " + theLogsDirectory; } } public class LogSummarizerTest extends Assert { class LogSummarizerRunner extends Thread { LogSummarizer theSummarizer; LogSummaryGenerator theGenerator; public LogSummarizerRunner(LogSummaryGenerator theGenerator) { this.theGenerator = theGenerator; } public void stopAbruptly() throws IOException { theSummarizer.stopAbruptly(); } @Override public void run() { theSummarizer = new LogSummarizer(theGenerator); try { theSummarizer.runSummarizer(); } catch (Exception e) { e.printStackTrace(); } } } @Before public void setUp() { Match m = new Match("fake_match", 0, 0, 0, Game.createEphemeralGame("( (role fake_role) )"), null); GamerLogger.startFileLogging(m, "fake_role"); } @Test public void testBasicResponse() throws IOException, InterruptedException { LogSummarizerRunner r = new LogSummarizerRunner(new TestLogSummaryGenerator()); r.start(); Thread.sleep(100); Socket s = new Socket("127.0.0.1", LogSummarizer.SERVER_PORT); HttpWriter.writeAsClient(s, "", "fake_match", "", null); assertEquals("fake log for logs/fake_match-fake_role", HttpReader.readAsClient(s)); r.stopAbruptly(); r.join(); } @Test public void testStuckResponse() throws IOException, InterruptedException { LogSummarizerRunner r = new LogSummarizerRunner(new StuckTestLogSummaryGenerator()); r.start(); Thread.sleep(100); Socket s = new Socket("127.0.0.1", LogSummarizer.SERVER_PORT); HttpWriter.writeAsClient(s, "", "fake_match", "", null); try { HttpReader.readAsClient(s, 50); } catch (SocketTimeoutException ste) { ; } r.stopAbruptly(); r.join(); } }