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()
                        );
                }
            }
        }
Exemplo n.º 3
0
        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()
                        );
                }
            }
        }