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  }