15
15
package cloudsqlconn_test
16
16
17
17
import (
18
+ "context"
18
19
"database/sql"
20
+ "fmt"
21
+ "net"
19
22
"os"
20
23
"testing"
21
24
"time"
@@ -54,25 +57,55 @@ func requireMySQLVars(t *testing.T) {
54
57
}
55
58
}
56
59
60
+ type mockResolver struct {
61
+ }
62
+
63
+ func (r * mockResolver ) LookupSRV (_ context.Context , _ , _ , name string ) (cname string , addrs []* net.SRV , err error ) {
64
+ if name == "mysql.example.com" {
65
+ return "" , []* net.SRV {
66
+ & net.SRV {Target : mysqlConnName },
67
+ }, nil
68
+ }
69
+
70
+ return "" , nil , fmt .Errorf ("no resolution for %v" , name )
71
+ }
72
+
57
73
func TestMySQLDriver (t * testing.T ) {
58
74
if testing .Short () {
59
75
t .Skip ("skipping MySQL integration tests" )
60
76
}
61
77
62
78
tcs := []struct {
63
- desc string
64
- driverName string
65
- opts []cloudsqlconn.Option
79
+ desc string
80
+ driverName string
81
+ instanceName string
82
+ user string
83
+ password string
84
+ opts []cloudsqlconn.Option
66
85
}{
67
86
{
68
- desc : "default options" ,
69
- driverName : "cloudsql-mysql" ,
70
- opts : nil ,
87
+ desc : "default options" ,
88
+ driverName : "cloudsql-mysql" ,
89
+ opts : nil ,
90
+ instanceName : mysqlConnName ,
91
+ user : mysqlUser ,
92
+ password : mysqlPass ,
93
+ },
94
+ {
95
+ desc : "auto IAM authn" ,
96
+ driverName : "cloudsql-mysql-iam" ,
97
+ opts : []cloudsqlconn.Option {cloudsqlconn .WithIAMAuthN ()},
98
+ instanceName : mysqlIAMConnName ,
99
+ user : mysqlIAMUser ,
100
+ password : "password" ,
71
101
},
72
102
{
73
- desc : "auto IAM authn" ,
74
- driverName : "cloudsql-mysql-iam" ,
75
- opts : []cloudsqlconn.Option {cloudsqlconn .WithIAMAuthN ()},
103
+ desc : "with dns" ,
104
+ driverName : "cloudsql-mysql-dns" ,
105
+ opts : []cloudsqlconn.Option {cloudsqlconn .WithResolver (& mockResolver {})},
106
+ instanceName : "mysql.example.com" ,
107
+ user : mysqlUser ,
108
+ password : mysqlPass ,
76
109
},
77
110
}
78
111
@@ -85,18 +118,18 @@ func TestMySQLDriver(t *testing.T) {
85
118
}
86
119
t .Log (now )
87
120
}
88
- cleanup , err := mysql .RegisterDriver (tc .driverName )
121
+ cleanup , err := mysql .RegisterDriver (tc .driverName , tc . opts ... )
89
122
if err != nil {
90
123
t .Fatalf ("failed to register driver: %v" , err )
91
124
}
92
125
defer cleanup ()
93
126
cfg := gomysql .NewConfig ()
94
127
cfg .CheckConnLiveness = true
95
- cfg .User = mysqlUser
96
- cfg .Passwd = mysqlPass
128
+ cfg .User = tc . user
129
+ cfg .Passwd = tc . password
97
130
cfg .DBName = mysqlDB
98
131
cfg .Net = tc .driverName
99
- cfg .Addr = mysqlConnName
132
+ cfg .Addr = tc . instanceName
100
133
cfg .Params = map [string ]string {"parseTime" : "true" }
101
134
102
135
db , err := sql .Open ("mysql" , cfg .FormatDSN ())
0 commit comments