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

     1  # NOTE: this test is skipped on Windows, since there's no concept of signals.
     2  # When a process terminates another process, it provides an exit code.
     3  [GOOS:windows] skip
     4  [!fuzz] skip
     5  [short] skip
     6  env GOCACHE=$WORK/cache
     7  
     8  # FuzzNonCrash sends itself a signal that does not appear to be a crash.
     9  # We should not save a crasher.
    10  ! go test -fuzz=FuzzNonCrash
    11  ! exists testdata
    12  ! stdout unreachable
    13  ! stderr unreachable
    14  stdout 'fuzzing process terminated by unexpected signal; no crash will be recorded: signal: terminated'
    15  
    16  # FuzzKill sends itself a signal that cannot be caught by the worker process
    17  # and does not appear to be a crash.
    18  # We should not save a crasher.
    19  ! go test -fuzz=FuzzKill
    20  ! exists testdata
    21  ! stdout unreachable
    22  ! stderr unreachable
    23  stdout 'fuzzing process terminated by unexpected signal; no crash will be recorded: signal: killed'
    24  
    25  # FuzzCrash sends itself a signal that looks like a crash.
    26  # We should save a crasher.
    27  ! go test -fuzz=FuzzCrash
    28  exists testdata/fuzz/FuzzCrash
    29  stdout '^\s+fuzzing process hung or terminated unexpectedly: exit status'
    30  
    31  -- go.mod --
    32  module test
    33  
    34  go 1.17
    35  -- fuzz_posix_test.go --
    36  // +build darwin freebsd linux
    37  
    38  package fuzz
    39  
    40  import (
    41  	"syscall"
    42  	"testing"
    43  )
    44  
    45  func FuzzNonCrash(f *testing.F) {
    46  	f.Fuzz(func(*testing.T, bool) {
    47  		pid := syscall.Getpid()
    48  		if err := syscall.Kill(pid, syscall.SIGTERM); err != nil {
    49  			panic(err)
    50  		}
    51  		// signal may not be received immediately. Wait for it.
    52  		select{}
    53  	})
    54  }
    55  
    56  func FuzzKill(f *testing.F) {
    57  	f.Fuzz(func(*testing.T, bool) {
    58  		pid := syscall.Getpid()
    59  		if err := syscall.Kill(pid, syscall.SIGKILL); err != nil {
    60  			panic(err)
    61  		}
    62  		// signal may not be received immediately. Wait for it.
    63  		select{}
    64  	})
    65  }
    66  
    67  func FuzzCrash(f *testing.F) {
    68  	f.Fuzz(func(*testing.T, bool) {
    69  		pid := syscall.Getpid()
    70  		if err := syscall.Kill(pid, syscall.SIGILL); err != nil {
    71  			panic(err)
    72  		}
    73  		// signal may not be received immediately. Wait for it.
    74  		select{}
    75  	})
    76  }
    77  

View as plain text