Thursday, 18 February 2016

SCA Unit Test Run does not Complete Until Timeout Reached - Oracle SOA (BPEL)


Error Stack – Diagnostic Logs

[2016-02-18T19:30:29.178+13:00] [WLS_SOA] [ERROR] [] [oracle.integration.platform.testfwk.TestCase] [tid: [ACTIVE].ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: weblogic] [ecid: 064cc781-aa3b-422b-a18f-17c20736a490-00019feb,0] [APP: soa-infra]  Timeout reached in runTestCases  for test run id=eca9be9df2969377:19f32968:152e9ec74d6:-7ff3
[2016-02-18T19:30:29.239+13:00] [WLS_SOA] [NOTIFICATION] [] [oracle.integration.platform.testfwk.TestCase] [tid: [ACTIVE].ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: weblogic] [ecid: 064cc781-aa3b-422b-a18f-17c20736a490-00019feb,0] [APP: soa-infra] Rollup has mismatch in test and results wire actions, missing tests 2 for test name = Test.xml Suite = TestSuite Run name = antRun-TestFwk Run id = eca9be9df2969377:19f32968:152e9ec74d6:-7ff3
[2016-02-18T19:30:29.269+13:00] [WLS_SOA] [ERROR] [] [oracle.soa.bpel.system] [tid: [ACTIVE].ExecuteThread: '11' for queue:
 'weblogic.kernel.Default (self-tuning)'] [userId: weblogic] [ecid: 064cc781-aa3b-422b-a18f-17c20736a490-00019feb,0] [APP:
soa-infra] [[
oracle.integration.platform.testfwk.execution.TestRunTimeoutException: The test run has timed out. Some tests did not complete in the allocated time.
        at oracle.integration.platform.testfwk.execution.TestFwkService.runTestCases(TestFwkService.java:718)
        at oracle.soa.management.internal.ejb.impl.SOATestBeanImpl.executeTestCases(SOATestBeanImpl.java:130)
        at oracle.soa.management.internal.ejb.impl.SOATestBean_ra84ps_SOATestBeanImpl.__WL_invoke(Unknown Source)
        at weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:34)
        at oracle.soa.management.internal.ejb.impl.SOATestBean_ra84ps_SOATestBeanImpl.executeTestCases(Unknown Source)
        at oracle.soa.management.internal.ejb.impl.SOATestBean_ra84ps_SOATestBeanImpl_WLSkel.invoke(Unknown Source)
        at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:701)
        at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:231)
        at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:527)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
        at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:523)
        at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

]]

Platform

Oracle SOA Platform - Version 11.1.1.1.0 and higher

Issue Faced


ACTUAL BEHAVIOR
---------------
When using "Unit test", run does not show completed in Enterprise Manager until the timeout is reached, even if the actual test case completes much faster.

EXPECTED BEHAVIOR
-----------------------
The Enterprise Manager console shows the task completed as soon as the composites have completed

STEPS
-----------------------
The issue can be reproduced at will with the following steps:
1. Create an echo dummy project (sync) with test suite
2. Deploy and, on enterprise manager run the test suite
3. The console takes much more time to update than the actual composite does.

Cause


Case 1: SOA environment Issue as per Document (Doc ID 1555494.1)

A delay occurs when testing a composite using Enterprise Manager or using ant -f ant-sca-test
 
The delay occurs because of the delay time property that is set to confirm that all components of the composite are completed. The delay time property is called completionDelay and the default value is 30 sec.

Case 2: Real-time Issue Faced by us

·         There are multiple copies with same name as Test.xml in TestSuites folder of SOA composite/MDS.
·         Test.xml has emulates which are not being used in the test flow.

In order to modify this property, completionDelay, you have 2 different approaches

Solution


Case 1
Option 1
The completionDelay property from fabric-config-bpel.xml can be manually modified.
For example:
From:
<property name="completionDelay">
    <value>30000</value>
</property>

To:
<property name="completionDelay">
    <value>1000</value>
</property>

For better results when testing you might also need to modify the pollInterval property located on the same file, this property check for status by polling every X millisecond and it's defined like
<property name="pollInterval">
    <value>10000</value>
</property>

The default value is 10 seconds (10000). You can update it to 1000.


In order to modify completionDelay in fabric-config-bpel.xml you will need to
1.       Stop WLS
2.       Under WLS base directory, search for fabric-config-bpel.xml
For example: [WLS base dir]/user_projects/domains/<yourDomain>/servers/<soaServer>/tmp/_WL_user/soa-infra/<temp folder name>/war/WEB-INF/fabric-config-bpel.xml
[Note: Please search fabric-config-bpel.xml inside / user_projects/domains/<yourDomain>/servers/<soaServer>/tmp/_WL_user/soa-infra as <temp folder name> is different in different environments]
3.       Backup and modify fabric-config-bpel.xml
4.        Start WLS


Option 2

Another option is to use a BPEL with a Java Embedding activity to programmatically modify the completionDelay property.
<sequence name="main">
    <!-- Receive input from requestor. (Note: This maps to operation defined in BPELProcess1.wsdl) -->
    <receive name="receiveInput" partnerLink="bpelprocess1_client" portType="client:BPELProcess1" operation="process" variable="inputVariable" createInstance="yes"/>
    <extensionActivity>
        <bpelx:exec name="Java_Embedding1" language="java">
            <![CDATA[
            /*Write your java code below e.g. System.out.println("Hello, World");*/
            long completionDelay = 1000;
            System.out.println("completionDelay set to: " + completionDelay);
            oracle.integration.platform.testfwk.execution.TestFwkService.getService().setCompletionDelay(completionDelay);
            ]]>
        </bpelx:exec>
    </extensionActivity>
    <assign name="echo">
        <copy>
            <from>$inputVariable.payload/client:input</from>
            <to>$outputVariable.payload/client:result</to>
        </copy>
    </assign>
    <!-- Generate reply to synchronous request -->
    <reply name="replyOutput" partnerLink="bpelprocess1_client" portType="client:BPELProcess1" operation="process" variable="outputVariable"/>
</sequence>

Note: If the BPEL Java Embedding activity is used to modify the completionDelay property
1.       We recommend executing the code only once
2.       Using this option will not modify fabric-config-bpel.xml so the call should be made at least once after WLS restart

Case 2

·         If Case 1 changes have been implemented using any Option 1 or 2, follow below steps
·         Rename the test suite files with different names for different flows
·         Remove all unwanted emulates from the Test.xml
·         Re-deploy the Composite with updated Test Suite.

Note : Similar issues have been reported for Oracle orders(FOD PS3), simply update the build.properties, and set 'soa.only.deployment=true'.

If you like the post, follow us. Mail us @tripathi.yogesh1990@gmail.com for any issues related to SOA/OSB 

Wait for future posts on ANT/Jenkins/CI/BPEL or contact us

No comments:

Post a Comment