Skip to content

Commit

Permalink
refactor: [#647] extract strcut RunOptions
Browse files Browse the repository at this point in the history
  • Loading branch information
josecelano committed Jan 26, 2024
1 parent 14f88e9 commit 0afab09
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 16 deletions.
12 changes: 9 additions & 3 deletions src/e2e/docker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ impl Drop for RunningContainer {
}
}

/// `docker run` command options.
pub struct RunOptions {
pub env_vars: Vec<(String, String)>,
pub ports: Vec<String>,
}

impl Docker {
/// Builds a Docker image from a given Dockerfile.
///
Expand Down Expand Up @@ -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<RunningContainer> {
pub fn run(image: &str, container: &str, options: &RunOptions) -> io::Result<RunningContainer> {
let initial_args = vec![
"run".to_string(),
"--detach".to_string(),
Expand All @@ -65,14 +71,14 @@ impl Docker {

// Add environment variables
let mut env_var_args: Vec<String> = 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<String> = vec![];
for port in ports {
for port in &options.ports {
port_args.push("--publish".to_string());
port_args.push(port.to_string());
}
Expand Down
27 changes: 14 additions & 13 deletions src/e2e/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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 ...");

Expand Down

0 comments on commit 0afab09

Please sign in to comment.