public void TestReConnectionAfterConnectionLost() { // setup Uri url = new Uri("http://test.com"); CancellationTokenSource cts = new CancellationTokenSource(); List<EventSourceState> states = new List<EventSourceState>(); ServiceResponseMock serviceResponseMock = new ServiceResponseMock(url, System.Net.HttpStatusCode.OK); WebRequesterFactoryMock factory = new WebRequesterFactoryMock(serviceResponseMock); ManualResetEvent stateIsOpen = new ManualResetEvent(false); ManualResetEvent stateIsClosed = new ManualResetEvent(false); TestableEventSource es = new TestableEventSource(url, factory); es.StateChanged += (o, e) => { states.Add(e.State); if (e.State == EventSourceState.OPEN) { stateIsClosed.Reset(); stateIsOpen.Set(); } else if (e.State == EventSourceState.CLOSED) { stateIsOpen.Reset(); stateIsClosed.Set(); } }; // act stateIsOpen.Reset(); es.Start(cts.Token); stateIsOpen.WaitOne(); states.Clear(); serviceResponseMock.DistantConnectionClose(); stateIsClosed.WaitOrThrow(); stateIsOpen.WaitOrThrow(); // assert Assert.AreEqual(states[0], EventSourceState.CLOSED); Assert.AreEqual(states[1], EventSourceState.CONNECTING); Assert.AreEqual(states[2], EventSourceState.OPEN); }