(t *testing.T)
| 194 | } |
| 195 | |
| 196 | func TestOneWayWebSocketEventSender(t *testing.T) { |
| 197 | t.Parallel() |
| 198 | |
| 199 | newBaseRequest := func(ctx context.Context) *http.Request { |
| 200 | url := "ws://www.fake-website.com/logs" |
| 201 | req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) |
| 202 | require.NoError(t, err) |
| 203 | |
| 204 | h := req.Header |
| 205 | h.Add("Connection", "Upgrade") |
| 206 | h.Add("Upgrade", "websocket") |
| 207 | h.Add("Sec-WebSocket-Version", "13") |
| 208 | h.Add("Sec-WebSocket-Key", "dGhlIHNhbXBsZSBub25jZQ==") // Just need any string |
| 209 | |
| 210 | return req |
| 211 | } |
| 212 | |
| 213 | newOneWayWriter := func(t *testing.T) mockOneWaySocketWriter { |
| 214 | mockServer, mockClient := net.Pipe() |
| 215 | recorder := httptest.NewRecorder() |
| 216 | |
| 217 | return mockOneWaySocketWriter{ |
| 218 | testContext: t, |
| 219 | serverConn: mockServer, |
| 220 | clientConn: mockClient, |
| 221 | serverRecorder: recorder, |
| 222 | serverReadWriter: bufio.NewReadWriter( |
| 223 | bufio.NewReader(mockServer), |
| 224 | bufio.NewWriter(mockServer), |
| 225 | ), |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | t.Run("Produces error if the socket connection could not be established", func(t *testing.T) { |
| 230 | t.Parallel() |
| 231 | |
| 232 | incorrectProtocols := []struct { |
| 233 | major int |
| 234 | minor int |
| 235 | proto string |
| 236 | }{ |
| 237 | {0, 9, "HTTP/0.9"}, |
| 238 | {1, 0, "HTTP/1.0"}, |
| 239 | } |
| 240 | for _, p := range incorrectProtocols { |
| 241 | ctx := testutil.Context(t, testutil.WaitShort) |
| 242 | req := newBaseRequest(ctx) |
| 243 | req.ProtoMajor = p.major |
| 244 | req.ProtoMinor = p.minor |
| 245 | req.Proto = p.proto |
| 246 | |
| 247 | writer := newOneWayWriter(t) |
| 248 | _, _, err := httpapi.OneWayWebSocketEventSender(slogtest.Make(t, nil))(writer, req) |
| 249 | require.ErrorContains(t, err, p.proto) |
| 250 | } |
| 251 | }) |
| 252 | |
| 253 | t.Run("Returned callback can publish new event to WebSocket connection", func(t *testing.T) { |
nothing calls this directly
no test coverage detected