mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-06-04 13:28:03 +02:00
110 lines
2.8 KiB
Go
110 lines
2.8 KiB
Go
package vision
|
|
|
|
import (
|
|
"image"
|
|
"image/color"
|
|
"image/png"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/disintegration/imaging"
|
|
)
|
|
|
|
func TestPreprocessImageFile_scalesAndLimitsPayload(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "big.png")
|
|
img := imaging.New(3000, 2000, color.White)
|
|
if err := imaging.Save(img, path); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
out, meta, err := PreprocessImageFile(path, PreprocessOptions{
|
|
MaxImageBytes: 10 * 1024 * 1024,
|
|
MaxDimension: 1024,
|
|
JPEGQuality: 85,
|
|
MaxPayloadBytes: 600 * 1024,
|
|
SkipPreprocessBelowBytes: 0,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(out.Bytes) == 0 {
|
|
t.Fatal("empty output")
|
|
}
|
|
if meta.PreprocessMode != "jpeg" {
|
|
t.Fatalf("mode: %s", meta.PreprocessMode)
|
|
}
|
|
if meta.OutputWidth > 1024 || meta.OutputHeight > 1024 {
|
|
t.Fatalf("expected fit within 1024, got %dx%d", meta.OutputWidth, meta.OutputHeight)
|
|
}
|
|
if int64(len(out.Bytes)) > 600*1024 {
|
|
t.Fatalf("payload %d exceeds max", len(out.Bytes))
|
|
}
|
|
}
|
|
|
|
func TestPreprocessImageFile_passthroughSmallPNG(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "small.png")
|
|
if err := imaging.Save(imaging.New(400, 300, color.White), path); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
out, meta, err := PreprocessImageFile(path, PreprocessOptions{
|
|
MaxImageBytes: 5 * 1024 * 1024,
|
|
MaxDimension: 2048,
|
|
MaxPayloadBytes: 512 * 1024,
|
|
SkipPreprocessBelowBytes: 2 * 1024 * 1024,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if meta.PreprocessMode != "passthrough" {
|
|
t.Fatalf("expected passthrough, got %s", meta.PreprocessMode)
|
|
}
|
|
if out.MIMEType != "image/png" {
|
|
t.Fatalf("mime: %s", out.MIMEType)
|
|
}
|
|
if meta.OutputWidth != 400 || meta.OutputHeight != 300 {
|
|
t.Fatalf("dims: %dx%d", meta.OutputWidth, meta.OutputHeight)
|
|
}
|
|
}
|
|
|
|
func TestPreprocessImageFile_passthroughDisabled(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "small.png")
|
|
if err := imaging.Save(imaging.New(100, 100, color.White), path); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
_, meta, err := PreprocessImageFile(path, PreprocessOptions{
|
|
MaxDimension: 2048,
|
|
MaxPayloadBytes: 512 * 1024,
|
|
SkipPreprocessBelowBytes: 0,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if meta.PreprocessMode != "jpeg" {
|
|
t.Fatalf("expected jpeg compress, got %s", meta.PreprocessMode)
|
|
}
|
|
}
|
|
|
|
func TestPreprocessImageFile_rejectsOversizeFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "tiny.png")
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := png.Encode(f, image.NewRGBA(image.Rect(0, 0, 2, 2))); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
|
|
_, _, err = PreprocessImageFile(path, PreprocessOptions{MaxImageBytes: 1})
|
|
if err == nil {
|
|
t.Fatal("expected error when file exceeds max_image_bytes")
|
|
}
|
|
}
|