private byte[] prepareFakePacket(byte[] data, byte[] sums) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); int packetLen = data.length + sums.length + Ints.BYTES; PacketHeader header = new PacketHeader( packetLen, OFFSET_IN_BLOCK, SEQNO, false, data.length, false); header.write(dos); dos.write(sums); dos.write(data); dos.flush(); return baos.toByteArray(); }
@Test public void testPacketHeader() throws IOException { PacketHeader hdr = new PacketHeader( 4, // size of packet 1024, // OffsetInBlock 100, // sequencenumber false, // lastPacketInBlock 4096, // chunk length false); ByteArrayOutputStream baos = new ByteArrayOutputStream(); hdr.write(new DataOutputStream(baos)); // Read back using DataInput PacketHeader readBack = new PacketHeader(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); readBack.readFields(new DataInputStream(bais)); assertEquals(hdr, readBack); // Read back using ByteBuffer readBack = new PacketHeader(); readBack.readFields(ByteBuffer.wrap(baos.toByteArray())); assertEquals(hdr, readBack); assertTrue(hdr.sanityCheck(99)); assertFalse(hdr.sanityCheck(100)); }
private void writeZeroLengthPacket(ExtendedBlock block, String description) throws IOException { PacketHeader hdr = new PacketHeader( 8, // size of packet block.getNumBytes(), // OffsetInBlock 100, // sequencenumber true, // lastPacketInBlock 0, // chunk length false); // sync block hdr.write(sendOut); sendOut.writeInt(0); // zero checksum //ok finally write a block with 0 len sendResponse(Status.SUCCESS, "", null, recvOut); new PipelineAck(100, new int[] {PipelineAck.combineHeader (PipelineAck.ECN.DISABLED, Status.SUCCESS)}).write (recvOut); sendRecvData(description, false); }