Skip to content

Commit ca3ed9f

Browse files
committed
database/sql: add a disabled broken test
Update #6081 R=golang-dev, gri CC=golang-dev https://golang.org/cl/12810043
1 parent c7d352c commit ca3ed9f

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

src/pkg/database/sql/sql.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,8 @@ func (rs *Rows) Scan(dest ...interface{}) error {
13721372
return nil
13731373
}
13741374

1375+
var rowsCloseHook func(*Rows, *error)
1376+
13751377
// Close closes the Rows, preventing further enumeration. If the
13761378
// end is encountered, the Rows are closed automatically. Close
13771379
// is idempotent.
@@ -1381,6 +1383,9 @@ func (rs *Rows) Close() error {
13811383
}
13821384
rs.closed = true
13831385
err := rs.rowsi.Close()
1386+
if fn := rowsCloseHook; fn != nil {
1387+
fn(rs, &err)
1388+
}
13841389
if rs.closeStmt != nil {
13851390
rs.closeStmt.Close()
13861391
}

src/pkg/database/sql/sql_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package sql
66

77
import (
8+
"database/sql/driver"
89
"fmt"
910
"reflect"
1011
"runtime"
@@ -1110,6 +1111,52 @@ func manyConcurrentQueries(t testOrBench) {
11101111
wg.Wait()
11111112
}
11121113

1114+
func TestIssue6081(t *testing.T) {
1115+
t.Skip("known broken test")
1116+
db := newTestDB(t, "people")
1117+
defer closeDB(t, db)
1118+
1119+
drv := db.driver.(*fakeDriver)
1120+
drv.mu.Lock()
1121+
opens0 := drv.openCount
1122+
closes0 := drv.closeCount
1123+
drv.mu.Unlock()
1124+
1125+
stmt, err := db.Prepare("SELECT|people|name|")
1126+
if err != nil {
1127+
t.Fatal(err)
1128+
}
1129+
rowsCloseHook = func(rows *Rows, err *error) {
1130+
*err = driver.ErrBadConn
1131+
}
1132+
defer func() { rowsCloseHook = nil }()
1133+
for i := 0; i < 10; i++ {
1134+
rows, err := stmt.Query()
1135+
if err != nil {
1136+
t.Fatal(err)
1137+
}
1138+
rows.Close()
1139+
}
1140+
if n := len(stmt.css); n > 1 {
1141+
t.Errorf("len(css slice) = %d; want <= 1", n)
1142+
}
1143+
stmt.Close()
1144+
if n := len(stmt.css); n != 0 {
1145+
t.Errorf("len(css slice) after Close = %d; want 0", n)
1146+
}
1147+
1148+
drv.mu.Lock()
1149+
opens := drv.openCount - opens0
1150+
closes := drv.closeCount - closes0
1151+
drv.mu.Unlock()
1152+
if opens < 9 {
1153+
t.Errorf("opens = %d; want >= 9", opens)
1154+
}
1155+
if closes < 9 {
1156+
t.Errorf("closes = %d; want >= 9", closes)
1157+
}
1158+
}
1159+
11131160
func TestConcurrency(t *testing.T) {
11141161
manyConcurrentQueries(t)
11151162
}

0 commit comments

Comments
 (0)