Forum Discussion

DrBlast's avatar
DrBlast
New Contributor
13 years ago

SoapUI hangs if assertion failed in TestCase TearDown Script

I've made a loop using Conditional goto with steps:
1. Request
2. Groovy script to set/update property variable
3. conditional goto.

and added an assert to TesCase TearDown Script:
def tc = testRunner.testCase.getPropertyValue('status')
assert tc.contains('Done')


And caught two bugs:
1. If loop ends, but assertion is failed, soapUI doesn't allow to run any other steps/scripts etc. All scripts are shown in grey color (all buttons, exept main menu, are disabled).
2. If script loops at about 3-4 times, then soapUI hangs with a deadlock (see logs). It's interesting that all loops didn't run and tearDown script should not be executed.

I've figured that I shouldn't have used 'assert' statement in teardown script and better move it to one of the test steps but I still think that SoapUI must not hang in this case.

Name: Thread-14
State: BLOCKED on java.awt.Component$AWTTreeLock@1b2488d owned by: AWT-EventQueue-0
Total blocked: 188 Total waited: 236

Stack trace:
sun.awt.im.InputContext.focusLost(InputContext.java:450)
sun.awt.im.InputContext.removeNotify(InputContext.java:624)
- locked sun.awt.im.InputMethodContext@1b9b751
java.awt.Component.enableInputMethods(Component.java:1582)
javax.swing.text.JTextComponent.setEditable(JTextComponent.java:1805)
com.eviware.soapui.support.editor.views.xml.source.XmlSourceEditorView.setEditable(XmlSourceEditorView.java:697)
com.eviware.soapui.support.editor.Editor.setEditable(Editor.java:197)
com.eviware.soapui.impl.support.panels.AbstractHttpRequestDesktopPanel.setEnabled(AbstractHttpRequestDesktopPanel.java:332)
com.eviware.soapui.impl.wsdl.panels.request.AbstractWsdlRequestDesktopPanel.setEnabled(AbstractWsdlRequestDesktopPanel.java:111)
com.eviware.soapui.impl.wsdl.panels.teststeps.WsdlTestRequestDesktopPanel.setEnabled(WsdlTestRequestDesktopPanel.java:188)
com.eviware.soapui.impl.support.panels.AbstractHttpRequestDesktopPanel.beforeSubmit(AbstractHttpRequestDesktopPanel.java:592)
com.eviware.soapui.impl.wsdl.panels.request.AbstractWsdlRequestDesktopPanel.beforeSubmit(AbstractWsdlRequestDesktopPanel.java:154)
com.eviware.soapui.impl.wsdl.panels.teststeps.WsdlTestRequestDesktopPanel.beforeSubmit(WsdlTestRequestDesktopPanel.java:228)
com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:114)
com.eviware.soapui.impl.wsdl.WsdlSubmit.submitRequest(WsdlSubmit.java:76)
com.eviware.soapui.impl.wsdl.WsdlRequest.submit(WsdlRequest.java:238)
com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep.run(WsdlTestRequestStep.java:417)
com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:238)
com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentTestStep(WsdlTestCaseRunner.java:48)
com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:147)
com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:42)
com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:135)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
java.util.concurrent.FutureTask.run(FutureTask.java:166)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)


Name: AWT-EventQueue-0
State: BLOCKED on sun.awt.im.InputMethodContext@1b9b751 owned by: Thread-14
Total blocked: 3 306 Total waited: 5 939

Stack trace:
sun.awt.im.InputContext.removeNotify(InputContext.java:610)
java.awt.Component.removeNotify(Component.java:6988)
- locked java.awt.Component$AWTTreeLock@1b2488d
java.awt.Container.removeNotify(Container.java:2816)
- locked java.awt.Component$AWTTreeLock@1b2488d
javax.swing.JComponent.removeNotify(JComponent.java:4761)
java.awt.Container.removeAll(Container.java:1290)
javax.swing.plaf.basic.BasicListUI.paintImpl(BasicListUI.java:325)
- locked java.awt.Component$AWTTreeLock@1b2488d
javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:240)
javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
javax.swing.JComponent.paintComponent(JComponent.java:778)
javax.swing.JComponent.paint(JComponent.java:1054)
javax.swing.JComponent.paintChildren(JComponent.java:887)
- locked java.awt.Component$AWTTreeLock@1b2488d
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JViewport.paint(JViewport.java:725)
javax.swing.JComponent.paintChildren(JComponent.java:887)
- locked java.awt.Component$AWTTreeLock@1b2488d
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
javax.swing.RepaintManager.paint(RepaintManager.java:1206)
javax.swing.JComponent._paintImmediately(JComponent.java:5169)
javax.swing.JComponent.paintImmediately(JComponent.java:4980)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
javax.swing.RepaintManager.access$700(RepaintManager.java:59)
javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
java.awt.EventQueue.access$000(EventQueue.java:101)
java.awt.EventQueue$3.run(EventQueue.java:666)
java.awt.EventQueue$3.run(EventQueue.java:664)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

