Abstract the hardcoded '/usr/bin/zstd' paths in fuzz and unit tests
to support systems where zstd may be installed at different locations.
The `findZstd` function uses `exec.LookPath` to locate the binary,
enhancing test portability.
Fixes #64000
Change-Id: I0ebe5bbcf3ddc6fccf176c13639ca9d855bcab87
GitHub-Last-Rev:
c4dfe1139bdc2f4f3200f80b314a02b5df5cd995
GitHub-Pull-Request: golang/go#64002
Reviewed-on: https://go-review.googlesource.com/c/go/+/540522
Reviewed-by: Klaus Post <klauspost@gmail.com>
Reviewed-by: Heschi Kreinick <heschi@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
// explore the space of decompressor behavior, since it can't see
// what the compressor is doing. But it's better than nothing.
func FuzzDecompressor(f *testing.F) {
// explore the space of decompressor behavior, since it can't see
// what the compressor is doing. But it's better than nothing.
func FuzzDecompressor(f *testing.F) {
- if _, err := os.Stat("/usr/bin/zstd"); err != nil {
- f.Skip("skipping because /usr/bin/zstd does not exist")
- }
for _, test := range tests {
f.Add([]byte(test.uncompressed))
for _, test := range tests {
f.Add([]byte(test.uncompressed))
f.Add(bigData(f))
f.Fuzz(func(t *testing.T, b []byte) {
f.Add(bigData(f))
f.Fuzz(func(t *testing.T, b []byte) {
- cmd := exec.Command("/usr/bin/zstd", "-z")
+ cmd := exec.Command(zstd, "-z")
cmd.Stdin = bytes.NewReader(b)
var compressed bytes.Buffer
cmd.Stdout = &compressed
cmd.Stdin = bytes.NewReader(b)
var compressed bytes.Buffer
cmd.Stdout = &compressed
// Fuzz test to check that if we can decompress some data,
// so can zstd, and that we get the same result.
func FuzzReverse(f *testing.F) {
// Fuzz test to check that if we can decompress some data,
// so can zstd, and that we get the same result.
func FuzzReverse(f *testing.F) {
- if _, err := os.Stat("/usr/bin/zstd"); err != nil {
- f.Skip("skipping because /usr/bin/zstd does not exist")
- }
for _, test := range tests {
f.Add([]byte(test.compressed))
for _, test := range tests {
f.Add([]byte(test.compressed))
r := NewReader(bytes.NewReader(b))
goExp, goErr := io.ReadAll(r)
r := NewReader(bytes.NewReader(b))
goExp, goErr := io.ReadAll(r)
- cmd := exec.Command("/usr/bin/zstd", "-d")
+ cmd := exec.Command(zstd, "-d")
cmd.Stdin = bytes.NewReader(b)
var uncompressed bytes.Buffer
cmd.Stdout = &uncompressed
cmd.Stdin = bytes.NewReader(b)
var uncompressed bytes.Buffer
cmd.Stdout = &uncompressed
+func findZstd(t testing.TB) string {
+ zstd, err := exec.LookPath("zstd")
+ if err != nil {
+ t.Skip("skipping because zstd not found")
+ }
+ return zstd
+}
+
var (
zstdBigOnce sync.Once
zstdBigBytes []byte
var (
zstdBigOnce sync.Once
zstdBigBytes []byte
func zstdBigData(t testing.TB) []byte {
input := bigData(t)
func zstdBigData(t testing.TB) []byte {
input := bigData(t)
- zstdBigOnce.Do(func() {
- if _, err := os.Stat("/usr/bin/zstd"); err != nil {
- zstdBigSkip = true
- return
- }
- cmd := exec.Command("/usr/bin/zstd", "-z")
+ zstdBigOnce.Do(func() {
+ cmd := exec.Command(zstd, "-z")
cmd.Stdin = bytes.NewReader(input)
var compressed bytes.Buffer
cmd.Stdout = &compressed
cmd.Stdin = bytes.NewReader(input)
var compressed bytes.Buffer
cmd.Stdout = &compressed
zstdBigBytes = compressed.Bytes()
})
zstdBigBytes = compressed.Bytes()
})
- if zstdBigSkip {
- t.Skip("skipping because /usr/bin/zstd does not exist")
- }
if zstdBigErr != nil {
t.Fatal(zstdBigErr)
}
if zstdBigErr != nil {
t.Fatal(zstdBigErr)
}
data := bigData(t)
compressed := zstdBigData(t)
data := bigData(t)
compressed := zstdBigData(t)
- t.Logf("/usr/bin/zstd compressed %d bytes to %d", len(data), len(compressed))
+ t.Logf("zstd compressed %d bytes to %d", len(data), len(compressed))
r := NewReader(bytes.NewReader(compressed))
got, err := io.ReadAll(r)
r := NewReader(bytes.NewReader(compressed))
got, err := io.ReadAll(r)