/
smychkov
/
SStorage
Обзор
Документация
Войти
/
smychkov
/
SStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_footer.cpp
102 строки
3 KB
Андрей Смычков
feat: SSTable block format + footer
25 апр 2026, 09:07
25 апр 2026, 09:07
8c1c738
Код
Авторство
О чём код?
//============================================================================ // Тесты для SSTable Footer //============================================================================ #include "../src/sstable/footer.hpp" #include <iostream> #include <string> using namespace sstorage; static int g_passed = 0; static int g_failed = 0; #define CHECK(cond) do { \ if (cond) { ++g_passed; } \ else { ++g_failed; std::cerr << "FAIL: " #cond " at line " << __LINE__ << "\n"; } \ } while (0) int main() { // 1. Roundtrip: сериализация и десериализация { Footer f; f.indexOffset = 1000; f.indexSize = 200; f.bloomOffset = 1200; f.bloomSize = 100; f.numRecords = 5000; std::string buf; f.serialize(buf); CHECK(buf.size() == kFooterSize); Footer f2; CHECK(f2.deserialize(buf.data(), buf.size())); CHECK(f2.indexOffset == 1000); CHECK(f2.indexSize == 200); CHECK(f2.bloomOffset == 1200); CHECK(f2.bloomSize == 100); CHECK(f2.numRecords == 5000); CHECK(f2.version == kSSTableVersion); } // 2. Нулевые значения (пустой SSTable) { Footer f; std::string buf; f.serialize(buf); Footer f2; CHECK(f2.deserialize(buf.data(), buf.size())); CHECK(f2.numRecords == 0); } // 3. Обрезанный буфер { Footer f2; std::string truncated(kFooterSize - 1, 0); CHECK(!f2.deserialize(truncated.data(), truncated.size())); } // 4. Невалидный magic { Footer f; std::string buf; f.serialize(buf); // Портим magic buf[56] = 0; Footer f2; CHECK(!f2.deserialize(buf.data(), buf.size())); } // 5. Битый CRC { Footer f; f.indexOffset = 100; std::string buf; f.serialize(buf); // Портим поле, но оставляем тот же CRC buf[0] = ~buf[0]; Footer f2; CHECK(!f2.deserialize(buf.data(), buf.size())); } // 6. Максимальные значения uint64 { Footer f; f.indexOffset = 0xFFFFFFFFFFFFFFFFULL; f.numRecords = 0xDEADBEEFCAFEBABEULL; std::string buf; f.serialize(buf); Footer f2; CHECK(f2.deserialize(buf.data(), buf.size())); CHECK(f2.indexOffset == 0xFFFFFFFFFFFFFFFFULL); CHECK(f2.numRecords == 0xDEADBEEFCAFEBABEULL); } std::cout << "test_footer: passed=" << g_passed << " failed=" << g_failed << "\n"; return g_failed == 0 ? 0 : 1; }