From 0afab09333ce75ca4bd0a65020b77360390929b1 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 26 Jan 2024 10:28:14 +0000 Subject: [PATCH] refactor: [#647] extract strcut RunOptions --- src/e2e/docker.rs | 12 +++++++++--- src/e2e/runner.rs | 27 ++++++++++++++------------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/e2e/docker.rs b/src/e2e/docker.rs index 419e6138..75c67d64 100644 --- a/src/e2e/docker.rs +++ b/src/e2e/docker.rs @@ -23,6 +23,12 @@ impl Drop for RunningContainer { } } +/// `docker run` command options. +pub struct RunOptions { + pub env_vars: Vec<(String, String)>, + pub ports: Vec, +} + impl Docker { /// Builds a Docker image from a given Dockerfile. /// @@ -55,7 +61,7 @@ impl Docker { /// # Errors /// /// Will fail if the docker run command fails. - pub fn run(image: &str, container: &str, env_vars: &[(String, String)], ports: &[String]) -> io::Result { + pub fn run(image: &str, container: &str, options: &RunOptions) -> io::Result { let initial_args = vec![ "run".to_string(), "--detach".to_string(), @@ -65,14 +71,14 @@ impl Docker { // Add environment variables let mut env_var_args: Vec = vec![]; - for (key, value) in env_vars { + for (key, value) in &options.env_vars { env_var_args.push("--env".to_string()); env_var_args.push(format!("{key}={value}")); } // Add port mappings let mut port_args: Vec = vec![]; - for port in ports { + for port in &options.ports { port_args.push("--publish".to_string()); port_args.push(port.to_string()); } diff --git a/src/e2e/runner.rs b/src/e2e/runner.rs index eee2805a..a5965989 100644 --- a/src/e2e/runner.rs +++ b/src/e2e/runner.rs @@ -10,7 +10,7 @@ use rand::distributions::Alphanumeric; use rand::Rng; use super::docker::RunningContainer; -use crate::e2e::docker::Docker; +use crate::e2e::docker::{Docker, RunOptions}; use crate::e2e::logs_parser::RunningServices; use crate::e2e::temp_dir::Handler; @@ -43,15 +43,17 @@ pub fn run() { // code-review: if we want to use port 0 we don't know which ports we have to open. // Besides, if we don't use port 0 we should get the port numbers from the tracker configuration. // We could not use docker, but the intention was to create E2E tests including containerization. - let env_vars = [("TORRUST_TRACKER_CONFIG".to_string(), tracker_config.to_string())]; - let ports = [ - "6969:6969/udp".to_string(), - "7070:7070/tcp".to_string(), - "1212:1212/tcp".to_string(), - "1313:1313/tcp".to_string(), - ]; - - let container = run_tracker_container(&container_name, &env_vars, &ports); + let options = RunOptions { + env_vars: vec![("TORRUST_TRACKER_CONFIG".to_string(), tracker_config.to_string())], + ports: vec![ + "6969:6969/udp".to_string(), + "7070:7070/tcp".to_string(), + "1212:1212/tcp".to_string(), + "1313:1313/tcp".to_string(), + ], + }; + + let container = run_tracker_container(CONTAINER_TAG, &container_name, &options); let running_services = parse_running_services_from_logs(&container); @@ -144,11 +146,10 @@ fn generate_random_container_name(prefix: &str) -> String { format!("{prefix}{rand_string}") } -fn run_tracker_container(container_name: &str, env_vars: &[(String, String)], ports: &[String]) -> RunningContainer { +fn run_tracker_container(image: &str, container_name: &str, options: &RunOptions) -> RunningContainer { info!("Running docker tracker image: {container_name} ..."); - let container = - Docker::run(CONTAINER_TAG, container_name, env_vars, ports).expect("A tracker local docker image should be running"); + let container = Docker::run(image, container_name, options).expect("A tracker local docker image should be running"); info!("Waiting for the container {container_name} to be healthy ...");