public async Task Complete_HasRemainder_WriteRemainder()
        {
            // Arrange
            var initialData = Encoding.UTF8.GetBytes("Hello world");

            var testPipe = new Pipe();
            var w        = new Base64PipeWriter(testPipe.Writer);

            // Act
            var buffer = w.GetMemory(initialData.Length);

            initialData.CopyTo(buffer);
            w.Advance(initialData.Length);

            w.Complete();

            // Assert
            var result = await testPipe.Reader.ReadAsync().AsTask().DefaultTimeout();

            Assert.AreEqual(16, result.Buffer.Length);

            var base64Data = Encoding.UTF8.GetBytes(Convert.ToBase64String(initialData));

            CollectionAssert.AreEqual(base64Data, result.Buffer.ToArray());
        }
        public async Task Advance_SmallDataMultipleWrites_Success(int size)
        {
            // Arrange
            var initialData = Encoding.UTF8.GetBytes("Hello world");

            var testPipe = new Pipe();
            var w        = new Base64PipeWriter(testPipe.Writer);

            // Act
            foreach (var b in Split(initialData, size))
            {
                var buffer = w.GetMemory(b.Length);
                for (var i = 0; i < b.Length; i++)
                {
                    buffer.Span[i] = b[i];
                }
                w.Advance(b.Length);
            }

            w.Complete();

            // Assert
            var result = await testPipe.Reader.ReadAsync().AsTask().DefaultTimeout();

            Assert.Greater(result.Buffer.Length, 0);

            var base64Data = Encoding.UTF8.GetBytes(Convert.ToBase64String(initialData));
            var resultData = result.Buffer.ToArray();

            CollectionAssert.AreEqual(base64Data, resultData);
        }
        public async Task Advance_SmallDataIncompleteWrites_Success()
        {
            // Arrange
            var initialData1 = Encoding.UTF8.GetBytes("Hello");
            var initialData2 = Encoding.UTF8.GetBytes("world");

            var testPipe = new Pipe();
            var w        = new Base64PipeWriter(testPipe.Writer);

            // Act
            var buffer = w.GetMemory(initialData1.Length);

            initialData1.CopyTo(buffer);
            w.Advance(initialData1.Length);

            buffer = w.GetMemory(initialData2.Length);
            initialData2.CopyTo(buffer);
            w.Advance(initialData2.Length);

            w.Complete();

            // Assert
            var result = await testPipe.Reader.ReadAsync().AsTask().DefaultTimeout();

            Assert.Greater(result.Buffer.Length, 0);

            var base64Data = Encoding.UTF8.GetBytes(Convert.ToBase64String(initialData1.Concat(initialData2).ToArray()));

            CollectionAssert.AreEqual(base64Data, result.Buffer.ToArray());
        }
Ejemplo n.º 4
0
        public async Task WriteMessageAsync_MultipleMessagesNoFlush_WriteMessages()
        {
            // Arrange
            var ms         = new MemoryStream();
            var pipeWriter = new Base64PipeWriter(PipeWriter.Create(ms));

            // Act
            await pipeWriter.WriteMessageAsync(new EchoRequest { Message = "test" }, HttpContextServerCallContextHelper.CreateServerCallContext(), MarshallerEchoRequest.ContextualSerializer, canFlush : false);

            await pipeWriter.WriteMessageAsync(new EchoRequest { Message = "test" }, HttpContextServerCallContextHelper.CreateServerCallContext(), MarshallerEchoRequest.ContextualSerializer, canFlush : false);

            await pipeWriter.WriteMessageAsync(new EchoRequest { Message = "test" }, HttpContextServerCallContextHelper.CreateServerCallContext(), MarshallerEchoRequest.ContextualSerializer, canFlush : false);

            pipeWriter.Complete();

            // Assert
            var base64 = Encoding.UTF8.GetString(ms.ToArray());

            Assert.AreEqual("AAAAAAYKBHRlc3QAAAAABgoEdGVzdAAAAAAGCgR0ZXN0", base64);
        }