use crate::skip_if_rabbitmq_version_below;
use crate::test_helpers::*;
use std::error::Error;
#[test]
fn test_vhosts_delete_multiple_basic() -> Result<(), Box<dyn Error>> {
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-basic";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
for i in 1..=5 {
let vh_name = format!("{}-{}", prefix, i);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
}
let client = api_client();
let vhosts_before = client.list_vhosts()?;
let test_vhosts_before: Vec<_> = vhosts_before
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_before.len(), 5);
run_succeeds([
"vhosts",
"delete_multiple",
"--name-pattern",
&format!("{}.*", prefix),
"--approve",
"--idempotently",
]);
let vhosts_after = client.list_vhosts()?;
let test_vhosts_after: Vec<_> = vhosts_after
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_after.len(), 0);
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_dry_run() -> Result<(), Box<dyn Error>> {
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-dry-run";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
for i in 1..=3 {
let vh_name = format!("{}-{}", prefix, i);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
}
let client = api_client();
let vhosts_before = client.list_vhosts()?;
let test_vhosts_before: Vec<_> = vhosts_before
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_before.len(), 3);
run_succeeds([
"vhosts",
"delete_multiple",
"--name-pattern",
&format!("{}.*", prefix),
"--dry-run",
]);
let vhosts_after = client.list_vhosts()?;
let test_vhosts_after: Vec<_> = vhosts_after
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_after.len(), 3);
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_non_interactive() -> Result<(), Box<dyn Error>> {
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-non-interactive";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
for i in 1..=2 {
let vh_name = format!("{}-{}", prefix, i);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
}
let client = api_client();
let vhosts_before = client.list_vhosts()?;
let test_vhosts_before: Vec<_> = vhosts_before
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_before.len(), 2);
run_succeeds([
"--non-interactive",
"vhosts",
"delete_multiple",
"--name-pattern",
&format!("{}.*", prefix),
"--idempotently",
]);
let vhosts_after = client.list_vhosts()?;
let test_vhosts_after: Vec<_> = vhosts_after
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_after.len(), 0);
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_protects_default_vhost() -> Result<(), Box<dyn Error>> {
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-protects-default";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
for i in 1..=2 {
let vh_name = format!("{}-{}", prefix, i);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
}
let client = api_client();
let vhosts_before = client.list_vhosts()?;
let test_vhosts_before: Vec<_> = vhosts_before
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_before.len(), 2);
let default_vhost_before = vhosts_before.iter().find(|vh| vh.name == "/");
assert!(default_vhost_before.is_some());
run_succeeds([
"vhosts",
"delete_multiple",
"--name-pattern",
".*", "--approve",
"--idempotently",
]);
let vhosts_after = client.list_vhosts()?;
let test_vhosts_after: Vec<_> = vhosts_after
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_after.len(), 0);
let default_vhost_after = vhosts_after.iter().find(|vh| vh.name == "/");
assert!(default_vhost_after.is_some());
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_with_invalid_regex() -> Result<(), Box<dyn Error>> {
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-invalid-regex";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
let vh_name = format!("{}-1", prefix);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
run_fails([
"vhosts",
"delete_multiple",
"--name-pattern",
"[invalid", "--approve",
]);
let client = api_client();
let vhosts = client.list_vhosts()?;
let test_vhost = vhosts.iter().find(|vh| vh.name == vh_name);
assert!(test_vhost.is_some());
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_requires_approve_in_interactive_mode() -> Result<(), Box<dyn Error>>
{
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-requires-approve";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
let vh_name = format!("{}-1", prefix);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
run_fails([
"vhosts",
"delete_multiple",
"--name-pattern",
&format!("{}.*", prefix),
]);
let client = api_client();
let vhosts = client.list_vhosts()?;
let test_vhost = vhosts.iter().find(|vh| vh.name == vh_name);
assert!(test_vhost.is_some());
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_continues_on_individual_failures() -> Result<(), Box<dyn Error>> {
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-continues";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
for i in 1..=3 {
let vh_name = format!("{}-{}", prefix, i);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
}
let client = api_client();
let vhosts_before = client.list_vhosts()?;
let test_vhosts_before: Vec<_> = vhosts_before
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_before.len(), 3);
let vh_name_to_predelete = format!("{}-2", prefix);
delete_vhost(&vh_name_to_predelete).ok();
run_succeeds([
"vhosts",
"delete_multiple",
"--name-pattern",
&format!("{}.*", prefix),
"--approve",
"--idempotently",
]);
let vhosts_after = client.list_vhosts()?;
let test_vhosts_after: Vec<_> = vhosts_after
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_after.len(), 0);
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_protects_deletion_protected_vhosts() -> Result<(), Box<dyn Error>> {
skip_if_rabbitmq_version_below!(4, 2, 0);
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-protects-protected";
delete_vhosts_with_prefix("rabbitmqadmin.test-vhosts-delete-multiple").ok();
for i in 1..=3 {
let vh_name = format!("{}-{}", prefix, i);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
}
let protected_vh = format!("{}-2", prefix);
run_succeeds([
"vhosts",
"enable_deletion_protection",
"--name",
&protected_vh,
]);
let client = api_client();
let vhosts_before = client.list_vhosts()?;
let test_vhosts_before: Vec<_> = vhosts_before
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_before.len(), 3);
run_succeeds([
"vhosts",
"delete_multiple",
"--name-pattern",
&format!("{}.*", prefix),
"--approve",
"--idempotently",
]);
let vhosts_after = client.list_vhosts()?;
let test_vhosts_after: Vec<_> = vhosts_after
.iter()
.filter(|vh| vh.name.starts_with(prefix))
.collect();
assert_eq!(test_vhosts_after.len(), 1);
assert_eq!(test_vhosts_after[0].name, protected_vh);
run_succeeds([
"vhosts",
"disable_deletion_protection",
"--name",
&protected_vh,
]);
run_succeeds(["vhosts", "delete", "--name", &protected_vh]);
Ok(())
}
#[test]
fn test_vhosts_delete_multiple_quiet_produces_no_output() -> Result<(), Box<dyn Error>> {
let prefix = "rabbitmqadmin.test-vhosts-delete-multiple-quiet";
delete_vhosts_with_prefix(prefix).ok();
for i in 1..=3 {
let vh_name = format!("{}-{}", prefix, i);
run_succeeds(["vhosts", "declare", "--name", &vh_name]);
}
run_succeeds([
"--quiet",
"--non-interactive",
"vhosts",
"delete_multiple",
"--name-pattern",
prefix,
])
.stdout(predicates::str::is_empty());
Ok(())
}