Skip to content

Commit 6d85bc3

Browse files
authored
chore: tcp listener test flakiness (#1007)
1 parent 04d792a commit 6d85bc3

2 files changed

Lines changed: 30 additions & 6 deletions

File tree

modules/meteroid/src/api_rest/server.rs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,30 @@ pub async fn start_rest_server(
3333
store: Store,
3434
services: Services,
3535
ready: std::sync::Arc<std::sync::atomic::AtomicBool>,
36+
) -> Result<(), Box<dyn std::error::Error>> {
37+
let listener = TcpListener::bind(&config.rest_api_addr)
38+
.await
39+
.expect("Could not bind listener");
40+
start_rest_server_with_listener(
41+
config,
42+
object_store,
43+
stripe_adapter,
44+
store,
45+
services,
46+
ready,
47+
listener,
48+
)
49+
.await
50+
}
51+
52+
pub async fn start_rest_server_with_listener(
53+
config: Config,
54+
object_store: Arc<dyn ObjectStoreService>,
55+
stripe_adapter: Arc<Stripe>,
56+
store: Store,
57+
services: Services,
58+
ready: std::sync::Arc<std::sync::atomic::AtomicBool>,
59+
listener: TcpListener,
3660
) -> Result<(), Box<dyn std::error::Error>> {
3761
let app_state = AppState {
3862
object_store,
@@ -101,10 +125,6 @@ pub async fn start_rest_server(
101125

102126
tracing::info!("Starting REST API on {}", config.rest_api_addr);
103127

104-
let listener = TcpListener::bind(&config.rest_api_addr)
105-
.await
106-
.expect("Could not bind listener");
107-
108128
axum::serve(listener, app.into_make_service()).await?;
109129

110130
Ok(())

modules/meteroid/tests/integration/meteroid_it/container.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,10 @@ pub async fn start_meteroid_with_port(
9494
usage_client: Arc<dyn UsageClient>,
9595
mailer: Arc<dyn MailerService>,
9696
) -> MeteroidSetup {
97-
let rest_api_addr = helpers::network::free_local_socket().expect("Could not get webhook addr");
97+
let rest_listener = tokio::net::TcpListener::bind("127.0.0.1:0")
98+
.await
99+
.expect("Could not bind REST listener");
100+
let rest_api_addr = rest_listener.local_addr().expect("Could not get REST addr");
98101

99102
let config = super::config::mocked_config(
100103
postgres_connection_string,
@@ -140,13 +143,14 @@ pub async fn start_meteroid_with_port(
140143
let stripe_adapter = Arc::new(Stripe { client: stripe });
141144

142145
let ready = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(true));
143-
let rest_server = meteroid::api_rest::server::start_rest_server(
146+
let rest_server = meteroid::api_rest::server::start_rest_server_with_listener(
144147
config.clone(),
145148
in_memory_object_store(),
146149
stripe_adapter,
147150
store.clone(),
148151
services.clone(),
149152
ready,
153+
rest_listener,
150154
);
151155

152156
let join_handle_meteroid = tokio::spawn(async move {

0 commit comments

Comments
 (0)