summaryrefslogtreecommitdiff
path: root/dbaccess
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2016-12-12 23:17:51 +0100
committerCaolán McNamara <caolanm@redhat.com>2017-01-13 11:51:54 +0000
commit8fde9af18698d85f13294ca0990478b707fc748a (patch)
tree9c98547cbf4bb8c65f1f0ff25a1bb904ebe6446e /dbaccess
parent9ec13271b435dc5b2e1753507e1e470624bb93ae (diff)
dbaccess: fix testCloneMovesPlusDeletions test
JunitTest_dbaccess_complex spuriously fails 1% of the time with: 1) testCloneMovesPlusDeletions(complex.dbaccess.RowSet) java.lang.AssertionError: moving to the next record after |deleteRow| and clone moves failed at complex.dbaccess.RowSet.testCloneMovesPlusDeletions(RowSet.java:756) The problem is that line RowSet.java:750 deleteRow() manages to delete the last row in the set, because the positionRandom() is tricked to position itself on the last row (which it tries not to do), becuase the RowSet is currently positioned past-the-end on a deleted row and the ORowSetBase::impl_getRowCount() is a lying bastard that adds 1 to the result in this special case. Funnily both the ORowSetBase::impl_getRowCount() and the test using positionRandom() were added in CWS rowsetdel. Yay for randomized tests! Change-Id: Ic8c7bfa190f6a5269604cf5b3c338f2d0b64205e (cherry picked from commit ae8bd4267ac2da58f9e476d24e1e894202e92dea) Reviewed-on: https://gerrit.libreoffice.org/32991 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'dbaccess')
-rw-r--r--dbaccess/qa/complex/dbaccess/RowSet.java7
1 files changed, 6 insertions, 1 deletions
diff --git a/dbaccess/qa/complex/dbaccess/RowSet.java b/dbaccess/qa/complex/dbaccess/RowSet.java
index 2cbf942d94e1..e617d2546525 100644
--- a/dbaccess/qa/complex/dbaccess/RowSet.java
+++ b/dbaccess/qa/complex/dbaccess/RowSet.java
@@ -528,7 +528,12 @@ public class RowSet extends TestCase
*/
private int positionRandom() throws SQLException, UnknownPropertyException, WrappedTargetException
{
- final int position = (new Random()).nextInt(currentRowCount() - 2) + 2;
+ // note: obviously this should subtract 2 but actually subtract 3
+ // because if we have just deleted the current row then
+ // ORowSetBase::impl_getRowCount() will lie and currentRowCount()
+ // returns 1 more than the actual number of rows and then
+ // positionRandom() followed by deleteRow() deletes *last* row
+ final int position = (new Random()).nextInt(currentRowCount() - 3) + 2;
assertTrue("sub task failed: could not position to row no. " + (Integer.valueOf(position)).toString(),
m_resultSet.absolute(position));
return m_resultSet.getRow();