@@ -1,34 +1,35 @@
4 "encoding/base64"
5 "encoding/base64"
7 "github.com/stretchr/testify/require"
8 "github.com/stretchr/testify/require"
10−func TestEnsureBase64(t *testing.T) {
11+func TestEnsureRawBytes(t *testing.T) {
11 t.Parallel()
12 t.Parallel()
13 tests := []struct {
14 tests := []struct {
14 name string
15 name string
15 input []byte
16 input []byte
16− wantData []byte // expected output
17+ wantData []byte
19 name: "already base64 encoded",
20 name: "already base64 encoded",
20 input: []byte("SGVsbG8gV29ybGQh"), // "Hello World!" in base64
21 input: []byte("SGVsbG8gV29ybGQh"), // "Hello World!" in base64
21− wantData: []byte("SGVsbG8gV29ybGQh"),
22+ wantData: []byte("Hello World!"),
24 name: "raw binary data (PNG header)",
25 name: "raw binary data (PNG header)",
25 input: []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A},
26 input: []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A},
26− wantData: []byte(base64.StdEncoding.EncodeToString([]byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A})),
27+ wantData: []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A},
29 name: "raw binary with high bytes",
30 name: "raw binary with high bytes",
30 input: []byte{0xFF, 0xD8, 0xFF, 0xE0}, // JPEG header
31 input: []byte{0xFF, 0xD8, 0xFF, 0xE0}, // JPEG header
31− wantData: []byte(base64.StdEncoding.EncodeToString([]byte{0xFF, 0xD8, 0xFF, 0xE0})),
32+ wantData: []byte{0xFF, 0xD8, 0xFF, 0xE0},
34 name: "empty data",
35 name: "empty data",
@@ -38,88 +39,31 @@ func TestEnsureBase64(t *testing.T) {
39 name: "base64 with padding",
40 name: "base64 with padding",
40 input: []byte("YQ=="), // "a" in base64
41 input: []byte("YQ=="), // "a" in base64
41− wantData: []byte("YQ=="),
42+ wantData: []byte("a"),
44 name: "base64 without padding",
45 name: "base64 without padding",
45 input: []byte("YQ"),
46 input: []byte("YQ"),
46− wantData: []byte("YQ=="),
47+ wantData: []byte("a"),
49 name: "base64 with whitespace",
50 name: "base64 with whitespace",
50 input: []byte("U0dWc2JHOGdWMjl5YkdRaA==\n"),
51 input: []byte("U0dWc2JHOGdWMjl5YkdRaA==\n"),
51− wantData: []byte("U0dWc2JHOGdWMjl5YkdRaA=="),
52+ wantData: []byte("SGVsbG8gV29ybGQh"),
55 for _, tt := range tests {
56 for _, tt := range tests {
56 t.Run(tt.name, func(t *testing.T) {
57 t.Run(tt.name, func(t *testing.T) {
57 t.Parallel()
58 t.Parallel()
58− result := ensureBase64(tt.input)
59+ result := ensureRawBytes(tt.input)
59 require.Equal(t, tt.wantData, result)
60 require.Equal(t, tt.wantData, result)
61− // Verify the result is valid base64 that can be decoded.
62− if len(result) > 0 {
62+ if len(result) > 0 && !bytes.Equal(result, tt.input) {
63− _, err := base64.StdEncoding.DecodeString(string(result))
63+ reEncoded := base64.StdEncoding.EncodeToString(result)
65− _, err = base64.RawStdEncoding.DecodeString(string(result))
64+ _, err := base64.StdEncoding.DecodeString(reEncoded)
67− require.NoError(t, err, "result should be valid base64")
65+ require.NoError(t, err, "re-encoded result should be valid base64")
73−func TestIsValidBase64(t *testing.T) {
82− name: "valid base64",
83− input: []byte("SGVsbG8gV29ybGQh"),
87− name: "valid base64 with padding",
88− input: []byte("YQ=="),
92− name: "raw binary with high bytes",
93− input: []byte{0xFF, 0xD8, 0xFF},
102− name: "valid raw base64 without padding",
103− input: []byte("YQ"),
107− name: "valid base64 with whitespace",
108− input: normalizeBase64Input([]byte("U0dWc2JHOGdWMjl5YkdRaA==\n")),
112− name: "invalid base64 characters",
113− input: []byte("SGVsbG8!@#$"),
118− for _, tt := range tests {
119− t.Run(tt.name, func(t *testing.T) {
121− got := isValidBase64(tt.input)
122− require.Equal(t, tt.want, got)