Zwei-Instanzen-Test unabhängig von der Startzeit, Bot endet immer

Die Uhr des Hosts wartet jetzt auf den Gast. So kann ein langsamer Start
des zweiten Prozesses die Takte bis zum Vergleich nicht mehr verbrauchen.
Der Bot endet auch dann, wenn er seinen Bericht nicht schreiben kann,
und überlebt den Test nie. Ein leeres --storage= führt ihn nicht mehr in
den Ordner des Spielers. Ein neuer Test prüft, dass der Bot ohne
schreibbaren Bericht mit Exit-Code 1 endet.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Steven Wroblewski
2026-10-01 23:24:10 +02:00
parent acce1ed435
commit 84e786e531
2 changed files with 43 additions and 5 deletions
+13 -5
View File
@@ -24,7 +24,9 @@ func _run() -> void:
var report := {"error": "the host did not answer"}
var main: Node = load("res://main.tscn").instantiate()
main.storage_dir = settings.get("--storage", "user://bot")
# Never the player's own folder, even for an empty --storage=.
var storage: String = settings.get("--storage", "")
main.storage_dir = storage if not storage.is_empty() else "user://bot"
main.command_line = PackedStringArray(["--join=" + settings.get("--join", ""), "--name=Bot"])
root.add_child(main)
@@ -50,10 +52,16 @@ func _run() -> void:
}
break
var file := FileAccess.open(settings.get("--out", "user://bot.json"), FileAccess.WRITE)
file.store_string(JSON.stringify(report))
file.close()
# The bot ends in every case, even if the report cannot be written, so that
# it never outlives the test that started it.
var path: String = settings.get("--out", "user://bot.json")
var file := FileAccess.open(path, FileAccess.WRITE)
if file == null:
push_error("the report cannot be written to %s: %s" % [path, error_string(FileAccess.get_open_error())])
else:
file.store_string(JSON.stringify(report))
file.close()
main.notification(Node.NOTIFICATION_WM_CLOSE_REQUEST)
root.remove_child(main)
main.free()
quit(0 if not report.has("error") else 1)
quit(0 if file != null and not report.has("error") else 1)