56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
package openai
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"os"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("processImageFile", func() {
|
|
var tmpDir string
|
|
|
|
BeforeEach(func() {
|
|
var err error
|
|
tmpDir, err = os.MkdirTemp("", "processimage")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
})
|
|
|
|
AfterEach(func() {
|
|
os.RemoveAll(tmpDir)
|
|
})
|
|
|
|
It("should decode base64 and write all bytes to disk", func() {
|
|
// 4x4 red pixel PNG (68 bytes raw) — small enough to fit in bufio's
|
|
// default 4096-byte buffer, which is exactly the scenario where a
|
|
// missing Flush() produces a 0-byte file.
|
|
pngBytes := []byte{
|
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, // PNG signature
|
|
0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, // IHDR chunk
|
|
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04,
|
|
0x08, 0x02, 0x00, 0x00, 0x00, 0x26, 0x93, 0x09,
|
|
0x29, 0x00, 0x00, 0x00, 0x1c, 0x49, 0x44, 0x41, // IDAT chunk
|
|
0x54, 0x78, 0x9c, 0x62, 0xf8, 0xcf, 0xc0, 0xc0,
|
|
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
|
|
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00,
|
|
0x00, 0x31, 0x00, 0x01, 0x2e, 0xa8, 0xd1, 0xe5,
|
|
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, // IEND chunk
|
|
0xae, 0x42, 0x60, 0x82,
|
|
}
|
|
b64 := base64.StdEncoding.EncodeToString(pngBytes)
|
|
|
|
outPath := processImageFile(b64, tmpDir)
|
|
Expect(outPath).ToNot(BeEmpty(), "processImageFile should return a file path")
|
|
|
|
written, err := os.ReadFile(outPath)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(written).To(Equal(pngBytes), "file on disk must match the original bytes")
|
|
})
|
|
|
|
It("should return empty string for invalid base64", func() {
|
|
outPath := processImageFile("not-valid-base64!!!", tmpDir)
|
|
Expect(outPath).To(BeEmpty(), "should return empty string for invalid base64")
|
|
})
|
|
})
|