@@ -642,6 +642,67 @@ func TestEval(t *testing.T) {
642642 require .Falsef (t , val , "expected `false` with mode `RW`" )
643643}
644644
645+ type Member struct {
646+ id uint
647+ val string
648+ }
649+
650+ func (m * Member ) DecodeMsgpack (d * decoder ) error {
651+ var err error
652+ var l int
653+ if l , err = d .DecodeArrayLen (); err != nil {
654+ return err
655+ }
656+ if l != 2 {
657+ return fmt .Errorf ("array len doesn't match: %d" , l )
658+ }
659+ if m .id , err = d .DecodeUint (); err != nil {
660+ return err
661+ }
662+ if m .val , err = d .DecodeString (); err != nil {
663+ return err
664+ }
665+ return nil
666+ }
667+
668+ func TestExecute (t * testing.T ) {
669+ test_helpers .SkipIfSQLUnsupported (t )
670+
671+ roles := []bool {false , true , false , false , true }
672+
673+ err := test_helpers .SetClusterRO (servers , connOpts , roles )
674+ require .Nilf (t , err , "fail to set roles for cluster" )
675+
676+ connPool , err := connection_pool .Connect (servers , connOpts )
677+ require .Nilf (t , err , "failed to connect" )
678+ require .NotNilf (t , connPool , "conn is nil after Connect" )
679+
680+ defer connPool .Close ()
681+
682+ request := "SELECT NAME0, NAME1 FROM SQL_TEST WHERE NAME0 == 1;"
683+ // Execute
684+ resp , err := connPool .Execute (request , []interface {}{}, connection_pool .ANY )
685+ require .Nilf (t , err , "failed to Execute" )
686+ require .NotNilf (t , resp , "response is nil after Execute" )
687+ require .GreaterOrEqualf (t , len (resp .Data ), 1 , "response.Data is empty after Execute" )
688+ require .Equalf (t , len (resp .Data [0 ].([]interface {})), 2 , "unexpected response" )
689+
690+ // ExecuteTyped
691+ mem := []Member {}
692+ info , _ , err := connPool .ExecuteTyped (request , []interface {}{}, & mem , connection_pool .ANY )
693+ require .Nilf (t , err , "failed to ExecuteTyped" )
694+ require .Equalf (t , info .AffectedCount , uint64 (0 ), "unexpected info.AffectedCount" )
695+ require .Equalf (t , len (mem ), 1 , "wrong count of results" )
696+
697+ // ExecuteAsync
698+ fut := connPool .ExecuteAsync (request , []interface {}{}, connection_pool .ANY )
699+ resp , err = fut .Get ()
700+ require .Nilf (t , err , "failed to ExecuteAsync" )
701+ require .NotNilf (t , resp , "response is nil after ExecuteAsync" )
702+ require .GreaterOrEqualf (t , len (resp .Data ), 1 , "response.Data is empty after ExecuteAsync" )
703+ require .Equalf (t , len (resp .Data [0 ].([]interface {})), 2 , "unexpected response" )
704+ }
705+
645706func TestRoundRobinStrategy (t * testing.T ) {
646707 roles := []bool {false , true , false , false , true }
647708
0 commit comments