test fixes
All checks were successful
Intrepid/Prometeu/Runtime/pipeline/head This commit looks good
Intrepid/Prometeu/Runtime/pipeline/pr-master This commit looks good

This commit is contained in:
bQUARKz 2026-05-15 05:07:10 +01:00
parent 446044c4e6
commit deaababb1e
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8
8 changed files with 45 additions and 49 deletions

View File

@ -509,7 +509,7 @@ impl NativeInterface for VmRuntimeHost<'_> {
ret.push_int(0); ret.push_int(0);
return Ok(()); return Ok(());
} }
let stat = self.memcard.slot_stat(&self.fs, self.current_app_id, slot); let stat = self.memcard.slot_stat(self.fs, self.current_app_id, slot);
let status = if stat.state == MemcardSlotState::Corrupt { let status = if stat.state == MemcardSlotState::Corrupt {
MemcardStatus::Corrupt MemcardStatus::Corrupt
} else { } else {
@ -533,7 +533,7 @@ impl NativeInterface for VmRuntimeHost<'_> {
return Ok(()); return Ok(());
} }
let read = let read =
self.memcard.slot_read(&self.fs, self.current_app_id, slot, offset, max_bytes); self.memcard.slot_read(self.fs, self.current_app_id, slot, offset, max_bytes);
ret.push_int(read.status as i64); ret.push_int(read.status as i64);
ret.push_string(hex_encode(&read.bytes)); ret.push_string(hex_encode(&read.bytes));
ret.push_int(read.bytes_read as i64); ret.push_int(read.bytes_read as i64);
@ -550,7 +550,7 @@ impl NativeInterface for VmRuntimeHost<'_> {
} }
let payload = hex_decode(&payload_hex)?; let payload = hex_decode(&payload_hex)?;
let app_id = self.current_app_id; let app_id = self.current_app_id;
let write = self.memcard.slot_write(&self.fs, app_id, slot, offset, &payload); let write = self.memcard.slot_write(self.fs, app_id, slot, offset, &payload);
ret.push_int(write.status as i64); ret.push_int(write.status as i64);
ret.push_int(write.bytes_written as i64); ret.push_int(write.bytes_written as i64);
Ok(()) Ok(())

View File

