TestNG hangs when using non-ascii chars in dataProviders

17 views
Skip to first unread message

Carsten

unread,
Dec 15, 2009, 12:05:18 PM12/15/09
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
Reply all
Reply to author
Forward
0 new messages