Skip to content

Commit 65ed3c5

Browse files
authored
Add fuzz test for FormatDSN (go-sql-driver#1444)
Run (go 1.18+): go test -fuzz FuzzFormatDSN Note: invalid host:addr values are currently ignored as they are known to break (ParseDSN doesn't strictly check address format).
1 parent 8365b94 commit 65ed3c5

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

dsn_fuzz_test.go

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//go:build go1.18
2+
// +build go1.18
3+
4+
package mysql
5+
6+
import (
7+
"net"
8+
"testing"
9+
)
10+
11+
func FuzzFormatDSN(f *testing.F) {
12+
for _, test := range testDSNs { // See dsn_test.go
13+
f.Add(test.in)
14+
}
15+
16+
f.Fuzz(func(t *testing.T, dsn1 string) {
17+
// Do not waste resources
18+
if len(dsn1) > 1000 {
19+
t.Skip("ignore: too long")
20+
}
21+
22+
cfg1, err := ParseDSN(dsn1)
23+
if err != nil {
24+
t.Skipf("invalid DSN: %v", err)
25+
}
26+
27+
dsn2 := cfg1.FormatDSN()
28+
if dsn2 == dsn1 {
29+
return
30+
}
31+
32+
// Skip known cases of bad config that are not strictly checked by ParseDSN
33+
if _, _, err := net.SplitHostPort(cfg1.Addr); err != nil {
34+
t.Skipf("invalid addr %q: %v", cfg1.Addr, err)
35+
}
36+
37+
cfg2, err := ParseDSN(dsn2)
38+
if err != nil {
39+
t.Fatalf("%q rewritten as %q: %v", dsn1, dsn2, err)
40+
}
41+
42+
dsn3 := cfg2.FormatDSN()
43+
if dsn3 != dsn2 {
44+
t.Errorf("%q rewritten as %q", dsn2, dsn3)
45+
}
46+
})
47+
}

0 commit comments

Comments
 (0)