| //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) |
| } |
| }) |
| } |