public void DetectReadTimeout() { TimeSpan readTimeout = TimeSpan.FromMilliseconds(300); TimeSpan timeToWait = readTimeout + readTimeout; var handler = new StubMessageHandler(); handler.QueueResponse(StubResponse.StartStream( StreamAction.Write(":comment1\n"), StreamAction.Write(":comment2\n"), StreamAction.Write(":comment3\n").AfterDelay(timeToWait)) ); handler.QueueResponse(StubResponse.StartStream()); using (var es = StartEventSource(handler, out var eventSink, config => config.ReadTimeout(readTimeout))) { eventSink.ExpectActions( EventSink.OpenedAction(), EventSink.CommentReceivedAction(":comment1"), EventSink.CommentReceivedAction(":comment2"), EventSink.ErrorAction(new ReadTimeoutException()), EventSink.ClosedAction() ); } }
public void ReadTimeoutIsDetected(bool utf8Mode) { TimeSpan readTimeout = TimeSpan.FromMilliseconds(200); var streamHandler = Handlers.StartChunks("text/event-stream") .Then(Handlers.WriteChunkString("data: event1\n\ndata: e")) .Then(Handlers.Delay(readTimeout + readTimeout)) .Then(Handlers.WriteChunkString("vent2\n\n")); using (var server = HttpServer.Start(streamHandler)) { var config = Configuration.Builder(server.Uri) .LogAdapter(_testLogging) .ReadTimeout(readTimeout) .PreferDataAsUtf8Bytes(utf8Mode) .Build(); using (var es = new EventSource(config)) { var sink = new EventSink(es) { Output = _testLogger.Debug }; _ = es.StartAsync(); sink.ExpectActions( EventSink.OpenedAction(), EventSink.MessageReceivedAction(new MessageEvent(MessageEvent.DefaultName, "event1", server.Uri)), EventSink.ErrorAction(new ReadTimeoutException()), EventSink.ClosedAction() ); } } }
public void DetectReadTimeout() { TimeSpan readTimeout = TimeSpan.FromMilliseconds(300); TimeSpan timeToWait = readTimeout + readTimeout; var handler = StartStream() .Then(Handlers.WriteChunkString(":comment1\n")) .Then(Handlers.WriteChunkString(":comment2\n")) .Then(Handlers.Delay(timeToWait)) .Then(Handlers.WriteChunkString(":comment3\n")); WithServerAndStartedEventSource(handler, config => config.ReadTimeout(readTimeout), (_, eventSink) => { eventSink.ExpectActions( EventSink.OpenedAction(), EventSink.CommentReceivedAction(":comment1"), EventSink.CommentReceivedAction(":comment2"), EventSink.ErrorAction(new ReadTimeoutException()), EventSink.ClosedAction() ); }); }
public void ReadTimeoutIsDetected(bool utf8Mode) { TimeSpan readTimeout = TimeSpan.FromMilliseconds(200); IEnumerable <string> DoChunks() { yield return(""); yield return("data: event1\n\ndata: e"); Thread.Sleep(readTimeout + readTimeout); yield return("vent2\n\n"); } using (var server = StartWebServerOnAvailablePort(out var uri, RespondWithChunks("text/event-stream", DoChunks))) { var config = Configuration.Builder(uri) .LogAdapter(_testLogging) .ReadTimeout(readTimeout) .PreferDataAsUtf8Bytes(utf8Mode) .Build(); using (var es = new EventSource(config)) { var sink = new EventSink(es) { Output = _testLogger.Debug }; _ = es.StartAsync(); sink.ExpectActions( EventSink.OpenedAction(), EventSink.MessageReceivedAction(new MessageEvent(MessageEvent.DefaultName, "event1", uri)), EventSink.ErrorAction(new ReadTimeoutException()), EventSink.ClosedAction() ); } } }