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); }
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); }