Skip to content

Commit

Permalink
contrib/database/sql: add connectCancelledCtx test
Browse files Browse the repository at this point in the history
  • Loading branch information
ajgajg1134 committed Jan 31, 2022
1 parent caf0d63 commit d296a64
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 2 deletions.
4 changes: 2 additions & 2 deletions contrib/database/sql/sql.go
Expand Up @@ -151,7 +151,7 @@ func (t dsnConnector) Driver() driver.Driver {
return t.driver
}

// OpenDB returns connection to a DB using a the traced version of the given driver. In order for OpenDB
// OpenDB returns connection to a DB using the traced version of the given driver. In order for OpenDB
// to work, the driver must first be registered using Register. If this did not occur, OpenDB will panic.
func OpenDB(c driver.Connector, opts ...Option) *sql.DB {
name, ok := registeredDrivers.name(c.Driver())
Expand Down Expand Up @@ -179,7 +179,7 @@ func OpenDB(c driver.Connector, opts ...Option) *sql.DB {
return sql.OpenDB(tc)
}

// Open returns connection to a DB using a the traced version of the given driver. In order for Open
// Open returns connection to a DB using the traced version of the given driver. In order for Open
// to work, the driver must first be registered using Register. If this did not occur, Open will
// return an error.
func Open(driverName, dataSourceName string, opts ...Option) (*sql.DB, error) {
Expand Down
58 changes: 58 additions & 0 deletions contrib/database/sql/sql_test.go
Expand Up @@ -6,11 +6,16 @@
package sql

import (
"context"
"database/sql/driver"
"errors"
"fmt"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer"
"log"
"math"
"os"
"testing"
"time"

"gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
Expand Down Expand Up @@ -190,3 +195,56 @@ func TestMySQLUint64(t *testing.T) {
assert.NoError(rows.Err())
assert.NoError(rows.Close())
}

//hangingConnector hangs on Connect until ctx is cancelled.
type hangingConnector struct{}

func (h *hangingConnector) Connect(ctx context.Context) (driver.Conn, error) {
select {
case <-ctx.Done():
return &panicConn{}, errors.New("context cancelled")
}
}

func (h *hangingConnector) Driver() driver.Driver {
panic("hangingConnector: Driver() not implemented")
}

type panicConn struct{}

func (p *panicConn) Prepare(query string) (driver.Stmt, error) {
panic("panicConn: Prepare called")
}

func (p *panicConn) Close() error {
panic("panicConn: Close called")
}

func (p *panicConn) Begin() (driver.Tx, error) {
panic("panicConn: Begin called")
}

func TestConnectCancelledCtx(t *testing.T) {
mockTracer := mocktracer.Start()
defer mockTracer.Stop()
assert := assert.New(t)
tc := tracedConnector{
connector: &hangingConnector{},
driverName: "hangingConnector",
cfg: new(config),
}
ctx, cancelFunc := context.WithCancel(context.Background())

go func() {
tc.Connect(ctx)
}()
time.Sleep(time.Millisecond * 100)
cancelFunc()
time.Sleep(time.Millisecond * 100)

spans := mockTracer.FinishedSpans()
assert.Len(spans, 1)
s := spans[0]
assert.Equal("hangingConnector.query", s.OperationName())
assert.Equal("Connect", s.Tag("sql.query_type"))
}

0 comments on commit d296a64

Please sign in to comment.