48 lines
873 B
Go
48 lines
873 B
Go
//go:build go1.18
|
|
// +build go1.18
|
|
|
|
package mysql
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
)
|
|
|
|
func FuzzFormatDSN(f *testing.F) {
|
|
for _, test := range testDSNs { // See dsn_test.go
|
|
f.Add(test.in)
|
|
}
|
|
|
|
f.Fuzz(func(t *testing.T, dsn1 string) {
|
|
// Do not waste resources
|
|
if len(dsn1) > 1000 {
|
|
t.Skip("ignore: too long")
|
|
}
|
|
|
|
cfg1, err := ParseDSN(dsn1)
|
|
if err != nil {
|
|
t.Skipf("invalid DSN: %v", err)
|
|
}
|
|
|
|
dsn2 := cfg1.FormatDSN()
|
|
if dsn2 == dsn1 {
|
|
return
|
|
}
|
|
|
|
// Skip known cases of bad config that are not strictly checked by ParseDSN
|
|
if _, _, err := net.SplitHostPort(cfg1.Addr); err != nil {
|
|
t.Skipf("invalid addr %q: %v", cfg1.Addr, err)
|
|
}
|
|
|
|
cfg2, err := ParseDSN(dsn2)
|
|
if err != nil {
|
|
t.Fatalf("%q rewritten as %q: %v", dsn1, dsn2, err)
|
|
}
|
|
|
|
dsn3 := cfg2.FormatDSN()
|
|
if dsn3 != dsn2 {
|
|
t.Errorf("%q rewritten as %q", dsn2, dsn3)
|
|
}
|
|
})
|
|
}
|