public void CaptureReader_Can_Read_Back_A_Stream_That_Was_Written_By_A_CaptureWriter() { var writeOperations = 100; var ms = new ConcurrentStream(new MemoryStream()); var sat = new Dictionary<Guid, short>(); sat.Add(Guid.NewGuid(), 24); sat.Add(Guid.NewGuid(), 25); sat.Add(Guid.NewGuid(), 26); var stateResolver = new Mock<IStateResolver>(); stateResolver.SetupGet(s => s.AllocationTable).Returns(sat); stateResolver.Setup(s => s.IsAllocated(It.IsAny<Guid>())).Returns<Guid>(g => sat.ContainsKey(g)); stateResolver.Setup(s => s.GetAllocatedId(It.IsAny<Guid>())).Returns<Guid>(g => sat[g]); //write operations var captureWriter = new CaptureWriter(ms, stateResolver.Object); for (int i = 0; i < writeOperations; i++) { var timestamp = DateTime.UtcNow; var randomData = new byte[1024]; new Random().NextBytes(randomData); var randomSat = (short)new Random().Next(24, 26); var captureState = new Mock<ICaptureState>(); captureState.Setup(c => c.Data).Returns(randomData); captureState.Setup(c => c.Guid).Returns(sat.Where(f => f.Value == randomSat).First().Key); captureState.Setup(c => c.Timestamp).Returns(timestamp); captureWriter.Write(captureState.Object); } //rewind the stream to the beginning ms.Position = 0; //read operations var readStateResolver = new StateResolver(); readStateResolver.Add(new SimpleStateController { Guid = sat.Where(f => f.Value == 24).First().Key }); readStateResolver.Add(new SimpleStateController { Guid = sat.Where(f => f.Value == 25).First().Key }); readStateResolver.Add(new SimpleStateController { Guid = sat.Where(f => f.Value == 26).First().Key }); var captureReader = new CaptureReader(ms, readStateResolver); while (captureReader.Position < captureReader.Count) { captureReader.Read(); } }
public void Peek_Does_Not_Advance_The_Read_Pointer() { var writeOperations = 100; var ms = new ConcurrentStream(new MemoryStream()); var sat = new Dictionary<Guid, short>(); sat.Add(Guid.NewGuid(), 24); sat.Add(Guid.NewGuid(), 25); sat.Add(Guid.NewGuid(), 26); var stateResolver = new Mock<IStateResolver>(); stateResolver.SetupGet(s => s.AllocationTable).Returns(sat); stateResolver.Setup(s => s.IsAllocated(It.IsAny<Guid>())).Returns<Guid>(g => sat.ContainsKey(g)); stateResolver.Setup(s => s.GetAllocatedId(It.IsAny<Guid>())).Returns<Guid>(g => sat[g]); //write operations var captureWriter = new CaptureWriter(ms, stateResolver.Object); for (int i = 0; i < writeOperations; i++) { var timestamp = DateTime.UtcNow; var randomData = new byte[1024]; new Random().NextBytes(randomData); var randomSat = (short)new Random().Next(24, 27); var captureState = new Mock<ICaptureState>(); captureState.Setup(c => c.Data).Returns(randomData); captureState.Setup(c => c.Guid).Returns(sat.Where(f => f.Value == randomSat).First().Key); captureState.Setup(c => c.Timestamp).Returns(timestamp); captureWriter.Write(captureState.Object); } //rewind the stream to the beginning ms.Position = 0; //read operations var readStateResolver = new StateResolver(); readStateResolver.Add(new SimpleStateController { Guid = sat.Where(f => f.Value == 24).First().Key }); readStateResolver.Add(new SimpleStateController { Guid = sat.Where(f => f.Value == 25).First().Key }); readStateResolver.Add(new SimpleStateController { Guid = sat.Where(f => f.Value == 26).First().Key }); var captureReader = new CaptureReader(ms, readStateResolver); var position = captureReader.Position; var state = captureReader.Peek(sat.Where(f => f.Value == (short)26).First().Key); Assert.NotNull(state); Assert.Equal(position, captureReader.Position); }
public void CaptureWriter_Updates_The_Length_Of_The_Stream_During_Writes() { var ms = new ConcurrentStream(new MemoryStream()); var sat = new Dictionary<Guid, short>(); sat.Add(Guid.NewGuid(), 24); sat.Add(Guid.NewGuid(), 25); sat.Add(Guid.NewGuid(), 26); var stateResolver = new Mock<IStateResolver>(); stateResolver.SetupGet(s => s.AllocationTable).Returns(sat); stateResolver.Setup(s => s.IsAllocated(It.IsAny<Guid>())).Returns<Guid>(g => sat.ContainsKey(g)); stateResolver.Setup(s => s.GetAllocatedId(It.IsAny<Guid>())).Returns<Guid>(g => sat[g]); var captureWriter = new CaptureWriter(ms, stateResolver.Object); var lastLength = TimeSpan.Zero; for (int i = 0; i < 20; i++) { var timestamp = DateTime.UtcNow.AddSeconds(i * 10); var randomData = new byte[10000]; new Random().NextBytes(randomData); var captureState = new Mock<ICaptureState>(); captureState.Setup(c => c.Data).Returns(randomData); captureState.Setup(c => c.Guid).Returns(sat.Where(f => f.Value == 24).First().Key); captureState.Setup(c => c.Timestamp).Returns(timestamp); captureWriter.Write(captureState.Object); Assert.True(captureWriter.Length > lastLength); lastLength = captureWriter.Length; } }
public void CaptureWriter_Inserts_The_Correct_Data_Into_The_Stream_During_Multiple_Write_Operations() { var writeOperations = 100; var ms = new ConcurrentStream(new MemoryStream()); var sat = new Dictionary<Guid, short>(); sat.Add(Guid.NewGuid(), 24); sat.Add(Guid.NewGuid(), 25); sat.Add(Guid.NewGuid(), 26); var stateResolver = new Mock<IStateResolver>(); stateResolver.SetupGet(s => s.AllocationTable).Returns(sat); stateResolver.Setup(s => s.IsAllocated(It.IsAny<Guid>())).Returns<Guid>(g => sat.ContainsKey(g)); stateResolver.Setup(s => s.GetAllocatedId(It.IsAny<Guid>())).Returns<Guid>(g => sat[g]); var captureWriter = new CaptureWriter(ms, stateResolver.Object); for (int i = 0; i < writeOperations; i++) { var timestamp = DateTime.UtcNow; var rewindPosition = ms.Position; var randomData = new byte[1024]; new Random().NextBytes(randomData); var randomSat = (short)new Random().Next(24, 26); var captureState = new Mock<ICaptureState>(); captureState.Setup(c => c.Data).Returns(randomData); captureState.Setup(c => c.Guid).Returns(sat.Where(f => f.Value == randomSat).First().Key); captureState.Setup(c => c.Timestamp).Returns(timestamp); captureWriter.Write(captureState.Object); //rewind the stream and check the correct data length was written ms.Position = rewindPosition + 2 + 8; var dataLengthBuffer = new byte[4]; ms.Read(dataLengthBuffer, 0, 4); var dataLength = BitConverter.ToInt32(dataLengthBuffer, 0); var dataBuffer = new byte[dataLength]; ms.Read(dataBuffer, 0, dataLength); for (int j = 0; j < dataBuffer.Length; j++) { Assert.Equal(randomData[j], dataBuffer[j]); } } }
public void CaptureWriter_Inserts_The_Correct_Timestamp_Into_The_Stream_During_Write_Operations() { var ms = new ConcurrentStream(new MemoryStream()); var sat = new Dictionary<Guid, short>(); sat.Add(Guid.NewGuid(), 24); sat.Add(Guid.NewGuid(), 25); sat.Add(Guid.NewGuid(), 26); var stateResolver = new Mock<IStateResolver>(); stateResolver.SetupGet(s => s.AllocationTable).Returns(sat); stateResolver.Setup(s => s.IsAllocated(It.IsAny<Guid>())).Returns<Guid>(g => sat.ContainsKey(g)); stateResolver.Setup(s => s.GetAllocatedId(It.IsAny<Guid>())).Returns<Guid>(g => sat[g]); var captureWriter = new CaptureWriter(ms, stateResolver.Object); var timestamp = DateTime.UtcNow; var rewindPosition = ms.Position; var captureState = new Mock<ICaptureState>(); captureState.Setup(c => c.Data).Returns(Guid.NewGuid().ToByteArray()); captureState.Setup(c => c.Guid).Returns(sat.Where(f => f.Value == 24).First().Key); captureState.Setup(c => c.Timestamp).Returns(timestamp); captureWriter.Write(captureState.Object); //rewind the stream and check the correct timestamp was written ms.Position = rewindPosition + 2; var timestampBuffer = new byte[8]; ms.Read(timestampBuffer, 0, 8); Assert.Equal(timestamp, DateTime.FromBinary(BitConverter.ToInt64(timestampBuffer, 0))); }