public virtual void TestPipeLineAckCompatibility() { DataTransferProtos.PipelineAckProto proto = ((DataTransferProtos.PipelineAckProto )DataTransferProtos.PipelineAckProto.NewBuilder().SetSeqno(0).AddReply(DataTransferProtos.Status .ChecksumOk).Build()); DataTransferProtos.PipelineAckProto newProto = ((DataTransferProtos.PipelineAckProto )DataTransferProtos.PipelineAckProto.NewBuilder().MergeFrom(proto).AddFlag(PipelineAck .CombineHeader(PipelineAck.ECN.Supported, DataTransferProtos.Status.ChecksumOk)) .Build()); ByteArrayOutputStream oldAckBytes = new ByteArrayOutputStream(); proto.WriteDelimitedTo(oldAckBytes); PipelineAck oldAck = new PipelineAck(); oldAck.ReadFields(new ByteArrayInputStream(oldAckBytes.ToByteArray())); NUnit.Framework.Assert.AreEqual(PipelineAck.CombineHeader(PipelineAck.ECN.Disabled , DataTransferProtos.Status.ChecksumOk), oldAck.GetHeaderFlag(0)); PipelineAck newAck = new PipelineAck(); ByteArrayOutputStream newAckBytes = new ByteArrayOutputStream(); newProto.WriteDelimitedTo(newAckBytes); newAck.ReadFields(new ByteArrayInputStream(newAckBytes.ToByteArray())); NUnit.Framework.Assert.AreEqual(PipelineAck.CombineHeader(PipelineAck.ECN.Supported , DataTransferProtos.Status.ChecksumOk), newAck.GetHeaderFlag(0)); }
/// <summary>Constructor</summary> /// <param name="seqno">sequence number</param> /// <param name="replies">an array of replies</param> /// <param name="downstreamAckTimeNanos">ack RTT in nanoseconds, 0 if no next DN in pipeline /// </param> public PipelineAck(long seqno, int[] replies, long downstreamAckTimeNanos) { AList <DataTransferProtos.Status> statusList = Lists.NewArrayList(); AList <int> flagList = Lists.NewArrayList(); foreach (int r in replies) { statusList.AddItem(PipelineAck.StatusFormat.GetStatus(r)); flagList.AddItem(r); } proto = ((DataTransferProtos.PipelineAckProto)DataTransferProtos.PipelineAckProto .NewBuilder().SetSeqno(seqno).AddAllReply(statusList).AddAllFlag(flagList).SetDownstreamAckTimeNanos (downstreamAckTimeNanos).Build()); }
/// <summary>Writable interface</summary> /// <exception cref="System.IO.IOException"/> public virtual void ReadFields(InputStream @in) { proto = DataTransferProtos.PipelineAckProto.ParseFrom(PBHelper.VintPrefixed(@in)); }