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 async Task Given_content_type_not_equal_to_eventstream_when_the_http_response_is_received_then_error_event_should_occur() { var handler = new StubMessageHandler(); var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("testing", System.Text.Encoding.UTF8) }; response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); handler.QueueResponse(StubResponse.WithResponse(response)); var config = new Configuration(_uri, handler); var evt = new EventSource(config); var receiver = new ErrorReceiver(); evt.Error += receiver; evt.Error += (_, e) => evt.Close(); await evt.StartAsync(); Assert.NotNull(receiver.ErrorReceived); Assert.Equal(ReadyState.Closed, receiver.SourceStateReceived); Assert.Equal(ReadyState.Shutdown, evt.ReadyState); }
public async Task When_response_exceeds_read_timeout_then_read_timeout_exception_occurs() { TimeSpan readTimeout = TimeSpan.FromSeconds(4); TimeSpan timeToWait = readTimeout.Add(TimeSpan.FromSeconds(1)); var handler = new StubMessageHandler(); handler.QueueResponse(StubResponse.StartStream( StreamAction.Write(":\n\n").AfterDelay(timeToWait))); handler.QueueResponse(StubResponse.StartStream()); var config = new ConfigurationBuilder(_uri).MessageHandler(handler).ReadTimeout(readTimeout).Build(); var evt = new EventSource(config); var receiver = new ErrorReceiver(); evt.Error += receiver; evt.Error += (_, e) => evt.Close(); await evt.StartAsync(); Assert.NotNull(receiver.ErrorReceived); Assert.Contains(receiver.ErrorReceived.Message, Resources.EventSourceService_Read_Timeout); Assert.Equal(ReadyState.Closed, receiver.SourceStateReceived); Assert.Equal(ReadyState.Shutdown, evt.ReadyState); }
public async Task When_server_returns_HTTP_error_a_reconnect_attempt_is_made() { var messageData = "hello"; var handler = new StubMessageHandler(); handler.QueueResponse(new HttpResponseMessage(HttpStatusCode.Unauthorized)); handler.QueueStringResponse("event: put\ndata: " + messageData + "\n\n"); var evt = new EventSource(new Configuration(_uri, handler)); var receiver = new ErrorReceiver(evt); string messageReceived = null; evt.MessageReceived += (_, e) => { messageReceived = e.Message.Data; evt.Close(); }; await evt.StartAsync(); Assert.Equal(2, handler.GetRequests().Count()); Assert.NotNull(receiver.ErrorReceived); var ex = Assert.IsType <EventSourceServiceUnsuccessfulResponseException>(receiver.ErrorReceived); Assert.Equal((int)HttpStatusCode.Unauthorized, ex.StatusCode); Assert.Equal(messageData, messageReceived); }
public async Task When_error_handler_closes_event_source_no_reconnect_attempt_is_made() { var handler = new StubMessageHandler(); handler.QueueResponse(new HttpResponseMessage(HttpStatusCode.Unauthorized)); var evt = new EventSource(new Configuration(_uri, handler)); var receiver = new ErrorReceiver(evt); receiver.CloseEventSourceOnError = true; await evt.StartAsync(); Assert.Equal(1, handler.GetRequests().Count()); }
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); }
public async Task When_response_exceeds_read_timeout_then_read_timeout_exception_occurs() { var commentSent = ":"; var handler = new StubMessageHandler(); handler.QueueStringResponse(commentSent); TimeSpan readTimeout = TimeSpan.FromSeconds(4); TimeSpan timeout = readTimeout.Add(TimeSpan.FromSeconds(1)); var evt = new StubEventSource(new Configuration(_uri, handler, readTimeout: readTimeout), (int)timeout.TotalMilliseconds); var receiver = new ErrorReceiver(evt); receiver.CloseEventSourceOnError = true; await evt.StartAsync(); Assert.NotNull(receiver.ErrorReceived); Assert.Contains(receiver.ErrorReceived.Message, Resources.EventSourceService_Read_Timeout); Assert.Equal(ReadyState.Closed, receiver.SourceStateReceived); Assert.Equal(ReadyState.Shutdown, evt.ReadyState); }
public async Task Given_204_when_the_http_response_is_received_then_error_event_should_occur() { // Arrange var handler = new StubMessageHandler(); handler.QueueResponse(new HttpResponseMessage(HttpStatusCode.NoContent)); var evt = new EventSource(new Configuration(_uri, handler)); var receiver = new ErrorReceiver(evt); receiver.CloseEventSourceOnError = true; //Act await evt.StartAsync(); //// Assert Assert.NotNull(receiver.ErrorReceived); var ex = Assert.IsType <EventSourceServiceUnsuccessfulResponseException>(receiver.ErrorReceived); Assert.Equal(204, ex.StatusCode); Assert.Equal(ReadyState.Closed, receiver.SourceStateReceived); Assert.Equal(ReadyState.Shutdown, evt.ReadyState); }