test(tvix/store): use tokio-retry for exp backoff
Rather than using this loop, use exponential backoff while waiting for the socket path to be created. Change-Id: I3056b1525784cd712b1d81f84876c9ca0be10dc6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9569 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI
This commit is contained in:
parent
b6bf3a87f1
commit
a464088d2e
4 changed files with 21 additions and 17 deletions
1
tvix/Cargo.lock
generated
1
tvix/Cargo.lock
generated
|
@ -2818,6 +2818,7 @@ dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-listener",
|
"tokio-listener",
|
||||||
|
"tokio-retry",
|
||||||
"tokio-stream",
|
"tokio-stream",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tonic",
|
"tonic",
|
||||||
|
|
|
@ -8634,6 +8634,10 @@ rec {
|
||||||
name = "test-case";
|
name = "test-case";
|
||||||
packageId = "test-case";
|
packageId = "test-case";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "tokio-retry";
|
||||||
|
packageId = "tokio-retry";
|
||||||
|
}
|
||||||
];
|
];
|
||||||
features = {
|
features = {
|
||||||
"default" = [ "fuse" "tonic-reflection" ];
|
"default" = [ "fuse" "tonic-reflection" ];
|
||||||
|
|
|
@ -77,6 +77,7 @@ tonic-build = "0.10.2"
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
test-case = "2.2.2"
|
test-case = "2.2.2"
|
||||||
tempfile = "3.3.0"
|
tempfile = "3.3.0"
|
||||||
|
tokio-retry = "0.3.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["fuse", "tonic-reflection"]
|
default = ["fuse", "tonic-reflection"]
|
||||||
|
|
|
@ -180,10 +180,12 @@ impl PathInfoService for GRPCPathInfoService {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
use tokio::net::UnixListener;
|
use tokio::net::UnixListener;
|
||||||
use tokio::time;
|
use tokio_retry::strategy::ExponentialBackoff;
|
||||||
|
use tokio_retry::Retry;
|
||||||
use tokio_stream::wrappers::UnixListenerStream;
|
use tokio_stream::wrappers::UnixListenerStream;
|
||||||
|
|
||||||
use crate::pathinfoservice::MemoryPathInfoService;
|
use crate::pathinfoservice::MemoryPathInfoService;
|
||||||
|
@ -274,13 +276,11 @@ mod tests {
|
||||||
let tmpdir = TempDir::new().unwrap();
|
let tmpdir = TempDir::new().unwrap();
|
||||||
let socket_path = tmpdir.path().join("daemon");
|
let socket_path = tmpdir.path().join("daemon");
|
||||||
|
|
||||||
// let mut join_set = JoinSet::new();
|
let path_clone = socket_path.clone();
|
||||||
|
|
||||||
let path_copy = socket_path.clone();
|
|
||||||
|
|
||||||
// Spin up a server
|
// Spin up a server
|
||||||
tokio::spawn(async {
|
tokio::spawn(async {
|
||||||
let uds = UnixListener::bind(path_copy).unwrap();
|
let uds = UnixListener::bind(path_clone).unwrap();
|
||||||
let uds_stream = UnixListenerStream::new(uds);
|
let uds_stream = UnixListenerStream::new(uds);
|
||||||
|
|
||||||
// spin up a new server
|
// spin up a new server
|
||||||
|
@ -298,21 +298,19 @@ mod tests {
|
||||||
});
|
});
|
||||||
|
|
||||||
// wait for the socket to be created
|
// wait for the socket to be created
|
||||||
{
|
Retry::spawn(
|
||||||
let mut socket_created = false;
|
ExponentialBackoff::from_millis(20).max_delay(Duration::from_secs(10)),
|
||||||
for _try in 1..20 {
|
|| async {
|
||||||
if socket_path.exists() {
|
if socket_path.exists() {
|
||||||
socket_created = true;
|
Ok(())
|
||||||
break;
|
} else {
|
||||||
|
Err(())
|
||||||
}
|
}
|
||||||
tokio::time::sleep(time::Duration::from_millis(20)).await;
|
},
|
||||||
}
|
)
|
||||||
|
.await
|
||||||
|
.expect("failed to wait for socket");
|
||||||
|
|
||||||
assert!(
|
|
||||||
socket_created,
|
|
||||||
"expected socket path to eventually get created, but never happened"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// prepare a client
|
// prepare a client
|
||||||
let grpc_client = {
|
let grpc_client = {
|
||||||
let url = url::Url::parse(&format!("grpc+unix://{}", socket_path.display()))
|
let url = url::Url::parse(&format!("grpc+unix://{}", socket_path.display()))
|
||||||
|
|
Loading…
Add table
Reference in a new issue