/// <exception cref="System.IO.IOException"/> private void DoTestReceiveAndMirror(PacketReceiver pr, int dataLen, int checksumsLen ) { byte[] Data = AppendTestUtil.InitBuffer(dataLen); byte[] Checksums = AppendTestUtil.InitBuffer(checksumsLen); byte[] packet = PrepareFakePacket(Data, Checksums); ByteArrayInputStream @in = new ByteArrayInputStream(packet); pr.ReceiveNextPacket(@in); ByteBuffer parsedData = pr.GetDataSlice(); Assert.AssertArrayEquals(Data, RemainingAsArray(parsedData)); ByteBuffer parsedChecksums = pr.GetChecksumSlice(); Assert.AssertArrayEquals(Checksums, RemainingAsArray(parsedChecksums)); PacketHeader header = pr.GetHeader(); NUnit.Framework.Assert.AreEqual(Seqno, header.GetSeqno()); NUnit.Framework.Assert.AreEqual(OffsetInBlock, header.GetOffsetInBlock()); NUnit.Framework.Assert.AreEqual(dataLen + checksumsLen + Ints.Bytes, header.GetPacketLen ()); // Mirror the packet to an output stream and make sure it matches // the packet we sent. ByteArrayOutputStream mirrored = new ByteArrayOutputStream(); mirrored = Org.Mockito.Mockito.Spy(mirrored); pr.MirrorPacketTo(new DataOutputStream(mirrored)); // The write should be done in a single call. Otherwise we may hit // nasty interactions with nagling (eg HDFS-4049). Org.Mockito.Mockito.Verify(mirrored, Org.Mockito.Mockito.Times(1)).Write(Org.Mockito.Mockito .Any <byte[]>(), Org.Mockito.Mockito.AnyInt(), Org.Mockito.Mockito.Eq(packet.Length )); Org.Mockito.Mockito.VerifyNoMoreInteractions(mirrored); Assert.AssertArrayEquals(packet, mirrored.ToByteArray()); }
public virtual void TestReceiveAndMirror() { PacketReceiver pr = new PacketReceiver(false); // Test three different lengths, to force reallocing // the buffer as it grows. DoTestReceiveAndMirror(pr, 100, 10); DoTestReceiveAndMirror(pr, 50, 10); DoTestReceiveAndMirror(pr, 150, 10); pr.Close(); }