55 gosql "database/sql"
66 "fmt"
77 "math"
8- "net "
8+ "os "
99 "testing"
1010
1111 "github.com/dolthub/vitess/go/mysql"
2424 noUserFmt = "no_user:@tcp(%s:%d)/"
2525)
2626
27- func findEmptyPort () (int , error ) {
28- listener , err := net .Listen ("tcp" , ":0" )
29- if err != nil {
30- return - 1 , err
31- }
32- port := listener .Addr ().(* net.TCPAddr ).Port
33- if err = listener .Close (); err != nil {
34- return - 1 , err
35-
36- }
37- return port , nil
38- }
39-
4027// initTestServer initializes an in-memory server with the given port, but does not start it.
4128func initTestServer (port int ) (* server.Server , error ) {
4229 pro := memory .NewDBProvider ()
@@ -57,7 +44,7 @@ func initTestServer(port int) (*server.Server, error) {
5744
5845// TestSmoke checks that an in-memory server can be started and stopped without error.
5946func TestSmoke (t * testing.T ) {
60- port , err := findEmptyPort ()
47+ port , err := sql . GetEmptyPort ()
6148 require .NoError (t , err )
6249
6350 s , err := initTestServer (port )
@@ -314,7 +301,7 @@ func TestServerPreparedStatements(t *testing.T) {
314301 },
315302 }
316303
317- port , perr := findEmptyPort ()
304+ port , perr := sql . GetEmptyPort ()
318305 require .NoError (t , perr )
319306
320307 s , serr := initTestServer (port )
@@ -375,3 +362,92 @@ func TestServerPreparedStatements(t *testing.T) {
375362 })
376363 }
377364}
365+
366+ func TestServerVariables (t * testing.T ) {
367+ hostname , herr := os .Hostname ()
368+ require .NoError (t , herr )
369+
370+ port , perr := sql .GetEmptyPort ()
371+ require .NoError (t , perr )
372+
373+ s , serr := initTestServer (port )
374+ require .NoError (t , serr )
375+
376+ go s .Start ()
377+ defer s .Close ()
378+
379+ tests := []serverScriptTest {
380+ {
381+ name : "test that config system variables are properly set" ,
382+ setup : []string {},
383+ assertions : []serverScriptTestAssertion {
384+ {
385+ query : "select @@hostname, @@port, @@net_read_timeout, @@net_write_timeout" ,
386+ isExec : false ,
387+ expectedRows : []any {
388+ sql.Row {hostname , port , 1 , 1 },
389+ },
390+ checkRows : func (t * testing.T , rows * gosql.Rows , expectedRows []any ) (bool , error ) {
391+ var resHostname string
392+ var resPort int
393+ var resNetReadTimeout int
394+ var resNetWriteTimeout int
395+ var rowNum int
396+ for rows .Next () {
397+ if err := rows .Scan (& resHostname , & resPort , & resNetReadTimeout , & resNetWriteTimeout ); err != nil {
398+ return false , err
399+ }
400+ if rowNum >= len (expectedRows ) {
401+ return false , nil
402+ }
403+ expectedRow := expectedRows [rowNum ].(sql.Row )
404+ require .Equal (t , expectedRow [0 ].(string ), resHostname )
405+ require .Equal (t , expectedRow [1 ].(int ), resPort )
406+ }
407+ return true , nil
408+ },
409+ },
410+ },
411+ },
412+ }
413+
414+ for _ , test := range tests {
415+ t .Run (test .name , func (t * testing.T ) {
416+ conn , cerr := dbr .Open ("mysql" , fmt .Sprintf (noUserFmt , address , port ), nil )
417+ require .NoError (t , cerr )
418+ defer conn .Close ()
419+ commonSetup := []string {
420+ "create database test_db;" ,
421+ "use test_db;" ,
422+ }
423+ commonTeardown := []string {
424+ "drop database test_db" ,
425+ }
426+ for _ , stmt := range append (commonSetup , test .setup ... ) {
427+ _ , err := conn .Exec (stmt )
428+ require .NoError (t , err )
429+ }
430+ for _ , assertion := range test .assertions {
431+ t .Run (assertion .query , func (t * testing.T ) {
432+ if assertion .skip {
433+ t .Skip ()
434+ }
435+ rows , err := conn .Query (assertion .query , assertion .args ... )
436+ if assertion .expectErr {
437+ require .Error (t , err )
438+ return
439+ }
440+ require .NoError (t , err )
441+
442+ ok , err := assertion .checkRows (t , rows , assertion .expectedRows )
443+ require .NoError (t , err )
444+ require .True (t , ok )
445+ })
446+ }
447+ for _ , stmt := range append (commonTeardown ) {
448+ _ , err := conn .Exec (stmt )
449+ require .NoError (t , err )
450+ }
451+ })
452+ }
453+ }
0 commit comments