public void Status() { Assert.Equal(DataSourceState.Initializing, statusProvider.Status.State); var timeBefore = DateTime.Now; var errorInfo = DataSourceStatus.ErrorInfo.FromHttpError(500); updates.UpdateStatus(DataSourceState.Valid, errorInfo); var newStatus = statusProvider.Status; Assert.Equal(DataSourceState.Valid, newStatus.State); Assert.InRange(newStatus.StateSince, errorInfo.Time, errorInfo.Time.AddSeconds(1)); Assert.Equal(errorInfo, newStatus.LastError); }
public void OutageTimeoutLogging() { var outageTimeout = TimeSpan.FromMilliseconds(100); var updates = new DataSourceUpdatesImpl( store, dataStoreStatusProvider, BasicTaskExecutor, TestLogger, outageTimeout ); // simulate an outage updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(500)); // but recover from it immediately updates.UpdateStatus(DataSourceState.Valid, null); // wait until the timeout would have elapsed - no special message should be logged Thread.Sleep(outageTimeout.Add(TimeSpan.FromMilliseconds(50))); // simulate another outage updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(501)); updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(502)); updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromException(new IOException("x"))); updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(501)); Thread.Sleep(outageTimeout); AssertEventually(TimeSpan.FromSeconds(1), TimeSpan.FromMilliseconds(50), () => { var messages = LogCapture.GetMessages().Where(m => m.Level == LogLevel.Error).ToList(); if (messages.Count == 1) { var m = messages[0]; if (m.LoggerName == ".DataSource" && m.Text.Contains("NETWORK_ERROR (1 time)") && m.Text.Contains("ERROR_RESPONSE(501) (2 times)") && m.Text.Contains("ERROR_RESPONSE(502) (1 time)")) { return(true); } } return(false); } ); }
public void OutageTimeoutLogging() { var outageTimeout = TimeSpan.FromMilliseconds(100); var updates = new DataSourceUpdatesImpl( store, dataStoreStatusProvider, taskExecutor, testLogger, outageTimeout ); // simulate an outage updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(500)); // but recover from it immediately updates.UpdateStatus(DataSourceState.Valid, null); // wait until the timeout would have elapsed - no special message should be logged Thread.Sleep(outageTimeout.Add(TimeSpan.FromMilliseconds(50))); // simulate another outage updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(501)); updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(502)); updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromException(new IOException("x"))); updates.UpdateStatus(DataSourceState.Interrupted, DataSourceStatus.ErrorInfo.FromHttpError(501)); Thread.Sleep(outageTimeout.Add(TimeSpan.FromMilliseconds(100))); var messages = logCapture.GetMessages(); Assert.Collection(messages, m => { Assert.Equal(LogLevel.Error, m.Level); Assert.Equal(".DataSource", m.LoggerName); Assert.Contains("NETWORK_ERROR (1 time)", m.Text); Assert.Contains("ERROR_RESPONSE(501) (2 times)", m.Text); Assert.Contains("ERROR_RESPONSE(502) (1 time)", m.Text); }); Assert.NotEmpty(messages); }