public void TryReadReponseHeadTest() { const long requestID = 10086; _codec.WriteReponse("hello", requestID, out ReadOnlyMemory <byte> tmpBuffer); ReponseHead reponseHead = new ReponseHead() { RequestID = requestID, ErrorCode = ErrorCode.OK, PayloadSize = tmpBuffer.Length - Protocol.ReponseHeadSize, }; byte[] invalidBuffer1 = tmpBuffer.ToArray(); BinaryPrimitives.WriteInt32LittleEndian(invalidBuffer1, -1); byte[] invalidBuffer2 = tmpBuffer.ToArray(); BinaryPrimitives.WriteInt32LittleEndian(invalidBuffer2, Protocol.MaxPayloadSize + 1); var testCases = new[] { new { Input = tmpBuffer.Slice(0, 1).ToArray(), OK = false, Head = new ReponseHead(), Exception = false }, new { Input = tmpBuffer.Slice(0, Protocol.ReponseHeadSize - 1).ToArray(), OK = false, Head = new ReponseHead(), Exception = false }, new { Input = tmpBuffer.Slice(0, Protocol.ReponseHeadSize).ToArray(), OK = true, Head = reponseHead, Exception = false }, new { Input = invalidBuffer1, OK = false, Head = new ReponseHead(), Exception = true }, new { Input = invalidBuffer2, OK = false, Head = new ReponseHead(), Exception = true }, }; foreach (var tc in testCases) { ReadOnlySequence <byte> sequence = new ReadOnlySequence <byte>(tc.Input); ReponseHead head = new ReponseHead(); if (tc.Exception) { Assert.ThrowsAny <CodecException>(() => { _codec.TryReadReponseHead(sequence, ref head); }); } else { bool ok = _codec.TryReadReponseHead(sequence, ref head); Assert.Equal(tc.OK, ok); if (ok) { Assert.StrictEqual(tc.Head, head); } } } }
public void ReponseEnd2End() { string reponsePayload = "hello"; long requestID = 1000; _codec.WriteReponse(reponsePayload, requestID, out ReadOnlyMemory <byte> tmpBuffer); ReadOnlySequence <byte> packet = new ReadOnlySequence <byte>(tmpBuffer.ToArray()); ReponseHead head = new ReponseHead(); Assert.True(_codec.TryReadReponseHead(packet, ref head)); Assert.Equal(packet.Length - Protocol.ReponseHeadSize, head.PayloadSize); Assert.Equal(requestID, head.RequestID); Assert.Equal(ErrorCode.OK, head.ErrorCode); string body = _codec.ReadBody <string>(packet.Slice(Protocol.ReponseHeadSize, head.PayloadSize)); Assert.Equal(reponsePayload, body); }