public void PeerState_AllConnectionDataGetsReset() { var ipAddress = IPAddress.Parse("::ffff:192.168.0.1"); var networkAddress = new NetworkAddress(ipAddress, 80); var peerFolder = AssureEmptyDirAsDataFolder(Path.Combine(AppContext.BaseDirectory, "PeerAddressManager")); var addressManager = new PeerAddressManager(peerFolder, this.extendedLoggerFactory); addressManager.AddPeer(networkAddress, IPAddress.Loopback); addressManager.PeerConnected(networkAddress.Endpoint, DateTime.UtcNow); addressManager.PeerAttempted(networkAddress.Endpoint, DateTime.UtcNow); addressManager.PeerAttempted(networkAddress.Endpoint, DateTime.UtcNow); addressManager.PeerAttempted(networkAddress.Endpoint, DateTime.UtcNow); addressManager.PeerConnected(networkAddress.Endpoint, DateTime.UtcNow); var peerOne = addressManager.FindPeer(networkAddress.Endpoint); Assert.Equal(0, peerOne.ConnectionAttempts); Assert.Null(peerOne.LastConnectionAttempt); Assert.NotNull(peerOne.LastConnectionSuccess); }
public void PeerState_AllConnectionDataGetsReset() { IPAddress ipAddress = IPAddress.Parse("::ffff:192.168.0.1"); var endpoint = new IPEndPoint(ipAddress, 80); DataFolder peerFolder = CreateDataFolder(this); PeerAddressManager peerAddressManager = this.CreatePeerAddressManager(peerFolder); peerAddressManager.AddPeer(endpoint, IPAddress.Loopback); peerAddressManager.PeerConnected(endpoint, DateTime.UtcNow); peerAddressManager.PeerAttempted(endpoint, DateTime.UtcNow); peerAddressManager.PeerAttempted(endpoint, DateTime.UtcNow); peerAddressManager.PeerAttempted(endpoint, DateTime.UtcNow); peerAddressManager.PeerConnected(endpoint, DateTime.UtcNow); PeerAddress peerOne = peerAddressManager.FindPeer(endpoint); Assert.Equal(0, peerOne.ConnectionAttempts); Assert.Null(peerOne.LastAttempt); Assert.NotNull(peerOne.LastConnectionSuccess); }
public void PeerAddressManager_AttemptThresholdReached_ResetAttempts() { var ipAddress = IPAddress.Parse("::ffff:192.168.0.1"); var endpoint = new IPEndPoint(ipAddress, 80); var peerFolder = AssureEmptyDirAsDataFolder(Path.Combine(AppContext.BaseDirectory, "PeerAddressManager")); var addressManager = new PeerAddressManager(DateTimeProvider.Default, peerFolder, this.loggerFactory); addressManager.AddPeer(endpoint, IPAddress.Loopback); var applicableDate = DateTimeProvider.Default.GetUtcNow(); //Ensure that there was 10 failed attempts for (int i = 0; i < 10; i++) { addressManager.PeerAttempted(endpoint, applicableDate.AddHours(-i)); } //Ensure that the last attempt was more than 12 hours ago addressManager.PeerAttempted(endpoint, applicableDate.AddHours(-13)); //This call should now reset the counts var resetTimestamp = DateTimeProvider.Default.GetUtcNow(); addressManager.PeerAttempted(endpoint, resetTimestamp); var savedPeer = addressManager.FindPeer(endpoint); Assert.Equal(1, savedPeer.ConnectionAttempts); Assert.Equal(resetTimestamp, savedPeer.LastAttempt); Assert.Null(savedPeer.LastConnectionSuccess); Assert.Null(savedPeer.LastConnectionHandshake); Assert.Null(savedPeer.LastSeen); Assert.Equal("127.0.0.1", savedPeer.Loopback.ToString()); }
public void PeerCanBeReturnedAsPreferred_NeverBeenConnectedTo_Scenario2() { var ipAddress = IPAddress.Parse("::ffff:192.168.0.1"); var addressOne = new NetworkAddress(ipAddress, 80); ipAddress = IPAddress.Parse("::ffff:192.168.0.2"); var addressTwo = new NetworkAddress(ipAddress, 80); ipAddress = IPAddress.Parse("::ffff:192.168.0.3"); var addressThree = new NetworkAddress(ipAddress, 80); var peerFolder = AssureEmptyDirAsDataFolder(Path.Combine(AppContext.BaseDirectory, "PeerAddressManager")); var addressManager = new PeerAddressManager(peerFolder); addressManager.AddPeer(addressOne, IPAddress.Loopback, PeerIntroductionType.Add); addressManager.AddPeer(addressTwo, IPAddress.Loopback, PeerIntroductionType.Add); addressManager.AddPeer(addressThree, IPAddress.Loopback, PeerIntroductionType.Add); addressManager.PeerAttempted(addressTwo.Endpoint, DateTimeOffset.Now); var peers = addressManager.SelectPeersToConnectTo(); Assert.Equal(3, peers.Count()); }
public void PeerSelector_ReturnPeersForGetAddrPayload_Scenario3() { var peersToAdd = new List<IPEndPoint>(); for (int i = 1; i <= 15; i++) { IPAddress ipAddress = IPAddress.Parse(string.Format("::ffff:192.168.0.{0}", i)); peersToAdd.Add(new IPEndPoint(ipAddress, 80)); } PeerAddressManager peerAddressManager = this.CreatePeerAddressManager(); peerAddressManager.AddPeers(peersToAdd.ToArray(), IPAddress.Loopback); for (int i = 1; i <= 7; i++) { IPAddress ipAddress = IPAddress.Parse(string.Format("::ffff:192.168.0.{0}", i)); peerAddressManager.PeerAttempted(new IPEndPoint(ipAddress, 80), DateTime.UtcNow.AddHours(-2)); } IEnumerable<PeerAddress> peers = peerAddressManager.PeerSelector.SelectPeersForGetAddrPayload(15); Assert.Equal(15, peers.Count()); Assert.Equal(7, peers.Count(p => p.Attempted)); Assert.Equal(8, peers.Count(p => p.Fresh)); }