Пример #1
0
        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);
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);