public void CaptureReader_Selects_The_Correct_IStateController_During_Reads() { var immlStateController = new Mock<IStateController>(); var immlStateControllerId = (short)100; var immlStateControllerGuid = Guid.NewGuid(); immlStateController.Setup(g => g.Guid).Returns(immlStateControllerGuid); var boneNodeStateController = new Mock<IStateController>(); var boneNodeStateControllerId = (short)123; var boneNodeStateControllerGuid = Guid.NewGuid(); boneNodeStateController.Setup(g => g.Guid).Returns(boneNodeStateControllerGuid); //build 2 different state mappings var ms = new ConcurrentStream(new MemoryStream()); //header var header = _CreateContinuumHeader(1000, 10000); ms.Write(header, 0, header.Length); //sat ms.Write(BitConverter.GetBytes(2), 0, 4); //count //mapping for imml ms.Write(BitConverter.GetBytes(immlStateControllerId), 0, 2); ms.Write(immlStateControllerGuid.ToByteArray(), 0, 16); //mapping for bones ms.Write(BitConverter.GetBytes(boneNodeStateControllerId), 0, 2); ms.Write(boneNodeStateControllerGuid.ToByteArray(), 0, 16); //generate 2 dummy states, one for each controller var firstRandomBytes = new byte[1024]; new Random().NextBytes(firstRandomBytes); ms.Write(BitConverter.GetBytes(immlStateControllerId), 0, 2); ms.Write(BitConverter.GetBytes(DateTime.UtcNow.ToBinary()), 0, 8); ms.Write(BitConverter.GetBytes((int)firstRandomBytes.Length), 0, 4); ms.Write(firstRandomBytes, 0, firstRandomBytes.Length); var secondRandomBytes = new byte[2048]; new Random().NextBytes(secondRandomBytes); ms.Write(BitConverter.GetBytes(boneNodeStateControllerId), 0, 2); ms.Write(BitConverter.GetBytes(DateTime.UtcNow.ToBinary()), 0, 8); ms.Write(BitConverter.GetBytes((int)secondRandomBytes.Length), 0, 4); ms.Write(secondRandomBytes, 0, secondRandomBytes.Length); ms.Position = 0; //perform the reads and verify var stateResolver = new StateResolver(); stateResolver.Add(immlStateController.Object); stateResolver.Add(boneNodeStateController.Object); var captureReader = new CaptureReader(ms, stateResolver); captureReader.Read(); captureReader.Read(); boneNodeStateController.Verify(c => c.Create(It.IsAny<byte[]>(), It.IsAny<DateTime>(), It.IsAny<double>()), Times.Once()); immlStateController.Verify(c => c.Create(It.IsAny<byte[]>(), It.IsAny<DateTime>(), It.IsAny<double>()), Times.Once()); }
public void State_Allocation_Table_Is_Correctly_Populated() { var expectedId = (short)123; var expectedGuid = Guid.NewGuid(); var ms = new ConcurrentStream(new MemoryStream()); var idBytes = BitConverter.GetBytes(expectedId); var guidBytes = expectedGuid.ToByteArray(); //write the header var header = _CreateContinuumHeader(1000, 10000); ms.Write(header.ToArray(), 0, header.Length); //write the SAT ms.Write(BitConverter.GetBytes(1), 0, 4); ms.Write(idBytes, 0, idBytes.Length); ms.Write(guidBytes, 0, guidBytes.Length); //rewind the stream ms.Position = 0; var stateController = new Mock<IStateController>(); var stateResolver = new Mock<IStateResolver>(); stateResolver.Setup(s => s.Find(It.IsAny<Guid>())).Returns(stateController.Object); var captureReader = new CaptureReader(ms, stateResolver.Object); Assert.NotEmpty(captureReader.StateAllocationTable); Assert.Equal(expectedId, captureReader.StateAllocationTable.First().Key); Assert.Equal(expectedGuid, captureReader.StateAllocationTable.First().Value); Assert.Equal(1, captureReader.StateAllocationTable.Count); }
public void CaptureReader_Loads_A_Valid_Continuum_Stream() { var satCount = 5; var header = _CreateContinuumHeader(1000, 10000); var sat = _CreateSAT(satCount); var baseStream = new ConcurrentStream(new MemoryStream()); baseStream.Write(header.ToArray(), 0, header.Length); baseStream.Write(sat, 0, sat.Length); baseStream.Position = 0; var stateController = new Mock<IStateController>(); var stateResolver = new Mock<IStateResolver>(); stateResolver.Setup(s => s.Find(It.IsAny<Guid>())).Returns(stateController.Object); var captureReader = new CaptureReader(baseStream, stateResolver.Object); Assert.Equal(satCount, captureReader.StateAllocationTable.Count); }