public void InPeerBecomesActiveAndDisconnectTest() { var node = _nodeFactory.CreateNode("192.1.1.1", 3333); //trigger connection initialized var p2pSession = new TestP2PSession(); p2pSession.RemoteNodeId = node.Id; p2pSession.RemoteHost = node.Host; p2pSession.RemotePort = node.Port; p2pSession.ConnectionDirection = ConnectionDirection.In; _localPeer.TriggerSessionCreated(p2pSession); p2pSession.TriggerHandshakeComplete(); //trigger p2p initialization var p2pProtocol = new P2PProtocolHandler(p2pSession, new MessageSerializationService(), p2pSession.RemoteNodeId, p2pSession.RemotePort ?? 0, _logManager, new PerfService(_logManager)); var p2pArgs = new P2PProtocolInitializedEventArgs(p2pProtocol) { P2PVersion = 4, Capabilities = new[] { new Capability(Protocol.Eth, 62) }.ToList() }; p2pSession.TriggerProtocolInitialized(p2pArgs); Assert.IsTrue(_peerManager.ActivePeers.First().NodeStats.DidEventHappen(NodeStatsEventType.P2PInitialized)); //trigger eth62 initialization var eth62 = new Eth62ProtocolHandler(p2pSession, new MessageSerializationService(), _synchronizationManager, _logManager, new PerfService(_logManager)); var args = new Eth62ProtocolInitializedEventArgs(eth62) { ChainId = _synchronizationManager.ChainId }; p2pSession.TriggerProtocolInitialized(args); Assert.AreEqual(1, _peerManager.CandidatePeers.Count); Assert.AreEqual(1, _peerManager.ActivePeers.Count); Assert.IsTrue(_peerManager.ActivePeers.First().NodeStats.DidEventHappen(NodeStatsEventType.Eth62Initialized)); Assert.NotNull(_peerManager.ActivePeers.First().SynchronizationPeer); //verify active peer was added to synch manager _synchronizationManager.Received(1).AddPeer(Arg.Any <ISynchronizationPeer>()); //trigger disconnect p2pSession.TriggerPeerDisconnected(); Assert.AreEqual(1, _peerManager.CandidatePeers.Count); Assert.AreEqual(0, _peerManager.ActivePeers.Count); //verify active peer was removed from synch manager _synchronizationManager.Received(1).RemovePeer(Arg.Any <ISynchronizationPeer>()); }
public void DisconnectOnWrongChainIdTest() { var p2pSession = InitializeNode(); //trigger eth62 initialization var eth62 = new Eth62ProtocolHandler(p2pSession, new MessageSerializationService(), _synchronizationManager, _logManager, new PerfService(_logManager)); var args = new Eth62ProtocolInitializedEventArgs(eth62) { ChainId = 100 }; p2pSession.TriggerProtocolInitialized(args); Assert.IsTrue(p2pSession.Disconected); Assert.AreEqual(DisconnectReason.Other, p2pSession.DisconnectReason); }
private void Handle(StatusMessage status) { if (_statusReceived) { throw new SubprotocolException($"{nameof(StatusMessage)} has already been received in the past"); } _statusReceived = true; if (Logger.IsTrace) { Logger.Trace($"{P2PSession.RemoteNodeId} ETH received status with" + Environment.NewLine + $" prot version\t{status.ProtocolVersion}" + Environment.NewLine + $" network ID\t{status.ChainId}," + Environment.NewLine + $" genesis hash\t{status.GenesisHash}," + Environment.NewLine + $" best hash\t{status.BestHash}," + Environment.NewLine + $" difficulty\t{status.TotalDifficulty}"); } _remoteHeadBlockHash = status.BestHash; _remoteHeadBlockDifficulty = status.TotalDifficulty; //if (!_statusSent) //{ // throw new InvalidOperationException($"Received status from {P2PSession.RemoteNodeId} before calling Init"); //} ReceivedProtocolInitMsg(status); var eventArgs = new Eth62ProtocolInitializedEventArgs(this) { ChainId = status.ChainId, BestHash = status.BestHash, GenesisHash = status.GenesisHash, Protocol = status.Protocol, ProtocolVersion = status.ProtocolVersion, TotalDifficulty = status.TotalDifficulty }; ProtocolInitialized?.Invoke(this, eventArgs); }
public void OutPeerBecomesActiveAndDisconnectTest() { var p2pSession = InitializeNode(); //trigger p2p initialization var p2pProtocol = new P2PProtocolHandler(p2pSession, new MessageSerializationService(), p2pSession.RemoteNodeId, p2pSession.RemotePort ?? 0, _logManager); var p2pArgs = new P2PProtocolInitializedEventArgs(p2pProtocol) { P2PVersion = 4, Capabilities = new[] { new Capability(Protocol.Eth, 62) }.ToList(), }; p2pSession.TriggerProtocolInitialized(p2pArgs); Assert.IsTrue(_peerManager.ActivePeers.First().NodeStats.DidEventHappen(NodeStatsEvent.P2PInitialized)); //trigger eth62 initialization var eth62 = new Eth62ProtocolHandler(p2pSession, new MessageSerializationService(), _synchronizationManager, _logManager); var args = new Eth62ProtocolInitializedEventArgs(eth62) { ChainId = _synchronizationManager.ChainId }; p2pSession.TriggerProtocolInitialized(args); Assert.IsTrue(_peerManager.ActivePeers.First().NodeStats.DidEventHappen(NodeStatsEvent.Eth62Initialized)); Assert.NotNull(_peerManager.ActivePeers.First().SynchronizationPeer); //verify active peer was added to synch manager _synchronizationManager.Received(1).AddPeer(Arg.Any <ISynchronizationPeer>()); //trigger disconnect p2pSession.TriggerPeerDisconnected(); Assert.AreEqual(1, _peerManager.CandidatePeers.Count); Assert.AreEqual(0, _peerManager.ActivePeers.Count); //verify active peer was removed from synch manager _synchronizationManager.Received(1).RemovePeer(Arg.Any <ISynchronizationPeer>()); }