diff --git a/services/backup/src/DatabaseManager.h b/services/backup/src/DatabaseManager.h --- a/services/backup/src/DatabaseManager.h +++ b/services/backup/src/DatabaseManager.h @@ -28,6 +28,8 @@ void removeBackupItem(std::shared_ptr item); void putLogItem(const LogItem &item); + std::shared_ptr + findLogItem(const std::string &backupID, const std::string &logID); std::vector> findLogItemsForBackup(const std::string &backupID); void removeLogItem(std::shared_ptr item); diff --git a/services/backup/src/DatabaseManager.cpp b/services/backup/src/DatabaseManager.cpp --- a/services/backup/src/DatabaseManager.cpp +++ b/services/backup/src/DatabaseManager.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -57,7 +58,7 @@ BackupItem::FIELD_BACKUP_ID, Aws::DynamoDB::Model::AttributeValue(backupID)); - return std::move(this->innerFindItem(request)); + return this->innerFindItem(request); } std::shared_ptr @@ -121,6 +122,18 @@ this->innerPutItem(std::make_shared(item), request); } +std::shared_ptr DatabaseManager::findLogItem( + const std::string &backupID, + const std::string &logID) { + Aws::DynamoDB::Model::GetItemRequest request; + request.AddKey( + LogItem::FIELD_BACKUP_ID, Aws::DynamoDB::Model::AttributeValue(backupID)); + request.AddKey( + LogItem::FIELD_LOG_ID, Aws::DynamoDB::Model::AttributeValue(logID)); + + return this->innerFindItem(request); +} + std::vector> DatabaseManager::findLogItemsForBackup(const std::string &backupID) { std::vector> result; diff --git a/services/backup/test/DatabaseManagerTest.cpp b/services/backup/test/DatabaseManagerTest.cpp --- a/services/backup/test/DatabaseManagerTest.cpp +++ b/services/backup/test/DatabaseManagerTest.cpp @@ -69,13 +69,35 @@ std::vector logIDs1 = {"log001", "log002", "log003"}; for (const std::string &logID : logIDs1) { - DatabaseManager::getInstance().putLogItem( - generateLogItem(backupID1, logID)); + LogItem generatedItem = generateLogItem(backupID1, logID); + DatabaseManager::getInstance().putLogItem(generatedItem); + std::shared_ptr foundItem = + DatabaseManager::getInstance().findLogItem(backupID1, logID); + EXPECT_NE(foundItem, nullptr); + EXPECT_EQ(foundItem->getBackupID(), generatedItem.getBackupID()); + EXPECT_EQ(foundItem->getLogID(), generatedItem.getLogID()); + EXPECT_EQ( + foundItem->getPersistedInBlob(), generatedItem.getPersistedInBlob()); + EXPECT_EQ(foundItem->getValue(), generatedItem.getValue()); + EXPECT_EQ( + foundItem->getAttachmentHolders(), + generatedItem.getAttachmentHolders()); } std::vector logIDs2 = {"log021", "log022"}; for (const std::string &logID : logIDs2) { - DatabaseManager::getInstance().putLogItem( - generateLogItem(backupID2, logID)); + LogItem generatedItem = generateLogItem(backupID2, logID); + DatabaseManager::getInstance().putLogItem(generatedItem); + std::shared_ptr foundItem = + DatabaseManager::getInstance().findLogItem(backupID2, logID); + EXPECT_NE(foundItem, nullptr); + EXPECT_EQ(foundItem->getBackupID(), generatedItem.getBackupID()); + EXPECT_EQ(foundItem->getLogID(), generatedItem.getLogID()); + EXPECT_EQ( + foundItem->getPersistedInBlob(), generatedItem.getPersistedInBlob()); + EXPECT_EQ(foundItem->getValue(), generatedItem.getValue()); + EXPECT_EQ( + foundItem->getAttachmentHolders(), + generatedItem.getAttachmentHolders()); } std::vector> items1 = @@ -90,6 +112,9 @@ for (size_t i = 0; i < items1.size(); ++i) { EXPECT_EQ(logIDs1.at(i), items1.at(i)->getLogID()); DatabaseManager::getInstance().removeLogItem(items1.at(i)); + EXPECT_EQ( + DatabaseManager::getInstance().findLogItem(backupID1, logIDs1.at(i)), + nullptr); } EXPECT_EQ( DatabaseManager::getInstance().findLogItemsForBackup(backupID1).size(), @@ -98,6 +123,9 @@ for (size_t i = 0; i < items2.size(); ++i) { EXPECT_EQ(logIDs2.at(i), items2.at(i)->getLogID()); DatabaseManager::getInstance().removeLogItem(items2.at(i)); + EXPECT_EQ( + DatabaseManager::getInstance().findLogItem(backupID2, logIDs2.at(i)), + nullptr); } EXPECT_EQ( DatabaseManager::getInstance().findLogItemsForBackup(backupID2).size(),