Text file src/cmd/go/testdata/script/test_fuzz_parallel.txt

     1  [!fuzz] skip
     2  [short] skip
     3  env GOCACHE=$WORK/cache
     4  
     5  # When running seed inputs, T.Parallel should let multiple inputs run in
     6  # parallel.
     7  go test -run=FuzzSeed
     8  
     9  # When fuzzing, T.Parallel should be safe to call, but it should have no effect.
    10  # We just check that it doesn't hang, which would be the most obvious
    11  # failure mode.
    12  # TODO(jayconrod): check for the string "after T.Parallel". It's not printed
    13  # by 'go test', so we can't distinguish that crasher from some other panic.
    14  ! go test -run=FuzzMutate -fuzz=FuzzMutate
    15  exists testdata/fuzz/FuzzMutate
    16  
    17  # Testdata should now contain a corpus entry which will fail FuzzMutate.
    18  # Run the test without fuzzing, setting -parallel to different values to make
    19  # sure it fails, and doesn't hang.
    20  ! go test -run=FuzzMutate -parallel=1
    21  ! go test -run=FuzzMutate -parallel=2
    22  ! go test -run=FuzzMutate -parallel=4
    23  
    24  -- go.mod --
    25  module fuzz_parallel
    26  
    27  go 1.17
    28  -- fuzz_parallel_test.go --
    29  package fuzz_parallel
    30  
    31  import (
    32  	"sort"
    33  	"sync"
    34  	"testing"
    35  )
    36  
    37  func FuzzSeed(f *testing.F) {
    38  	for _, v := range [][]byte{{'a'}, {'b'}, {'c'}} {
    39  		f.Add(v)
    40  	}
    41  
    42  	var mu sync.Mutex
    43  	var before, after []byte
    44  	f.Cleanup(func() {
    45  		sort.Slice(after, func(i, j int) bool { return after[i] < after[j] })
    46  		got := string(before) + string(after)
    47  		want := "abcabc"
    48  		if got != want {
    49  			f.Fatalf("got %q; want %q", got, want)
    50  		}
    51  	})
    52  
    53  	f.Fuzz(func(t *testing.T, b []byte) {
    54  		before = append(before, b...)
    55  		t.Parallel()
    56  		mu.Lock()
    57  		after = append(after, b...)
    58  		mu.Unlock()
    59  	})
    60  }
    61  
    62  func FuzzMutate(f *testing.F) {
    63  	f.Fuzz(func(t *testing.T, _ []byte) {
    64  		t.Parallel()
    65  		t.Error("after T.Parallel")
    66  	})
    67  }
    68  

View as plain text