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