public void TestPeerListRequestResponse(int fakePeers) { var peerService = Substitute.For <IPeerRepository>(); var peerList = new List <Peer>(); for (var i = 0; i < fakePeers; i++) { peerList.Add(new Peer { Reputation = 0, LastSeen = DateTime.Now, PeerId = PeerIdHelper.GetPeerId(i.ToString()) }); } // Build a fake remote endpoint _fakeContext.Channel.RemoteAddress.Returns(EndpointBuilder.BuildNewEndPoint("192.0.0.1", 42042)); peerService.GetAll().Returns(peerList); var sendPeerId = PeerIdHelper.GetPeerId("sender"); var protocolMessage = new GetPeerCountRequest().ToProtocolMessage(PeerIdHelper.GetPeerId("sender")); var messageStream = MessageStreamHelper.CreateStreamWithMessage(_fakeContext, _testScheduler, protocolMessage); var peerSettings = sendPeerId.ToSubstitutedPeerSettings(); var handler = new PeerCountRequestObserver(peerSettings, peerService, _logger); handler.StartObserving(messageStream); _testScheduler.Start(); var receivedCalls = _fakeContext.Channel.ReceivedCalls().ToList(); receivedCalls.Count.Should().Be(1); var sentResponseDto = (IMessageDto <ProtocolMessage>)receivedCalls[0].GetArguments().Single(); var responseContent = sentResponseDto.Content.FromProtocolMessage <GetPeerCountResponse>(); responseContent.PeerCount.Should().Be(fakePeers); }
RpcClientChannelFactory_Pipeline_Should_Produce_Request_Object_RpcServerChannelFactory_Can_Process_Into_Observable() { var recipient = PeerIdHelper.GetPeerId("recipient"); var sender = PeerIdHelper.GetPeerId("sender"); var signature = Substitute.For <ISignature>(); signature.SignatureBytes.Returns(ByteUtil.GenerateRandomByteArray(new FfiWrapper().SignatureLength)); _peerIdValidator.ValidatePeerIdFormat(Arg.Any <PeerId>()).Returns(true); _clientKeySigner.Sign(Arg.Any <byte[]>(), default).ReturnsForAnyArgs(signature); var correlationId = CorrelationId.GenerateCorrelationId(); var protocolMessage = new GetPeerCountRequest().ToProtocolMessage(sender, correlationId); var dto = new MessageDto( protocolMessage, recipient ); _clientChannel.WriteOutbound(dto); var sentBytes = _clientChannel.ReadOutbound <IByteBuffer>(); // obviously sentBytes.Should().BeAssignableTo <IByteBuffer>(); _clientCorrelationManager.ReceivedWithAnyArgs(1).AddPendingRequest( Arg.Is <CorrelatableMessage <ProtocolMessage> >(c => c.Content.CorrelationId.ToCorrelationId().Equals(correlationId))); _clientKeySigner.ReceivedWithAnyArgs(1).Sign(Arg.Is(signature.SignatureBytes), default); _serverKeySigner.Verify( Arg.Any <ISignature>(), Arg.Any <byte[]>(), default ) .ReturnsForAnyArgs(true); _authenticationStrategy.Authenticate(Arg.Any <PeerId>()).Returns(true); var observer = new ProtocolMessageObserver(0, Substitute.For <ILogger>()); var messageStream = _serverFactory.InheritedHandlers.OfType <ObservableServiceHandler>().Single() .MessageStream; using (messageStream.Subscribe(observer)) { _serverChannel.WriteInbound(sentBytes); _serverCorrelationManager.DidNotReceiveWithAnyArgs().TryMatchResponse(protocolMessage); _serverKeySigner.ReceivedWithAnyArgs(1).Verify(null, null, null); _testScheduler.Start(); observer.Received.Count.Should().Be(1); observer.Received.Single().Payload.CorrelationId.ToCorrelationId().Id.Should().Be(correlationId.Id); } await _serverChannel.DisconnectAsync(); await _clientChannel.DisconnectAsync(); }
public static void ToProtocolMessage_When_Processing_Request_Should_Generate_New_CorrelationId_If_Not_Specified() { var peerId = PeerIdHelper.GetPeerId("someone"); var request = new GetPeerCountRequest().ToProtocolMessage(peerId); request.CorrelationId.ToCorrelationId().Should().NotBe(default);