forked from qt-creator/qt-creator
Clang: Handle a busy database in the PCH plugin
This can be always happen for write statements. It fixes the wrong behavior of the transaction that it tried to rollback if begin fails. If begin fails the transaction never started so there is nothing to rollback. Change-Id: I8a03162257fa22a0bb66ccb844f90c6afbc7db64 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -106,6 +106,66 @@ TEST_F(SqliteTransaction, ExclusiveTransactionRollBack)
|
||||
ExclusiveTransaction transaction{mockTransactionBackend};
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, DeferredNonThrowingDestructorTransactionCommit)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, deferredBegin());
|
||||
EXPECT_CALL(mockTransactionBackend, commit());
|
||||
|
||||
DeferredNonThrowingDestructorTransaction transaction{mockTransactionBackend};
|
||||
transaction.commit();
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, DeferredNonThrowingDestructorTransactionCommitCallsInterface)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, deferredBegin());
|
||||
EXPECT_CALL(mockTransactionBackend, commit());
|
||||
|
||||
DeferredNonThrowingDestructorTransaction transaction{mockTransactionBackend};
|
||||
transaction.commit();
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, DeferredNonThrowingDestructorTransactionRollBack)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, deferredBegin());
|
||||
EXPECT_CALL(mockTransactionBackend, rollback());
|
||||
|
||||
DeferredNonThrowingDestructorTransaction transaction{mockTransactionBackend};
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, ImmediateNonThrowingDestructorTransactionCommit)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, immediateBegin());
|
||||
EXPECT_CALL(mockTransactionBackend, commit());
|
||||
|
||||
ImmediateNonThrowingDestructorTransaction transaction{mockTransactionBackend};
|
||||
transaction.commit();
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, ImmediateNonThrowingDestructorTransactionRollBack)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, immediateBegin());
|
||||
EXPECT_CALL(mockTransactionBackend, rollback());
|
||||
|
||||
ImmediateNonThrowingDestructorTransaction transaction{mockTransactionBackend};
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, ExclusiveNonThrowingDestructorTransactionCommit)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, exclusiveBegin());
|
||||
EXPECT_CALL(mockTransactionBackend, commit());
|
||||
|
||||
ExclusiveNonThrowingDestructorTransaction transaction{mockTransactionBackend};
|
||||
transaction.commit();
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, ExclusiveTNonThrowingDestructorransactionRollBack)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, exclusiveBegin());
|
||||
EXPECT_CALL(mockTransactionBackend, rollback());
|
||||
|
||||
ExclusiveNonThrowingDestructorTransaction transaction{mockTransactionBackend};
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, DeferredTransactionBeginThrows)
|
||||
{
|
||||
ON_CALL(mockTransactionBackend, deferredBegin())
|
||||
@@ -133,6 +193,36 @@ TEST_F(SqliteTransaction, ExclusiveTransactionBeginThrows)
|
||||
Sqlite::Exception);
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, DeferredTransactionBeginThrowsAndNotRollback)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, deferredBegin())
|
||||
.WillOnce(Throw(Sqlite::Exception("foo")));
|
||||
|
||||
EXPECT_CALL(mockTransactionBackend, rollback()).Times(0);
|
||||
|
||||
ASSERT_ANY_THROW(DeferredTransaction{mockTransactionBackend});
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, ImmediateTransactionBeginThrowsAndNotRollback)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, immediateBegin())
|
||||
.WillOnce(Throw(Sqlite::Exception("foo")));
|
||||
|
||||
EXPECT_CALL(mockTransactionBackend, rollback()).Times(0);
|
||||
|
||||
ASSERT_ANY_THROW(ImmediateTransaction{mockTransactionBackend});
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, ExclusiveTransactionBeginThrowsAndNotRollback)
|
||||
{
|
||||
EXPECT_CALL(mockTransactionBackend, exclusiveBegin())
|
||||
.WillOnce(Throw(Sqlite::Exception("foo")));
|
||||
|
||||
EXPECT_CALL(mockTransactionBackend, rollback()).Times(0);
|
||||
|
||||
ASSERT_ANY_THROW(ExclusiveTransaction{mockTransactionBackend});
|
||||
}
|
||||
|
||||
TEST_F(SqliteTransaction, TransactionCommitThrows)
|
||||
{
|
||||
ON_CALL(mockTransactionBackend, commit())
|
||||
|
||||
Reference in New Issue
Block a user