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  }