Carsten
unread,Dec 15, 2009, 12:05:18 PM12/15/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to testng-users
Hi,
i created a small test which leads that testng hangs (tried with
testng 5.11):
public class TestNonAcciiCharacterParameters
{
@DataProvider
public Iterator<Object[]> generateSampleData()
{
List<Object[]> dataProvider = new LinkedList<Object[]>();
dataProvider.add(new Object[] { ((char) (1)) });
return dataProvider.iterator();
}
@Test(dataProvider = "generateSampleData")
public void test(String s)
{
Assert.assertNotNull(s);
}
}
And here is the stacktrace where testng hangs:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:485)
org.testng.remote.strprotocol.StringMessageSenderHelper.sendMessage
(StringMessageSenderHelper.java:171)
org.testng.remote.strprotocol.StringMessageSenderHelper.sendMessage
(StringMessageSenderHelper.java:138)
org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onTestSuccess
(RemoteMessageSenderTestListener.java:82)
org.testng.internal.Invoker.runTestListeners(Invoker.java:1598)
org.testng.internal.Invoker.runTestListeners(Invoker.java:1578)
org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1290)
org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1015)
org.testng.internal.TestMethodWorker.invokeTestMethods
(TestMethodWorker.java:138)
org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)
org.testng.TestRunner.runWorkers(TestRunner.java:909)
org.testng.TestRunner.privateRun(TestRunner.java:618)
org.testng.TestRunner.run(TestRunner.java:499)
org.testng.SuiteRunner.runTest(SuiteRunner.java:332)
org.testng.SuiteRunner.runSequentially(SuiteRunner.java:327)
org.testng.SuiteRunner.privateRun(SuiteRunner.java:299)
org.testng.SuiteRunner.run(SuiteRunner.java:204)
org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:915)
org.testng.TestNG.runSuitesLocally(TestNG.java:879)
org.testng.TestNG.run(TestNG.java:787)
org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:76)
org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:127)
I looked into this, but i am not sure if i understood this correctly.
Every sendMessage must be acknowledged by a readerThread, but in this
case the readerThread is already finished when sendMessage is called
(m_inStream.readLine() returns null for unicode). That's why
sendMessage hangs on lock.wait()
In the ctor of TestResultMessage(String, String, ITestResult) i
normalized the method-parameters with
MessageHelper.replaceUnicodeCharactersWithAscii. That solved my
issue.
Something which also worked but is probably a more or less bad design
is to check if the readerThread is alive before acquiring the lock:
if (m_readerThread.isAlive())
{
lock.wait();
}
Thanks,
Carsten