Files
elowdb-go/examples/test-alloc-overflow/main.go
2026-03-04 16:29:24 +06:00

96 lines
2.9 KiB
Go
Raw 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.

// Тест: ошибка при записи, превышающей 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)
}