# NOTE: this test is skipped on Windows, since there's no concept of signals.
# When a process terminates another process, it provides an exit code.
[windows] skip
[!fuzz] skip
[short] skip

# FuzzNonCrash sends itself a signal that does not appear to be a crash.
# We should not save a crasher.
! go test -fuzz=FuzzNonCrash
! exists testdata
! stdout unreachable
! stderr unreachable
stdout 'fuzzing process terminated by unexpected signal; no crash will be recorded: signal: terminated'

# FuzzKill sends itself a signal that cannot be caught by the worker process
# and does not appear to be a crash.
# We should not save a crasher.
! go test -fuzz=FuzzKill
! exists testdata
! stdout unreachable
! stderr unreachable
stdout 'fuzzing process terminated by unexpected signal; no crash will be recorded: signal: killed'

# FuzzCrash sends itself a signal that looks like a crash.
# We should save a crasher.
! go test -fuzz=FuzzCrash
exists testdata/fuzz/FuzzCrash
stdout '^\s+fuzzing process hung or terminated unexpectedly: exit status'

-- go.mod --
module test

go 1.17
-- fuzz_posix_test.go --
// +build darwin freebsd linux

package fuzz

import (
	"syscall"
	"testing"
)

func FuzzNonCrash(f *testing.F) {
	f.Fuzz(func(*testing.T, bool) {
		pid := syscall.Getpid()
		if err := syscall.Kill(pid, syscall.SIGTERM); err != nil {
			panic(err)
		}
		// signal may not be received immediately. Wait for it.
		select{}
	})
}

func FuzzKill(f *testing.F) {
	f.Fuzz(func(*testing.T, bool) {
		pid := syscall.Getpid()
		if err := syscall.Kill(pid, syscall.SIGKILL); err != nil {
			panic(err)
		}
		// signal may not be received immediately. Wait for it.
		select{}
	})
}

func FuzzCrash(f *testing.F) {
	f.Fuzz(func(*testing.T, bool) {
		pid := syscall.Getpid()
		if err := syscall.Kill(pid, syscall.SIGILL); err != nil {
			panic(err)
		}
		// signal may not be received immediately. Wait for it.
		select{}
	})
}
