forked from Nickolai-Belov/hotload
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdriver_internal_test.go
131 lines (124 loc) · 2.75 KB
/
driver_internal_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package hotload
import (
"database/sql/driver"
"fmt"
"reflect"
"testing"
)
type testDriver struct {
options map[string]string
}
func (d *testDriver) Open(name string) (driver.Conn, error) {
return nil, fmt.Errorf("not implemented")
}
func withConnectionStringOptions(options map[string]string) driverOption {
return func(di *driverInstance) {
di.options = options
}
}
func TestRegisterSQLDriverWithOptions(t *testing.T) {
type args struct {
name string
driver driver.Driver
options []driverOption
}
tests := []struct {
name string
args args
}{
{
name: "driver with an option",
args: args{
name: "test with options",
driver: &testDriver{},
options: []driverOption{
withConnectionStringOptions(map[string]string{"a": "b"}),
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
RegisterSQLDriver(tt.args.name, tt.args.driver, tt.args.options...)
mu.Lock()
defer mu.Unlock()
d, ok := sqlDrivers[tt.args.name]
if !ok {
t.Errorf("RegisterSQLDriver() did not register the driver")
}
gotOptions := d.driver.(*testDriver).options
if reflect.DeepEqual(gotOptions, tt.args.options) {
t.Errorf("RegisterSQLDriver() did not set the options")
}
})
}
}
func Test_mergeConnectionStringOptions(t *testing.T) {
type args struct {
dsn string
options map[string]string
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "empty",
args: args{
dsn: "",
options: nil,
},
want: "",
wantErr: false,
},
{
name: "bad dsn with no options",
args: args{
dsn: "bad dsn",
options: nil,
},
want: "bad dsn",
wantErr: false,
},
{
name: "bad dsn with options",
args: args{
dsn: "bad dsn",
options: map[string]string{"a": "b"},
},
want: "",
wantErr: true,
},
{
name: "good dsn with no options",
args: args{
dsn: "postgres://localhost:5432/postgres?sslmode=disable",
},
want: "postgres://localhost:5432/postgres?sslmode=disable",
wantErr: false,
},
{
name: "good dsn with options",
args: args{
dsn: "postgres://localhost:5432/postgres?sslmode=disable",
options: map[string]string{"disable_cache": "true"},
},
want: "postgres://localhost:5432/postgres?disable_cache=true&sslmode=disable",
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := mergeConnectionStringOptions(tt.args.dsn, tt.args.options)
if (err != nil) != tt.wantErr {
t.Errorf("mergeConnectionStringOptions() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("mergeConnectionStringOptions() = %v, want %v", got, tt.want)
}
})
}
}