import assert from 'node:assert/strict'; import {readFileSync} from 'node:fs'; import {join} from 'node:path'; import {runqueueGuestServicesSources} from './runqueue-guest-services-sources.mjs'; const replace=(s,n,r,all=false)=>{assert.ok(s.includes(n),n);return all?s.replaceAll(n,r):s.replace(n,r);}; export function runqueueGuestServicesTestSources(root,overrides=new Map()){ const read=p=>overrides.get(p)??readFileSync(join(root,p),'utf8'),map=runqueueGuestServicesSources(root,overrides); let model=read('os-runqueue-return/tests/context-model.rs'); model=replace(model,'#[path = "../../os-context-switch/tests/support/mod.rs"]','#[path = "saved.rs"]'); model=replace(model,'turkos_os_context_switch::context','turkos_os_runqueue_guest_services::context',true); for(const[n,r]of[['AsyncBank','AsyncBank'],['ContextBank::<_, 4>','ContextBank::<_, 3>']])model=replace(model,n,r,true); model=replace(model,'pub(crate) arrivals: u64,','pub(crate) arrivals: u64,\n pub(crate) tick_live:Option,\n pub(crate) tick_consumed:u64,\n pub(crate) release_drift:u8,'); // NEW host adapter couples pin consumption to real frozen Table.reap. The // earlier fixture deliberately retained those Table stacks after pin release. // Preflight the only modeled failure before the actual Table mutation. model=replace(model,' fn release(&mut self, p: Self::Binding) -> Result<(), (Error, Self::Binding)> {\n self.inner.release(p)\n }',read('scripts/os-acceptance/runqueue-guest-services-release.rs')); let saved=read('os-context-switch/tests/support/mod.rs'); saved=replace(saved,'turkos_os_context_switch::context','turkos_os_runqueue_guest_services::context',true); saved=replace(saved,'Table','Table',true); saved=replace(saved,'ContextBank','ContextBank',true); let backend=read('scripts/os-acceptance/k1060-runqueue-backend.rs'); backend=replace(backend,'use turkos_kernel::runtime::{runqueue as os_k1060_queue, runqueue_context as os_k1060_context};',''); map.set('tests/backend-under-test.rs',backend);map.set('tests/context-model.rs',model);map.set('tests/saved.rs',saved);map.set('tests/services.rs',read('scripts/os-acceptance/runqueue-guest-services-tests.rs')); map.set('Cargo.toml',map.get('Cargo.toml')+'\n[[test]]\nname="services"\npath="tests/services.rs"\n'); return map; }