62 lines
2.1 KiB
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)
|
|
}
|
|
}
|