@@ -108,6 +108,40 @@ func (dbt *DBTest) mustQuery(query string, args ...interface{}) (rows *sql.Rows)
108108 return rows
109109}
110110
111+ func TestReuseClosedConnection (t * testing.T ) {
112+ // this test does not use sql.database, it uses the driver directly
113+ if ! available {
114+ t .Skipf ("MySQL-Server not running on %s" , netAddr )
115+ }
116+ driver := & MySQLDriver {}
117+ conn , err := driver .Open (dsn )
118+ if err != nil {
119+ t .Fatalf ("Error connecting: %s" , err .Error ())
120+ }
121+ stmt , err := conn .Prepare ("DO 1" )
122+ if err != nil {
123+ t .Fatalf ("Error preparing statement: %s" , err .Error ())
124+ }
125+ _ , err = stmt .Exec (nil )
126+ if err != nil {
127+ t .Fatalf ("Error executing statement: %s" , err .Error ())
128+ }
129+ err = conn .Close ()
130+ if err != nil {
131+ t .Fatalf ("Error closing connection: %s" , err .Error ())
132+ }
133+ defer func () {
134+ if err := recover (); err != nil {
135+ t .Errorf ("Panic after reusing a closed connection: %v" , err )
136+ }
137+ }()
138+ _ , err = stmt .Exec (nil )
139+ if err != nil && err != errInvalidConn {
140+ t .Errorf ("Unexpected error '%s', expected '%s'" ,
141+ err .Error (), errInvalidConn .Error ())
142+ }
143+ }
144+
111145func TestCharset (t * testing.T ) {
112146 if ! available {
113147 t .Skipf ("MySQL-Server not running on %s" , netAddr )
0 commit comments