before merge to main
This commit is contained in:
95
examples/test-alloc-overflow/main.go
Normal file
95
examples/test-alloc-overflow/main.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user