use super::fixture::Server;
use super::{OBSERVATION, Result};
use liminal_server::server::ServerListener;
impl Server {
pub(super) fn pause_listener(&mut self) -> Result {
if let Some(listener) = self.listener.take() {
self.config.listen_address = listener.local_addr();
listener.shutdown()?;
}
let since = self.supervisor.departures()?;
let count = u64::try_from(self.supervisor.active_connection_count())?;
self.supervisor.force_close_active_connections();
assert!(
self.supervisor.await_departures(
since,
count,
std::time::Instant::now()
.checked_add(OBSERVATION)
.ok_or("observation deadline overflow")?
)?
);
Ok(())
}
pub(super) fn resume_listener(&mut self) -> Result {
self.listener = Some(ServerListener::bind(&self.config, self.supervisor.clone())?);
Ok(())
}
}