use docker_pose::{ComposeYaml, DockerCommand, ReplaceTag, Verbosity};
use pretty_assertions::assert_eq;
use regex::Regex;
use serde_yaml::Error;
use serial_test::serial;
#[test]
#[ignore]
fn get_images_with_remote_tag() -> Result<(), Error> {
let yaml = "
services:
postgres:
image: postgres:16.1
psql:
image: postgres:16.1
nginx:
image: nginx
rabbitmq:
image: rabbitmq:3
";
let compose = ComposeYaml::new(&yaml)?;
let replace_tag = ReplaceTag {
tag: "16.2".to_string(),
tag_filter: None,
ignore_unauthorized: true,
no_slug: false,
offline: false,
verbosity: Verbosity::default(),
progress_verbosity: Verbosity::Quiet,
threads: 4,
};
let images = compose.get_images(None, Some(&replace_tag));
assert_eq!(
images,
Some(vec![
"nginx".to_string(),
"postgres:16.2".to_string(),
"rabbitmq:3".to_string(),
])
);
Ok(())
}
#[test]
#[ignore]
fn get_images_with_remote_tag_and_filter() -> Result<(), Error> {
let yaml = "
services:
postgres:
image: postgres:7
mysql:
image: mysql:7
";
let compose = ComposeYaml::new(&yaml)?;
let replace_tag = ReplaceTag {
tag: "8".to_string(),
tag_filter: Some((Regex::new(r"mysql").unwrap(), true)),
ignore_unauthorized: true,
no_slug: false,
offline: false,
verbosity: Verbosity::default(),
progress_verbosity: Verbosity::Quiet,
threads: 2,
};
let images = compose.get_images(None, Some(&replace_tag));
assert_eq!(
images,
Some(vec![
"mysql:8".to_string(),
"postgres:7".to_string(),
])
);
Ok(())
}
#[test]
#[ignore]
fn get_config_with_remote_tag_and_filter() -> Result<(), Error> {
let yaml = r#"
services:
postgres:
image: postgres:7
mysql:
image: mysql:7
rabbitmq:
image: rabbitmq
"#;
let expected_yaml = r#"
services:
postgres:
image: postgres:7
mysql:
image: mysql:8
rabbitmq:
image: rabbitmq
"#;
let replace_tag = ReplaceTag {
tag: "8 ".to_string(), tag_filter: Some((Regex::new(r"postgres").unwrap(), false)),
ignore_unauthorized: true,
no_slug: false,
offline: false,
verbosity: Verbosity::default(),
progress_verbosity: Verbosity::Quiet,
threads: 2,
};
let mut compose = ComposeYaml::new(&yaml)?;
compose.update_images_tag(&replace_tag);
let new_yaml = compose.to_string();
assert!(new_yaml.is_ok());
assert_eq!(expected_yaml.to_string().trim(), new_yaml.unwrap().trim());
Ok(())
}
#[test]
#[ignore]
#[serial]
fn get_config_with_local_tag() -> Result<(), Error> {
let command = DockerCommand::new(Verbosity::default());
command
.pull_image("hello-world:linux", false, false)
.unwrap();
let yaml = r#"
services:
hello-world:
image: hello-world
"#;
let expected_yaml = r#"
services:
hello-world:
image: hello-world:linux
"#;
let replace_tag = ReplaceTag {
tag: "linux".to_string(),
tag_filter: None,
ignore_unauthorized: true,
no_slug: false,
offline: false,
verbosity: Verbosity::default(),
progress_verbosity: Verbosity::Quiet,
threads: 2,
};
let mut compose = ComposeYaml::new(&yaml)?;
compose.update_images_tag(&replace_tag);
let new_yaml = compose.to_string();
assert!(new_yaml.is_ok());
assert_eq!(expected_yaml.to_string().trim(), new_yaml.unwrap().trim());
Ok(())
}
#[test]
#[ignore]
#[serial]
fn get_config_only_with_local_tag() -> Result<(), Error> {
let command = DockerCommand::new(Verbosity::default());
command
.pull_image("hello-world:latest", false, false)
.unwrap();
let yaml = r#"
services:
hello-world:
image: hello-world:linux
postgres:
image: homeassistant/home-assistant:2024.3
"#;
let expected_yaml = r#"
services:
hello-world:
image: hello-world:latest
postgres:
image: homeassistant/home-assistant:2024.3
"#;
let replace_tag = ReplaceTag {
tag: "latest".to_string(),
tag_filter: None,
ignore_unauthorized: true,
no_slug: false,
offline: true, verbosity: Verbosity::default(),
progress_verbosity: Verbosity::Quiet,
threads: 2,
};
let mut compose = ComposeYaml::new(&yaml)?;
compose.update_images_tag(&replace_tag);
let new_yaml = compose.to_string();
assert!(new_yaml.is_ok());
assert_eq!(expected_yaml.to_string().trim(), new_yaml.unwrap().trim());
Ok(())
}