75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
// Copyright 2022 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package debug_test
|
|
|
|
import (
|
|
"reflect"
|
|
"runtime/debug"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// strip removes two leading tabs after each newline of s.
|
|
func strip(s string) string {
|
|
replaced := strings.ReplaceAll(s, "\n\t\t", "\n")
|
|
if len(replaced) > 0 && replaced[0] == '\n' {
|
|
replaced = replaced[1:]
|
|
}
|
|
return replaced
|
|
}
|
|
|
|
func FuzzParseBuildInfoRoundTrip(f *testing.F) {
|
|
// Package built from outside a module, missing some fields..
|
|
f.Add(strip(`
|
|
path rsc.io/fortune
|
|
mod rsc.io/fortune v1.0.0
|
|
`))
|
|
|
|
// Package built from the standard library, missing some fields..
|
|
f.Add(`path cmd/test2json`)
|
|
|
|
// Package built from inside a module.
|
|
f.Add(strip(`
|
|
go 1.18
|
|
path example.com/m
|
|
mod example.com/m (devel)
|
|
build -compiler=gc
|
|
`))
|
|
|
|
// Package built in GOPATH mode.
|
|
f.Add(strip(`
|
|
go 1.18
|
|
path example.com/m
|
|
build -compiler=gc
|
|
`))
|
|
|
|
// Escaped build info.
|
|
f.Add(strip(`
|
|
go 1.18
|
|
path example.com/m
|
|
build CRAZY_ENV="requires\nescaping"
|
|
`))
|
|
|
|
f.Fuzz(func(t *testing.T, s string) {
|
|
bi, err := debug.ParseBuildInfo(s)
|
|
if err != nil {
|
|
// Not a round-trippable BuildInfo string.
|
|
t.Log(err)
|
|
return
|
|
}
|
|
|
|
// s2 could have different escaping from s.
|
|
// However, it should parse to exactly the same contents.
|
|
s2 := bi.String()
|
|
bi2, err := debug.ParseBuildInfo(s2)
|
|
if err != nil {
|
|
t.Fatalf("%v:\n%s", err, s2)
|
|
}
|
|
|
|
if !reflect.DeepEqual(bi2, bi) {
|
|
t.Fatalf("Parsed representation differs.\ninput:\n%s\noutput:\n%s", s, s2)
|
|
}
|
|
})
|
|
}
|