Use unique name for dbus connection during integration testing
This commit is contained in:
parent
c52195dd8b
commit
9978bfd783
5 changed files with 74 additions and 54 deletions
|
@ -73,5 +73,21 @@ impl Drop for MalcontentDBusMock {
|
|||
"MockError: During teardown, {} invocations are still left on the mock object",
|
||||
self.invocations_left
|
||||
);
|
||||
|
||||
self.finished.notify(1);
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn mock_dbus(responses: HashMap<Uid, Vec<Restrictions>>) -> Result<zbus::Connection> {
|
||||
let mock = MalcontentDBusMock::new(responses);
|
||||
let connection = zbus::ConnectionBuilder::session()?
|
||||
.serve_at("/com/endlessm/ParentalControls/Dns", mock)?
|
||||
.build()
|
||||
.await?;
|
||||
|
||||
std::env::set_var(
|
||||
"TEST_DBUS_SERVICE_NAME",
|
||||
connection.unique_name().unwrap().as_str(),
|
||||
);
|
||||
Ok(connection)
|
||||
}
|
||||
|
|
|
@ -11,12 +11,9 @@ include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
|
|||
mod dbus;
|
||||
|
||||
use {
|
||||
self::dbus::MalcontentDBusMock,
|
||||
anyhow::{anyhow, bail, ensure, Result},
|
||||
libc::{freeaddrinfo, gai_strerror, getaddrinfo},
|
||||
nix::sys::socket::{SockaddrLike as _, SockaddrStorage},
|
||||
nix::unistd::Uid,
|
||||
std::collections::HashMap,
|
||||
std::env,
|
||||
std::ffi::{CStr, CString},
|
||||
std::net::{IpAddr, Ipv4Addr, Ipv6Addr},
|
||||
|
@ -24,11 +21,9 @@ use {
|
|||
std::process::Command,
|
||||
std::str::FromStr,
|
||||
std::sync::Once,
|
||||
tokio::task,
|
||||
tokio::task::JoinHandle,
|
||||
};
|
||||
|
||||
pub use self::dbus::{Restriction, Restrictions};
|
||||
pub use self::dbus::{mock_dbus, Restriction, Restrictions};
|
||||
|
||||
// Adapted from rusty_forkfork (which inherits it from rusty_fork)
|
||||
// to allow a custom pre-fork function
|
||||
|
@ -181,19 +176,3 @@ fn convert_addrinfo(sa: &SockaddrStorage) -> Result<IpAddr> {
|
|||
bail!("addrinfo is not either an IPv4 or IPv6 address")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn mock_dbus(responses: HashMap<Uid, Vec<Restrictions>>) -> JoinHandle<Result<()>> {
|
||||
async fn dbus_loop(responses: HashMap<Uid, Vec<Restrictions>>) -> Result<()> {
|
||||
let mock = MalcontentDBusMock::new(responses);
|
||||
let waiter = mock.waiter();
|
||||
let _connection = zbus::ConnectionBuilder::session()?
|
||||
.serve_at("/com/endlessm/ParentalControls/Dns", mock)?
|
||||
.build()
|
||||
.await?;
|
||||
|
||||
waiter.wait();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
task::spawn(async { dbus_loop(responses).await })
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue