Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [qvto-dev] A Bug Found in QVTo Junit Test

Hi

Thank you, but please use Bugzilla for this kind of correspondence.

    Regards

        Ed Willink

On 03/11/2014 09:39, Zhang, J. wrote:

Dear QVTo developers,

 

Our team is developing with QVTo tool, and we found a bug while running with QVTo Junit test. After spending some time to find the reason behind, we fixed it. Hereunder please find the problem, the fixed file, and the analysis.

 

Problem

After building the QVTo source code, we ran the Junit test with following command line:

junit --launch "org.eclipse.m2m.tests.qvt.oml/org.eclipse.m2m.tests.qvt.oml.AllTests.launch" --flatXML --output "${WORKSPACE}/MMT-QVTo.test.results/org.eclipse.m2m.tests.qvt.oml.AllTests.xml"

Occasionally, we got the following failure. One of the Junit tests aims to test for the stack overflow, and it failed with an assertion. It is noticeable to see that the failure is not happened all the time. Sometime it passed, while sometime it failed.

INFO:  Running test org.eclipse.m2m.tests.qvt.oml.transform.TestStackTrace.testMappingCallInProperty...

INFO:    ...OK [0,202s]

INFO:  Running test org.eclipse.m2m.tests.qvt.oml.transform.TestStackTrace.testStackOverFlow...

INFO:    ...Failure [0,188s]

WARN:  junit.framework.AssertionFailedError: expected:<6> but was:<5>

               at junit.framework.Assert.fail(Assert.java:57)

               at junit.framework.Assert.failNotEquals(Assert.java:329)

               at junit.framework.Assert.assertEquals(Assert.java:78)

               at junit.framework.Assert.assertEquals(Assert.java:234)

               at junit.framework.Assert.assertEquals(Assert.java:241)

 

Fixed File

${WORKSPACE}/org.eclipse.m2m.tests.qvt.oml/src/org/eclipse/m2m/tests/qvt/oml/transform/TestStackTrace.java, line 92:

85     for (QVTStackTraceElement element : e.getQvtStackTrace()) {

86           if(--elementCount == 0) {

87                  break;

88           }

89           assertEquals("causeStackOverFlow", element.getOperationName()); //$NON-NLS-1$

90           assertEquals("auxtransf", element.getModuleName()); //$NON-NLS-1$

91           assertEquals("auxtransf.qvto", element.getUnitName()); //$NON-NLS-1$

92           //assertEquals(6, element.getLineNumber());         

93           assertTrue((5 == element.getLineNumber()) || (6 == element.getLineNumber()));

94     }

We made a comment of line 92, and added one line below in line 93. Instead of only checking line number 5, both line number 5 and 6 are acceptable.

 

Analysis

The test code here wants to test for the stack overflow, with causeStackOverFlow method in auxtransf.qvto file. If we look inside this qvto file, we may find:

1             modeltype ecore uses 'http://www.eclipse.org/emf/2002/Ecore';

2            

3             transformation auxtransf(in inModel : ecore, out outModel : ecore);

4

5             query causeStackOverFlow() : OclAny {

6                            causeStackOverFlow(); -- line 7: causing stack overflow

7             }

The method causeStackOverFlow called itself here, the stack will be finally overflow because each call will push method related data into the stack. When the stack is full, an exception will be thrown.

The author of this piece of code might return the line number, and line 6 is the expected value. But the line sequence of this call should be: 5, 6, 5, 6, 5, 6, …, instead of 6, 6, 6, …. Because the entrance of this call is line 5, which might be neglected by the author. This is also the reason why the test failure shows occasionally. When the exception failed in line 6, it passed. When the exception failed in line 5, it failed.

 

 

We recommend to fix this bug, in order to avoid any further problem by the other developers.

 

 

Best wishes,                                                                   

Jiazhuo Zhang

 



_______________________________________________
qvto-dev mailing list
qvto-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/qvto-dev


No virus found in this message.
Checked by AVG - www.avg.com
Version: 2015.0.5315 / Virus Database: 4189/8499 - Release Date: 11/02/14



Back to the top