docs(review): close Driver.Sql-004/005/006/008/010 with resolutions and RED evidence
This commit is contained in:
@@ -381,21 +381,26 @@ public sealed class SqlDriverTests
|
||||
using var done = new CancellationTokenSource();
|
||||
|
||||
var rewinds = 0;
|
||||
var observer = Task.Run(() =>
|
||||
{
|
||||
var highWater = driver.GetHealth().LastSuccessfulRead ?? DateTime.MinValue;
|
||||
while (!done.IsCancellationRequested)
|
||||
var token = TestContext.Current.CancellationToken;
|
||||
var observer = Task.Run(
|
||||
() =>
|
||||
{
|
||||
var seen = driver.GetHealth().LastSuccessfulRead ?? DateTime.MinValue;
|
||||
if (seen < highWater) Interlocked.Increment(ref rewinds);
|
||||
else highWater = seen;
|
||||
}
|
||||
});
|
||||
var highWater = driver.GetHealth().LastSuccessfulRead ?? DateTime.MinValue;
|
||||
while (!done.IsCancellationRequested)
|
||||
{
|
||||
var seen = driver.GetHealth().LastSuccessfulRead ?? DateTime.MinValue;
|
||||
if (seen < highWater) Interlocked.Increment(ref rewinds);
|
||||
else highWater = seen;
|
||||
}
|
||||
},
|
||||
token);
|
||||
|
||||
var writers = new[]
|
||||
{
|
||||
Task.Run(() => { for (var i = 0; i < iterations; i++) driver.ObservePollOutcome([advancing]); }),
|
||||
Task.Run(() => { for (var i = 0; i < iterations; i++) driver.ObservePollOutcome([degrading]); }),
|
||||
Task.Run(
|
||||
() => { for (var i = 0; i < iterations; i++) driver.ObservePollOutcome([advancing]); }, token),
|
||||
Task.Run(
|
||||
() => { for (var i = 0; i < iterations; i++) driver.ObservePollOutcome([degrading]); }, token),
|
||||
};
|
||||
|
||||
await Task.WhenAll(writers);
|
||||
@@ -581,7 +586,7 @@ public sealed class SqlDriverTests
|
||||
|
||||
var health = driver.GetHealth();
|
||||
// Untouched: HandlePollError left the exception to ReadAsync, so it neither re-degraded nor leaked…
|
||||
health.LastError.ShouldBe(classified.LastError);
|
||||
health.LastError.ShouldNotBeNull().ShouldBe(classified.LastError);
|
||||
health.LastError.ShouldNotContain(SecretToken);
|
||||
// …and it logged nothing (ReadAsync owns the single outage warning).
|
||||
logger.Entries.Count(e => e.Level == LogLevel.Warning).ShouldBe(warningsAfterRead);
|
||||
@@ -618,7 +623,8 @@ public sealed class SqlDriverTests
|
||||
driver.HandlePollError(thrown);
|
||||
|
||||
var health = driver.GetHealth();
|
||||
health.LastError.ShouldBe(classified.LastError); // the richer message survived…
|
||||
health.LastError.ShouldNotBeNull()
|
||||
.ShouldBe(classified.LastError); // the richer message survived…
|
||||
health.LastError.ShouldNotContain("poll failed"); // …and was not overwritten by the poor one
|
||||
logger.Entries.Count(e => e.Level == LogLevel.Warning).ShouldBe(warningsAfterRead);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user