public void ReadParse_Handles_Complete_Frames_In_A_Single_Frame()
 {
     var connectionMock = GetConnectionMock();
     var streamIds = new List<short>();
     var responses = new ConcurrentBag<Response>();
     connectionMock.Setup(c => c.RemoveFromPending(It.IsAny<short>()))
         .Callback<short>(id => streamIds.Add(id))
         .Returns(() => new OperationState((ex, r) => responses.Add(r)));
     var connection = connectionMock.Object;
     var buffer = GetResultBuffer(127).Concat(GetResultBuffer(126)).ToArray();
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
     TestHelper.WaitUntil(() => responses.Count == 2);
     Assert.AreEqual(2, responses.Count);
 }
Esempio n. 2
0
        public void ReadParse_Handles_UnComplete_Body_Multiple_Times()
        {
            var config = new Configuration
            {
                BufferPool = new RecyclableMemoryStreamManager()
            };
            var connectionMock = new Mock <Connection>(MockBehavior.Loose, (byte)2, Address, config);
            var streamIds      = new List <short>();
            var responses      = new List <Response>();

            connectionMock.Setup(c => c.RemoveFromPending(It.IsAny <short>()))
            .Callback <short>(id => streamIds.Add(id))
            .Returns(() => new OperationState((ex, r) => responses.Add(r)));
            var connection = connectionMock.Object;
            var buffer     = GetResultBuffer(127)
                             .Concat(GetResultBuffer(126))
                             .Concat(GetResultBuffer(100))
                             .ToArray();
            //almost 3 responses, 3 byte of the body left
            var length = buffer.Length - 3;

            connection.ReadParse(buffer, length);
            CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
            //the rest of the last message plus a new message
            buffer = buffer.Skip(length).Concat(GetResultBuffer(99)).ToArray();
            length = buffer.Length - 3;
            connection.ReadParse(buffer, length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100 }, streamIds);

            buffer = buffer.Skip(length).Concat(GetResultBuffer(98)).ToArray();
            length = buffer.Length - 3;
            connection.ReadParse(buffer, length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100, 99 }, streamIds);

            buffer = buffer.Skip(length).Concat(GetResultBuffer(97)).ToArray();
            length = buffer.Length;
            connection.ReadParse(buffer, length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100, 99, 98, 97 }, streamIds);
            TestHelper.WaitUntil(() => responses.Count == 6);
            CollectionAssert.AreEqual(Enumerable.Repeat(ResultResponse.ResultResponseKind.Void, 6), responses.Select(r => ((ResultResponse)r).Kind));
            buffer = GetResultBuffer(1);
            connection.ReadParse(buffer, buffer.Length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100, 99, 98, 97, 1 }, streamIds);
        }
Esempio n. 3
0
        public void ReadParse_Handles_Complete_Frames_In_A_Single_Frame()
        {
            var config = new Configuration
            {
                BufferPool = new RecyclableMemoryStreamManager()
            };
            var connectionMock = new Mock <Connection>(MockBehavior.Loose, (byte)2, Address, config);
            var streamIds      = new List <short>();
            var responses      = new List <Response>();

            connectionMock.Setup(c => c.RemoveFromPending(It.IsAny <short>()))
            .Callback <short>(id => streamIds.Add(id))
            .Returns(() => new OperationState((ex, r) => responses.Add(r)));
            var connection = connectionMock.Object;
            var buffer     = GetResultBuffer(127).Concat(GetResultBuffer(126)).ToArray();

            connection.ReadParse(buffer, buffer.Length);
            CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
            TestHelper.WaitUntil(() => responses.Count == 2);
            Assert.AreEqual(2, responses.Count);
        }
