github.com/snowflakedb/gosnowflake@v1.9.0/heartbeat_test.go (about) 1 // Copyright (c) 2023 Snowflake Computing Inc. All rights reserved. 2 3 package gosnowflake 4 5 import ( 6 "context" 7 "testing" 8 ) 9 10 func TestUnitPostHeartbeat(t *testing.T) { 11 runSnowflakeConnTest(t, func(sct *SCTest) { 12 // send heartbeat call and renew expired session 13 sr := &snowflakeRestful{ 14 FuncPost: postTestRenew, 15 FuncRenewSession: renewSessionTest, 16 TokenAccessor: getSimpleTokenAccessor(), 17 RequestTimeout: 0, 18 } 19 heartbeat := &heartbeat{ 20 restful: sr, 21 } 22 err := heartbeat.heartbeatMain() 23 assertNilF(t, err, "failed to heartbeat and renew session") 24 25 heartbeat.restful.FuncPost = postTestError 26 err = heartbeat.heartbeatMain() 27 assertNotNilF(t, err, "should have failed to start heartbeat") 28 assertEqualE(t, err.Error(), "failed to run post method") 29 30 heartbeat.restful.FuncPost = postTestSuccessButInvalidJSON 31 err = heartbeat.heartbeatMain() 32 assertNotNilF(t, err, "should have failed to start heartbeat") 33 assertHasPrefixE(t, err.Error(), "invalid character") 34 35 heartbeat.restful.FuncPost = postTestAppForbiddenError 36 err = heartbeat.heartbeatMain() 37 assertNotNilF(t, err, "should have failed to start heartbeat") 38 driverErr, ok := err.(*SnowflakeError) 39 assertTrueF(t, ok, "connection should be snowflakeConn") 40 assertEqualE(t, driverErr.Number, ErrFailedToHeartbeat) 41 }) 42 } 43 44 func TestHeartbeatStartAndStop(t *testing.T) { 45 createDSNWithClientSessionKeepAlive() 46 config, err := ParseDSN(dsn) 47 if err != nil { 48 t.Fatalf("failed to parse dsn. err: %v", err) 49 } 50 driver := SnowflakeDriver{} 51 db, err := driver.OpenWithConfig(context.Background(), *config) 52 if err != nil { 53 t.Fatalf("failed to open with config. config: %v, err: %v", config, err) 54 } 55 56 conn, ok := db.(*snowflakeConn) 57 assertTrueF(t, ok, "connection should be snowflakeConn") 58 assertNotNilF(t, conn.rest, "heartbeat should not be nil") 59 assertNotNilF(t, conn.rest.HeartBeat, "heartbeat should not be nil") 60 61 err = db.Close() 62 assertNilF(t, err, "should not cause error in Close") 63 assertNilF(t, conn.rest, "heartbeat should be nil") 64 }