MCPcopy
hub / github.com/klauspost/compress / TestZstdRandomJitter

Function TestZstdRandomJitter

gzhttp/compress_test.go:2206–2307  ·  view source on GitHub ↗

TestZstdRandomJitter tests that RandomJitter works with zstd using skippable frames.

(t *testing.T)

Source from the content-addressed store, hash-verified

2204
2205// TestZstdRandomJitter tests that RandomJitter works with zstd using skippable frames.
2206func TestZstdRandomJitter(t *testing.T) {
2207 r := httptest.NewRequest("GET", "/", nil)
2208 r.Header.Set("Accept-Encoding", "zstd")
2209
2210 // 4KB input, incompressible to avoid compression variations.
2211 rng := rand.New(rand.NewSource(0))
2212 payload := make([]byte, 4096)
2213 _, err := io.ReadFull(rng, payload)
2214 if err != nil {
2215 t.Fatal(err)
2216 }
2217
2218 // Disable gzip so we're only testing zstd
2219 wrapper, err := NewWrapper(RandomJitter(256, 1024, false), MinSize(10), EnableGzip(false))
2220 if err != nil {
2221 t.Fatal(err)
2222 }
2223 writePayload := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
2224 w.Write(payload)
2225 })
2226
2227 // Get reference without jitter
2228 refWrapper, _ := NewWrapper(MinSize(10), EnableGzip(false))
2229 refHandler := refWrapper(writePayload)
2230 w := httptest.NewRecorder()
2231 refHandler.ServeHTTP(w, r)
2232 result := w.Result()
2233 refBody, err := io.ReadAll(result.Body)
2234 if err != nil {
2235 t.Fatal(err)
2236 }
2237 t.Logf("Reference length: %d", len(refBody))
2238
2239 // Get output with jitter
2240 handler := wrapper(writePayload)
2241 w = httptest.NewRecorder()
2242 handler.ServeHTTP(w, r)
2243
2244 result = w.Result()
2245 b, err := io.ReadAll(result.Body)
2246 if err != nil {
2247 t.Fatal(err)
2248 }
2249
2250 if len(refBody) >= len(b) {
2251 t.Fatal("padding was not applied")
2252 }
2253 t.Logf("With jitter length: %d (padding: %d)", len(b), len(b)-len(refBody))
2254
2255 // Verify the output can still be decompressed
2256 dec, err := zstd.NewReader(bytes.NewReader(b))
2257 if err != nil {
2258 t.Fatal(err)
2259 }
2260 decoded, err := io.ReadAll(dec)
2261 dec.Close()
2262 if err != nil {
2263 t.Fatal(err)

Callers

nothing calls this directly

Calls 9

CloseMethod · 0.95
NewReaderFunction · 0.92
NewWrapperFunction · 0.85
RandomJitterFunction · 0.85
MinSizeFunction · 0.85
EnableGzipFunction · 0.85
FatalMethod · 0.80
WriteMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…