public async Task When_server_returns_HTTP_error_a_reconnect_attempt_is_made() { var messageData = "hello"; var handler = new StubMessageHandler(); handler.QueueResponse(StubResponse.WithStatus(HttpStatusCode.Unauthorized)); handler.QueueResponse(StubResponse.StartStream( StreamAction.Write("event: put\ndata: " + messageData + "\n\n"))); var evt = new EventSource(new Configuration(_uri, handler)); var errorReceiver = new ErrorReceiver(); evt.Error += errorReceiver; var messageReceiver = new MessageReceiver(); evt.MessageReceived += messageReceiver; evt.MessageReceived += (_, e) => evt.Close(); await evt.StartAsync(); Assert.Equal(2, handler.GetRequests().Count()); Assert.NotNull(errorReceiver.ErrorReceived); var ex = Assert.IsType <EventSourceServiceUnsuccessfulResponseException>(errorReceiver.ErrorReceived); Assert.Equal((int)HttpStatusCode.Unauthorized, ex.StatusCode); Assert.Equal(messageData, messageReceiver.RequireSingleEvent().Message.Data); }
public void ReconnectAfterHttpError() { HttpStatusCode error1 = HttpStatusCode.BadRequest, error2 = HttpStatusCode.InternalServerError; var message = new MessageEvent("put", "hello", _uri); var handler = new StubMessageHandler(); handler.QueueResponse(StubResponse.WithStatus(error1)); handler.QueueResponse(StubResponse.WithStatus(error2)); handler.QueueResponse(StubResponse.StartStream(StreamAction.Write(message))); using (var es = MakeEventSource(handler, builder => builder.InitialRetryDelay(TimeSpan.FromMilliseconds(20)))) { var eventSink = new EventSink(es, _testLogging); _ = Task.Run(es.StartAsync); var action1 = eventSink.ExpectAction(); var ex1 = Assert.IsType <EventSourceServiceUnsuccessfulResponseException>(action1.Exception); Assert.Equal((int)error1, ex1.StatusCode); eventSink.ExpectActions(EventSink.ClosedAction()); var action2 = eventSink.ExpectAction(); var ex2 = Assert.IsType <EventSourceServiceUnsuccessfulResponseException>(action2.Exception); Assert.Equal((int)error2, ex2.StatusCode); eventSink.ExpectActions( EventSink.ClosedAction(), EventSink.OpenedAction(), EventSink.MessageReceivedAction(message) ); } }
public async Task CustomHttpClientIsNotClosedWhenEventSourceCloses() { var handler = new StubMessageHandler(StubResponse.WithStatus(HttpStatusCode.OK)); using (var client = new HttpClient(handler)) { var es = new EventSource(Configuration.Builder(_uri).HttpClient(client).Build()); es.Close(); await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, _uri)); } }
public async Task When_error_handler_closes_event_source_no_reconnect_attempt_is_made() { var handler = new StubMessageHandler(); handler.QueueResponse(StubResponse.WithStatus(HttpStatusCode.Unauthorized)); handler.QueueResponse(StubResponse.StartStream()); var evt = new EventSource(new Configuration(_uri, handler)); evt.Error += (_, e) => evt.Close(); await evt.StartAsync(); Assert.Equal(1, handler.GetRequests().Count()); }
public async void NoReconnectAttemptIsMadeIfErrorHandlerClosesEventSource() { var handler = new StubMessageHandler(); handler.QueueResponse(StubResponse.WithStatus(HttpStatusCode.Unauthorized)); handler.QueueResponse(StubResponse.StartStream()); using (var es = MakeEventSource(handler)) { es.Error += (_, e) => es.Close(); await es.StartAsync(); } Assert.Single(handler.GetRequests()); }
public async Task Given_status_code_when_the_http_response_is_received_then_error_event_should_occur(HttpStatusCode statusCode) { var handler = new StubMessageHandler(); handler.QueueResponse(StubResponse.WithStatus(statusCode)); var evt = new EventSource(new Configuration(_uri, handler)); var receiver = new ErrorReceiver(); evt.Error += receiver; evt.Error += (_, e) => evt.Close(); await evt.StartAsync(); Assert.NotNull(receiver.ErrorReceived); var ex = Assert.IsType <EventSourceServiceUnsuccessfulResponseException>(receiver.ErrorReceived); Assert.Equal((int)statusCode, ex.StatusCode); Assert.Equal(ReadyState.Closed, receiver.SourceStateReceived); Assert.Equal(ReadyState.Shutdown, evt.ReadyState); }