mod apps;
mod err;
use std::sync::Arc;
use parking_lot::Mutex;
use qsu::rt::RunCtx;
use err::Error;
const SVCNAME: &str = "svctest";
#[test]
fn error_from_sync_init() {
let runctx = RunCtx::new(SVCNAME).test_mode();
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MySyncService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_init()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_sync(svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_some());
assert!(errs.run.is_none());
assert!(errs.shutdown.is_none());
let Error::Hello(s) = errs.init.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Sync::init()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(!visited.run);
assert!(visited.shutdown);
}
#[test]
fn error_from_sync_run() {
let runctx = RunCtx::new(SVCNAME).test_mode();
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MySyncService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_run()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_sync(svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_none());
assert!(errs.run.is_some());
assert!(errs.shutdown.is_none());
let Error::Hello(s) = errs.run.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Sync::run()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(visited.run);
assert!(visited.shutdown);
}
#[test]
fn error_from_sync_shutdown() {
let runctx = RunCtx::new(SVCNAME).test_mode();
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MySyncService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_shutdown()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_sync(svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_none());
assert!(errs.run.is_none());
assert!(errs.shutdown.is_some());
let Error::Hello(s) = errs.shutdown.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Sync::shutdown()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(visited.run);
assert!(visited.shutdown);
}
#[cfg(feature = "tokio")]
#[test]
fn error_from_tokio_init() {
let runctx = RunCtx::new(SVCNAME).test_mode();
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MyTokioService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_init()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_tokio(None, svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_some());
assert!(errs.run.is_none());
assert!(errs.shutdown.is_none());
let Error::Hello(s) = errs.init.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Tokio::init()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(!visited.run);
assert!(visited.shutdown);
}
#[cfg(feature = "tokio")]
#[test]
fn error_from_tokio_run() {
let runctx = RunCtx::new(SVCNAME).test_mode();
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MyTokioService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_run()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_tokio(None, svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_none());
assert!(errs.run.is_some());
assert!(errs.shutdown.is_none());
let Error::Hello(s) = errs.run.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Tokio::run()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(visited.run);
assert!(visited.shutdown);
}
#[cfg(feature = "tokio")]
#[test]
fn error_from_tokio_shutdown() {
let runctx = RunCtx::new(SVCNAME).test_mode();
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MyTokioService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_shutdown()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_tokio(None, svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_none());
assert!(errs.run.is_none());
assert!(errs.shutdown.is_some());
let Error::Hello(s) = errs.shutdown.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Tokio::shutdown()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(visited.run);
assert!(visited.shutdown);
}
#[cfg(feature = "rocket")]
#[test]
fn error_from_rocket_init() {
let runctx = RunCtx::new(SVCNAME).test_mode();
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MyRocketService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_init()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_rocket(svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_some());
assert!(errs.run.is_none());
assert!(errs.shutdown.is_none());
let Error::Hello(s) = errs.init.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Rocket::init()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(!visited.run);
assert!(visited.shutdown);
}
#[cfg(feature = "rocket")]
#[test]
fn error_from_rocket_run() {
let runctx = RunCtx::new(SVCNAME).log_init(false);
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MyRocketService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_run()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_rocket(svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_none());
assert!(errs.run.is_some());
assert!(errs.shutdown.is_none());
let Error::Hello(s) = errs.run.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Rocket::run()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(visited.run);
assert!(visited.shutdown);
}
#[cfg(feature = "rocket")]
#[test]
fn error_from_rocket_shutdown() {
let runctx = RunCtx::new(SVCNAME).log_init(false);
let visited = Arc::new(Mutex::new(apps::Visited::default()));
let svcevt_handler = Box::new(move |_msg| {});
let rt_handler = Box::new(
apps::MyRocketService {
visited: Arc::clone(&visited),
..Default::default()
}
.fail_shutdown()
);
let Err(qsu::CbErr::SrvApp(errs)) =
runctx.run_rocket(svcevt_handler, rt_handler)
else {
panic!("Not expected Err(qsu::Error::SrvApp(_))");
};
assert!(errs.init.is_none());
assert!(errs.run.is_none());
assert!(errs.shutdown.is_some());
let Error::Hello(s) = errs.shutdown.unwrap() else {
panic!("Not expected Error::Hello");
};
assert_eq!(s, "From Rocket::shutdown()");
let visited = Arc::into_inner(visited)
.expect("Unable to into_inner Arc")
.into_inner();
assert!(visited.init);
assert!(visited.run);
assert!(visited.shutdown);
}