From c6b949c0c1db9e34d21f5b8c11b00a5399739754 Mon Sep 17 00:00:00 2001 From: Stephane Bailliez Date: Sun, 13 Jan 2002 13:55:13 +0000 Subject: [PATCH] - Make the socket server cleaning up any connected client and its input and output so that the JDK bug on Windows does not shows up. - Clean up. - Fix the test, the thread was not the lock owner..dooh ! git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270741 13f79535-47bb-0310-9956-ffa450edef68 --- .../optional/junit/OutputAttribute.java | 2 +- .../taskdefs/optional/junit/TestElement.java | 13 +++++++- .../optional/junit/remote/MessageReader.java | 18 +++++----- .../optional/junit/remote/Server.java | 33 ++++++++++++++++--- .../optional/junit/remote/TestRunnerTest.java | 10 +++--- 5 files changed, 55 insertions(+), 21 deletions(-) diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java index bf580e7cf..ff1688c45 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java @@ -100,7 +100,7 @@ public class OutputAttribute extends ProjectComponent { } else if (STDERR.equals(value)) { return new KeepAliveOutputStream(System.err); } - File f = project.resolveFile(value); + File f = getProject().resolveFile(value); try { return new FileOutputStream(f); } catch (IOException e) { diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java index b8271be89..178c5e490 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java @@ -64,7 +64,18 @@ import junit.runner.TestCollector; */ public class TestElement implements TestCollector { + /** classname of JUnit test */ + private String name; + +//@fixme, a path is needed for a test. + public Enumeration collectTests() { - return null; + return Enumerations.fromArray( new String[]{ name } ); + } + +// Ant bean setters + + public String setName(String value){ + this.name = value; } } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java index ad4d75f3e..1f5991894 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java @@ -81,17 +81,17 @@ import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener; public class MessageReader { /** the set of registered listeners */ - protected Vector listeners = new Vector(); + private Vector listeners = new Vector(); // communication states with client - protected boolean inReadTrace = false; - protected boolean inFailedMessage = false; - protected String failedTest; - protected String failedMessage; - protected String failedTrace; - protected int failureKind; - protected long elapsedTime; - protected Properties sysprops; + private boolean inReadTrace = false; + private boolean inFailedMessage = false; + private String failedTest; + private String failedMessage; + private String failedTrace; + private int failureKind; + private long elapsedTime; + private Properties sysprops; public MessageReader() { } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java index 3c9a22300..3307161fc 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java @@ -87,12 +87,17 @@ public class Server { private MessageReader reader = new MessageReader(); /** writer used to send message to clients */ - private PrintWriter writer; + private MessageWriter writer; public Server(int port) { this.port = port; } + protected void finalize() throws Exception { + cancel(); + shutdown(); + } + /** * add a new listener * @param listener a instance of a listener. @@ -123,20 +128,36 @@ public class Server { /** cancel the connection to the client */ public void cancel() { if (isRunning()) { - //@fixme + writer.sendMessage(MessageIds.TEST_STOP); } } /** shutdown the server and any running client */ public void shutdown() { + if (writer != null){ + writer.close(); + writer = null; + } + if (reader != null){ + //@fixme what about the stream ? + reader = null; + } try { if (client != null) { client.shutdownInput(); client.shutdownOutput(); + client.close(); + client = null; } - server.close(); } catch (IOException e) { } + try { + if (server != null){ + server.close(); + server = null; + } + } catch (IOException e){ + } } //----- @@ -146,12 +167,14 @@ public class Server { try { server = new ServerSocket(port); client = server.accept(); - writer = new PrintWriter(client.getOutputStream(), true); + writer = new MessageWriter(client.getOutputStream()); reader.process(client.getInputStream()); } catch (IOException e) { + //@fixme this stacktrace might be normal when closing + // the socket. So decompose the above in distinct steps e.printStackTrace(); } finally { - stop(); + cancel(); shutdown(); } } diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunnerTest.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunnerTest.java index c862abdd6..310e4a968 100644 --- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunnerTest.java +++ b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunnerTest.java @@ -116,7 +116,7 @@ public class TestRunnerTest extends TestCase runner.addTestClassName(TestCases.NullTestCase.class.getName()); // server.addListener( new DefaultTestRunListener() ); runner.run(); - synchronized(this){ if (!done){ wait(); } } + synchronized(this){ while (!done){ wait(); } } assertEquals(new Integer(3), recorder.runStarted.elementAt(0)); /* assertTrue(recorder.runStarted.elementAt(0).toSt("testSuccess")); @@ -128,7 +128,7 @@ public class TestRunnerTest extends TestCase public void testFailSetupTestCase() throws Exception { runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName()); runner.run(); - synchronized(this){ if (!done){ wait(); } } + synchronized(this){ while (!done){ wait(); } } assertEquals(1, recorder.runStarted.size()); assertEquals(1, recorder.runEnded.size()); @@ -137,7 +137,7 @@ public class TestRunnerTest extends TestCase public void testFailSetupTestSuite() throws Exception { runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName()); runner.run(); - synchronized(this){ if (!done){ wait(); } } + synchronized(this){ while (!done){ wait(); } } assertEquals(1, recorder.runStarted.size()); assertEquals(1, recorder.runEnded.size()); } @@ -159,14 +159,14 @@ public class TestRunnerTest extends TestCase public void onTestRunEnded(long elapsedtime) { synchronized(this){ done = true; + notify(); } - notify(); } public void onTestRunStopped(long elapsedtime) { synchronized(this){ done = true; + notify(); } - notify(); } public void onTestRunSystemProperties(Properties props) { }