test fixes
This commit is contained in:
parent
446044c4e6
commit
deaababb1e
@ -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(())
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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": [
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user