#include #include "leveldb/db.h" #include "leveldb/options.h" #include "gtest/gtest.h" class LevelDBTest : public ::testing::Test { protected: leveldb::DB* db; leveldb::Options options; std::string db_path = "/tmp/testdb"; void SetUp() override { options.create_if_missing = true; leveldb::Status status = leveldb::DB::Open(options, db_path, &db); ASSERT_TRUE(status.ok()) << "Failed to open DB: " << status.ToString(); } void TearDown() override { delete db; } }; TEST_F(LevelDBTest, CompactionTest) { // 插入数据 db->Put(leveldb::WriteOptions(), "start", "value1"); db->Put(leveldb::WriteOptions(), "end", "value2"); db->Put(leveldb::WriteOptions(), "key_to_delete", "value3"); // 删除一个键,模拟删除标记 db->Delete(leveldb::WriteOptions(), "key_to_delete"); // 触发压缩 leveldb::Slice begin_key("start"); leveldb::Slice end_key("end"); db->CompactRange(&begin_key, &end_key); // 验证压缩后的数据 std::string value; leveldb::Status status = db->Get(leveldb::ReadOptions(), "key_to_delete", &value); if (!status.ok()) { std::cout << "'key_to_delete' was successfully removed during compaction." << std::endl; } else { FAIL() << "Unexpected: 'key_to_delete' still exists: " << value; } } int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }