diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index f65d8ca99d..c21cf721a9 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -35,10 +35,15 @@ jobs: - name: Test Noasm run: go test -tags=noasm ./... - - name: Test Race + - name: Test Race 1 CPU env: CGO_ENABLED: 1 - run: go test -cpu="1,4" -short -race -v ./... + run: go test -cpu=1 -short -race -v ./... + + - name: Test Race 4 CPU + env: + CGO_ENABLED: 1 + run: go test -cpu=4 -short -race -v ./... generate: strategy: @@ -163,7 +168,7 @@ jobs: run: go test -run=none -fuzz=FuzzNoBMI2Dec -fuzztime=500000x -test.fuzzminimizetime=10ms ./zstd/. - name: zstd/FuzzEncoding - run: go test -run=none -fuzz=FuzzEncoding -fuzztime=250000x -test.fuzzminimizetime=10ms ./zstd/. + run: cd zstd&&go test -run=none -fuzz=FuzzEncoding -fuzztime=250000x -test.fuzzminimizetime=10ms -fuzz-end=3&&cd .. - name: zstd/FuzzDecodeAll/noasm run: go test -tags=noasm -run=none -fuzz=FuzzDecodeAll -fuzztime=500000x -test.fuzzminimizetime=10ms ./zstd/. @@ -172,7 +177,10 @@ jobs: run: go test -tags=noasm -run=none -fuzz=FuzzDecoder -fuzztime=500000x -test.fuzzminimizetime=10ms ./zstd/. - name: zstd/FuzzEncoding/noasm - run: go test -tags=noasm -run=none -fuzz=FuzzEncoding -fuzztime=250000x -test.fuzzminimizetime=10ms ./zstd/. + run: cd zstd&&go test -tags=noasm -run=none -fuzz=FuzzEncoding -fuzztime=250000x -test.fuzzminimizetime=10ms -fuzz-end=3&&cd .. + + - name: zstd/FuzzEncodingBest + run: cd zstd&&go test -run=none -fuzz=FuzzEncoding -fuzztime=25000x -test.fuzzminimizetime=10ms -fuzz-start=4&&cd .. fuzz-other: env: diff --git a/zstd/fuzz_test.go b/zstd/fuzz_test.go index 20866da273..cbb43d8c0b 100644 --- a/zstd/fuzz_test.go +++ b/zstd/fuzz_test.go @@ -137,9 +137,6 @@ func FuzzEncoding(f *testing.F) { // Also tests with dictionaries... testDicts = true - - // Max input size: - maxSize = 1 << 20 ) var dec *Decoder @@ -154,7 +151,7 @@ func FuzzEncoding(f *testing.F) { initEnc := func() func() { var err error - dec, err = NewReader(nil, WithDecoderConcurrency(2), WithDecoderDicts(dicts...), WithDecoderMaxWindow(64<<10), WithDecoderMaxMemory(maxSize)) + dec, err = NewReader(nil, WithDecoderConcurrency(2), WithDecoderDicts(dicts...), WithDecoderMaxWindow(64<<10), WithDecoderMaxMemory(uint64(*fuzzMaxF))) if err != nil { panic(err) } @@ -193,7 +190,7 @@ func FuzzEncoding(f *testing.F) { t.Fatalf("%v:\n%v", r, string(stack)) } }() - if len(data) > maxSize { + if len(data) > *fuzzMaxF { return } var bufSize = len(data) @@ -205,7 +202,7 @@ func FuzzEncoding(f *testing.F) { } } - for level := startFuzz; level <= endFuzz; level++ { + for level := *fuzzStartF; level <= *fuzzEndF; level++ { enc := encs[level] dst.Reset() enc.Reset(&dst) diff --git a/zstd/zstd_test.go b/zstd/zstd_test.go index fd1d3168e5..82cb534643 100644 --- a/zstd/zstd_test.go +++ b/zstd/zstd_test.go @@ -4,6 +4,7 @@ package zstd import ( + "flag" "fmt" "os" "runtime" @@ -14,7 +15,13 @@ import ( var isRaceTest bool +// Fuzzing tweaks: +var fuzzStartF = flag.Int("fuzz-start", int(SpeedFastest), "Start fuzzing at this level") +var fuzzEndF = flag.Int("fuzz-end", int(SpeedBestCompression), "End fuzzing at this level (inclusive)") +var fuzzMaxF = flag.Int("fuzz-max", 1<<20, "Maximum input size") + func TestMain(m *testing.M) { + flag.Parse() ec := m.Run() if ec == 0 && runtime.NumGoroutine() > 2 { n := 0