protected void GivenLogReader(string logFileName, long length, int maxStreams)
 {
     LogReaderFactory.Setup(x => x.Create(logFileName, It.IsInRange(0L, Math.Max(CurrentLogFilePosition, length), Range.Inclusive)))
     .Returns((string fileName, long position) =>
     {
         var internalPosition = position > length ? length : position;
         var streamsLeft      = maxStreams;
         var reader           = _mockRepository.Create <ILogReader>();
         reader.SetupGet(x => x.Position).Returns(() => internalPosition);
         reader.Setup(x => x.ReadLine()).Returns(() =>
         {
             internalPosition++;
             streamsLeft--;
             if (internalPosition > length || streamsLeft < 0)
             {
                 internalPosition = length;
                 return(new MemoryStream());
             }
             return(new MemoryStream(new byte[1]));
         });
         reader.Setup(x => x.Dispose()).Callback(() => { reader.Reset(); });
         return(reader.Object);
     });
 }
 protected void GivenLogReaderCreateIOError(string fileName, long position)
 {
     LogReaderFactory.Setup(x => x.Create(fileName, position)).Throws <IOException>();
 }