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); }
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); }
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); }
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); }
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); }