Ejemplo n.º 1
0
        public void ProtocolDispatcher_DispatchStream()
        {
            // Arrange
            var buffer = new byte[256];

            new Random().NextBytes(buffer);

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

            var callCount = 0;

            var transportHandler = new Mock <TransportHandler>(new Mock <IDuplexPipe>().Object, NullLogger.Instance);
            var requestHandler   = new Mock <RequestHandler>();

            var session = new Mock <StreamingSession>(requestHandler.Object, transportHandler.Object, NullLogger.Instance, CancellationToken.None);

            session
            .Setup(s => s.ReceiveStream(It.IsAny <Header>(), It.IsAny <ArraySegment <byte> >()))
            .Callback((Header h, ArraySegment <byte> s) =>
            {
                callCount++;

                // Assert
                Assert.Equal(h.Id, header.Id);
                Assert.True(s.Array.SequenceEqual(buffer));
            });

            var dispatcher = new ProtocolDispatcher(session.Object);

            // Act
            dispatcher.OnNext((header, new ReadOnlySequence <byte>(buffer)));

            // Assert
            Assert.Equal(1, callCount);
        }
Ejemplo n.º 2
0
        public void ProtocolDispatcher_DispatchResponse()
        {
            // Arrange
            var request = new ResponsePayload()
            {
                StatusCode = 200,
                Streams    = new List <StreamDescription>()
                {
                    new StreamDescription()
                    {
                        ContentType = "json", Id = Guid.NewGuid().ToString(), Length = 18
                    },
                    new StreamDescription()
                    {
                        ContentType = "text", Id = Guid.NewGuid().ToString(), Length = 24
                    }
                }
            };

            var requestJson  = JsonConvert.SerializeObject(request);
            var requestBytes = Encoding.UTF8.GetBytes(requestJson);

            var header = new Header()
            {
                End           = true,
                Id            = Guid.NewGuid(),
                PayloadLength = requestBytes.Length,
                Type          = PayloadTypes.Response
            };

            var callCount = 0;

            var transportHandler = new Mock <TransportHandler>(new Mock <IDuplexPipe>().Object, NullLogger.Instance);
            var requestHandler   = new Mock <RequestHandler>();

            var session = new Mock <StreamingSession>(requestHandler.Object, transportHandler.Object, NullLogger.Instance, CancellationToken.None);

            session.Setup(
                s => s.ReceiveResponse(It.IsAny <Header>(), It.IsAny <ReceiveResponse>()))
            .Callback((Header h, ReceiveResponse r) =>
            {
                callCount++;

                // Assert
                Assert.Equal(h.Id, header.Id);
                Assert.Equal(request.StatusCode, r.StatusCode);
                Assert.Equal(request.Streams.Count, r.Streams.Count);

                var firstStream = r.Streams.First() as StreamDefinition;
                Assert.Equal(request.Streams.First().Id, firstStream.Id.ToString());
                Assert.Equal(request.Streams.First().Length, firstStream.Length);
                Assert.IsType <MemoryStream>(firstStream.Stream);
                Assert.Equal(0, firstStream.Stream.Length);
            });

            var dispatcher = new ProtocolDispatcher(session.Object);

            // Act
            dispatcher.OnNext((header, new ReadOnlySequence <byte>(requestBytes)));

            // Assert
            Assert.Equal(1, callCount);
        }