diff --git a/services/tunnelbroker/test/DatabaseManagerTest.cpp b/services/tunnelbroker/test/DatabaseManagerTest.cpp --- a/services/tunnelbroker/test/DatabaseManagerTest.cpp +++ b/services/tunnelbroker/test/DatabaseManagerTest.cpp @@ -332,3 +332,57 @@ database::DatabaseManager::getInstance().removeMessageItem( item.getMessageID()); } + +TEST_F(DatabaseManagerTest, RemoveMessageItemsInBatch) { + const size_t randomStringSize = 256; + const std::string receiverID = + "mobile:EMQNoQ7b2ueEmQ4QsevRWlXxFCNt055y20T1PHdoYAQRt0S6TLzZWNM6XSvdWqxm"; + const database::MessageItem messageFirstToRemove( + tools::generateUUID(), + "mobile:" + tools::generateRandomString(DEVICEID_CHAR_LENGTH), + receiverID, + tools::generateRandomString(randomStringSize), + tools::generateRandomString(randomStringSize)); + const database::MessageItem messageSecondToRemove( + tools::generateUUID(), + "web:" + tools::generateRandomString(DEVICEID_CHAR_LENGTH), + receiverID, + tools::generateRandomString(randomStringSize), + tools::generateRandomString(randomStringSize)); + const database::MessageItem messageThirdToNotRemove( + tools::generateUUID(), + "web:" + tools::generateRandomString(DEVICEID_CHAR_LENGTH), + receiverID, + tools::generateRandomString(randomStringSize), + tools::generateRandomString(randomStringSize)); + + EXPECT_EQ( + database::DatabaseManager::getInstance().isTableAvailable( + messageFirstToRemove.getTableName()), + true); + database::DatabaseManager::getInstance().putMessageItem(messageFirstToRemove); + database::DatabaseManager::getInstance().putMessageItem( + messageSecondToRemove); + database::DatabaseManager::getInstance().putMessageItem( + messageThirdToNotRemove); + std::vector> foundItems = + database::DatabaseManager::getInstance().findMessageItemsByReceiver( + receiverID); + EXPECT_EQ(foundItems.size(), 3) + << "Items count found by receiverID after insert is not equal to 3"; + std::vector messageIDs = { + messageFirstToRemove.getMessageID(), + messageSecondToRemove.getMessageID()}; + database::DatabaseManager::getInstance().removeMessageItemsByIDsForDeviceID( + messageIDs, receiverID); + foundItems = + database::DatabaseManager::getInstance().findMessageItemsByReceiver( + receiverID); + // `messageThirdToNotRemove` must not be removed and must be persisted + EXPECT_EQ(foundItems.size(), 1) + << "Items found by receiverID is not equal to 1 after calling " + "`removeMessageItemsByIDsForDeviceID`. The one message must be " + "persisted."; + database::DatabaseManager::getInstance().removeMessageItem( + messageThirdToNotRemove.getMessageID()); +}