Skip to content

Commit bcc80f8

Browse files
authored
Testing WithRequestID (#1260)
1 parent 951ae61 commit bcc80f8

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

assert_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ func assertFalseF(t *testing.T, actual bool, descriptions ...string) {
6868
fatalOnNonEmpty(t, validateEqual(actual, false, descriptions...))
6969
}
7070

71+
func assertFalseE(t *testing.T, actual bool, descriptions ...string) {
72+
errorOnNonEmpty(t, validateEqual(actual, false, descriptions...))
73+
}
74+
7175
func assertStringContainsE(t *testing.T, actual string, expectedToContain string, descriptions ...string) {
7276
errorOnNonEmpty(t, validateStringContains(actual, expectedToContain, descriptions...))
7377
}

driver_test.go

+97
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,103 @@ func TestEmptyQueryWithRequestID(t *testing.T) {
595595
})
596596
}
597597

598+
func TestRequestIDFromTwoDifferentSessions(t *testing.T) {
599+
db, err := sql.Open("snowflake", dsn)
600+
assertNilF(t, err)
601+
db.SetMaxOpenConns(10)
602+
603+
conn, err := db.Conn(context.Background())
604+
assertNilF(t, err)
605+
defer conn.Close()
606+
_, err = conn.ExecContext(context.Background(), forceJSON)
607+
assertNilF(t, err)
608+
609+
conn2, err := db.Conn(context.Background())
610+
assertNilF(t, err)
611+
defer conn2.Close()
612+
_, err = conn2.ExecContext(context.Background(), forceJSON)
613+
assertNilF(t, err)
614+
615+
// creating table
616+
reqIDForCreate := NewUUID()
617+
_, err = conn.ExecContext(WithRequestID(context.Background(), reqIDForCreate), "CREATE TABLE req_id_testing (id INTEGER)")
618+
assertNilF(t, err)
619+
defer func() {
620+
_, err = db.Exec("DROP TABLE IF EXISTS req_id_testing")
621+
assertNilE(t, err)
622+
}()
623+
_, err = conn.ExecContext(WithRequestID(context.Background(), reqIDForCreate), "CREATE TABLE req_id_testing (id INTEGER)")
624+
assertNilF(t, err)
625+
defer func() {
626+
_, err = db.Exec("DROP TABLE IF EXISTS req_id_testing")
627+
assertNilE(t, err)
628+
}()
629+
630+
// should fail as API v1 does not allow reusing requestID across sessions for DML statements
631+
_, err = conn2.ExecContext(WithRequestID(context.Background(), reqIDForCreate), "CREATE TABLE req_id_testing (id INTEGER)")
632+
assertNotNilE(t, err)
633+
assertStringContainsE(t, err.Error(), "already exists")
634+
635+
// inserting a record
636+
reqIDForInsert := NewUUID()
637+
execResult, err := conn.ExecContext(WithRequestID(context.Background(), reqIDForInsert), "INSERT INTO req_id_testing VALUES (1)")
638+
assertNilF(t, err)
639+
rowsInserted, err := execResult.RowsAffected()
640+
assertNilF(t, err)
641+
assertEqualE(t, rowsInserted, int64(1))
642+
643+
_, err = conn2.ExecContext(WithRequestID(context.Background(), reqIDForInsert), "INSERT INTO req_id_testing VALUES (1)")
644+
assertNilF(t, err)
645+
rowsInserted2, err := execResult.RowsAffected()
646+
assertNilF(t, err)
647+
assertEqualE(t, rowsInserted2, int64(1))
648+
649+
// selecting data
650+
reqIDForSelect := NewUUID()
651+
rows, err := conn.QueryContext(WithRequestID(context.Background(), reqIDForSelect), "SELECT * FROM req_id_testing")
652+
assertNilF(t, err)
653+
defer rows.Close()
654+
var i int
655+
assertTrueE(t, rows.Next())
656+
assertNilF(t, rows.Scan(&i))
657+
assertEqualE(t, i, 1)
658+
i = 0
659+
assertTrueE(t, rows.Next())
660+
assertNilF(t, rows.Scan(&i))
661+
assertEqualE(t, i, 1)
662+
assertFalseE(t, rows.Next())
663+
664+
rows2, err := conn.QueryContext(WithRequestID(context.Background(), reqIDForSelect), "SELECT * FROM req_id_testing")
665+
assertNilF(t, err)
666+
defer rows2.Close()
667+
assertTrueE(t, rows2.Next())
668+
assertNilF(t, rows2.Scan(&i))
669+
assertEqualE(t, i, 1)
670+
i = 0
671+
assertTrueE(t, rows2.Next())
672+
assertNilF(t, rows2.Scan(&i))
673+
assertEqualE(t, i, 1)
674+
assertFalseE(t, rows2.Next())
675+
676+
// insert another data
677+
_, err = conn.ExecContext(context.Background(), "INSERT INTO req_id_testing VALUES (1)")
678+
assertNilF(t, err)
679+
680+
// selecting using old request id
681+
rows3, err := conn.QueryContext(WithRequestID(context.Background(), reqIDForSelect), "SELECT * FROM req_id_testing")
682+
assertNilF(t, err)
683+
defer rows3.Close()
684+
assertTrueE(t, rows3.Next())
685+
assertNilF(t, rows3.Scan(&i))
686+
assertEqualE(t, i, 1)
687+
i = 0
688+
assertTrueE(t, rows3.Next())
689+
assertNilF(t, rows3.Scan(&i))
690+
assertEqualE(t, i, 1)
691+
i = 0
692+
assertFalseF(t, rows3.Next())
693+
}
694+
598695
func TestCRUD(t *testing.T) {
599696
runDBTest(t, func(dbt *DBTest) {
600697
// Create Table

0 commit comments

Comments
 (0)