public void CanHandleMultipleRequests() { var stream1 = GetResponseStream(NntpResponseCode.ArticleRetrievedHeadAndBodyFollows, true, true); var stream2 = GetResponseStream(NntpResponseCode.ArticleRetrievedHeadAndBodyFollows, false, true); MemoryStream stream = new MemoryStream(); JoinStreams(stream, stream1, stream2); Mock<StreamAccessor> streamAccessorMock = new Mock<StreamAccessor>(stream, null); streamAccessorMock.SetupGet(s => s.BaseStream).CallBase().Verifiable(); streamAccessorMock.Setup(s => s.AutoFlush).CallBase().Verifiable(); streamAccessorMock.Setup(s => s.NewLine).CallBase().Verifiable(); streamAccessorMock.Setup(s => s.ReadLine()).CallBase().Verifiable(); streamAccessorMock.Setup(s => s.WriteLine(It.IsAny<string>())).Verifiable(); NntpProtocolHandler handler = new NntpProtocolHandler(streamAccessorMock.Object); var response1 = handler.PerformRequest(new NntpRequest(NntpCommand.Article, false, "185")); Assert.AreEqual(response1.ResponseCode, NntpResponseCode.ArticleRetrievedHeadAndBodyFollows); Assert.IsNotNull(response1.StatusLine); Assert.IsNotNull(response1.Payload); var response2 = handler.PerformRequest(new NntpRequest(NntpCommand.Article, false, "186")); Assert.AreEqual(response2.ResponseCode, NntpResponseCode.ArticleRetrievedHeadAndBodyFollows); Assert.IsNotNull(response2.StatusLine); Assert.IsNotNull(response2.Payload); }
public void StreamAccessorTimeoutsAreUnhandled() { var stream = GetResponseStream(NntpResponseCode.ArticleRetrievedHeadAndBodyFollows, true, true); Mock<StreamAccessor> streamAccessorMock = new Mock<StreamAccessor>(stream, null); streamAccessorMock.SetupGet(s => s.BaseStream).CallBase().Verifiable(); streamAccessorMock.Setup(s => s.AutoFlush).CallBase().Verifiable(); streamAccessorMock.Setup(s => s.NewLine).CallBase().Verifiable(); int callCount = 0; streamAccessorMock.Setup(s => s.ReadLine()).Callback(() => { if(callCount >= 2)//Timeout on body read Thread.Sleep(3000); callCount++; }).CallBase(); streamAccessorMock.Setup(s => s.WriteLine(It.IsAny<string>())).Verifiable(); NntpProtocolHandler handler = new NntpProtocolHandler(streamAccessorMock.Object, 2000); //set timeout to 2 seconds //We need the timeout exception to buble up to the caller so they are aware they need to retry var response = handler.PerformRequest(new NntpRequest(NntpCommand.Article, false, "123")); // No data available, this should timeout }