@@ -108,6 +108,40 @@ func (dbt *DBTest) mustQuery(query string, args ...interface{}) (rows *sql.Rows)
108
108
return rows
109
109
}
110
110
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
+
111
145
func TestCharset (t * testing.T ) {
112
146
if ! available {
113
147
t .Skipf ("MySQL-Server not running on %s" , netAddr )
0 commit comments