public void PollingDetectsStaleStatus() { SetStoreTimestamp(UnixMillisecondTime.Now.PlusMillis(5000)); // future time, definitely not stale var bsConfig = Components.BigSegments(_storeFactory) .StatusPollInterval(TimeSpan.FromMilliseconds(10)) .StaleAfter(TimeSpan.FromMilliseconds(200)) .CreateBigSegmentsConfiguration(BasicContext); using (var sw = new BigSegmentStoreWrapper(bsConfig, BasicTaskExecutor, TestLogger)) { var status1 = sw.GetStatus(); Assert.False(status1.Stale); var statuses = new EventSink <BigSegmentStoreStatus>(); sw.StatusChanged += statuses.Add; SetStoreTimestamp(UnixMillisecondTime.Now.PlusMillis(-200)); var status2 = statuses.ExpectValue(); Assert.True(status2.Stale); SetStoreTimestamp(UnixMillisecondTime.Now.PlusMillis(5000)); var status3 = statuses.ExpectValue(); Assert.False(status3.Stale); } }
public void PollingDetectsStoreUnavailability() { SetStoreTimestamp(UnixMillisecondTime.Now); var bsConfig = Components.BigSegments(_storeFactory) .StatusPollInterval(TimeSpan.FromMilliseconds(10)) .StaleAfter(TimeSpan.FromDays(1)) .CreateBigSegmentsConfiguration(BasicContext); using (var sw = new BigSegmentStoreWrapper(bsConfig, BasicTaskExecutor, TestLogger)) { var status1 = sw.GetStatus(); Assert.True(status1.Available); var statuses = new EventSink <BigSegmentStoreStatus>(); sw.StatusChanged += statuses.Add; SetStoreStatusError(new Exception("sorry")); var status2 = statuses.ExpectValue(); if (status2.Available) { // depending on timing, we might or might not receive an initial update of Available = true status2 = statuses.ExpectValue(); Assert.False(status2.Available); } Assert.Equal(status2, sw.GetStatus()); SetStoreTimestamp(UnixMillisecondTime.Now); var status3 = statuses.ExpectValue(); Assert.True(status3.Available); Assert.Equal(status3, sw.GetStatus()); } AssertLogMessageRegex(true, Logging.LogLevel.Error, "Big Segment store status.*Exception.*sorry"); }