ClangRefactoring: Ensure that database is written to log after indexing

Change-Id: Ic2473d9fe8dc9b41a7da728c9e1b5202524c1a79
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2019-05-20 16:46:22 +02:00
parent 60ea77f3eb
commit 912cb9278f
10 changed files with 132 additions and 24 deletions

View File

@@ -31,12 +31,13 @@
#include "mocksqlitetransactionbackend.h"
#include "mocksqlitewritestatement.h"
#include <sqlitedatabaseinterface.h>
#include <sqlitetable.h>
#include <sqlitetransaction.h>
#include <utils/smallstringview.h>
class MockSqliteDatabase : public MockSqliteTransactionBackend
class MockSqliteDatabase : public MockSqliteTransactionBackend, public Sqlite::DatabaseInterface
{
public:
using ReadStatement = NiceMock<MockSqliteReadStatement>;
@@ -56,5 +57,7 @@ public:
MOCK_METHOD1(setIsInitialized,
void (bool));
MOCK_METHOD0(walCheckpointFull, void());
};

View File

@@ -267,7 +267,8 @@ protected:
mockProjectPartsStorage,
mockModifiedTimeChecker,
testEnvironment};
SymbolIndexerTaskQueue indexerQueue{indexerScheduler, progressCounter};
NiceMock<MockSqliteDatabase> mockSqliteDatabase;
SymbolIndexerTaskQueue indexerQueue{indexerScheduler, progressCounter, mockSqliteDatabase};
Scheduler indexerScheduler{collectorManger,
indexerQueue,
progressCounter,

View File

@@ -25,6 +25,7 @@
#include "googletest.h"
#include "mocksqlitedatabase.h"
#include "mocktaskscheduler.h"
#include <symbolindexertaskqueue.h>
@@ -54,7 +55,8 @@ protected:
NiceMock<MockFunction<void(int, int)>> mockSetProgressCallback;
ClangBackEnd::ProgressCounter progressCounter{mockSetProgressCallback.AsStdFunction()};
NiceMock<MockTaskScheduler<Callable>> mockTaskScheduler;
ClangBackEnd::SymbolIndexerTaskQueue queue{mockTaskScheduler, progressCounter};
NiceMock<MockSqliteDatabase> mockSqliteDatabase;
ClangBackEnd::SymbolIndexerTaskQueue queue{mockTaskScheduler, progressCounter, mockSqliteDatabase};
};
TEST_F(SymbolIndexerTaskQueue, AddTasks)
@@ -208,4 +210,35 @@ TEST_F(SymbolIndexerTaskQueue, ProcessTasksRemovesProcessedTasks)
ASSERT_THAT(queue.tasks(), SizeIs(1));
}
TEST_F(SymbolIndexerTaskQueue,
ProcessTasksWritesBackTheDatabaseLogIfTheQueueIsEmptyAndTheIndexerHasNothingToDo)
{
InSequence s;
EXPECT_CALL(mockTaskScheduler, slotUsage()).WillRepeatedly(Return(SlotUsage{2, 0}));
EXPECT_CALL(mockSqliteDatabase, walCheckpointFull());
queue.processEntries();
}
TEST_F(SymbolIndexerTaskQueue, ProcessTasksDoesNotWritesBackTheDatabaseLogIfTheIndexerHasSomethingToDo)
{
InSequence s;
EXPECT_CALL(mockTaskScheduler, slotUsage()).WillRepeatedly(Return(SlotUsage{1, 1}));
EXPECT_CALL(mockSqliteDatabase, walCheckpointFull()).Times(0);
queue.processEntries();
}
TEST_F(SymbolIndexerTaskQueue, HandleExeptionInWalCheckPoint)
{
InSequence s;
EXPECT_CALL(mockTaskScheduler, slotUsage()).WillRepeatedly(Return(SlotUsage{2, 0}));
EXPECT_CALL(mockSqliteDatabase, walCheckpointFull()).WillOnce(Throw(Sqlite::DatabaseIsBusy{""}));
queue.processEntries();
}
} // namespace