From f597d92bab5f83013c790e9f4c1f78a3a28b60de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poyraz=20K=C3=BC=C3=A7=C3=BCkarslan?= <83272398+PoyrazK@users.noreply.github.com> Date: Fri, 17 Apr 2026 20:41:24 +0300 Subject: [PATCH] test(recovery_manager): add 3 new unit tests Add coverage tests for: - RecoverMultipleTimes: test recover() can be called multiple times safely - RecoverWithDifferentCatalogs: test recovery with different catalog instances - RecoverWithDifferentBufferPools: test recovery with different buffer pool instances Total: 4 tests (was 1). --- tests/recovery_manager_tests.cpp | 61 ++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/tests/recovery_manager_tests.cpp b/tests/recovery_manager_tests.cpp index 74da175a..4ff216f5 100644 --- a/tests/recovery_manager_tests.cpp +++ b/tests/recovery_manager_tests.cpp @@ -36,4 +36,65 @@ TEST(RecoveryManagerTests, Basic) { static_cast(std::remove(log_file.c_str())); } +TEST(RecoveryManagerTests, RecoverMultipleTimes) { + const std::string log_file = "recovery_repeat_test.log"; + static_cast(std::remove(log_file.c_str())); + + auto catalog = Catalog::create(); + storage::StorageManager disk_manager("./test_data"); + storage::BufferPoolManager bpm(TEST_BPM_SIZE, disk_manager); + LogManager lm(log_file); + + RecoveryManager rm(bpm, *catalog, lm); + + // recover() can be called multiple times safely + EXPECT_TRUE(rm.recover()); + EXPECT_TRUE(rm.recover()); + EXPECT_TRUE(rm.recover()); + + static_cast(std::remove(log_file.c_str())); +} + +TEST(RecoveryManagerTests, RecoverWithDifferentCatalogs) { + const std::string log_file = "recovery_catalog_test.log"; + static_cast(std::remove(log_file.c_str())); + + storage::StorageManager disk_manager("./test_data"); + storage::BufferPoolManager bpm(TEST_BPM_SIZE, disk_manager); + LogManager lm(log_file); + + // Create first catalog, run recovery + auto catalog1 = Catalog::create(); + RecoveryManager rm1(bpm, *catalog1, lm); + EXPECT_TRUE(rm1.recover()); + + // Create different catalog instance, run recovery again + auto catalog2 = Catalog::create(); + RecoveryManager rm2(bpm, *catalog2, lm); + EXPECT_TRUE(rm2.recover()); + + static_cast(std::remove(log_file.c_str())); +} + +TEST(RecoveryManagerTests, RecoverWithDifferentBufferPools) { + const std::string log_file = "recovery_bpm_test.log"; + static_cast(std::remove(log_file.c_str())); + + auto catalog = Catalog::create(); + storage::StorageManager disk_manager("./test_data"); + LogManager lm(log_file); + + // Use first buffer pool + storage::BufferPoolManager bpm1(TEST_BPM_SIZE, disk_manager); + RecoveryManager rm1(bpm1, *catalog, lm); + EXPECT_TRUE(rm1.recover()); + + // Use second buffer pool + storage::BufferPoolManager bpm2(TEST_BPM_SIZE, disk_manager); + RecoveryManager rm2(bpm2, *catalog, lm); + EXPECT_TRUE(rm2.recover()); + + static_cast(std::remove(log_file.c_str())); +} + } // namespace