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."); } }
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); } }