예제 #1
0
        public async Task Run()
        {
            var fakeHandler = new FakeHttpMessageHandler();
            var stream      = $"event: open\ndata: hello\n\nid: {_eventId}\ndata: {_json}\n\n";

            fakeHandler.QueueResponse(FakeResponse.StartsStream(StreamAction.Write(stream)));

            _eventSource = new SSEEventSource(new Uri("http://test.com"),
                                              builder => builder.MessageHandler(fakeHandler));

            _requestBuilder = new FakeStreamableRequestBuilder(new Uri("https://horizon-testnet.stellar.org"), "test",
                                                               null, _eventSource);
            var handler = new EventHandler <T>((sender, e) =>
            {
                _eventSource.Shutdown();
                _testAction(e);
            });
            var task          = _requestBuilder.Stream(handler).Connect();
            var timeoutTask   = Task.Delay(TimeSpan.FromSeconds(5.0));
            var completedTask = await Task.WhenAny(task, timeoutTask).ConfigureAwait(false);

            if (completedTask != task)
            {
                throw new Exception("Task did not complete.");
            }
        }
예제 #2
0
 public StreamableTest(string json, Action <T> action, string eventId = null)
 {
     _json           = json.Replace("\r\n", "").Replace("\n", "");
     _testAction     = action;
     _received       = null;
     _eventSource    = null;
     _requestBuilder = null;
     _eventId        = eventId ?? "1234";
 }
        public async Task TestHelloStream()
        {
            // Check we skip the first message with "hello" data
            var fakeHandler = new FakeHttpMessageHandler();
            var stream      = "event: open\ndata: hello\n\ndata: foobar\n\n";

            fakeHandler.QueueResponse(FakeResponse.StartsStream(StreamAction.Write(stream)));

            using (var eventSource = new SSEEventSource(_uri, builder => builder.MessageHandler(fakeHandler)))
            {
                string dataReceived = null;
                eventSource.Message += (sender, args) =>
                {
                    dataReceived = args.Data;
                    eventSource.Shutdown();
                };

                await eventSource.Connect();

                Assert.AreEqual("foobar", dataReceived);
            }
        }
        public async Task TestStream()
        {
            var json = File.ReadAllText(Path.Combine("testdata", "ledger.json"))
                       .Replace(Environment.NewLine, "");
            var fakeHandler = new FakeHttpMessageHandler();
            var stream      = $"event: open\ndata: hello\n\nid: 1234\ndata: {json}\n\n";

            fakeHandler.QueueResponse(FakeResponse.StartsStream(StreamAction.Write(stream)));

            var eventSource = new SSEEventSource(new Uri("http://test.com"),
                                                 builder => builder.MessageHandler(fakeHandler));

            LedgerResponse dataReceived = null;

            eventSource.Message += (sender, args) =>
            {
                dataReceived = JsonSingleton.GetInstance <LedgerResponse>(args.Data);
                eventSource.Shutdown();
            };

            await eventSource.Connect();

            LedgerDeserializeTest.AssertTestData(dataReceived);
        }
        public async Task TestStreamErrorEvent()
        {
            var fakeHandler = new FakeHttpMessageHandler();

            fakeHandler.QueueResponse(FakeResponse.WithIOError());
            fakeHandler.QueueResponse(FakeResponse.WithIOError());
            fakeHandler.QueueResponse(FakeResponse.StartsStream());

            using (var eventSource = new SSEEventSource(_uri, builder => builder.MessageHandler(fakeHandler)))
            {
                var errorCount = 0;
                eventSource.Error += (sender, args) =>
                {
                    errorCount += 1;
                    if (errorCount >= 2)
                    {
                        eventSource.Shutdown();
                    }
                };
                await eventSource.Connect();

                Assert.AreEqual(2, errorCount);
            }
        }