mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
database/sql: don't hang if the driver Exec method panics
Fixes #13677. Fixes #15901. Change-Id: Idffb82cdcba4985954d061bdb021217f47ff4984 Reviewed-on: https://go-review.googlesource.com/23576 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
e6a96a6277
commit
967fa427fd
2 changed files with 112 additions and 51 deletions
|
|
@ -2299,6 +2299,53 @@ func TestConnectionLeak(t *testing.T) {
|
|||
wg.Wait()
|
||||
}
|
||||
|
||||
// badConn implements a bad driver.Conn, for TestBadDriver.
|
||||
// The Exec method panics.
|
||||
type badConn struct{}
|
||||
|
||||
func (bc badConn) Prepare(query string) (driver.Stmt, error) {
|
||||
return nil, errors.New("badConn Prepare")
|
||||
}
|
||||
|
||||
func (bc badConn) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (bc badConn) Begin() (driver.Tx, error) {
|
||||
return nil, errors.New("badConn Begin")
|
||||
}
|
||||
|
||||
func (bc badConn) Exec(query string, args []driver.Value) (driver.Result, error) {
|
||||
panic("badConn.Exec")
|
||||
}
|
||||
|
||||
// badDriver is a driver.Driver that uses badConn.
|
||||
type badDriver struct{}
|
||||
|
||||
func (bd badDriver) Open(name string) (driver.Conn, error) {
|
||||
return badConn{}, nil
|
||||
}
|
||||
|
||||
// Issue 15901.
|
||||
func TestBadDriver(t *testing.T) {
|
||||
Register("bad", badDriver{})
|
||||
db, err := Open("bad", "ignored")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() {
|
||||
if r := recover(); r == nil {
|
||||
t.Error("expected panic")
|
||||
} else {
|
||||
if want := "badConn.Exec"; r.(string) != want {
|
||||
t.Errorf("panic was %v, expected %v", r, want)
|
||||
}
|
||||
}
|
||||
}()
|
||||
defer db.Close()
|
||||
db.Exec("ignored")
|
||||
}
|
||||
|
||||
func BenchmarkConcurrentDBExec(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
ct := new(concurrentDBExecTest)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue