Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }