@@ -11,6 +11,27 @@ import (
1111)
1212
1313func TestParseURL (t * testing.T ) {
14+ certPem := []byte (`-----BEGIN CERTIFICATE-----
15+ MIIBhTCCASugAwIBAgIQIRi6zePL6mKjOipn+dNuaTAKBggqhkjOPQQDAjASMRAw
16+ DgYDVQQKEwdBY21lIENvMB4XDTE3MTAyMDE5NDMwNloXDTE4MTAyMDE5NDMwNlow
17+ EjEQMA4GA1UEChMHQWNtZSBDbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD0d
18+ 7VNhbWvZLWPuj/RtHFjvtJBEwOkhbN/BnnE8rnZR8+sbwnc/KhCk3FhnpHZnQz7B
19+ 5aETbbIgmuvewdjvSBSjYzBhMA4GA1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggr
20+ BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdEQQiMCCCDmxvY2FsaG9zdDo1
21+ NDUzgg4xMjcuMC4wLjE6NTQ1MzAKBggqhkjOPQQDAgNIADBFAiEA2zpJEPQyz6/l
22+ Wf86aX6PepsntZv2GYlA5UpabfT2EZICICpJ5h/iI+i341gBmLiAFQOyTDT+/wQc
23+ 6MF9+Yw1Yy0t
24+ -----END CERTIFICATE-----` )
25+ keyPem := []byte (`-----BEGIN EC PRIVATE KEY-----
26+ MHcCAQEEIIrYSSNQFaA2Hwf1duRSxKtLYX5CB04fSeQ6tF1aY/PuoAoGCCqGSM49
27+ AwEHoUQDQgAEPR3tU2Fta9ktY+6P9G0cWO+0kETA6SFs38GecTyudlHz6xvCdz8q
28+ EKTcWGekdmdDPsHloRNtsiCa697B2O9IFA==
29+ -----END EC PRIVATE KEY-----` )
30+ testCert , err := tls .X509KeyPair (certPem , keyPem )
31+ if err != nil {
32+ t .Fatal (err )
33+ }
34+
1435 cases := []struct {
1536 url string
1637 o * Options // expected value
@@ -30,7 +51,24 @@ func TestParseURL(t *testing.T) {
3051 o : & Options {Addr : "12345:6379" },
3152 }, {
3253 url : "rediss://localhost:123" ,
33- o : & Options {Addr : "localhost:123" , TLSConfig : & tls.Config { /* no deep comparison */ }},
54+ o : & Options {Addr : "localhost:123" , TLSConfig : & tls.Config {ServerName : "localhost" }},
55+ }, {
56+ url : "rediss://localhost:123?ServerName=abc&TLSMinVersion=1&TLSMaxVersion=3&TLSInsecureSkipVerify=true" ,
57+ o : & Options {Addr : "localhost:123" , TLSConfig : & tls.Config {ServerName : "abc" , MinVersion : 1 , MaxVersion : 3 , InsecureSkipVerify : true }},
58+ }, {
59+ url : "rediss://localhost:123?TLSCertPEMFile=./testdata/testcert.pem&TLSKeyPEMFile=./testdata/testkey.pem" ,
60+ o : & Options {Addr : "localhost:123" , TLSConfig : & tls.Config {ServerName : "localhost" , Certificates : []tls.Certificate {testCert }}},
61+ }, {
62+ url : "rediss://localhost:123?TLSCertPEMFile=./testdata/doesnotexist.pem&TLSKeyPEMFile=./testdata/testkey.pem" ,
63+ o : & Options {Addr : "localhost:123" , TLSConfig : & tls.Config {ServerName : "abc" }},
64+ err : errors .New ("redis: Error loading X509 Key Pair: open ./testdata/doesnotexist.pem: no such file or directory" ),
65+ }, {
66+ url : "rediss://localhost:123?TLSCertPEMFile=./testdata/testcert.pem" ,
67+ o : & Options {Addr : "localhost:123" , TLSConfig : & tls.Config {ServerName : "abc" }},
68+ err : errors .New ("redis: TLSCertPEMFile and TLSKeyPEMFile URL parameters must be both set or both omitted" ),
69+ }, {
70+ url : "rediss://localhost:123?TLSKeyPEMFile=./testdata/testkey.pem" ,
71+ err : errors .New ("redis: TLSCertPEMFile and TLSKeyPEMFile URL parameters must be both set or both omitted" ),
3472 }, {
3573 url : "redis://:bar@localhost:123" ,
3674 o : & Options {Addr : "localhost:123" , Password : "bar" },
@@ -189,6 +227,39 @@ func comprareOptions(t *testing.T, actual, expected *Options) {
189227 if actual .IdleCheckFrequency != expected .IdleCheckFrequency {
190228 t .Errorf ("IdleCheckFrequency: got %v, expected %v" , actual .IdleCheckFrequency , expected .IdleCheckFrequency )
191229 }
230+
231+ if (actual .TLSConfig == nil ) != (expected .TLSConfig == nil ) {
232+ t .Errorf ("TLSConfig nil: got %v, expected %v" , actual .TLSConfig == nil , expected .TLSConfig == nil )
233+ }
234+
235+ if (actual .TLSConfig != nil ) && (expected .TLSConfig != nil ) {
236+ if actual .TLSConfig .MinVersion != expected .TLSConfig .MinVersion {
237+ t .Errorf ("TLSConfig.MinVersion: got %v, expected %v" , actual .TLSConfig .MinVersion , expected .TLSConfig .MinVersion )
238+ }
239+
240+ if actual .TLSConfig .MaxVersion != expected .TLSConfig .MaxVersion {
241+ t .Errorf ("TLSConfig.MaxVersion: got %v, expected %v" , actual .TLSConfig .MaxVersion , expected .TLSConfig .MaxVersion )
242+ }
243+
244+ if actual .TLSConfig .ServerName != expected .TLSConfig .ServerName {
245+ t .Errorf ("TLSConfig.ServerName: got %v, expected %v" , actual .TLSConfig .ServerName , expected .TLSConfig .ServerName )
246+ }
247+
248+ if actual .TLSConfig .InsecureSkipVerify != expected .TLSConfig .InsecureSkipVerify {
249+ t .Errorf ("TLSConfig.InsecureSkipVerify: got %v, expected %v" , actual .TLSConfig .InsecureSkipVerify , expected .TLSConfig .InsecureSkipVerify )
250+ }
251+
252+ if len (actual .TLSConfig .Certificates ) != len (expected .TLSConfig .Certificates ) {
253+ t .Errorf ("TLSConfig.Certificates: got %v, expected %v" , actual .TLSConfig .Certificates , expected .TLSConfig .Certificates )
254+ }
255+
256+ for i , actualCert := range actual .TLSConfig .Certificates {
257+ expectedCert := expected .TLSConfig .Certificates [i ]
258+ if ! actualCert .Leaf .Equal (expectedCert .Leaf ) {
259+ t .Errorf ("TLSConfig.Certificates[%d].Leaf: got %v, expected %v" , i , actual .TLSConfig .Certificates , expected .TLSConfig .Certificates )
260+ }
261+ }
262+ }
192263}
193264
194265// Test ReadTimeout option initialization, including special values -1 and 0.
0 commit comments