1// Copyright (c) 2021 Snowflake Computing Inc. All right reserved. 2 3package gosnowflake 4 5import ( 6 "context" 7 "net/http" 8 "net/url" 9 "testing" 10) 11 12type DummyTransport struct { 13 postRequests int 14 getRequests int 15} 16 17func (t *DummyTransport) RoundTrip(r *http.Request) (*http.Response, error) { 18 if r.URL.Path == "" { 19 if r.Method == "GET" { 20 t.getRequests++ 21 } else if r.Method == "POST" { 22 t.postRequests++ 23 } 24 return &http.Response{StatusCode: 200}, nil 25 } 26 return snowflakeInsecureTransport.RoundTrip(r) 27} 28 29func TestInternalClient(t *testing.T) { 30 config, err := ParseDSN(dsn) 31 if err != nil { 32 t.Fatalf("failed to parse dsn. dsn: %v, err: %v", dsn, err) 33 } 34 transport := DummyTransport{} 35 config.Transporter = &transport 36 driver := SnowflakeDriver{} 37 db, err := driver.OpenWithConfig(context.Background(), *config) 38 if err != nil { 39 t.Fatalf("failed to open with config. config: %v, err: %v", config, err) 40 } 41 42 internalClient := (db.(*snowflakeConn)).internal 43 resp, err := internalClient.Get(context.Background(), &url.URL{}, make(map[string]string), 0) 44 if err != nil || resp.StatusCode != 200 { 45 t.Fail() 46 } 47 if transport.getRequests != 1 { 48 t.Fatalf("Expected exactly one GET request, got %v", transport.getRequests) 49 } 50 51 resp, err = internalClient.Post(context.Background(), &url.URL{}, make(map[string]string), make([]byte, 0), 0, false) 52 if err != nil || resp.StatusCode != 200 { 53 t.Fail() 54 } 55 if transport.postRequests != 1 { 56 t.Fatalf("Expected exactly one POST request, got %v", transport.postRequests) 57 } 58 59 db.Close() 60} 61