6
6
"context"
7
7
"encoding/json"
8
8
"fmt"
9
- "io"
10
9
"net"
11
10
"net/http"
12
11
"net/http/httptest"
@@ -162,16 +161,17 @@ func TestWebsocketCloseMsg(t *testing.T) {
162
161
163
162
type mockHijacker struct {
164
163
http.ResponseWriter
165
- connection net.Conn
164
+ serverConn net.Conn
165
+ clientConn net.Conn
166
166
rw * bufio.ReadWriter
167
167
}
168
168
169
- func (mh mockHijacker ) Hijack () (net.Conn , * bufio.ReadWriter , error ) {
170
- return mh . connection , mh .rw , nil
169
+ func (m mockHijacker ) Hijack () (net.Conn , * bufio.ReadWriter , error ) {
170
+ return m . serverConn , m .rw , nil
171
171
}
172
172
173
- func (mh mockHijacker ) Flush () {
174
- if f , ok := mh .ResponseWriter .(http.Flusher ); ok {
173
+ func (m mockHijacker ) Flush () {
174
+ if f , ok := m .ResponseWriter .(http.Flusher ); ok {
175
175
f .Flush ()
176
176
}
177
177
}
@@ -184,32 +184,29 @@ func TestOneWayWebSocket(t *testing.T) {
184
184
ctx := testutil .Context (t , testutil .WaitShort )
185
185
req , err := http .NewRequestWithContext (ctx , http .MethodGet , url , nil )
186
186
require .NoError (t , err )
187
- req .Header = http.Header {
188
- "Connection" : {"Upgrade" },
189
- "Upgrade" : {"websocket" },
190
- "Sec-WebSocket-Version" : {"13" },
191
- "Sec-WebSocket-Key" : {"dGhlIHNhbXBsZSBub25jZQ==" },
192
- }
193
- // Todo: Figure out why headers are missing without these calls
194
- req .Header .Add ("Sec-WebSocket-Version" , "13" )
195
- req .Header .Add ("Sec-WebSocket-Key" , "dGhlIHNhbXBsZSBub25jZQ==" )
187
+
188
+ h := req .Header
189
+ h .Add ("Connection" , "Upgrade" )
190
+ h .Add ("Upgrade" , "websocket" )
191
+ h .Add ("Sec-WebSocket-Version" , "13" )
192
+ h .Add ("Sec-WebSocket-Key" , "dGhlIHNhbXBsZSBub25jZQ==" )
196
193
197
194
return req
198
195
}
199
196
200
- wrapWriter := func (rw http.ResponseWriter , r io.Reader ) http.ResponseWriter {
201
- server , _ := net .Pipe ()
202
- reader := bufio .NewReader (r )
203
- writer := bufio .NewWriter (rw )
197
+ newMockHijacker := func () mockHijacker {
198
+ server , client := net .Pipe ()
199
+ reader := bufio .NewReader (strings .NewReader ("" ))
200
+ recorder := httptest .NewRecorder ()
201
+ writer := bufio .NewWriter (recorder )
204
202
readWriter := bufio .NewReadWriter (reader , writer )
205
203
206
- hijacker := mockHijacker {
207
- connection : server ,
208
- ResponseWriter : rw ,
204
+ return mockHijacker {
205
+ serverConn : server ,
206
+ clientConn : client ,
207
+ ResponseWriter : recorder ,
209
208
rw : readWriter ,
210
209
}
211
-
212
- return hijacker
213
210
}
214
211
215
212
t .Run ("Produces an error if the socket connection could not be established" , func (t * testing.T ) {
@@ -237,10 +234,9 @@ func TestOneWayWebSocket(t *testing.T) {
237
234
t .Run ("Returned callback can publish a new event to the WebSocket connection" , func (t * testing.T ) {
238
235
t .Parallel ()
239
236
240
- recorder := httptest .NewRecorder ()
241
- writer := wrapWriter (recorder , strings .NewReader ("" ))
237
+ mock := newMockHijacker ()
242
238
send , _ , err := httpapi .OneWayWebSocket [codersdk.ServerSentEvent ](
243
- writer ,
239
+ mock ,
244
240
createBaseRequest (t ),
245
241
)
246
242
require .NoError (t , err )
0 commit comments