# Test that minimization doesn't use dirty coverage snapshots when it # is unable to actually minimize the input. We do this by checking that # a expected value appears in the cache. If a dirty coverage map is used # (i.e. the coverage map generated during the last minimization step, # rather than the map provided with the initial input) then this value # is unlikely to appear in the cache, since the map generated during # the last minimization step should not increase the coverage. [short] skip [!fuzz-instrumented] skip env GOCACHE=$WORK/gocache go test -fuzz=FuzzCovMin -fuzztime=25s -test.fuzzcachedir=$GOCACHE/fuzz go run check_file/main.go $GOCACHE/fuzz/FuzzCovMin abcd -- go.mod -- module test -- covmin_test.go -- package covmin import "testing" func FuzzCovMin(f *testing.F) { f.Fuzz(func(t *testing.T, data []byte) { if len(data) >= 4 && data[0] == 'a' && data[1] == 'b' && data[2] == 'c' && data[3] == 'd' { return } }) } -- check_file/main.go -- package main import ( "bytes" "fmt" "os" "path/filepath" "regexp" "strconv" ) func checkFile(name, expected string) (bool, error) { data, err := os.ReadFile(name) if err != nil { return false, err } for _, line := range bytes.Split(data, []byte("\n")) { m := valRe.FindSubmatch(line) if m == nil { continue } fmt.Println(strconv.Unquote(string(m[1]))) if s, err := strconv.Unquote(string(m[1])); err != nil { return false, err } else if s == expected { return true, nil } } return false, nil } var valRe = regexp.MustCompile(`^\[\]byte\(([^)]+)\)$`) func main() { dir, expected := os.Args[1], os.Args[2] ents, err := os.ReadDir(dir) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } for _, ent := range ents { name := filepath.Join(dir, ent.Name()) if good, err := checkFile(name, expected); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } else if good { os.Exit(0) } } fmt.Fprintln(os.Stderr, "input over minimized") os.Exit(1) }