@@ -6,6 +6,7 @@ package proxy
66import (
77 "context"
88 "database/sql"
9+ "fmt"
910 "net"
1011 "strings"
1112 "testing"
@@ -48,13 +49,13 @@ func TestGracefulShutdown(t *testing.T) {
4849 createClientConn := func () * client.ClientConnection {
4950 server .mu .Lock ()
5051 go func () {
51- conn , err := net .Dial ("tcp" , server .listener .Addr ().String ())
52+ conn , err := net .Dial ("tcp" , server .listeners [ 0 ] .Addr ().String ())
5253 require .NoError (t , err )
5354 require .NoError (t , conn .Close ())
5455 }()
55- conn , err := server .listener .Accept ()
56+ conn , err := server .listeners [ 0 ] .Accept ()
5657 require .NoError (t , err )
57- clientConn := client .NewClientConnection (lg , conn , nil , nil , hsHandler , 0 , & backend.BCConfig {})
58+ clientConn := client .NewClientConnection (lg , conn , nil , nil , hsHandler , 0 , "" , & backend.BCConfig {})
5859 server .mu .clients [1 ] = clientConn
5960 server .mu .Unlock ()
6061 return clientConn
@@ -107,18 +108,40 @@ func TestGracefulShutdown(t *testing.T) {
107108 }
108109}
109110
110- func TestRecoverPanic (t * testing.T ) {
111- lg , text := logger .CreateLoggerForTest (t )
111+ func TestMultiAddr (t * testing.T ) {
112+ lg , _ := logger .CreateLoggerForTest (t )
112113 certManager := cert .NewCertManager ()
113114 err := certManager .Init (& config.Config {}, lg , nil )
114115 require .NoError (t , err )
115116 server , err := NewSQLServer (lg , config.ProxyServer {
116- Addr : "0.0.0.0:6000 " ,
117+ Addr : "0.0.0.0:0,0.0.0.0:0 " ,
117118 }, certManager , & panicHsHandler {})
118119 require .NoError (t , err )
119120 server .Run (context .Background (), nil )
120121
121- mdb , err := sql .Open ("mysql" , "root@tcp(localhost:6000)/test" )
122+ require .Len (t , server .listeners , 2 )
123+ for _ , listener := range server .listeners {
124+ conn , err := net .Dial ("tcp" , listener .Addr ().String ())
125+ require .NoError (t , err )
126+ require .NoError (t , conn .Close ())
127+ }
128+
129+ require .NoError (t , server .Close ())
130+ certManager .Close ()
131+ }
132+
133+ func TestRecoverPanic (t * testing.T ) {
134+ lg , text := logger .CreateLoggerForTest (t )
135+ certManager := cert .NewCertManager ()
136+ err := certManager .Init (& config.Config {}, lg , nil )
137+ require .NoError (t , err )
138+ server , err := NewSQLServer (lg , config.ProxyServer {}, certManager , & panicHsHandler {})
139+ require .NoError (t , err )
140+ server .Run (context .Background (), nil )
141+
142+ _ , port , err := net .SplitHostPort (server .listeners [0 ].Addr ().String ())
143+ require .NoError (t , err )
144+ mdb , err := sql .Open ("mysql" , fmt .Sprintf ("root@tcp(localhost:%s)/test" , port ))
122145 require .NoError (t , err )
123146 // The first connection encounters panic.
124147 require .ErrorContains (t , mdb .Ping (), "invalid connection" )
0 commit comments