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