Skip to content

Commit 15c2435

Browse files
authored
chore(sqllogictests): Check container and stop first to avoid conflict running (#17261)
* chore(sqllogictests): Stop container to avoid conflict running * add sleep * check timeout
1 parent 61e962e commit 15c2435

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

tests/sqllogictests/src/util.rs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,21 @@ use std::path::PathBuf;
1919
use std::time::Duration;
2020
use std::time::Instant;
2121

22+
use bollard::container::RemoveContainerOptions;
2223
use bollard::Docker;
2324
use clap::Parser;
2425
use redis::Commands;
2526
use serde::Deserialize;
2627
use serde::Serialize;
2728
use serde_json::Value;
29+
use testcontainers::core::error::WaitContainerError;
2830
use testcontainers::core::IntoContainerPort;
2931
use testcontainers::core::WaitFor;
3032
use testcontainers::runners::AsyncRunner;
3133
use testcontainers::ContainerAsync;
3234
use testcontainers::GenericImage;
3335
use testcontainers::ImageExt;
36+
use testcontainers::TestcontainersError;
3437
use testcontainers_modules::mysql::Mysql;
3538
use testcontainers_modules::redis::Redis;
3639
use testcontainers_modules::redis::REDIS_PORT;
@@ -256,9 +259,7 @@ pub async fn run_ttc_container(
256259
let start = Instant::now();
257260
println!("Start container {container_name}");
258261

259-
// Stop the container
260-
let _ = docker.stop_container(&container_name, None).await;
261-
let _ = docker.remove_container(&container_name, None).await;
262+
stop_container(docker, &container_name).await;
262263

263264
let mut i = 1;
264265
loop {
@@ -290,6 +291,10 @@ pub async fn run_ttc_container(
290291
"Start container {} using {} secs failed: {}",
291292
container_name, duration, err
292293
);
294+
if let TestcontainersError::WaitContainer(WaitContainerError::StartupTimeout) = err
295+
{
296+
stop_container(docker, &container_name).await;
297+
}
293298
if i == CONTAINER_RETRY_TIMES || duration >= CONTAINER_TIMEOUT_SECONDS {
294299
break;
295300
} else {
@@ -327,9 +332,7 @@ async fn run_redis_server(docker: &Docker) -> Result<ContainerAsync<Redis>> {
327332
let container_name = "redis".to_string();
328333
println!("Start container {container_name}");
329334

330-
// Stop the container
331-
let _ = docker.stop_container(&container_name, None).await;
332-
let _ = docker.remove_container(&container_name, None).await;
335+
stop_container(docker, &container_name).await;
333336

334337
let mut i = 1;
335338
loop {
@@ -365,6 +368,10 @@ async fn run_redis_server(docker: &Docker) -> Result<ContainerAsync<Redis>> {
365368
"Start container {} using {} secs failed: {}",
366369
container_name, duration, err
367370
);
371+
if let TestcontainersError::WaitContainer(WaitContainerError::StartupTimeout) = err
372+
{
373+
stop_container(docker, &container_name).await;
374+
}
368375
if i == CONTAINER_RETRY_TIMES || duration >= CONTAINER_TIMEOUT_SECONDS {
369376
break;
370377
} else {
@@ -381,9 +388,7 @@ async fn run_mysql_server(docker: &Docker) -> Result<ContainerAsync<Mysql>> {
381388
let container_name = "mysql".to_string();
382389
println!("Start container {container_name}");
383390

384-
// Stop the container
385-
let _ = docker.stop_container(&container_name, None).await;
386-
let _ = docker.remove_container(&container_name, None).await;
391+
stop_container(docker, &container_name).await;
387392

388393
// Add a table for test.
389394
// CREATE TABLE test.user(
@@ -436,6 +441,10 @@ async fn run_mysql_server(docker: &Docker) -> Result<ContainerAsync<Mysql>> {
436441
"Start container {} using {} secs failed: {}",
437442
container_name, duration, err
438443
);
444+
if let TestcontainersError::WaitContainer(WaitContainerError::StartupTimeout) = err
445+
{
446+
stop_container(docker, &container_name).await;
447+
}
439448
if i == CONTAINER_RETRY_TIMES || duration >= CONTAINER_TIMEOUT_SECONDS {
440449
break;
441450
} else {
@@ -446,3 +455,14 @@ async fn run_mysql_server(docker: &Docker) -> Result<ContainerAsync<Mysql>> {
446455
}
447456
Err(format!("Start {container_name} failed").into())
448457
}
458+
459+
// Stop the running container to avoid conflict
460+
async fn stop_container(docker: &Docker, container_name: &str) {
461+
let _ = docker.stop_container(container_name, None).await;
462+
let options = Some(RemoveContainerOptions {
463+
force: true,
464+
..Default::default()
465+
});
466+
let _ = docker.remove_container(container_name, options).await;
467+
println!("Stop container {container_name}");
468+
}

0 commit comments

Comments
 (0)