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