]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.fuzz] testing: allow -fuzzminimizetime to be 0
authorKatie Hockman <katie@golang.org>
Fri, 10 Sep 2021 17:16:32 +0000 (13:16 -0400)
committerKatie Hockman <katie@golang.org>
Fri, 10 Sep 2021 17:46:52 +0000 (17:46 +0000)
Fixes golang/go#48321

Change-Id: I1547379eb7a703f7f3c4594d27833eb3587796a0
Reviewed-on: https://go-review.googlesource.com/c/go/+/349089
Trust: Katie Hockman <katie@golang.org>
Run-TryBot: Katie Hockman <katie@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/testdata/script/test_fuzz_minimize.txt
src/testing/benchmark.go
src/testing/fuzz.go

index 002aca009b1125010bd2bc6896b1cb664e0ed5bc..ea1ee764741154aaaf1d64c2d5b7fd8e42fb4a4d 100644 (file)
@@ -6,6 +6,32 @@
 # We clean the fuzz cache during this test. Don't clean the user's cache.
 env GOCACHE=$WORK/gocache
 
+# Test that fuzzminimizetime can be zero seconds
+! go test -fuzz=FuzzMinimizerRecoverable -run=FuzzMinimizerRecoverable -fuzztime=10000x -fuzzminimizetime=0s minimizer_test.go
+! stdout '^ok'
+stdout 'contains a non-zero byte'
+stdout FAIL
+
+# Test that fuzzminimizetime can be zero times
+! go test -fuzz=FuzzMinimizerRecoverable -run=FuzzMinimizerRecoverable -fuzztime=10000x -fuzzminimizetime=0x minimizer_test.go
+! stdout '^ok'
+stdout 'contains a non-zero byte'
+stdout FAIL
+
+# Test that fuzzminimizetime cannot be negative seconds
+! go test -fuzz=FuzzMinimizerRecoverable -run=FuzzMinimizerRecoverable -fuzztime=10000x -fuzzminimizetime=-1ms minimizer_test.go
+! stdout '^ok'
+! stdout 'contains a non-zero byte'
+stdout 'invalid duration'
+stdout FAIL
+
+# Test that fuzzminimizetime cannot be negative times
+! go test -fuzz=FuzzMinimizerRecoverable -run=FuzzMinimizerRecoverable -fuzztime=10000x -fuzzminimizetime=-1x minimizer_test.go
+! stdout '^ok'
+! stdout 'contains a non-zero byte'
+stdout 'invalid count'
+stdout FAIL
+
 # Test that minimization is working for recoverable errors.
 ! go test -fuzz=FuzzMinimizerRecoverable -run=FuzzMinimizerRecoverable -fuzztime=10000x minimizer_test.go
 ! stdout '^ok'
index c8571a5f5a77427bf4343b092d4f37b36dd2e137..30fa106dd47dd0a87afee89054b6b25e2db4a89d 100644 (file)
@@ -36,8 +36,9 @@ var (
 )
 
 type durationOrCountFlag struct {
-       d time.Duration
-       n int
+       d         time.Duration
+       n         int
+       allowZero bool
 }
 
 func (f *durationOrCountFlag) String() string {
@@ -50,14 +51,14 @@ func (f *durationOrCountFlag) String() string {
 func (f *durationOrCountFlag) Set(s string) error {
        if strings.HasSuffix(s, "x") {
                n, err := strconv.ParseInt(s[:len(s)-1], 10, 0)
-               if err != nil || n <= 0 {
+               if err != nil || n < 0 || (!f.allowZero && n == 0) {
                        return fmt.Errorf("invalid count")
                }
                *f = durationOrCountFlag{n: int(n)}
                return nil
        }
        d, err := time.ParseDuration(s)
-       if err != nil || d <= 0 {
+       if err != nil || d < 0 || (!f.allowZero && d == 0) {
                return fmt.Errorf("invalid duration")
        }
        *f = durationOrCountFlag{d: d}
index 975aa87eab46a7ab60d06e9851db780549155e39..d94ec35dc744a9c7f70102f43487a27325d2b15f 100644 (file)
@@ -28,7 +28,7 @@ func initFuzzFlags() {
 var (
        matchFuzz        *string
        fuzzDuration     durationOrCountFlag
-       minimizeDuration = durationOrCountFlag{d: 60 * time.Second}
+       minimizeDuration = durationOrCountFlag{d: 60 * time.Second, allowZero: true}
        fuzzCacheDir     *string
        isFuzzWorker     *bool