public async Task WriteMessageAsync_GzipCompressed_WriteCompressedData() { // Arrange var serviceOptions = new GrpcServiceOptions { ResponseCompressionAlgorithm = "gzip", CompressionProviders = { new GzipCompressionProvider(System.IO.Compression.CompressionLevel.Fastest) } }; var httpContext = new DefaultHttpContext(); httpContext.Request.Headers[GrpcProtocolConstants.MessageAcceptEncodingHeader] = "gzip"; var context = HttpContextServerCallContextHelper.CreateServerCallContext(httpContext, serviceOptions); context.Initialize(); var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); // Act await pipeWriter.WriteMessageAsync(new byte[] { 0x10 }, context, flush : true); // Assert var messageData = ms.ToArray(); Assert.AreEqual(1, messageData[0]); // compression Assert.AreEqual(21, messageData[4]); // message length }
public async Task WriteMessageAsync_UnderSendSize_WriteData() { // Arrange var context = HttpContextServerCallContextHelper.CreateServerCallContext(serviceOptions: new GrpcServiceOptions { SendMaxMessageSize = 1 }); var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); // Act await pipeWriter.WriteMessageAsync(new byte[] { 0x10 }, context, flush : true); // Assert var messageData = ms.ToArray(); CollectionAssert.AreEqual( new byte[] { 0x00, // compression = 0 0x00, 0x00, 0x00, 0x01, // length = 1 0x10 }, messageData); }
public async Task WriteMessageAsync_LongMessage_WriteData() { // Arrange var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); var content = Encoding.UTF8.GetBytes("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam varius nibh a blandit mollis. " + "In hac habitasse platea dictumst. Proin non quam nec neque convallis commodo. Orci varius natoque penatibus et magnis dis " + "parturient montes, nascetur ridiculus mus. Mauris commodo est vehicula, semper arcu eu, ornare urna. Mauris malesuada nisl " + "nisl, vitae tincidunt purus vestibulum sit amet. Interdum et malesuada fames ac ante ipsum primis in faucibus."); // Act await pipeWriter.WriteMessageAsync(content, TestServerCallContext, flush : true); // Assert var messageData = ms.ToArray(); CollectionAssert.AreEqual( new byte[] { 0x00, // compression = 0 0x00, 0x00, 0x01, 0xC1, // length = 449 }.Concat(content).ToArray(), messageData); }
public void WriteMessageAsync_ExceedSendSize_ThrowError() { // Arrange var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); // Act var ex = Assert.ThrowsAsync<InvalidOperationException>(() => pipeWriter.WriteMessageAsync(new byte[] { 0x10, 0x10 }, new GrpcServiceOptions { SendMaxMessageSize = 1 }, flush: true)); // Assert Assert.AreEqual("Sending message exceeds the maximum configured message size.", ex.Message); }
public async Task WriteMessageAsync_NoFlush_WriteNoData() { // Arrange var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); // Act await pipeWriter.WriteMessageAsync(Encoding.UTF8.GetBytes("Hello world"), TestServiceOptions); // Assert var messageData = ms.ToArray(); Assert.AreEqual(0, messageData.Length); }
public void WriteMessageAsync_ExceedSendSize_ThrowError() { // Arrange var context = HttpContextServerCallContextHelper.CreateServerCallContext(serviceOptions: new GrpcServiceOptions { SendMaxMessageSize = 1 }); var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); // Act var ex = Assert.ThrowsAsync <RpcException>(() => pipeWriter.WriteMessageAsync(new byte[] { 0x10, 0x10 }, context, flush: true)); // Assert Assert.AreEqual("Sending message exceeds the maximum configured message size.", ex.Status.Detail); Assert.AreEqual(StatusCode.ResourceExhausted, ex.StatusCode); }
public async Task WriteMessageAsync_EmptyMessage_WriteMessageWithNoData() { // Arrange var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); // Act await pipeWriter.WriteMessageAsync(Array.Empty <byte>(), TestServerCallContext, flush : true); // Assert var messageData = ms.ToArray(); CollectionAssert.AreEqual( new byte[] { 0x00, // compression = 0 0x00, 0x00, 0x00, 0x00, // length = 0 }, messageData); }
public async Task WriteMessageAsync_OneByteMessage_WriteData() { // Arrange var ms = new MemoryStream(); var pipeWriter = new StreamPipeWriter(ms); // Act await pipeWriter.WriteMessageAsync(new byte[] { 0x10 }, flush : true); // Assert var messageData = ms.ToArray(); CollectionAssert.AreEqual( new byte[] { 0x00, // compression = 0 0x00, 0x00, 0x00, 0x01, // length = 1 0x10 }, messageData); }