Ejemplo n.º 1
0
        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);
            }
                             );
        }
Ejemplo n.º 3
0
        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);
        }