Esempio n. 4
0
        public void ReadParse_Handles_UnComplete_Body()
        {
            var config = new Configuration
            {
                BufferPool = new RecyclableMemoryStreamManager()
            };
            var connectionMock = new Mock <Connection>(MockBehavior.Loose, (byte)2, Address, config);
            var streamIds      = new List <short>();
            var responses      = new List <Response>();
            var exceptions     = new List <Exception>();

            connectionMock.Setup(c => c.RemoveFromPending(It.IsAny <short>()))
            .Callback <short>(id => streamIds.Add(id))
            .Returns(() => new OperationState((ex, r) =>
            {
                if (ex != null)
                {
                    exceptions.Add(ex);
                    return;
                }
                responses.Add(r);
            }));
            var connection = connectionMock.Object;
            var buffer     = GetResultBuffer(127).Concat(GetResultBuffer(126)).Concat(GetResultBuffer(100)).ToArray();
            //almost 3 responses, just 1 byte of the body left
            var firstSlice = buffer.Length - 1;

            connection.ReadParse(buffer, firstSlice);
            CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
            buffer = buffer.Skip(firstSlice).ToArray();
            connection.ReadParse(buffer, buffer.Length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100 }, streamIds);
            TestHelper.WaitUntil(() => responses.Count + exceptions.Count == 3, 500, 1000);
            CollectionAssert.IsEmpty(exceptions);
            CollectionAssert.AreEqual(Enumerable.Repeat(ResultResponse.ResultResponseKind.Void, 3), responses.Select(r => ((ResultResponse)r).Kind));
            buffer = GetResultBuffer(1);
            connection.ReadParse(buffer, buffer.Length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100, 1 }, streamIds);
        }
 public void ReadParse_Handles_Complete_Frames_In_Different_Buffers()
 {
     var connectionMock = GetConnectionMock();
     var streamIds = new List<short>();
     var responses = new ConcurrentBag<Response>();
     connectionMock.Setup(c => c.RemoveFromPending(It.IsAny<short>()))
         .Callback<short>(id => streamIds.Add(id))
         .Returns(() => new OperationState((ex, r) => responses.Add(r)));
     var connection = connectionMock.Object;
     var buffer = GetResultBuffer(127);
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127 }, streamIds);
     buffer = GetResultBuffer(126);
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
     buffer = GetResultBuffer(125);
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127, 126, 125 }, streamIds);
     TestHelper.WaitUntil(() => responses.Count == 3);
     Assert.AreEqual(3, responses.Count);
     CollectionAssert.AreEqual(Enumerable.Repeat(ResultResponse.ResultResponseKind.Void, 3), responses.Select(r => ((ResultResponse) r).Kind));
 }
 public void ReadParse_Handles_UnComplete_Header()
 {
     var connectionMock = GetConnectionMock();
     var streamIds = new List<short>();
     var responses = new ConcurrentBag<Response>();
     connectionMock.Setup(c => c.RemoveFromPending(It.IsAny<short>()))
         .Callback<short>(id => streamIds.Add(id))
         .Returns(() => new OperationState((ex, r) => responses.Add(r)));
     var connection = connectionMock.Object;
     var buffer = GetResultBuffer(127).Concat(GetResultBuffer(126)).Concat(GetResultBuffer(100)).ToArray();
     //first 2 messages and 2 bytes of the third message
     var firstSlice = buffer.Length - TestFrameLength + 2;
     connection.ReadParse(buffer, firstSlice);
     CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
     buffer = buffer.Skip(firstSlice).ToArray();
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127, 126, 100 }, streamIds);
     TestHelper.WaitUntil(() => responses.Count == 3);
     CollectionAssert.AreEqual(Enumerable.Repeat(ResultResponse.ResultResponseKind.Void, 3), responses.Select(r => ((ResultResponse)r).Kind));
     buffer = GetResultBuffer(99);
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127, 126, 100, 99 }, streamIds);
 }
 public void ReadParse_Handles_UnComplete_Body_With_Following_Frames()
 {
     var connectionMock = GetConnectionMock();
     var streamIds = new List<short>();
     var responses = new ConcurrentBag<Response>();
     connectionMock.Setup(c => c.RemoveFromPending(It.IsAny<short>()))
         .Callback<short>(id => streamIds.Add(id))
         .Returns(() => new OperationState((ex, r) => responses.Add(r)));
     var connection = connectionMock.Object;
     var buffer = GetResultBuffer(127).Concat(GetResultBuffer(126)).Concat(GetResultBuffer(100)).ToArray();
     //almost 3 responses, just 1 byte of the body left
     var firstSlice = buffer.Length - 1;
     connection.ReadParse(buffer, firstSlice);
     CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
     buffer = buffer.Skip(firstSlice).Concat(GetResultBuffer(99)).ToArray();
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127, 126, 100, 99 }, streamIds);
     TestHelper.WaitUntil(() => responses.Count == 4);
     CollectionAssert.AreEqual(Enumerable.Repeat(ResultResponse.ResultResponseKind.Void, 4), responses.Select(r => ((ResultResponse)r).Kind));
     buffer = GetResultBuffer(1);
     connection.ReadParse(buffer, buffer.Length);
     CollectionAssert.AreEqual(new short[] { 127, 126, 100, 99, 1 }, streamIds);
 }
Esempio n. 8
0
        public void ReadParse_Handles_UnComplete_Header_In_Multiple_Messages()
        {
            var config = new Configuration
            {
                BufferPool = new RecyclableMemoryStreamManager()
            };
            var connectionMock = new Mock <Connection>(MockBehavior.Loose, (byte)2, Address, config);
            var streamIds      = new List <short>();
            var responses      = new List <Response>();

            connectionMock.Setup(c => c.RemoveFromPending(It.IsAny <short>()))
            .Callback <short>(id => streamIds.Add(id))
            .Returns(() => new OperationState((ex, r) => responses.Add(r)));
            var connection = connectionMock.Object;
            var buffer     = GetResultBuffer(127).Concat(GetResultBuffer(126)).Concat(GetResultBuffer(100)).ToArray();
            //first 2 messages and 2 bytes of the third message
            var length = buffer.Length - TestFrameLength + 2;

            connection.ReadParse(buffer, length);
            CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
            buffer = buffer.Skip(length).ToArray();
            length = buffer.Length - 8;
            //header is still not completed
            connection.ReadParse(buffer, length);
            CollectionAssert.AreEqual(new short[] { 127, 126 }, streamIds);
            //header and body are completed
            buffer = buffer.Skip(length).ToArray();
            length = buffer.Length;
            connection.ReadParse(buffer, length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100 }, streamIds);
            TestHelper.WaitUntil(() => responses.Count == 3);
            CollectionAssert.AreEqual(Enumerable.Repeat(ResultResponse.ResultResponseKind.Void, 3), responses.Select(r => ((ResultResponse)r).Kind));
            buffer = GetResultBuffer(99);
            connection.ReadParse(buffer, buffer.Length);
            CollectionAssert.AreEqual(new short[] { 127, 126, 100, 99 }, streamIds);
        }