public async Task ReadSingleMessageAsync_EmptyMessage_ReturnNoData() { // Arrange var base64 = Convert.ToBase64String( new byte[] { 0x00, // compression = 0 0x00, 0x00, 0x00, 0x00, // length = 0 }); var data = Encoding.UTF8.GetBytes(base64); var ms = new MemoryStream(data); var pipeReader = new TestPipeReader(new Base64PipeReader(PipeReader.Create(ms))); // Act var messageData = await pipeReader.ReadSingleMessageAsync(HttpContextServerCallContextHelper.CreateServerCallContext(), MarshallerEchoRequest.ContextualDeserializer); // Assert Assert.AreEqual(string.Empty, messageData.Message); Assert.AreEqual(5, pipeReader.Consumed); }
public async Task ReadSingleMessageAsync_MessageInMultiplePipeReads_ReadMessageData() { // Arrange var messageData = new byte[] { 0x00, // compression = 0 0x00, 0x00, 0x00, 0x01, // length = 1 0x10 }; // Run continuations without async so ReadSingleMessageAsync immediately consumes added data var requestStream = new SyncPointMemoryStream(runContinuationsAsynchronously: false); var pipeReader = new TestPipeReader(PipeReader.Create(requestStream)); // Act var readTask = pipeReader.ReadSingleMessageAsync(TestServerCallContext, Marshaller.ContextualDeserializer).AsTask(); // Assert for (var i = 0; i < messageData.Length; i++) { var b = messageData[i]; var isLast = i == messageData.Length - 1; Assert.IsFalse(readTask.IsCompleted, "Still waiting for data"); await requestStream.AddDataAndWait(new[] { b }).DefaultTimeout(); if (!isLast) { Assert.AreEqual(0, pipeReader.Consumed); Assert.AreEqual(i + 1, pipeReader.Examined); } else { Assert.AreEqual(messageData.Length, pipeReader.Consumed); // Consumed message Assert.AreEqual(messageData.Length, pipeReader.Examined); } } await requestStream.AddDataAndWait(Array.Empty <byte>()).DefaultTimeout(); var readMessageData = await readTask.DefaultTimeout(); // Assert CollectionAssert.AreEqual(new byte[] { 0x10 }, readMessageData); }
public async Task ReadSingleMessageAsync_SmallMessage_Success() { // Arrange var data = Encoding.UTF8.GetBytes("AAAAAAYKBHRlc3Q="); var ms = new MemoryStream(data); var pipeReader = new TestPipeReader(new Base64PipeReader(PipeReader.Create(ms))); // Act var messageData = await pipeReader.ReadSingleMessageAsync(HttpContextServerCallContextHelper.CreateServerCallContext(), MarshallerEchoRequest.ContextualDeserializer); // Assert Assert.AreEqual("test", messageData.Message); Assert.AreEqual(11, pipeReader.Consumed); }
public async Task ReadSingleMessageAsync_EmptyMessage_ReturnNoData() { // Arrange var ms = new MemoryStream(new byte[] { 0x00, // compression = 0 0x00, 0x00, 0x00, 0x00 // length = 0 }); var pipeReader = new TestPipeReader(PipeReader.Create(ms)); // Act var messageData = await pipeReader.ReadSingleMessageAsync(TestServerCallContext, Marshaller.ContextualDeserializer); // Assert Assert.AreEqual(0, messageData.Length); Assert.AreEqual(5, pipeReader.Consumed); }