before merge to main

This commit is contained in:
2026-03-04 16:29:24 +06:00
parent 0481cde1c3
commit 491ccbea89
21 changed files with 6776 additions and 47 deletions

View File

@@ -0,0 +1,95 @@
// Тест: ошибка при записи, превышающей allocSize-1.
// Запуск: go run ./examples/test-alloc-overflow/main.go
// Файлы остаются в ./data/test-alloc-overflow/
package main
import (
"fmt"
"log"
"os"
"strings"
"time"
"linedb/pkg/linedb"
)
func main() {
dataDir := "./data/test-alloc-overflow"
os.MkdirAll(dataDir, 0755)
initOptions := &linedb.LineDbInitOptions{
CacheSize: 100,
CacheTTL: time.Minute,
DBFolder: dataDir,
Collections: []linedb.JSONLFileOptions{
{CollectionName: "tiny", AllocSize: 64},
},
}
db := linedb.NewLineDb(nil)
if err := db.Init(false, initOptions); err != nil {
log.Fatalf("Init failed: %v", err)
}
defer db.Close()
opts := linedb.LineDbAdapterOptions{}
// Короткая запись — должна пройти
fmt.Println("1. Insert короткой записи...")
if err := db.Insert(map[string]any{"x": "short"}, "tiny", opts); err != nil {
log.Fatalf("Insert short failed: %v", err)
}
fmt.Println(" OK")
// Длинная — ожидаем ошибку
fmt.Println("2. Insert длинной записи (ожидаем ошибку)...")
longStr := strings.Repeat("a", 80)
err := db.Insert(map[string]any{"x": longStr}, "tiny", opts)
if err == nil {
log.Fatal("Ожидалась ошибка, но Insert прошёл")
}
fmt.Printf(" Ошибка (ожидаемо): %v\n", err)
if !strings.Contains(err.Error(), "exceeds") {
log.Fatalf("Ожидалось 'exceeds' в ошибке, получено: %v", err)
}
fmt.Println(" OK — ошибка корректная")
// Итог
all, _ := db.Read("tiny", opts)
fmt.Printf("\nЗаписей в коллекции после insert-теста: %d\n", len(all))
//короткий update
fmt.Println("\n3. Update с коротким значением...")
_, err = db.Update(
map[string]any{"x": "short"},
"tiny",
map[string]any{"x": "short"},
opts,
)
if err != nil {
log.Fatalf("Update short failed: %v", err)
}
fmt.Println(" OK")
// Длинный update — ожидаем ошибку при переписывании файла
fmt.Println("\n4. Update с длинным значением (ожидаем ошибку)...")
longUpdate := strings.Repeat("b", 80)
_, err = db.Update(
map[string]any{"x": longUpdate},
"tiny",
map[string]any{"x": "short"},
opts,
)
if err == nil {
log.Fatal("Ожидалась ошибка, но Update прошёл")
}
fmt.Printf(" Ошибка (ожидаемо): %v\n", err)
if !strings.Contains(err.Error(), "exceeds") {
log.Fatalf("Ожидалось 'exceeds' в ошибке, получено: %v", err)
}
fmt.Println(" OK — ошибка при update корректная")
all, _ = db.Read("tiny", opts)
fmt.Printf("\nЗаписей в коллекции после update-теста: %d\n", len(all))
fmt.Printf("Файл сохранён: %s/tiny.jsonl\n", dataDir)
}