1
0
Fork 0
forked from dlang/cdcdb
cdcdb/test/app.d

84 lines
2.8 KiB
D
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import cdcdb;
import std.stdio : writeln, File;
import std.file : exists, remove, read;
import zstd : Level;
import core.thread : Thread, msecs, dur;
void main()
{
// Создаем временную базу для примера
string dbPath = "./bin/example.db";
if (exists(dbPath)) { remove(dbPath); }
Context context;
context.uid = 1000;
context.ruid = 1001;
context.uidName = "user1";
context.ruidName = "user2";
context.process = "mcedit";
// Инициализация Storage с компрессией Zstd
auto storage = new Storage(dbPath, true, Level.speed);
// Настройка параметров CDC (опционально)
storage.setupCDC(256, 512, 1024, 0xFF, 0x0F);
// Тестовые данные
ubyte[] data1 = cast(ubyte[]) "Hello, cdcdb!".dup;
ubyte[] data2 = cast(ubyte[]) "Hello, updated cdcdb!".dup;
// Создание первого снимка
Snapshot snap1 = storage.newSnapshot("example_file", data1, context, "Версия 1.0");
if (snap1)
{
writeln("Создан снимок с ID: ", snap1.id);
writeln("Файл: ", snap1.file);
writeln("Размер: ", snap1.length, " байт");
writeln("Статус: ", snap1.status);
writeln("Время: ", snap1.created);
}
Thread.sleep( dur!("msecs")( 50 ) );
// Создание второго снимка (обновление)
auto snap2 = storage.newSnapshot("example_file", data2, context, "Версия 2.0");
if (snap2)
{
writeln("Создан обновленный снимок с ID: ", snap2.id);
}
// Получение всех снимков по метке
auto snapshots = storage.getSnapshots("example_file");
writeln("Найдено снимков: ", snapshots.length);
// Восстановление данных из последнего снимка (потоково, для экономии памяти)
if (snapshots.length > 0)
{
auto lastSnap = snapshots[$ - 1]; // Последний снимок
File outFile = File("./bin/restored.txt", "wb");
lastSnap.data((const(ubyte)[] chunk) { outFile.rawWrite(chunk); });
outFile.close();
writeln("Данные восстановлены в restored.txt");
// Проверка хэша (опционально)
import std.digest.sha : digest, SHA256;
auto restoredData = cast(ubyte[]) read("./bin/restored.txt");
assert(restoredData == data2);
writeln("Хэш совпадает: ", lastSnap.sha256 == digest!SHA256(restoredData));
}
// Удаление файла
if (storage.deleteFile("example_file"))
writeln("Файл example_file удален.");
// Проверка: снимки удалены
auto remaining = storage.getSnapshots("example_file");
assert(remaining.length == 0);
writeln("Все снимки удалены.");
writeln("Версия библиотеки: ", storage.getVersion());
}