github.com/square/finch@v0.0.0-20240412205204-6530c03e2b96/dbconn/factory_test.go (about) 1 // Copyright 2024 Block, Inc. 2 3 package dbconn_test 4 5 import ( 6 "strings" 7 "testing" 8 9 "github.com/go-sql-driver/mysql" 10 11 "github.com/square/finch/config" 12 "github.com/square/finch/dbconn" 13 "github.com/square/finch/test" 14 ) 15 16 func TestMake_DSN(t *testing.T) { 17 if test.Build { 18 t.Skip("GitHub Actions build") 19 } 20 21 // Test connection 22 dsn, db, err := test.Connection() 23 if err != nil { 24 t.Fatal(err) 25 } 26 defer db.Close() 27 28 // Make factory-made connect with test DSN 29 cfg := config.MySQL{ 30 DSN: dsn, 31 } 32 dbconn.SetConfig(cfg) 33 34 fdb, fdsn, err := dbconn.Make() 35 if err != nil { 36 t.Error(err) 37 } 38 39 if fdb == nil { 40 t.Fatal("got nil *sql.DB") 41 } 42 defer fdb.Close() 43 44 if fdsn != strings.Replace(dsn, "test", "...", 1) { // factory DSN redacts password to "..." 45 t.Errorf("got dsn '%s', expected '%s'", fdsn, dsn) 46 } 47 48 } 49 50 func TestMake_Config(t *testing.T) { 51 if test.Build { 52 t.Skip("GitHub Actions build") 53 } 54 55 // Test connection 56 dsn, db, err := test.Connection() 57 if err != nil { 58 t.Fatal(err) 59 } 60 defer db.Close() 61 62 // Parse test DSN so we can map its parts to a Finch config.MySQL 63 my, err := mysql.ParseDSN(dsn) 64 if err != nil { 65 t.Fatal(err) 66 } 67 68 // Make factory-made connect with test DSN 69 cfg := config.MySQL{ 70 Hostname: my.Addr, // has ":test.MySQLPort" suffix 71 Password: my.Passwd, 72 Username: my.User, 73 } 74 dbconn.SetConfig(cfg) 75 76 fdb, _, err := dbconn.Make() 77 if err != nil { 78 t.Error(err) 79 } 80 if fdb == nil { 81 t.Fatal("got nil *sql.DB") 82 } 83 defer fdb.Close() 84 85 got, err := test.OneRow(fdb, "SELECT @@version") 86 if err != nil { 87 t.Error(err) 88 } 89 if got != "8.0.34" { 90 t.Errorf("SELECT @@version: got %s, expected 8.0.34", got) 91 } 92 }