From 2a64ebfc6d247e9177190f862b0947ac98c5eb43 Mon Sep 17 00:00:00 2001 From: Daniel Theophanes Date: Wed, 30 Nov 2016 09:30:31 -0800 Subject: database/sql: deflake query cancel tests Rather then using a sleep in the fake DB, go to a channel select and wait for the context to be done. Fixes #18115 Change-Id: I6bc3a29db58c568d0a7ea06c2a354c18c9e798b2 Reviewed-on: https://go-review.googlesource.com/33712 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/database/sql/fakedb_test.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/database/sql/fakedb_test.go') diff --git a/src/database/sql/fakedb_test.go b/src/database/sql/fakedb_test.go index 9de9289644..416b97d501 100644 --- a/src/database/sql/fakedb_test.go +++ b/src/database/sql/fakedb_test.go @@ -511,6 +511,10 @@ func (c *fakeConn) prepareInsert(stmt *fakeStmt, parts []string) (*fakeStmt, err var hookPrepareBadConn func() bool func (c *fakeConn) Prepare(query string) (driver.Stmt, error) { + panic("use PrepareContext") +} + +func (c *fakeConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { c.numPrepare++ if c.db == nil { panic("nil c.db; conn = " + fmt.Sprintf("%#v", c)) @@ -549,7 +553,13 @@ func (c *fakeConn) Prepare(query string) (driver.Stmt, error) { parts = parts[1:] if stmt.wait > 0 { - time.Sleep(stmt.wait) + wait := time.NewTimer(stmt.wait) + select { + case <-wait.C: + case <-ctx.Done(): + wait.Stop() + return nil, ctx.Err() + } } c.incrStat(&c.stmtsMade) -- cgit v1.3-5-g45d5