public async Task Can_Process_GetNeighbourRequest_Correctly() { // mock a random set of peers var randomPeers = new List <Peer> { new Peer { PeerId = PeerIdHelper.GetPeerId("peer1"), LastSeen = DateTime.Now }, new Peer { PeerId = PeerIdHelper.GetPeerId("peer2"), LastSeen = DateTime.Now }, new Peer { PeerId = PeerIdHelper.GetPeerId("peer3"), LastSeen = DateTime.Now }, new Peer { PeerId = PeerIdHelper.GetPeerId("peer4"), LastSeen = DateTime.Now }, new Peer { PeerId = PeerIdHelper.GetPeerId("peer5"), LastSeen = DateTime.Now }, new Peer { PeerId = PeerIdHelper.GetPeerId("peer6") } }; // add them to the mocked repository, and set return expectation AddMockPeerToDbAndSetReturnExpectation(randomPeers, _subbedPeerRepository); var peerSettings = _peerId.ToSubstitutedPeerSettings(); var neighbourRequestHandler = new GetNeighbourRequestObserver(peerSettings, _subbedPeerRepository, _subbedLogger ); var peerNeighbourRequestMessage = new PeerNeighborsRequest(); var fakeContext = Substitute.For <IChannelHandlerContext>(); var channeledAny = new ObserverDto(fakeContext, peerNeighbourRequestMessage.ToProtocolMessage(PeerIdHelper.GetPeerId(), CorrelationId.GenerateCorrelationId())); var observableStream = new[] { channeledAny }.ToObservable(_testScheduler); neighbourRequestHandler.StartObserving(observableStream); var peerNeighborsResponseMessage = new PeerNeighborsResponse(); for (var i = 0; i < 5; i++) { peerNeighborsResponseMessage.Peers.Add(PeerIdHelper.GetPeerId()); } _testScheduler.Start(); await fakeContext.Channel.ReceivedWithAnyArgs(1) .WriteAndFlushAsync( peerNeighborsResponseMessage.ToProtocolMessage(_peerId, CorrelationId.GenerateCorrelationId())); }
public async Task Can_receive_PeerNeighborsResponse() { var pingRequestHandler = new TestMessageObserver <PeerNeighborsResponse>(_logger); var neighbourIds = "abc".Select(i => PeerIdHelper.GetPeerId(i.ToString())); var responseContent = new PeerNeighborsResponse(); responseContent.Peers.AddRange(neighbourIds); var response = responseContent.ToProtocolMessage(_pid, _guid); await InitialisePeerServiceAndSendMessage(pingRequestHandler, response).ConfigureAwait(false); pingRequestHandler.SubstituteObserver.Received(1).OnNext(Arg.Any <PeerNeighborsResponse>()); var call = pingRequestHandler.SubstituteObserver.ReceivedCalls().Single(); ((PeerNeighborsResponse)call.GetArguments()[0]).Peers .Should().BeEquivalentTo(responseContent.Peers); }
public void Observer_Can_Process_GetNeighbourResponse_Correctly() { var testScheduler = new TestScheduler(); var peers = new[] { PeerIdHelper.GetPeerId(), PeerIdHelper.GetPeerId(), PeerIdHelper.GetPeerId() }; var peerNeighborsResponse = new PeerNeighborsResponse { Peers = { peers } }; var protocolMessage = peerNeighborsResponse.ToProtocolMessage(PeerIdHelper.GetPeerId("sender"), CorrelationId.GenerateCorrelationId()); var peerNeighborsResponseObserver = Substitute.For <IObserver <IPeerClientMessageDto> >(); var messageStream = MessageStreamHelper.CreateStreamWithMessage(_fakeContext, testScheduler, protocolMessage); _observer.StartObserving(messageStream); using (_observer.MessageStream.Subscribe(peerNeighborsResponseObserver.OnNext)) { testScheduler.Start(); peerNeighborsResponseObserver.Received(1) .OnNext(Arg.Is <IPeerClientMessageDto>(p => test(p.Message, peers[0]))); peerNeighborsResponseObserver.Received(1) .OnNext(Arg.Is <IPeerClientMessageDto>(p => test(p.Message, peers[1]))); peerNeighborsResponseObserver.Received(1) .OnNext(Arg.Is <IPeerClientMessageDto>(p => test(p.Message, peers[2]))); } }