public void FailureDetectorRegistry_must_mark_node_as_available_after_explicit_removal_of_connection_and_receiving_heartbeat_again () { var timeIntervals = new List <long>() { 0, 1000, 100, 1100, 1100, 1100, 1100, 1100, 100 }; var fd = FailureDetectorSpecHelpers.CreateFailureDetectorRegistry( clock: FailureDetectorSpecHelpers.FakeTimeGenerator(timeIntervals)); Assert.IsFalse(fd.IsMonitoring("resource1")); fd.Heartbeat("resource1"); //0 fd.Heartbeat("resource1"); //1000 fd.Heartbeat("resource1"); //1100 Assert.IsTrue(fd.IsAvailable("resource1")); //2200 Assert.IsTrue(fd.IsMonitoring("resource1")); fd.Remove("resource1"); Assert.IsFalse(fd.IsMonitoring("resource1")); Assert.IsTrue(fd.IsAvailable("resource1")); //3300 //receives a heartbeat from an explicitly removed node fd.Heartbeat("resource1"); //4400 fd.Heartbeat("resource1"); //5500 fd.Heartbeat("resource1"); //6600 Assert.IsTrue(fd.IsAvailable("resource1")); //6700 Assert.IsTrue(fd.IsMonitoring("resource1")); }
public void FailureDetectorRegistry_must_mark_node_as_available_after_a_series_of_successful_heartbeats() { var timeIntervals = new List <long>() { 0L, 1000L, 100L, 100L }; var fd = FailureDetectorSpecHelpers.CreateFailureDetectorRegistry( clock: FailureDetectorSpecHelpers.FakeTimeGenerator(timeIntervals)); fd.Heartbeat("resource1"); fd.Heartbeat("resource1"); fd.Heartbeat("resource1"); Assert.IsTrue(fd.IsAvailable("resource1")); }
public void FailureDetectorRegistry_must_mark_node_as_available_after_explicit_removal_of_connection() { var timeIntervals = new List <long>() { 0, 1000, 100, 100, 100 }; var fd = FailureDetectorSpecHelpers.CreateFailureDetectorRegistry( clock: FailureDetectorSpecHelpers.FakeTimeGenerator(timeIntervals)); fd.Heartbeat("resource1"); fd.Heartbeat("resource1"); fd.Heartbeat("resource1"); Assert.IsTrue(fd.IsAvailable("resource1")); fd.Remove("resource1"); Assert.IsTrue(fd.IsAvailable("resource1")); }
public void FailureDetectorRegistry_must_mark_node_as_dead_if_heartbeats_are_missed() { var timeIntervals = new List <long>() { 0L, 1000L, 100L, 100L, 4000L, 3000L }; var fd = FailureDetectorSpecHelpers.CreateFailureDetectorRegistry( clock: FailureDetectorSpecHelpers.FakeTimeGenerator(timeIntervals)); fd.Heartbeat("resource1"); //0 fd.Heartbeat("resource1"); //1000 fd.Heartbeat("resource1"); //1100 Assert.IsTrue(fd.IsAvailable("resource1")); //1200 fd.Heartbeat("resource2"); //5200, but unrelated resouce Assert.IsFalse(fd.IsAvailable("resource1")); }
public void FailureDetectorRegistry_must_accept_some_configured_missing_heartbeats() { var timeIntervals = new List <long>() { 0, 1000, 1000, 1000, 4000, 1000, 1000 }; var fd = FailureDetectorSpecHelpers.CreateFailureDetectorRegistry(8.0d, 1000, TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(3), //changed to 3 seconds TimeSpan.FromSeconds(1), FailureDetectorSpecHelpers.FakeTimeGenerator(timeIntervals)); fd.Heartbeat("resource1"); fd.Heartbeat("resource1"); fd.Heartbeat("resource1"); fd.Heartbeat("resource1"); Assert.IsTrue(fd.IsAvailable("resource1")); fd.Heartbeat("resource1"); Assert.IsTrue(fd.IsAvailable("resource1")); }