@@ -12,114 +12,181 @@ private def socket(path)
1212 URI .new(" unix" , nil , nil , path)
1313end
1414
15+ private def ssl_from_params (params )
16+ Connection ::SSLOptions .from_params(URI ::Params .parse(params))
17+ end
18+
19+ SSL_OPTION_PREFERRED = Connection ::SSLOptions .new(mode: :preferred )
20+
1521describe Connection ::Options do
1622 describe " .from_uri" do
1723 it " parses mysql://user@host/db" do
1824 from_uri(" mysql://root@localhost/test" ).should eq(
19- MySql :: Connection ::Options .new(
25+ Connection ::Options .new(
2026 transport: tcp(" localhost" , 3306 ),
2127 username: " root" ,
2228 password: nil ,
2329 initial_catalog: " test" ,
24- charset: Collations .default_collation
30+ charset: Collations .default_collation,
31+ ssl_options: SSL_OPTION_PREFERRED
2532 )
2633 )
2734 end
2835
2936 it " parses mysql://host" do
3037 from_uri(" mysql://localhost" ).should eq(
31- MySql :: Connection ::Options .new(
38+ Connection ::Options .new(
3239 transport: tcp(" localhost" , 3306 ),
3340 username: nil ,
3441 password: nil ,
3542 initial_catalog: nil ,
36- charset: Collations .default_collation
43+ charset: Collations .default_collation,
44+ ssl_options: SSL_OPTION_PREFERRED
3745 )
3846 )
3947 end
4048
4149 it " parses mysql://host:port" do
4250 from_uri(" mysql://localhost:1234" ).should eq(
43- MySql :: Connection ::Options .new(
51+ Connection ::Options .new(
4452 transport: tcp(" localhost" , 1234 ),
4553 username: nil ,
4654 password: nil ,
4755 initial_catalog: nil ,
48- charset: Collations .default_collation
56+ charset: Collations .default_collation,
57+ ssl_options: SSL_OPTION_PREFERRED
4958 )
5059 )
5160 end
5261
5362 it " parses ?encoding=..." do
5463 from_uri(" mysql://localhost:1234?encoding=utf8mb4_unicode_520_ci" ).should eq(
55- MySql :: Connection ::Options .new(
64+ Connection ::Options .new(
5665 transport: tcp(" localhost" , 1234 ),
5766 username: nil ,
5867 password: nil ,
5968 initial_catalog: nil ,
60- charset: " utf8mb4_unicode_520_ci"
69+ charset: " utf8mb4_unicode_520_ci" ,
70+ ssl_options: SSL_OPTION_PREFERRED
6171 )
6272 )
6373 end
6474
6575 it " parses mysql://user@host?database=db" do
6676 from_uri(" mysql://root@localhost?database=test" ).should eq(
67- MySql :: Connection ::Options .new(
77+ Connection ::Options .new(
6878 transport: tcp(" localhost" , 3306 ),
6979 username: " root" ,
7080 password: nil ,
7181 initial_catalog: " test" ,
72- charset: Collations .default_collation
82+ charset: Collations .default_collation,
83+ ssl_options: SSL_OPTION_PREFERRED
7384 )
7485 )
7586 end
7687
7788 it " parses mysql:///path/to/socket" do
7889 from_uri(" mysql:///path/to/socket" ).should eq(
79- MySql :: Connection ::Options .new(
90+ Connection ::Options .new(
8091 transport: socket(" /path/to/socket" ),
8192 username: nil ,
8293 password: nil ,
8394 initial_catalog: nil ,
84- charset: Collations .default_collation
95+ charset: Collations .default_collation,
96+ ssl_options: SSL_OPTION_PREFERRED
8597 )
8698 )
8799 end
88100
89101 it " parses mysql:///path/to/socket?database=test" do
90102 from_uri(" mysql:///path/to/socket?database=test" ).should eq(
91- MySql :: Connection ::Options .new(
103+ Connection ::Options .new(
92104 transport: socket(" /path/to/socket" ),
93105 username: nil ,
94106 password: nil ,
95107 initial_catalog: " test" ,
96- charset: Collations .default_collation
108+ charset: Collations .default_collation,
109+ ssl_options: SSL_OPTION_PREFERRED
97110 )
98111 )
99112 end
100113
101114 it " parses mysql:///path/to/socket?encoding=utf8mb4_unicode_520_ci" do
102115 from_uri(" mysql:///path/to/socket?encoding=utf8mb4_unicode_520_ci" ).should eq(
103- MySql :: Connection ::Options .new(
116+ Connection ::Options .new(
104117 transport: socket(" /path/to/socket" ),
105118 username: nil ,
106119 password: nil ,
107120 initial_catalog: nil ,
108- charset: " utf8mb4_unicode_520_ci"
121+ charset: " utf8mb4_unicode_520_ci" ,
122+ ssl_options: SSL_OPTION_PREFERRED
109123 )
110124 )
111125 end
112126
113127 it " parses mysql://user:pass@/path/to/socket?database=test" do
114128 from_uri(" mysql://root:password@/path/to/socket?database=test" ).should eq(
115- MySql :: Connection ::Options .new(
129+ Connection ::Options .new(
116130 transport: socket(" /path/to/socket" ),
117131 username: " root" ,
118132 password: " password" ,
119133 initial_catalog: " test" ,
120- charset: Collations .default_collation
134+ charset: Collations .default_collation,
135+ ssl_options: SSL_OPTION_PREFERRED
121136 )
122137 )
123138 end
124139 end
125140end
141+
142+ describe Connection ::SSLOptions do
143+ describe " .from_params" do
144+ it " default is ssl-mode=preferred" do
145+ ssl_from_params(" " ).mode.should eq(Connection ::SSLMode ::Preferred )
146+ end
147+
148+ it " parses ssl-mode=preferred" do
149+ ssl_from_params(" ssl-mode=preferred" ).mode.should eq(Connection ::SSLMode ::Preferred )
150+ ssl_from_params(" ssl-mode=Preferred" ).mode.should eq(Connection ::SSLMode ::Preferred )
151+ ssl_from_params(" ssl-mode=PREFERRED" ).mode.should eq(Connection ::SSLMode ::Preferred )
152+ end
153+
154+ it " parses ssl-mode=disabled" do
155+ ssl_from_params(" ssl-mode=disabled" ).mode.should eq(Connection ::SSLMode ::Disabled )
156+ ssl_from_params(" ssl-mode=Disabled" ).mode.should eq(Connection ::SSLMode ::Disabled )
157+ ssl_from_params(" ssl-mode=DISABLED" ).mode.should eq(Connection ::SSLMode ::Disabled )
158+ end
159+
160+ it " parses ssl-mode=verifyca" do
161+ ssl_from_params(" ssl-mode=verifyca" ).mode.should eq(Connection ::SSLMode ::VerifyCA )
162+ ssl_from_params(" ssl-mode=verify-ca" ).mode.should eq(Connection ::SSLMode ::VerifyCA )
163+ ssl_from_params(" ssl-mode=verify_ca" ).mode.should eq(Connection ::SSLMode ::VerifyCA )
164+ ssl_from_params(" ssl-mode=VERIFY_CA" ).mode.should eq(Connection ::SSLMode ::VerifyCA )
165+ end
166+
167+ it " parses ssl-mode=verifyidentity" do
168+ ssl_from_params(" ssl-mode=verifyidentity" ).mode.should eq(Connection ::SSLMode ::VerifyIdentity )
169+ ssl_from_params(" ssl-mode=verify-identity" ).mode.should eq(Connection ::SSLMode ::VerifyIdentity )
170+ ssl_from_params(" ssl-mode=verify_identity" ).mode.should eq(Connection ::SSLMode ::VerifyIdentity )
171+ ssl_from_params(" ssl-mode=VERIFY_IDENTITY" ).mode.should eq(Connection ::SSLMode ::VerifyIdentity )
172+ end
173+
174+ it " parses ssl-key, ssl-cert, ssl-ca" do
175+ ssl_from_params(" ssl-key=path/to/key.pem&ssl-cert=path/to/cert.pem&ssl-ca=path/to/ca.pem" ).should eq(
176+ Connection ::SSLOptions .new(mode: Connection ::SSLMode ::Preferred ,
177+ key: Path [" path/to/key.pem" ].expand(home: true ),
178+ cert: Path [" path/to/cert.pem" ].expand(home: true ),
179+ ca: Path [" path/to/ca.pem" ].expand(home: true ))
180+ )
181+ end
182+
183+ it " missing ssl-key, ssl-cert, ssl-ca as nil" do
184+ ssl_from_params(" " ).should eq(
185+ Connection ::SSLOptions .new(mode: Connection ::SSLMode ::Preferred ,
186+ key: nil ,
187+ cert: nil ,
188+ ca: nil )
189+ )
190+ end
191+ end
192+ end
0 commit comments