public async Task Can_Process_DeltaHeightRequest_Correctly() { var deltaHeightRequestMessage = new LatestDeltaHashRequest(); var fakeContext = Substitute.For <IChannelHandlerContext>(); var channeledAny = new ObserverDto(fakeContext, deltaHeightRequestMessage.ToProtocolMessage(PeerIdHelper.GetPeerId(), CorrelationId.GenerateCorrelationId())); var observableStream = new[] { channeledAny }.ToObservable(_testScheduler); _deltaHeightRequestObserver.StartObserving(observableStream); _testScheduler.Start(); var hash = MultiHash.ComputeHash(new byte[32]); var cid = new Cid { Hash = hash }; await fakeContext.Channel.ReceivedWithAnyArgs(1) .WriteAndFlushAsync(new LatestDeltaHashResponse { DeltaIndex = new DeltaIndex { Cid = cid.ToArray().ToByteString(), Height = 100 } }.ToProtocolMessage(PeerIdHelper.GetPeerId(), CorrelationId.GenerateCorrelationId())) .ConfigureAwait(false); _subbedLogger.ReceivedWithAnyArgs(1); }
public async Task Subscribe_To_Message_Stream_Should_Return_VersionRequest() { await _rpcServer.StartAsync(); VersionRequest returnedVersionRequest = null; var targetVersionRequest = new VersionRequest { Query = true }; var protocolMessage = targetVersionRequest.ToProtocolMessage(_peerId, CorrelationId.GenerateCorrelationId()); var observerDto = new ObserverDto(_channelHandlerContext, protocolMessage); _rpcServer.MessageStream .Where(x => x.Payload != null && x.Payload.TypeUrl == typeof(VersionRequest).ShortenedProtoFullName()) .SubscribeOn(_testScheduler) .Subscribe(request => returnedVersionRequest = request.Payload.FromProtocolMessage <VersionRequest>()); _mockSocketReplySubject.OnNext(observerDto); _testScheduler.Start(); targetVersionRequest.Should().Be(returnedVersionRequest); }
/// <summary> /// Reads the channel once accepted and pushed into a stream. /// </summary> /// <param name="ctx"></param> /// <param name="message"></param> protected override void ChannelRead0(IChannelHandlerContext ctx, ProtocolMessage message) { Logger.Verbose("Received {message}", message); var contextAny = new ObserverDto(ctx, message); _messageSubject.OnNext(contextAny); ctx.FireChannelRead(message); }
//Force test scheduler for testing streams public static IObservable <IObserverDto <ProtocolMessage> > CreateStreamWithMessage(IChannelHandlerContext fakeContext, TestScheduler testScheduler, ProtocolMessage response) { var channeledAny = new ObserverDto(fakeContext, response); var messageStream = new[] { channeledAny }.ToObservable(testScheduler); return(messageStream); }
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_Process_PingRequest_Correctly() { var pingRequestMessage = new PingRequest(); var fakeContext = Substitute.For <IChannelHandlerContext>(); var channeledAny = new ObserverDto(fakeContext, pingRequestMessage.ToProtocolMessage(PeerIdHelper.GetPeerId(), CorrelationId.GenerateCorrelationId())); var observableStream = new[] { channeledAny }.ToObservable(_testScheduler); _pingRequestObserver.StartObserving(observableStream); _testScheduler.Start(); await fakeContext.Channel.ReceivedWithAnyArgs(1) .WriteAndFlushAsync(new PingResponse().ToProtocolMessage(PeerIdHelper.GetPeerId(), CorrelationId.GenerateCorrelationId())); _subbedLogger.ReceivedWithAnyArgs(1); }
public async Task Can_Process_DeltaHeightRequest_Correctly() { var fakeContext = Substitute.For <IChannelHandlerContext>(); var deltaHistoryRequestMessage = new DeltaHistoryRequest(); var channeledAny = new ObserverDto(fakeContext, deltaHistoryRequestMessage.ToProtocolMessage(PeerIdHelper.GetPeerId(), CorrelationId.GenerateCorrelationId() ) ); var observableStream = new[] { channeledAny }.ToObservable(_testScheduler); _deltaHistoryRequestObserver.StartObserving(observableStream); _testScheduler.Start(); var response = new DeltaHistoryResponse(); var hp = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("keccak-256")); var lastDeltaHash = hp.ComputeMultiHash(ByteUtil.GenerateRandomByteArray(32)); for (uint x = 0; x < 10; x++) { var delta = new Delta { PreviousDeltaDfsHash = lastDeltaHash.Digest.ToByteString() }; var index = new DeltaIndex { Height = 10, Cid = delta.ToByteString() }; response.DeltaIndex.Add(index); lastDeltaHash = hp.ComputeMultiHash(ByteUtil.GenerateRandomByteArray(32)); } await fakeContext.Channel.ReceivedWithAnyArgs(1) .WriteAndFlushAsync(response.ToProtocolMessage(PeerIdHelper.GetPeerId(), CorrelationId.GenerateCorrelationId())).ConfigureAwait(false); _subbedLogger.ReceivedWithAnyArgs(1); }
public async Task SubscribeToResponse_Without_Response_Handler_Should_Throw_Exception() { var nodeRpcClientFactory = new RpcClientFactory(_channelFactory, _clientEventLoopGroupFactory, new List <IRpcResponseObserver>()); var nodeRpcClient = await nodeRpcClientFactory.GetClientAsync(null, _rpcClientConfig); var targetVersionResponse = new VersionResponse { Version = "1.2.3.4" }; var protocolMessage = targetVersionResponse.ToProtocolMessage(_peerIdentifier, CorrelationId.GenerateCorrelationId()); var observerDto = new ObserverDto(_channelHandlerContext, protocolMessage); Assert.Throws <ResponseHandlerDoesNotExistException>(() => { _mockSocketReplySubject.OnNext(observerDto); nodeRpcClient.SubscribeToResponse <VersionResponse>(response => { }); _testScheduler.Start(); }); }
public async Task SubscribeToResponse_Should_Not_Return_Invalid_Response() { var nodeRpcClientFactory = new RpcClientFactory(_channelFactory, _clientEventLoopGroupFactory, new List <IRpcResponseObserver> { new GetVersionResponseObserver(_logger) }); var nodeRpcClient = await nodeRpcClientFactory.GetClientAsync(null, _rpcClientConfig); var receivedResponse = false; var targetVersionResponse = new VersionResponse { Version = "1.2.3.4" }; var protocolMessage = targetVersionResponse.ToProtocolMessage(_peerIdentifier, CorrelationId.GenerateCorrelationId()); var observerDto = new ObserverDto(_channelHandlerContext, protocolMessage); _mockSocketReplySubject.OnNext(observerDto); nodeRpcClient.SubscribeToResponse <GetDeltaResponse>(response => receivedResponse = true); _testScheduler.Start(); receivedResponse.Should().BeFalse(); }