public void ShouldReadTwoMessages() { const int msgLength = 16; var recordLength = RingBufferDescriptor.HeaderLength + msgLength; var alignedRecordLength = recordLength.AlignToMultipleOf(RingBufferDescriptor.RecordAlignment); long tail = alignedRecordLength * 2; const long head = 0L; const int headIndex = (int)head; _atomicLong.Read(Head).Returns(head); var makeHeader = RingBufferDescriptor.MakeHeader(recordLength, MessageTypeId); _atomicLong.VolatileRead(new IntPtr(headIndex)).Returns(makeHeader); _atomicLong.VolatileRead(new IntPtr(headIndex + alignedRecordLength)).Returns(makeHeader); var counter = 0; MessageHandler h = (id, chunk) => counter++; var messagesRead = _ringBuffer.Read(h, 3); Assert.AreEqual(2, messagesRead); Assert.AreEqual(2, counter); Received.InOrder(() => { _buffer.Received(1).ZeroMemory(headIndex, alignedRecordLength * 2); _atomicLong.VolatileWrite(Head, tail); }); }