step 4
This commit is contained in:
@@ -53,6 +53,29 @@ void TestRuntimeEventTryRecord()
|
||||
Expect(metrics.queue.oldestEventAgeMilliseconds == 0.0, "queue age is clamped to non-negative values");
|
||||
Expect(metrics.dispatch.lastDispatchDurationMilliseconds == 0.0, "dispatch duration is clamped to non-negative values");
|
||||
}
|
||||
|
||||
void TestPersistenceWriteHealth()
|
||||
{
|
||||
HealthTelemetry telemetry;
|
||||
telemetry.RecordPersistenceWriteResult(false, "runtime-state", "runtime/runtime_state.json", "UpdateLayerParameter",
|
||||
"disk full", true);
|
||||
|
||||
HealthTelemetry::PersistenceSnapshot persistence = telemetry.GetPersistenceSnapshot();
|
||||
Expect(persistence.writeFailureCount == 1, "persistence health counts write failures");
|
||||
Expect(!persistence.lastWriteSucceeded, "persistence health records failed write state");
|
||||
Expect(persistence.unsavedChanges, "persistence health reports unsaved changes after failure");
|
||||
Expect(persistence.newerRequestPending, "persistence health records pending newer request");
|
||||
Expect(persistence.lastTargetKind == "runtime-state", "persistence health records target kind");
|
||||
Expect(persistence.lastReason == "UpdateLayerParameter", "persistence health records reason");
|
||||
Expect(persistence.lastErrorMessage == "disk full", "persistence health records error message");
|
||||
|
||||
Expect(telemetry.TryRecordPersistenceWriteResult(true, "runtime-state", "runtime/runtime_state.json", "flush", "", false),
|
||||
"try persistence health succeeds when uncontended");
|
||||
persistence = telemetry.GetPersistenceSnapshot();
|
||||
Expect(persistence.writeSuccessCount == 1, "persistence health counts write successes");
|
||||
Expect(persistence.lastWriteSucceeded, "persistence health records successful write state");
|
||||
Expect(!persistence.unsavedChanges, "persistence health clears unsaved changes after latest successful write with no pending request");
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
@@ -60,6 +83,7 @@ int main()
|
||||
TestRuntimeEventQueueMetrics();
|
||||
TestRuntimeEventDispatchStats();
|
||||
TestRuntimeEventTryRecord();
|
||||
TestPersistenceWriteHealth();
|
||||
|
||||
if (gFailures != 0)
|
||||
{
|
||||
|
||||
@@ -94,12 +94,42 @@ void TestImmediateRequestsAreNotCoalesced()
|
||||
"immediate snapshots preserve order");
|
||||
}
|
||||
}
|
||||
|
||||
void TestWriteFailureReportsStructuredResult()
|
||||
{
|
||||
std::vector<PersistenceWriteResult> results;
|
||||
PersistenceWriter writer(
|
||||
std::chrono::milliseconds(1),
|
||||
[](const PersistenceSnapshot&, std::string& error) {
|
||||
error = "simulated failure";
|
||||
return false;
|
||||
});
|
||||
writer.SetResultCallback([&results](const PersistenceWriteResult& result) {
|
||||
results.push_back(result);
|
||||
});
|
||||
|
||||
PersistenceSnapshot snapshot = MakeRuntimeSnapshot("payload");
|
||||
snapshot.debounceAllowed = false;
|
||||
snapshot.reason = "failure-test";
|
||||
|
||||
std::string error;
|
||||
Expect(writer.EnqueueSnapshot(snapshot, error), "failing snapshot still enqueues");
|
||||
writer.StopAndFlush();
|
||||
|
||||
Expect(results.size() == 1, "writer reports one failure result");
|
||||
Expect(!results.empty() && !results[0].succeeded, "writer result records failure");
|
||||
Expect(!results.empty() && results[0].reason == "failure-test", "writer result preserves reason");
|
||||
Expect(!results.empty() && results[0].errorMessage == "simulated failure", "writer result preserves error message");
|
||||
Expect(!results.empty() && !results[0].newerRequestPending, "writer result reports no newer pending request");
|
||||
Expect(writer.GetMetrics().failedCount == 1, "writer metrics count failed writes");
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
TestDebouncedRequestsCoalesceToNewestSnapshot();
|
||||
TestImmediateRequestsAreNotCoalesced();
|
||||
TestWriteFailureReportsStructuredResult();
|
||||
|
||||
if (gFailures != 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user