import {readFileSync} from 'node:fs'; import {join} from 'node:path'; import {runqueueGuestServicesTestSources} from './runqueue-guest-services-fixture.mjs'; import {waitGuestServicesSources} from './wait-guest-services-sources.mjs'; export function waitGuestServicesTestSources(root,overrides=new Map()){ const read=p=>overrides.get(p)??readFileSync(join(root,p),'utf8'); const map=runqueueGuestServicesTestSources(root); for(const[p,s]of map)map.set(p,s.replaceAll('turkos_os_runqueue_guest_services','turkos_os_wait_guest_services').replaceAll('turkos-os-runqueue-guest-services','turkos-os-wait-guest-services')); for(const[p,s]of waitGuestServicesSources(root,overrides))if(p!=='Cargo.toml')map.set(p,s); map.set('tests/backend-under-test.rs',map.get('tests/backend-under-test.rs')+'\n'+read('scripts/os-acceptance/wait-guest-services-backend.rs')); const prefix=map.get('tests/services.rs').slice(0,map.get('tests/services.rs').indexOf('#[test]')); map.set('tests/services-prefix.rs',prefix.replaceAll('//!','//').replace('#![allow(dead_code)]','').replace('use os_k1060_queue::Backend as _;','')); map.set('tests/context-model.rs',map.get('tests/context-model.rs').replace('pub(crate) release_drift:u8,','pub(crate) release_drift:u8,\n pub(crate) wait_fail_take:bool,\n pub(crate) wait_fail_resolve:bool,\n pub(crate) wait_resolves:u64,\n pub(crate) wait_takes:u64,\n pub(crate) wait_drift:u8,')); // Match the real guest backend's stored current=None until actual arrive. // Independent authority sees the modeled target continuation first; actual // Table.activate and logical current publish in the real arrive callback. map.set('tests/context-model.rs',map.get('tests/context-model.rs') .replace('pub(crate) wait_drift:u8,','pub(crate) wait_drift:u8,\n pub(crate) logical_departed:bool,') .replace('root: self.root.get(),','root: self.root.get(),\n thread: if self.cpu.borrow().logical_departed { None } else { self.inner.execution().thread },') .replace('self.cpu.borrow_mut().departures += 1;','self.cpu.borrow_mut().departures += 1;\n self.cpu.borrow_mut().logical_departed=true;') .replace('self.cpu.borrow_mut().arrivals += 1;','self.cpu.borrow_mut().arrivals += 1;\n self.cpu.borrow_mut().logical_departed=false;')); map.set('tests/services.rs',read('scripts/os-acceptance/wait-guest-services-tests.rs')); map.set('Cargo.toml',waitGuestServicesSources(root,overrides).get('Cargo.toml')+'\n[[test]]\nname="services"\npath="tests/services.rs"\n'); return map; }