/
smychkov
/
SStorage
Обзор
Документация
Войти
/
smychkov
/
SStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_storage.cpp
183 строки
4 KB
Андрей Смычков
refactor: архитектурные улучшения и безопасность
22 апр 2026, 13:19
22 апр 2026, 13:19
98cc8a4
Код
Авторство
О чём код?
#include <gtest/gtest.h> #include <cstdio> #include <sys/stat.h> #include "storage/storage_manager.hpp" #include "core/page.hpp" using namespace sstorage; TEST(StorageManagerTest, ConstructorCreatesDirectory) { remove("test_storage_dir/page_0.dat"); rmdir("test_storage_dir"); StorageManager sm("test_storage_dir"); struct stat st; bool dirExists = (stat("test_storage_dir", &st) == 0 && S_ISDIR(st.st_mode)); EXPECT_TRUE(dirExists); rmdir("test_storage_dir"); } TEST(StorageManagerTest, SetDataDirectory) { remove("test_dir1/page_0.dat"); rmdir("test_dir1"); remove("test_dir2/page_0.dat"); rmdir("test_dir2"); StorageManager sm("test_dir1"); sm.setDataDirectory("test_dir2"); EXPECT_EQ(sm.getDataDirectory(), "test_dir2"); rmdir("test_dir1"); rmdir("test_dir2"); } TEST(StorageManagerTest, SaveAndLoadPage) { remove("test_save_load/page_1000.dat"); rmdir("test_save_load"); StorageManager sm("test_save_load"); Page page(4096, 1000); page.addRow(Row(1000, "test data", Encoding::UTF_16)); std::string filename = sm.getPageFilename(page.getMaxTimestamp()); EXPECT_EQ(filename, "test_save_load/page_1000.dat"); bool saved = sm.savePage(page); EXPECT_TRUE(saved); bool exists = sm.fileExists(filename); EXPECT_TRUE(exists); Page loadedPage(4096, 1000); bool loaded = sm.loadPage(page.getMaxTimestamp(), loadedPage); EXPECT_TRUE(loaded); EXPECT_EQ(loadedPage.getRowCount(), 1); remove("test_save_load/page_1000.dat"); rmdir("test_save_load"); } TEST(StorageManagerTest, LoadNonExistentPage) { remove("test_nonexist/page_0.dat"); rmdir("test_nonexist"); StorageManager sm("test_nonexist"); Page page(4096, 0); bool loaded = sm.loadPage(999, page); EXPECT_FALSE(loaded); rmdir("test_nonexist"); } TEST(StorageManagerTest, GetAllPageIds) { remove("test_ids/page_0.dat"); remove("test_ids/page_1.dat"); remove("test_ids/page_2.dat"); rmdir("test_ids"); StorageManager sm("test_ids"); Page page0(4096, 0); Page page1(4096, 1); Page page2(4096, 2); page0.addRow(Row(100, "a", Encoding::UTF_16)); page1.addRow(Row(200, "b", Encoding::UTF_16)); page2.addRow(Row(300, "c", Encoding::UTF_16)); sm.savePage(page0); sm.savePage(page1); sm.savePage(page2); auto ids = sm.getAllPageIds(); EXPECT_GE(ids.size(), 3); rmdir("test_ids"); } TEST(StorageManagerTest, GetPageCount) { remove("test_count/page_100.dat"); rmdir("test_count"); StorageManager sm("test_count"); Page page(4096, 100); page.addRow(Row(100, "test", Encoding::UTF_16)); size_t countBefore = sm.getPageCount(); sm.savePage(page); size_t countAfter = sm.getPageCount(); EXPECT_GT(countAfter, countBefore); remove("test_count/page_100.dat"); rmdir("test_count"); } TEST(StorageManagerTest, PathTraversalProtection) { remove("test_safe/page_0.dat"); rmdir("test_safe"); StorageManager sm("test_safe"); sm.setDataDirectory("../etc"); EXPECT_EQ(sm.getDataDirectory(), "test_safe"); sm.setDataDirectory("/etc/passwd"); EXPECT_EQ(sm.getDataDirectory(), "test_safe"); sm.setDataDirectory("valid_dir"); EXPECT_EQ(sm.getDataDirectory(), "valid_dir"); rmdir("test_safe"); rmdir("valid_dir"); } TEST(StorageManagerTest, PageExists) { remove("test_exists/page_100.dat"); rmdir("test_exists"); StorageManager sm("test_exists"); EXPECT_FALSE(sm.pageExists(100)); Page page(4096, 100); page.addRow(Row(100, "test", Encoding::UTF_16)); sm.savePage(page); EXPECT_TRUE(sm.pageExists(100)); remove("test_exists/page_100.dat"); rmdir("test_exists"); } TEST(StorageManagerTest, MultiplePages) { remove("test_multi/page_0.dat"); remove("test_multi/page_1.dat"); remove("test_multi/page_2.dat"); rmdir("test_multi"); StorageManager sm("test_multi"); for (int i = 0; i < 3; ++i) { Page page(4096, i); page.addRow(Row(1000 + i, "data", Encoding::UTF_16)); EXPECT_TRUE(sm.savePage(page)); } EXPECT_GE(sm.getPageCount(), 3); rmdir("test_multi"); } TEST(StorageManagerTest, EmptyDirectory) { remove("test_empty/page_0.dat"); rmdir("test_empty"); StorageManager sm("test_empty"); auto ids = sm.getAllPageIds(); EXPECT_EQ(ids.size(), 0); size_t count = sm.getPageCount(); EXPECT_EQ(count, 0); rmdir("test_empty"); }