7 Replies

  • DrBlast's avatar
    DrBlast
    New Contributor
    Major update:
    1. I'm using SoapUI ver 4.5.1 and jdk 1.6.0_37
    2. There is one more step after request: Delay. Set values 500ms or 1000ms (result is the same)
    3. I've reproduced issue without TearDown Script:

    I moved assertions to Groovy Script step. Step inserted after the loop. So in several loops SoapUI hangs and you can see deadlock via jconsole
  • DrBlast's avatar
    DrBlast
    New Contributor
    I've detected when dedlock happens. If looped request opened in the background (TestCase window on th top) then it causes deadlock while Request window refresh

    Name: AWT-EventQueue-0
    State: BLOCKED on sun.awt.im.InputMethodContext@97324b owned by: Thread-35
    Total blocked: 8 123 Total waited: 21 902

    Stack trace:
    sun.awt.im.InputContext.removeNotify(InputContext.java:610)
    java.awt.Component.removeNotify(Component.java:6988)
    - locked java.awt.Component$AWTTreeLock@492443
    java.awt.Container.removeNotify(Container.java:2816)
    - locked java.awt.Component$AWTTreeLock@492443
    javax.swing.JComponent.removeNotify(JComponent.java:4761)
    java.awt.Container.removeAll(Container.java:1290)
    - locked java.awt.Component$AWTTreeLock@492443
    javax.swing.plaf.basic.BasicListUI.paintImpl(BasicListUI.java:325)
    javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:240)
    javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    javax.swing.JComponent.paintComponent(JComponent.java:778)
    javax.swing.JComponent.paint(JComponent.java:1054)
    javax.swing.JComponent.paintChildren(JComponent.java:887)
    - locked java.awt.Component$AWTTreeLock@492443
    javax.swing.JComponent.paint(JComponent.java:1063)
    javax.swing.JViewport.paint(JViewport.java:725)
    javax.swing.JComponent.paintChildren(JComponent.java:887)
    - locked java.awt.Component$AWTTreeLock@492443
    javax.swing.JComponent.paint(JComponent.java:1063)
    javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
    javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
    javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    java.awt.EventQueue.access$000(EventQueue.java:101)
    java.awt.EventQueue$3.run(EventQueue.java:666)
    java.awt.EventQueue$3.run(EventQueue.java:664)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    java.awt.EventDispatchThread.run(EventDispatchThread.java:90)


    Got the same while repaint TestCase logs:
    Name: AWT-EventQueue-0
    State: BLOCKED on sun.awt.im.InputMethodContext@534d21 owned by: LogList Updater for http log
    Total blocked: 19 158 Total waited: 26 851

    Stack trace:
    sun.awt.im.InputContext.removeNotify(InputContext.java:610)
    java.awt.Component.removeNotify(Component.java:6988)
    - locked java.awt.Component$AWTTreeLock@14bef6a
    java.awt.Container.removeNotify(Container.java:2816)
    - locked java.awt.Component$AWTTreeLock@14bef6a
    javax.swing.JComponent.removeNotify(JComponent.java:4761)
    java.awt.Container.removeAll(Container.java:1290)
    - locked java.awt.Component$AWTTreeLock@14bef6a
    javax.swing.plaf.basic.BasicListUI.paintImpl(BasicListUI.java:325)
    javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:240)
    javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    javax.swing.JComponent.paintComponent(JComponent.java:778)
    javax.swing.JComponent.paint(JComponent.java:1054)
    javax.swing.JComponent.paintChildren(JComponent.java:887)
    - locked java.awt.Component$AWTTreeLock@14bef6a
    javax.swing.JComponent.paint(JComponent.java:1063)
    javax.swing.JViewport.paint(JViewport.java:725)
    javax.swing.JComponent.paintChildren(JComponent.java:887)
    - locked java.awt.Component$AWTTreeLock@14bef6a
    javax.swing.JComponent.paint(JComponent.java:1063)
    javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
    javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
    javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    java.awt.EventQueue.access$000(EventQueue.java:101)
    java.awt.EventQueue$3.run(EventQueue.java:666)
    java.awt.EventQueue$3.run(EventQueue.java:664)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
  • keithtyler's avatar
    keithtyler
    New Contributor
    Thank you for tracking this down. I have confirmed I am seeing the exact same issue. It has been very hard to find any info on this happening. Do people not use DataGen Looper in realtime?

    A reproducible deadlock (although it is not consistent, but eventual, suggesting a timing/race condition) is a serious issue and any of this tool's users would recognize it as such too. Not only as a piece of software, but also as a QA tool used by QA engineers, SB really ought to fix this
  • skillsoft's avatar
    skillsoft
    Frequent Contributor
    Any word on fixing this? I have soapui pro and ran into the same issue with the teardown script. If I move the code to a groovy step it fixes it. I'm running soapui pro 4.5.1