P08-03: 配置の通常操作受入
This commit is contained in:
@@ -18,6 +18,7 @@ HERE = Path(__file__).resolve().parent
|
||||
CONTRACT = 'docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json'
|
||||
CONDITIONS = ('support_connection', 'invalid_position_reason', 'demolish_rebuild',
|
||||
'pan_zoom_world_identity', 'separate_pid_resume')
|
||||
OS_CHILD_TIMEOUT_SECONDS = 2400
|
||||
RECORDER = 'docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd'
|
||||
|
||||
def collect_os(r, root, out, stage, engine, commit, refs, protected, outer):
|
||||
@@ -68,6 +69,7 @@ def collect_os(r, root, out, stage, engine, commit, refs, protected, outer):
|
||||
'default_before':protected, 'command':command, 'engine_sha256':r.sha(engine),
|
||||
'controller_sha256':r.sha(root/'tools/run_p08_normal_placement.py'),
|
||||
'recorder_sha256':r.sha(recorder), 'formal_acceptance':False,
|
||||
'timeout_seconds':OS_CHILD_TIMEOUT_SECONDS,
|
||||
'environment':{k:v for k,v in env.items() if k.startswith(('P08_', 'THE_TREE_'))},
|
||||
'environment_sha256':hashlib.sha256(json.dumps(env,sort_keys=True).encode()).hexdigest()}
|
||||
r.write(folder/'started.json', base)
|
||||
@@ -81,7 +83,7 @@ def collect_os(r, root, out, stage, engine, commit, refs, protected, outer):
|
||||
monotonic_ns=time.monotonic_ns(), state='waiting_for_root_cua_requests'))
|
||||
print(json.dumps({'actual_pid':process.pid, 'request_directory':str(pair),
|
||||
'state':'waiting_for_root_cua', 'role':role}), flush=True)
|
||||
exit_code = process.wait(timeout=900)
|
||||
exit_code = process.wait(timeout=base['timeout_seconds'])
|
||||
r.require(exit_code == 0, 'ordinary native OS exit0')
|
||||
raw = (folder/'engine-native.log').read_text()
|
||||
r.require('ERROR:' not in raw and 'SCRIPT ERROR:' not in raw, 'OS native diagnostics')
|
||||
|
||||
@@ -375,6 +375,10 @@ class EvidenceTests(unittest.TestCase):
|
||||
|
||||
def collector_mock(self, fail_wait=False):
|
||||
"""No native engine: Popen, profiles, live engine probes are all mocked."""
|
||||
expected2400 = 2400
|
||||
self.assertEqual(expected2400, D.OS_CHILD_TIMEOUT_SECONDS)
|
||||
def assert2400(receipt):
|
||||
self.assertEqual(expected2400, receipt['timeout_seconds'])
|
||||
output = Path(self.temp.name)/'mock-collection'
|
||||
stage = output/'stage'; stage.mkdir(parents=True)
|
||||
shutil.copyfile(self.root/'project.godot',stage/'project.godot')
|
||||
@@ -392,9 +396,10 @@ class EvidenceTests(unittest.TestCase):
|
||||
profile_text = (stage/'project.godot').read_text()
|
||||
name = __import__('re').search(r'config/custom_user_dir_name="([^"]+)"',profile_text).group(1)
|
||||
pid = 801+len(captured)
|
||||
process = SimpleNamespace(pid=pid)
|
||||
process = SimpleNamespace(pid=pid, role=role)
|
||||
def wait(timeout):
|
||||
self.assertEqual(900,timeout)
|
||||
self.assertEqual(expected2400,timeout)
|
||||
assert2400(C.load(output/('os-runs/'+role+'/started.json')))
|
||||
if fail_wait:
|
||||
raise TimeoutError('mock Root acknowledgement timeout')
|
||||
kw['stdout'].write('P08 passive OS placement: 2 checks, 0 failures\n')
|
||||
@@ -425,6 +430,11 @@ class EvidenceTests(unittest.TestCase):
|
||||
self.assertEqual([p.pid for p in captured],cleaned)
|
||||
self.assertEqual(public,(stage/'project.godot').read_bytes())
|
||||
self.assertTrue((output/'os-runs/writer/ended.json').exists())
|
||||
self.assertEqual(['writer'] if fail_wait else ['writer', 'reader'],
|
||||
[p.role for p in captured])
|
||||
for process in captured:
|
||||
for event in ('started', 'ended'):
|
||||
assert2400(C.load(output/('os-runs/'+process.role+'/'+event+'.json')))
|
||||
|
||||
def test_mock_native_controller_two_private_pids(self):
|
||||
self.collector_mock()
|
||||
|
||||
Reference in New Issue
Block a user