in src/lib.rs [692:741]
fn test_remote_promotion() {
let (rd, wr) = pipe().unwrap();
match unsafe { fork().expect("fork failed") } {
ForkResult::Parent{ child } => {
eprintln!("Parent PID: {}", getpid());
let mut bytes = [0_u8; std::mem::size_of::<RtPriorityThreadInfo>()];
match read(rd, &mut bytes) {
Ok(_) => {
let info = RtPriorityThreadInfo::deserialize(bytes);
match promote_thread_to_real_time(info, 0, 44100) {
Ok(_) => {
eprintln!("thread promotion in the child from the parent succeeded");
assert!(true);
}
Err(_) => {
eprintln!("promotion Err");
kill(child, SIGKILL).expect("Could not kill the child?");
assert!(false);
}
}
}
Err(e) => {
eprintln!("could not read from the pipe: {}", e);
}
}
kill(child, SIGKILL).expect("Could not kill the child?");
}
ForkResult::Child => {
let r = set_real_time_hard_limit(0, 44100);
if r.is_err() {
eprintln!("Could not set RT limit, the test will fail.");
}
eprintln!("Child pid: {}", getpid());
let info = get_current_thread_info().unwrap();
let bytes = info.serialize();
match write(wr, &bytes) {
Ok(_) => {
loop {
std::thread::sleep(std::time::Duration::from_millis(1000));
eprintln!("child sleeping, waiting to be promoted...");
}
}
Err(_) => {
eprintln!("write error on the pipe.");
}
}
}
}
}