You've already forked go-sqlmock
mirror of
https://github.com/DATA-DOG/go-sqlmock.git
synced 2025-06-16 23:57:35 +02:00
delay for WillDelayFor() duration, before returning error set by WillReturnError()
If both WillDelayFor() and WillReturnError() are called, there should be a delay before the error is returned. Applied to Begin, Exec, Query, and Prepare. Also, the context versions of same. And a couple of unit tests.
This commit is contained in:
@ -2,6 +2,7 @@ package sqlmock
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"sync"
|
||||
@ -1063,3 +1064,52 @@ func TestPreparedStatementCloseExpectation(t *testing.T) {
|
||||
t.Errorf("there were unfulfilled expectations: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecExpectationErrorDelay(t *testing.T) {
|
||||
t.Parallel()
|
||||
db, mock, err := New()
|
||||
if err != nil {
|
||||
t.Errorf("an error '%s' was not expected when opening a stub database connection", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
// test that return of error is delayed
|
||||
var delay time.Duration
|
||||
delay = 100 * time.Millisecond
|
||||
mock.ExpectExec("^INSERT INTO articles").
|
||||
WillReturnError(errors.New("slow fail")).
|
||||
WillDelayFor(delay)
|
||||
|
||||
start := time.Now()
|
||||
res, err := db.Exec("INSERT INTO articles (title) VALUES (?)", "hello")
|
||||
stop := time.Now()
|
||||
|
||||
if res != nil {
|
||||
t.Errorf("result was not expected, was expecting nil")
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
t.Errorf("error was expected, was not expecting nil")
|
||||
}
|
||||
|
||||
if err.Error() != "slow fail" {
|
||||
t.Errorf("error '%s' was not expected, was expecting '%s'", err.Error(), "slow fail")
|
||||
}
|
||||
|
||||
elapsed := stop.Sub(start)
|
||||
if elapsed < delay {
|
||||
t.Errorf("expecting a delay of %v before error, actual delay was %v", delay, elapsed)
|
||||
}
|
||||
|
||||
// also test that return of error is not delayed
|
||||
mock.ExpectExec("^INSERT INTO articles").WillReturnError(errors.New("fast fail"))
|
||||
|
||||
start = time.Now()
|
||||
db.Exec("INSERT INTO articles (title) VALUES (?)", "hello")
|
||||
stop = time.Now()
|
||||
|
||||
elapsed = stop.Sub(start)
|
||||
if elapsed > delay {
|
||||
t.Errorf("expecting a delay of less than %v before error, actual delay was %v", delay, elapsed)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user