// Isolated engine serialization/lifecycle test. No HTTP calls or real players. class ERR_TelemetryProbe { static bool Check(bool ok, string detail) { if (ok) Print("ERR SMOKE PASS: telemetry " + detail); else Print("ERR SMOKE FAIL: telemetry " + detail, LogLevel.ERROR); return ok; } } modded class ERR_Telemetry { bool ProbeStart() { if (!ERR_TelemetryProbe.Check(Enabled() && m_State.pending.Count() == 1 && !m_Dirty, "start queued and persisted before HTTP")) return false; JsonLoadContext json = new JsonLoadContext(); string type, id; if (!ERR_TelemetryProbe.Check(json.LoadFromString(m_State.pending[0]) && json.ReadValue("type", type) && type == "mission_started" && json.ReadValue("eventId", id) && UUID.IsUUID(id), "native event JSON has type and stable event UUID")) return false; string server = m_State.serverId; if (!ERR_TelemetryProbe.Check(LoadState(STATE) && m_State.serverId == server && m_State.pending.Count() == 1, "native JSON queue reload preserves server and event")) return false; return true; } bool ProbeResult() { Finish("interrupted"); JsonLoadContext json = new JsonLoadContext(); string outcome; if (!ERR_TelemetryProbe.Check(m_Ended && m_State.pending.Count() == 2 && json.LoadFromString(m_State.pending[1]) && json.ReadValue("outcome", outcome) && outcome == "preparation_failed", "preparation failure queued once; later interruption cannot overwrite it")) return false; return true; } int ProbeDelivered() { return m_Delivered; } bool ProbeBoundedQueue() { for (int i = 0; i < 70; i++) Event("heartbeat"); return ERR_TelemetryProbe.Check(m_State.pending.Count() == 64 && m_State.droppedEvents == 6 && !m_Dirty, "offline queue is bounded and reports dropped heartbeat events"); } bool ProbeDisabled() { return ERR_TelemetryProbe.Check(!Enabled() && m_State.pending.IsEmpty() && m_Players.IsEmpty() && !FileIO.FileExists(STATE + ".bak"), "admin disable clears pending data and recovery file"); } } modded class ERR_GameMode { override protected void StartScenario() { string fixture; if (!System.GetCLIParam("errSmokeOutcome", fixture) || fixture != "telemetry") { super.StartScenario(); return; } if (!m_ERRTelemetry || !m_ERRTelemetry.ProbeStart()) return; FailPreparation("Telemetry fixture: deliberate startup failure"); if (!m_ERRTelemetry.ProbeResult()) return; GetGame().GetCallqueue().CallLater(ERR_TestTelemetryDelivered, 1000, true); } protected void ERR_TestTelemetryDelivered() { if (!m_ERRTelemetry || m_ERRTelemetry.ProbeDelivered() < 2) return; GetGame().GetCallqueue().Remove(ERR_TestTelemetryDelivered); if (!ERR_TelemetryProbe.Check(m_ERRTelemetry.ProbeDelivered() == 2, "HTTP retry acknowledged start and failure result")) return; if (!m_ERRTelemetry.ProbeBoundedQueue()) return; array replies = {}; Admin().Execute(this, true, "mission telemetry set 0", replies); if (!m_ERRTelemetry.ProbeDisabled()) return; Print("ERR SMOKE COMPLETE: telemetry"); } }