@@ -101,6 +101,41 @@ func (dbt *DBTest) mustQuery(query string, args ...interface{}) (rows *sql.Rows)
101101 return rows
102102}
103103
104+ func TestReuseClosedConnection (t * testing.T ) {
105+ // this test does not use sql.database, it uses the driver directly
106+ if ! available {
107+ t .Logf ("MySQL-Server not running on %s. Skipping TestReuseClosedConnection" , netAddr )
108+ return
109+ }
110+ driver := & mysqlDriver {}
111+ conn , err := driver .Open (dsn )
112+ if err != nil {
113+ t .Fatalf ("Error connecting: %s" , err .Error ())
114+ }
115+ stmt , err := conn .Prepare ("DO 1" )
116+ if err != nil {
117+ t .Fatalf ("Error preparing statement: %s" , err .Error ())
118+ }
119+ _ , err = stmt .Exec (nil )
120+ if err != nil {
121+ t .Fatalf ("Error executing statement: %s" , err .Error ())
122+ }
123+ err = conn .Close ()
124+ if err != nil {
125+ t .Fatalf ("Error closing connection: %s" , err .Error ())
126+ }
127+ defer func () {
128+ if err := recover (); err != nil {
129+ t .Errorf ("Panic after reusing a closed connection: %v" , err )
130+ }
131+ }()
132+ _ , err = stmt .Exec (nil )
133+ if err != nil && err != errInvalidConn {
134+ t .Errorf ("Unexpected error '%s', expected '%s'" ,
135+ err .Error (), errInvalidConn .Error ())
136+ }
137+ }
138+
104139func TestCharset (t * testing.T ) {
105140 mustSetCharset := func (charsetParam , expected string ) {
106141 db , err := sql .Open ("mysql" , strings .Replace (dsn , charset , charsetParam , 1 ))
0 commit comments