Add ground starting supplies and mission telemetry; record Workshop 0.0.123
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
// 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<string> replies = {};
|
||||
Admin().Execute(this, true, "mission telemetry set 0", replies);
|
||||
if (!m_ERRTelemetry.ProbeDisabled()) return;
|
||||
Print("ERR SMOKE COMPLETE: telemetry");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user