@@ -143,6 +143,33 @@ func TestAccept(t *testing.T) {
143
143
_ , err := Accept (w , r , nil )
144
144
assert .Contains (t , err , `failed to hijack connection` )
145
145
})
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
+
146
173
t .Run ("closeRace" , func (t * testing.T ) {
147
174
t .Parallel ()
148
175
@@ -534,3 +561,14 @@ var _ http.Hijacker = mockHijacker{}
534
561
func (mj mockHijacker ) Hijack () (net.Conn , * bufio.ReadWriter , error ) {
535
562
return mj .hijack ()
536
563
}
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