summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/lib/pq/go18_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/lib/pq/go18_test.go')
-rw-r--r--vendor/github.com/lib/pq/go18_test.go99
1 files changed, 98 insertions, 1 deletions
diff --git a/vendor/github.com/lib/pq/go18_test.go b/vendor/github.com/lib/pq/go18_test.go
index df3e496b5..15546d865 100644
--- a/vendor/github.com/lib/pq/go18_test.go
+++ b/vendor/github.com/lib/pq/go18_test.go
@@ -2,7 +2,12 @@
package pq
-import "testing"
+import (
+ "context"
+ "database/sql"
+ "testing"
+ "time"
+)
func TestMultipleSimpleQuery(t *testing.T) {
db := openTestConn(t)
@@ -66,3 +71,95 @@ func TestMultipleSimpleQuery(t *testing.T) {
t.Fatal("unexpected result set")
}
}
+
+func TestContextCancelExec(t *testing.T) {
+ db := openTestConn(t)
+ defer db.Close()
+
+ ctx, cancel := context.WithCancel(context.Background())
+
+ // Delay execution for just a bit until db.ExecContext has begun.
+ go func() {
+ time.Sleep(time.Millisecond * 10)
+ cancel()
+ }()
+
+ // Not canceled until after the exec has started.
+ if _, err := db.ExecContext(ctx, "select pg_sleep(1)"); err == nil {
+ t.Fatal("expected error")
+ } else if err.Error() != "pq: canceling statement due to user request" {
+ t.Fatalf("unexpected error: %s", err)
+ }
+
+ // Context is already canceled, so error should come before execution.
+ if _, err := db.ExecContext(ctx, "select pg_sleep(1)"); err == nil {
+ t.Fatal("expected error")
+ } else if err.Error() != "context canceled" {
+ t.Fatalf("unexpected error: %s", err)
+ }
+}
+
+func TestContextCancelQuery(t *testing.T) {
+ db := openTestConn(t)
+ defer db.Close()
+
+ ctx, cancel := context.WithCancel(context.Background())
+
+ // Delay execution for just a bit until db.QueryContext has begun.
+ go func() {
+ time.Sleep(time.Millisecond * 10)
+ cancel()
+ }()
+
+ // Not canceled until after the exec has started.
+ if _, err := db.QueryContext(ctx, "select pg_sleep(1)"); err == nil {
+ t.Fatal("expected error")
+ } else if err.Error() != "pq: canceling statement due to user request" {
+ t.Fatalf("unexpected error: %s", err)
+ }
+
+ // Context is already canceled, so error should come before execution.
+ if _, err := db.QueryContext(ctx, "select pg_sleep(1)"); err == nil {
+ t.Fatal("expected error")
+ } else if err.Error() != "context canceled" {
+ t.Fatalf("unexpected error: %s", err)
+ }
+}
+
+func TestContextCancelBegin(t *testing.T) {
+ db := openTestConn(t)
+ defer db.Close()
+
+ ctx, cancel := context.WithCancel(context.Background())
+ tx, err := db.BeginTx(ctx, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ // Delay execution for just a bit until tx.Exec has begun.
+ go func() {
+ time.Sleep(time.Millisecond * 10)
+ cancel()
+ }()
+
+ // Not canceled until after the exec has started.
+ if _, err := tx.Exec("select pg_sleep(1)"); err == nil {
+ t.Fatal("expected error")
+ } else if err.Error() != "pq: canceling statement due to user request" {
+ t.Fatalf("unexpected error: %s", err)
+ }
+
+ // Transaction is canceled, so expect an error.
+ if _, err := tx.Query("select pg_sleep(1)"); err == nil {
+ t.Fatal("expected error")
+ } else if err != sql.ErrTxDone {
+ t.Fatalf("unexpected error: %s", err)
+ }
+
+ // Context is canceled, so cannot begin a transaction.
+ if _, err := db.BeginTx(ctx, nil); err == nil {
+ t.Fatal("expected error")
+ } else if err.Error() != "context canceled" {
+ t.Fatalf("unexpected error: %s", err)
+ }
+}