ConcurrentModificationException at org.testng.TestRunner.dumpInvokedMethods

644 views
Skip to first unread message

Ivan ✪

unread,
Jun 10, 2011, 8:37:21 AM6/10/11
to testng...@googlegroups.com
Hi, sometimes I'm getting the following stack trace when running > 1.000 tests launched by a Factory class.

com.selenium.tests.web.seo.SeoTest.setUpTestEnvironment(java.lang.reflect.Method)
     [java] [Invoker 2128229621] Invoking com.selenium.tests.web.seo.SeoTest.testSeo
     [java] [Invoker 15266430] Invoking @AfterMethod com.selenium.tests.BaseSeleniumTest.tearDown(org.testng.ITestResult)
     [java] [Invoker 1629763825] Invoking com.selenium.tests.web.seo.SeoTest.testSeo
     [java] [WARN] ThreadPoolExecutor has been interrupted while awaiting termination
     [java] [Invoker 1762911089] Invoking @AfterMethod com.selenium.tests.BaseSeleniumTest.tearDown(org.testng.ITestResult)
     [java] [WARN] ThreadPoolExecutor has been interrupted while awaiting termination
     [java] java.util.ConcurrentModificationException
     [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194)
     [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
     [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221)
     [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
     [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
     [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
     [java] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
     [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java] at java.lang.reflect.Method.invoke(Method.java:616)
     [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
     [java] at org.apache.tools.ant.Task.perform(Task.java:348)
     [java] at org.apache.tools.ant.Target.execute(Target.java:390)
     [java] at org.apache.tools.ant.Target.performTasks(Target.java:411)
     [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397)
     [java] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
     [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1249)
     [java] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442)
     [java] at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105)
     [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
     [java] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
     [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java] at java.lang.reflect.Method.invoke(Method.java:616)
     [java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
     [java] at org.apache.tools.ant.Task.perform(Task.java:348)
     [java] at org.apache.tools.ant.Target.execute(Target.java:390)
     [java] at org.apache.tools.ant.Target.performTasks(Target.java:411)
     [java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397)
     [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1366)
     [java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
     [java] at org.apache.tools.ant.Project.executeTargets(Project.java:1249)
     [java] at org.apache.tools.ant.Main.runBuild(Main.java:801)
     [java] at org.apache.tools.ant.Main.startAnt(Main.java:218)
     [java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
     [java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
     [java] Caused by: java.util.ConcurrentModificationException
     [java] at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:782)
     [java] at java.util.ArrayList$Itr.next(ArrayList.java:754)
     [java] at org.testng.TestRunner.dumpInvokedMethods(TestRunner.java:1614)
     [java] at org.testng.TestRunner.afterRun(TestRunner.java:1131)
     [java] at org.testng.TestRunner.run(TestRunner.java:600)
     [java] at org.testng.SuiteRunner.runTest(SuiteRunner.java:315)
     [java] at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:310)
     [java] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:272)
     [java] at org.testng.SuiteRunner.run(SuiteRunner.java:221)
     [java] at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
     [java] at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
     [java] at org.testng.TestNG.runSuitesSequentially(TestNG.java:1027)
     [java] at org.testng.TestNG.runSuitesLocally(TestNG.java:964)
     [java] at org.testng.TestNG.run(TestNG.java:896)
     [java] at com.selenium.framework.TestRunner.main(TestRunner.java:54)
     [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java] at java.lang.reflect.Method.invoke(Method.java:616)
     [java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217)
     [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152)
     [java] ... 33 more


I'm running with:

    TestListenerAdapter tla = new TestListenerAdapter();
    testng.setUseDefaultListeners(false);
    testng.addListener(new FailureTraceReporter());   // customized version of TestHTMLReporter (extended)
    testng.addListener(new ExtendedEmailableReporter());  // custom report implementing IReporter 
    testng.addListener(new AnnotationTransformer());  // implements IAnnotationTransformer 
    testng.addListener(tla);


Thanks,

Ivan.-

Cédric Beust ♔

unread,
Jun 10, 2011, 12:36:03 PM6/10/11
to testng...@googlegroups.com
Hi Ivan,

Maybe I am misreading the stack trace but the problem seems to be coming from ant's code, not TestNG. It looks like one of your test methods is invoking ant's programmatic API, is that correct?

If so, and if you are invoking it in parallel, it might be that ant is not multi thread safe in this area of the code. Also, note that "ConcurrentModificationException" can happen even if you're not using multiple threads.

-- 
Cédric




2011/6/10 Ivan ✪ <ivansol...@gmail.com>
--
You received this message because you are subscribed to the Google Groups "testng-users" group.
To post to this group, send email to testng...@googlegroups.com.
To unsubscribe from this group, send email to testng-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/testng-users?hl=en.

Ivan ✪

unread,
Jun 17, 2011, 7:46:53 AM6/17/11
to testng...@googlegroups.com
Cédric, 

Thanks for your answer.

Actually the ant trace was there just because I was executing testng as a Java ant task.
Maybe you see it more clear here, usign the testng ant task:

   [testng] Retrying test: testSeo. Retry count: 1
   [testng] [Invoker 503262747] Invoking @BeforeMethod com.selenium.tests.web.seo.SeoTest.setUpTestEnvironment(java.lang.reflect.Method)
   [testng] [Invoker 503262747] Invoking com.selenium.tests.web.seo.SeoTest.testSeo
   [testng] Exception in thread "main" java.util.ConcurrentModificationException
   [testng] 	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:782)
   [testng] 	at java.util.ArrayList$Itr.next(ArrayList.java:754)
   [testng] 	at org.testng.TestRunner.dumpInvokedMethods(TestRunner.java:1614)
   [testng] 	at org.testng.TestRunner.afterRun(TestRunner.java:1131)
   [testng] 	at org.testng.TestRunner.run(TestRunner.java:600)
   [testng] 	at org.testng.SuiteRunner.runTest(SuiteRunner.java:315)
   [testng] 	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:310)
   [testng] 	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:272)
   [testng] 	at org.testng.SuiteRunner.run(SuiteRunner.java:221)
   [testng] 	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
   [testng] 	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
   [testng] 	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1027)
   [testng] 	at org.testng.TestNG.runSuitesLocally(TestNG.java:964)
   [testng] 	at org.testng.TestNG.run(TestNG.java:896)
   [testng] 	at com.selenium.framework.TestRunner.main(TestRunner.java:54)
   [testng] [WARN] ThreadPoolExecutor has been interrupted while awaiting termination
   [testng] 
   [testng] *********** INVOKED METHODS
   [testng] 
   [testng] [WARN] ThreadPoolExecutor has been interrupted while awaiting termination


Ivan.-


2011/6/10 Cédric Beust ♔ <ced...@beust.com>

Ivan ✪

unread,
Jun 20, 2011, 5:53:23 AM6/20/11
to testng...@googlegroups.com
Just realized this was happening due to the suite level timeout killing all running threads. There was no information about this in the logs, so the error was a bit misleading.

Thanks anyway.

Ivan.-

2011/6/17 Ivan ✪ <ivansol...@gmail.com>
Reply all
Reply to author
Forward
0 new messages