@@ -17,7 +17,9 @@ limitations under the License.
1717package controller
1818
1919import (
20+ "bytes"
2021 "context"
22+ "strings"
2123 "testing"
2224
2325 . "github.com/onsi/gomega"
@@ -126,3 +128,59 @@ func TestProviderDownloadWithOverrides(t *testing.T) {
126128 g .Expect (p .components .Images ()).To (HaveExactElements ([]string {"registry.k8s.io/cluster-api/cluster-api-controller:v1.4.3" }))
127129 g .Expect (p .components .Version ()).To (Equal ("v1.4.3" ))
128130}
131+
132+ func TestCompressDecompressRoundtrip (t * testing.T ) {
133+ g := NewWithT (t )
134+
135+ original := []byte ("apiVersion: v1\n kind: ConfigMap\n metadata:\n name: test\n " )
136+
137+ var buf bytes.Buffer
138+ err := compressData (& buf , original )
139+ g .Expect (err ).ToNot (HaveOccurred ())
140+ g .Expect (buf .Len ()).To (BeNumerically (">" , 0 ))
141+
142+ decompressed , err := decompressData (buf .Bytes ())
143+ g .Expect (err ).ToNot (HaveOccurred ())
144+ g .Expect (decompressed ).To (Equal (original ))
145+ }
146+
147+ func TestCompressDataEmptyInput (t * testing.T ) {
148+ g := NewWithT (t )
149+
150+ var buf bytes.Buffer
151+ err := compressData (& buf , []byte {})
152+ g .Expect (err ).ToNot (HaveOccurred ())
153+
154+ decompressed , err := decompressData (buf .Bytes ())
155+ g .Expect (err ).ToNot (HaveOccurred ())
156+ g .Expect (decompressed ).To (BeEmpty ())
157+ }
158+
159+ func TestDecompressDataInvalidInput (t * testing.T ) {
160+ g := NewWithT (t )
161+
162+ _ , err := decompressData ([]byte ("not gzip data" ))
163+ g .Expect (err ).To (HaveOccurred ())
164+ g .Expect (err .Error ()).To (ContainSubstring ("cannot open gzip reader" ))
165+ }
166+
167+ func TestCompressDecompressLargeData (t * testing.T ) {
168+ g := NewWithT (t )
169+
170+ // Create data larger than maxConfigMapSize to test needToCompress
171+ largeData := []byte (strings .Repeat ("x" , maxConfigMapSize + 1 ))
172+
173+ g .Expect (needToCompress (largeData )).To (BeTrue ())
174+ g .Expect (needToCompress ([]byte ("small" ))).To (BeFalse ())
175+
176+ var buf bytes.Buffer
177+ err := compressData (& buf , largeData )
178+ g .Expect (err ).ToNot (HaveOccurred ())
179+
180+ // Compressed size should be much smaller than original for repetitive data
181+ g .Expect (buf .Len ()).To (BeNumerically ("<" , len (largeData )))
182+
183+ decompressed , err := decompressData (buf .Bytes ())
184+ g .Expect (err ).ToNot (HaveOccurred ())
185+ g .Expect (decompressed ).To (Equal (largeData ))
186+ }
0 commit comments