@@ -143,6 +143,33 @@ func TestAccept(t *testing.T) {
143143 _ , err := Accept (w , r , nil )
144144 assert .Contains (t , err , `failed to hijack connection` )
145145 })
146+
147+ t .Run ("wrapperHijackerIsUnwrapped" , func (t * testing.T ) {
148+ t .Parallel ()
149+
150+ rr := httptest .NewRecorder ()
151+ w := mockUnwrapper {
152+ ResponseWriter : rr ,
153+ unwrap : func () http.ResponseWriter {
154+ return mockHijacker {
155+ ResponseWriter : rr ,
156+ hijack : func () (conn net.Conn , writer * bufio.ReadWriter , err error ) {
157+ return nil , nil , errors .New ("haha" )
158+ },
159+ }
160+ },
161+ }
162+
163+ r := httptest .NewRequest ("GET" , "/" , nil )
164+ r .Header .Set ("Connection" , "Upgrade" )
165+ r .Header .Set ("Upgrade" , "websocket" )
166+ r .Header .Set ("Sec-WebSocket-Version" , "13" )
167+ r .Header .Set ("Sec-WebSocket-Key" , xrand .Base64 (16 ))
168+
169+ _ , err := Accept (w , r , nil )
170+ assert .Contains (t , err , "failed to hijack connection" )
171+ })
172+
146173 t .Run ("closeRace" , func (t * testing.T ) {
147174 t .Parallel ()
148175
@@ -534,3 +561,14 @@ var _ http.Hijacker = mockHijacker{}
534561func (mj mockHijacker ) Hijack () (net.Conn , * bufio.ReadWriter , error ) {
535562 return mj .hijack ()
536563}
564+
565+ type mockUnwrapper struct {
566+ http.ResponseWriter
567+ unwrap func () http.ResponseWriter
568+ }
569+
570+ var _ rwUnwrapper = mockUnwrapper {}
571+
572+ func (mu mockUnwrapper ) Unwrap () http.ResponseWriter {
573+ return mu .unwrap ()
574+ }
0 commit comments