コード例 #1
0
        public async Task PayloadSender_WhenLengthNotSet_AndNoData_SendsZeroLengthEnd()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var header = new Header()
            {
                Type          = PayloadTypes.Stream,
                Id            = Guid.NewGuid(),
                PayloadLength = 555,
                End           = false,
            };

            var stream = new MemoryStream(new byte[100]);

            stream.Position = 100;
            var done = new TaskCompletionSource <string>();

            sender.SendPayload(header, stream, false, (Header sentHeader) =>
            {
                Assert.Equal(0, sentHeader.PayloadLength);
                Assert.True(sentHeader.End);
                done.SetResult("done");
                return(Task.CompletedTask);
            });

            await done.Task;

            Assert.Single(transport.Buffers);
        }
コード例 #2
0
        public async Task PayloadSender_WhenLengthSet_Sends()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var header = new Header()
            {
                Type          = PayloadTypes.Stream,
                Id            = Guid.NewGuid(),
                PayloadLength = 55,
                End           = false,
            };

            var stream = new MemoryStream(new byte[100]);
            TaskCompletionSource <string> done = new TaskCompletionSource <string>();

            sender.SendPayload(header, stream, true, (Header sentHeader) =>
            {
                Assert.AreEqual(55, sentHeader.PayloadLength);
                Assert.IsFalse(sentHeader.End);
                done.SetResult("done");
                return(Task.CompletedTask);
            });

            await done.Task;

            Assert.AreEqual(2, transport.Buffers.Count);
            Assert.AreEqual(55, stream.Position);
        }
コード例 #3
0
        public void PayloadSender_Connect_ShouldFail()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            Assert.Throws <InvalidOperationException>(() => sender.Connect(transport));
        }
コード例 #4
0
        public async Task ResponseDisassembler_SendsAsFixedLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var disassembler = new ResponseDisassembler(sender, Guid.NewGuid(), StreamingResponse.OK());

            await disassembler.DisassembleAsync();

            Assert.AreEqual(2, transport.Buffers.Count);
        }
コード例 #5
0
        public async Task RequestDisassembler_SendsAsFixedLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var disassembler = new RequestDisassembler(sender, Guid.NewGuid(), StreamingRequest.CreateGet("/a/b/c"));

            await disassembler.DisassembleAsync();

            Assert.Equal(2, transport.Buffers.Count);
        }
コード例 #6
0
        public async Task SendResponseAsync()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);
            var ops = new SendOperations(sender);

            var content  = new StringContent("/a/b", Encoding.ASCII);
            var response = StreamingResponse.CreateResponse(HttpStatusCode.OK, content);

            await ops.SendResponseAsync(Guid.NewGuid(), response);

            Assert.Equal(4, transport.Buffers.Count);
        }
コード例 #7
0
        public async Task RequestDisassembler_WithJsonStream_Sends()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);
            var ops = new SendOperations(sender);

            var request = StreamingRequest.CreatePost("/a/b");

            request.AddStream(new StringContent("abc", Encoding.ASCII));

            await ops.SendRequestAsync(Guid.NewGuid(), request);

            Assert.AreEqual(4, transport.Buffers.Count);
        }
コード例 #8
0
        public async Task ResponseDisassembler_With_HttpContent_SendsAsFixedLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var content = new StringContent("{'a': 55}", Encoding.UTF8, "application/json");

            var response = StreamingResponse.CreateResponse(System.Net.HttpStatusCode.OK, content);

            var disassembler = new ResponseDisassembler(sender, Guid.NewGuid(), response);

            await disassembler.DisassembleAsync();

            Assert.Equal(2, transport.Buffers.Count);
        }
コード例 #9
0
        public async Task RequestDisassembler_WithVariableStream_Sends()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);
            var ops = new SendOperations(sender);

            var request = StreamingRequest.CreatePost("/a/b");
            var stream  = new PayloadStream(new PayloadStreamAssembler(null, Guid.NewGuid(), "blah", 100));

            stream.Write(new byte[100], 0, 100);
            request.AddStream(new StreamContent(stream));

            await ops.SendRequestAsync(Guid.NewGuid(), request);

            Assert.AreEqual(5, transport.Buffers.Count);
        }
コード例 #10
0
        public async Task HttpContentStreamDisassembler_ObjectContent_SendsAsFixedLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var content = new ResponseMessageStream(Guid.NewGuid())
            {
                Content = new StringContent("{'a': 55}", Encoding.UTF8, "application/json"),
            };

            var disassembler = new ResponseMessageStreamDisassembler(sender, content);

            await disassembler.DisassembleAsync();

            Assert.AreEqual(2, transport.Buffers.Count);
        }
コード例 #11
0
        public async Task HttpContentStreamDisassembler_StringContent_SendsAsFixedLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var content = new ResponseMessageStream(Guid.NewGuid())
            {
                Content = new StringContent("blah blah blah", Encoding.ASCII),
            };

            var disassembler = new ResponseMessageStreamDisassembler(sender, content);

            await disassembler.DisassembleAsync();

            Assert.Equal(2, transport.Buffers.Count);
        }
コード例 #12
0
        public async Task HttpContentStreamDisassembler_ObjectContent_SendsAsFixedLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var content = new ResponseMessageStream(Guid.NewGuid())
            {
                Content = new ObjectContent(typeof(string), "{'a': 55}", new JsonMediaTypeFormatter()),
            };

            var disassembler = new ResponseMessageStreamDisassembler(sender, content);

            await disassembler.DisassembleAsync();

            Assert.AreEqual(2, transport.Buffers.Count);
        }
コード例 #13
0
        public async Task HttpContentStreamDisassembler_StreamContent_SendsAsVariableLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var stream = new PayloadStream(new PayloadStreamAssembler(null, Guid.NewGuid(), "blah", 100));

            var content = new ResponseMessageStream(Guid.NewGuid())
            {
                Content = new StreamContent(stream),
            };

            stream.Write(new byte[100], 0, 100);

            var disassembler = new ResponseMessageStreamDisassembler(sender, content);

            await disassembler.DisassembleAsync();

            Assert.AreEqual(3, transport.Buffers.Count);
        }