@ -190,11 +190,6 @@ mod fs_memcard;
fn initialize_vm_applies_cartridge_capabilities_before_loader_resolution() { fn initialize_vm_applies_cartridge_capabilities_before_loader_resolution() {
let mut runtime = VirtualMachineRuntime::new(None); let mut runtime = VirtualMachineRuntime::new(None);
let mut log_service = LogService::new(4096); let mut log_service = LogService::new(4096);
let mut fs = VirtualFS::new();
let mut fs_state = FsState::Unmounted;
let mut memcard = MemcardService::new();
let mut open_files: HashMap<u32, String> = HashMap::new();
let mut next_handle = 1;
let mut vm = VirtualMachine::default(); let mut vm = VirtualMachine::default();
let code = assemble("PUSH_I32 0\nHOSTCALL 0\nHALT").expect("assemble"); let code = assemble("PUSH_I32 0\nHOSTCALL 0\nHALT").expect("assemble");
let program = serialized_single_function_module( let program = serialized_single_function_module(
@ -221,11 +216,6 @@ fn initialize_vm_applies_cartridge_capabilities_before_loader_resolution() {
fn initialize_vm_succeeds_when_cartridge_capabilities_cover_hostcalls() { fn initialize_vm_succeeds_when_cartridge_capabilities_cover_hostcalls() {
let mut runtime = VirtualMachineRuntime::new(None); let mut runtime = VirtualMachineRuntime::new(None);
let mut log_service = LogService::new(4096); let mut log_service = LogService::new(4096);
let mut fs = VirtualFS::new();
let mut fs_state = FsState::Unmounted;
let mut memcard = MemcardService::new();
let mut open_files: HashMap<u32, String> = HashMap::new();
let mut next_handle = 1;
let mut vm = VirtualMachine::default(); let mut vm = VirtualMachine::default();
let code = assemble("PUSH_I32 0\nHOSTCALL 0\nHALT").expect("assemble"); let code = assemble("PUSH_I32 0\nHOSTCALL 0\nHALT").expect("assemble");
let program = serialized_single_function_module( let program = serialized_single_function_module(
@ -775,11 +765,6 @@ fn tick_draw_text_survives_no_scene_frame_path() {
fn initialize_vm_success_clears_previous_crash_report() { fn initialize_vm_success_clears_previous_crash_report() {
let mut runtime = VirtualMachineRuntime::new(None); let mut runtime = VirtualMachineRuntime::new(None);
let mut log_service = LogService::new(4096); let mut log_service = LogService::new(4096);
let mut fs = VirtualFS::new();
let mut fs_state = FsState::Unmounted;
let mut memcard = MemcardService::new();
let mut open_files: HashMap<u32, String> = HashMap::new();
let mut next_handle = 1;
runtime.last_crash_report = Some(CrashReport::VmPanic { message: "stale".into(), pc: Some(1) }); runtime.last_crash_report = Some(CrashReport::VmPanic { message: "stale".into(), pc: Some(1) });
let mut vm = VirtualMachine::default(); let mut vm = VirtualMachine::default();
@ -804,9 +789,9 @@ fn initialize_vm_success_clears_previous_crash_report() {
fn reset_clears_cartridge_scoped_runtime_state() { fn reset_clears_cartridge_scoped_runtime_state() {
let mut runtime = VirtualMachineRuntime::new(None); let mut runtime = VirtualMachineRuntime::new(None);
let mut vm = VirtualMachine::default(); let mut vm = VirtualMachine::default();
let mut fs_state = FsState::Mounted; let fs_state = FsState::Mounted;
let mut open_files: HashMap<u32, String> = HashMap::new(); let mut open_files: HashMap<u32, String> = HashMap::new();
let mut next_handle = 9; let next_handle = 9;
runtime.tick_index = 77; runtime.tick_index = 77;
runtime.logical_frame_index = 12; runtime.logical_frame_index = 12;
@ -941,11 +926,7 @@ fn tick_already_materialized_string_path_records_zero_internal_allocations() {
fn initialize_vm_failure_clears_previous_identity_and_handles() { fn initialize_vm_failure_clears_previous_identity_and_handles() {
let mut runtime = VirtualMachineRuntime::new(None); let mut runtime = VirtualMachineRuntime::new(None);
let mut log_service = LogService::new(4096); let mut log_service = LogService::new(4096);
let mut fs = VirtualFS::new();
let mut fs_state = FsState::Unmounted;
let mut memcard = MemcardService::new();
let mut open_files: HashMap<u32, String> = HashMap::new(); let mut open_files: HashMap<u32, String> = HashMap::new();
let mut next_handle = 1;
let mut vm = VirtualMachine::default(); let mut vm = VirtualMachine::default();
let good_program = serialized_single_function_module( let good_program = serialized_single_function_module(
@ -964,7 +945,8 @@ fn initialize_vm_failure_clears_previous_identity_and_handles() {
.expect("runtime must initialize"); .expect("runtime must initialize");
open_files.insert(5, "/save.dat".into()); open_files.insert(5, "/save.dat".into());
next_handle = 6;
let next_handle = 6;
runtime.paused = true; runtime.paused = true;
runtime.debug_step_request = true; runtime.debug_step_request = true;
runtime.atomic_telemetry.cycles_used.store(123, Ordering::Relaxed); runtime.atomic_telemetry.cycles_used.store(123, Ordering::Relaxed);

View File

@ -232,11 +232,6 @@ fn tick_bank_info_returns_slot_summary_not_json() {
fn initialize_vm_rejects_removed_bank_slot_info_syscall_identity() { fn initialize_vm_rejects_removed_bank_slot_info_syscall_identity() {
let mut runtime = VirtualMachineRuntime::new(None); let mut runtime = VirtualMachineRuntime::new(None);
let mut log_service = LogService::new(4096); let mut log_service = LogService::new(4096);
let mut fs = VirtualFS::new();
let mut fs_state = FsState::Unmounted;
let mut memcard = MemcardService::new();
let mut open_files: HashMap<u32, String> = HashMap::new();
let mut next_handle = 1;
let mut vm = VirtualMachine::default(); let mut vm = VirtualMachine::default();
let code = assemble("PUSH_I32 0\nPUSH_I32 0\nHOSTCALL 0\nHALT").expect("assemble"); let code = assemble("PUSH_I32 0\nPUSH_I32 0\nHOSTCALL 0\nHALT").expect("assemble");
let program = serialized_single_function_module( let program = serialized_single_function_module(

View File

@ -110,7 +110,7 @@ impl VirtualMachineRuntime {
log_service: &mut LogService, log_service: &mut LogService,
fs: &mut VirtualFS, fs: &mut VirtualFS,
fs_state: &mut FsState, fs_state: &mut FsState,
memcard: &mut MemcardService, mem_card: &mut MemcardService,
open_files: &mut HashMap<u32, String>, open_files: &mut HashMap<u32, String>,
next_handle: &mut u32, next_handle: &mut u32,
vm: &mut VirtualMachine, vm: &mut VirtualMachine,
@ -163,7 +163,7 @@ impl VirtualMachineRuntime {
log_service, log_service,
fs, fs,
fs_state, fs_state,
memcard, memcard: mem_card,
open_files, open_files,
next_handle, next_handle,
}; };

View File

@ -58,7 +58,11 @@ impl HostDebugger {
// Pre-load cartridge metadata so the Handshake message can contain // Pre-load cartridge metadata so the Handshake message can contain
// valid information about the App being debugged. // valid information about the App being debugged.
if let Ok(cartridge) = CartridgeLoader::load(path) { if let Ok(cartridge) = CartridgeLoader::load(path) {
let _ = firmware.os.vm_runtime.initialize_vm(&mut firmware.vm, &cartridge); let _ = firmware.os.vm_runtime.initialize_vm(
&mut firmware.os.log_service,
&mut firmware.vm,
&cartridge,
);
} }
match TcpListener::bind(format!("127.0.0.1:{}", debug_port)) { match TcpListener::bind(format!("127.0.0.1:{}", debug_port)) {
@ -201,7 +205,11 @@ impl HostDebugger {
DebugCommand::Step => { DebugCommand::Step => {
// Execute exactly one instruction and keep paused. // Execute exactly one instruction and keep paused.
firmware.os.vm_runtime.paused = true; firmware.os.vm_runtime.paused = true;
let _ = firmware.os.vm_runtime.debug_step_instruction(&mut firmware.vm, hardware); let _ = firmware.os.vm_runtime.debug_step_instruction(
&mut firmware.os.log_service,
&mut firmware.vm,
hardware,
);
} }
DebugCommand::StepFrame => { DebugCommand::StepFrame => {
// Execute until the end of the current logical frame. // Execute until the end of the current logical frame.
@ -308,7 +316,7 @@ impl HostDebugger {
} }
// 1. Process and send new log entries. // 1. Process and send new log entries.
let new_events = firmware.os.vm_runtime.log_service.get_after(self.last_log_seq); let new_events = firmware.os.log_service.get_after(self.last_log_seq);
for event in new_events { for event in new_events {
self.last_log_seq = event.seq; self.last_log_seq = event.seq;

View File

@ -59,7 +59,7 @@ struct FrameCanvas<'a> {
pub(crate) fn capture_snapshot(stats: &HostStats, firmware: &Firmware) -> OverlaySnapshot { pub(crate) fn capture_snapshot(stats: &HostStats, firmware: &Firmware) -> OverlaySnapshot {
let tel = firmware.os.vm_runtime.atomic_telemetry.snapshot(); let tel = firmware.os.vm_runtime.atomic_telemetry.snapshot();
let recent_logs = firmware.os.vm_runtime.log_service.get_recent(10); let recent_logs = firmware.os.log_service.get_recent(10);
let violations_count = let violations_count =
recent_logs.iter().filter(|e| e.tag >= 0xCA01 && e.tag <= 0xCA07).count(); recent_logs.iter().filter(|e| e.tag >= 0xCA01 && e.tag <= 0xCA07).count();

View File

@ -153,7 +153,7 @@ impl HostRunner {
let mut firmware = Firmware::new(cap_config); let mut firmware = Firmware::new(cap_config);
if let Some(root) = &fs_root { if let Some(root) = &fs_root {
let backend = HostDirBackend::new(root); let backend = HostDirBackend::new(root);
firmware.os.vm_runtime.mount_fs(Box::new(backend)); firmware.os.mount_fs(Box::new(backend));
} }
Self { Self {
@ -333,13 +333,11 @@ impl ApplicationHandler for HostRunner {
// 2. Maintain filesystem connection if it was lost (e.g., directory removed). // 2. Maintain filesystem connection if it was lost (e.g., directory removed).
if let Some(root) = &self.fs_root { if let Some(root) = &self.fs_root {
use prometeu_system::fs::FsState; use prometeu_system::fs::FsState;
if matches!( if matches!(self.firmware.os.fs_state, FsState::Unmounted | FsState::Error(_))
self.firmware.os.vm_runtime.fs_state, && std::path::Path::new(root).exists()
FsState::Unmounted | FsState::Error(_)
) && std::path::Path::new(root).exists()
{ {
let backend = HostDirBackend::new(root); let backend = HostDirBackend::new(root);
self.firmware.os.vm_runtime.mount_fs(Box::new(backend)); self.firmware.os.mount_fs(Box::new(backend));
} }
} }
@ -403,9 +401,9 @@ impl ApplicationHandler for HostRunner {
// Synchronize system logs to the host console. // Synchronize system logs to the host console.
let last_seq = self.log_sink.last_seq().unwrap_or(u64::MAX); let last_seq = self.log_sink.last_seq().unwrap_or(u64::MAX);
let new_events = if last_seq == u64::MAX { let new_events = if last_seq == u64::MAX {
self.firmware.os.vm_runtime.log_service.get_recent(4096) self.firmware.os.log_service.get_recent(4096)
} else { } else {
self.firmware.os.vm_runtime.log_service.get_after(last_seq) self.firmware.os.log_service.get_after(last_seq)
}; };
self.log_sink.process_events(new_events); self.log_sink.process_events(new_events);

View File

@ -1,20 +1,33 @@
{ {
"version": 1, "version": 1,
"domains": { "domains": {
"system/runtime": { "system/os": {
"baseline_percent": 68, "baseline_percent": 78,
"paths": [ "paths": [
"crates/console/prometeu-system/src/virtual_machine_runtime.rs", "crates/console/prometeu-system/src/os/",
"crates/console/prometeu-system/src/virtual_machine_runtime/" "crates/console/prometeu-system/src/services/process",
"crates/console/prometeu-system/src/services/task"
] ]
}, },
"fs": { "system/runtime": {
"baseline_percent": 70,
"paths": [
"crates/console/prometeu-system/src/services/vm_runtime"
]
},
"system/fs": {
"baseline_percent": 77, "baseline_percent": 77,
"paths": [ "paths": [
"crates/console/prometeu-system/src/services/fs/", "crates/console/prometeu-system/src/services/fs/",
"crates/console/prometeu-system/src/services/memcard.rs" "crates/console/prometeu-system/src/services/memcard.rs"
] ]
}, },
"system/programs": {
"baseline_percent": 55,
"paths": [
"crates/console/prometeu-system/src/programs/"
]
},
"asset/bank": { "asset/bank": {
"baseline_percent": 86, "baseline_percent": 86,
"paths": [ "paths": [