Files
narratio/internal/fileops/read_bounded_test.go

62 lines
2.1 KiB
Go

package fileops
import (
"math"
"os"
"path/filepath"
"strings"
"testing"
)
func TestReadFileBoundedEnforcesLimitWithoutPartialContent(t *testing.T) {
root := t.TempDir()
path := filepath.Join(root, "value.txt")
if err := os.WriteFile(path, []byte("12345"), 0o644); err != nil {
t.Fatalf("WriteFile() error = %v", err)
}
data, err := ReadFileBounded(path, 5)
if err != nil {
t.Fatalf("ReadFileBounded(exact limit) error = %v", err)
}
if string(data) != "12345" {
t.Fatalf("ReadFileBounded(exact limit) = %q, want complete content", data)
}
data, err = ReadFileBounded(path, 4)
if err == nil || !strings.Contains(err.Error(), "4-byte limit") {
t.Fatalf("ReadFileBounded(limit plus one) data = %q error = %v, want limit error", data, err)
}
if data != nil {
t.Fatalf("ReadFileBounded(limit plus one) returned partial data %q", data)
}
}
func TestReadFileBoundedHandlesBoundaryLimits(t *testing.T) {
root := t.TempDir()
emptyPath := filepath.Join(root, "empty.txt")
valuePath := filepath.Join(root, "value.txt")
if err := os.WriteFile(emptyPath, nil, 0o644); err != nil {
t.Fatalf("WriteFile(empty) error = %v", err)
}
if err := os.WriteFile(valuePath, []byte("value"), 0o644); err != nil {
t.Fatalf("WriteFile(value) error = %v", err)
}
if data, err := ReadFileBounded(emptyPath, 0); err != nil || len(data) != 0 {
t.Fatalf("ReadFileBounded(empty, zero) data = %q error = %v", data, err)
}
if data, err := ReadFileBounded(valuePath, 0); err == nil || data != nil {
t.Fatalf("ReadFileBounded(value, zero) data = %q error = %v, want limit error", data, err)
}
if data, err := ReadFileBounded(valuePath, math.MaxInt64); err != nil || string(data) != "value" {
t.Fatalf("ReadFileBounded(max limit) data = %q error = %v", data, err)
}
if _, err := ReadFileBounded(valuePath, -1); err == nil || !strings.Contains(err.Error(), "invalid") {
t.Fatalf("ReadFileBounded(negative limit) error = %v, want invalid limit", err)
}
if _, err := ReadFileBounded(" ", 1); err == nil || !strings.Contains(err.Error(), "path is required") {
t.Fatalf("ReadFileBounded(empty path) error = %v, want required path", err)
}
}