Refactor tests to check network state

This commit is contained in:
Sebastian Ziebell 2024-02-16 14:31:30 +01:00
parent a4ca3d6423
commit 014662d218
No known key found for this signature in database
GPG Key ID: 7CFCF2A8E3AE3A09

View File

@ -113,68 +113,47 @@ fn network_count() -> usize {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::{name_server::NameServer, FQDN}; use crate::{container::Container, Implementation};
use super::*; use super::*;
/// Finds the list of connected containers fn exists_network(network_name: &str) -> bool {
fn get_attached_containers(network_name: &str) -> Result<Vec<String>> {
let mut command = Command::new("docker"); let mut command = Command::new("docker");
command.args([ command.args(["network", "ls", "--format={{ .Name }}"]);
"network",
"inspect",
network_name,
"-f",
r#"{{ range $k, $v := .Containers }}{{ printf "%s\n" $k }}{{ end }}"#,
]);
let output = command.output()?; let output = command.output().expect("Failed to get output");
let container_ids = match output.status.success() { let stdout = String::from_utf8_lossy(&output.stdout);
true => {
let container_ids = std::str::from_utf8(&output.stdout)?
.trim()
.to_string()
.lines()
.filter(|line| !line.trim().is_empty())
.map(|line| line.to_string())
.collect::<Vec<_>>();
container_ids
}
false => vec![],
};
Ok(container_ids) stdout
.trim()
.lines()
.find(|line| line == &network_name)
.is_some()
} }
#[test] #[test]
fn create_works() -> Result<()> { fn create_works() -> Result<()> {
assert!(Network::new().is_ok()); let network = Network::new();
Ok(()) assert!(network.is_ok());
}
#[test] let network = network.expect("Failed to construct network");
fn network_subnet_works() -> Result<()> { assert!(exists_network(network.name()));
let network = Network::new().expect("Failed to create network");
let config = get_network_config(network.name());
assert!(config.is_ok());
Ok(()) Ok(())
} }
#[test] #[test]
fn remove_network_works() -> Result<()> { fn remove_network_works() -> Result<()> {
let network = Network::new().expect("Failed to create network"); let network = Network::new().expect("Failed to create network");
let nameserver = NameServer::new(FQDN::ROOT, &network)?; let network_name = network.name().to_string();
let container =
let container_ids = get_attached_containers(network.name())?; Container::run(Implementation::Unbound, &network).expect("Failed to start container");
assert_eq!(1, container_ids.len());
assert_eq!(&[nameserver.container_id().to_string()], &container_ids[..]);
drop(nameserver);
let container_ids = get_attached_containers(network.name())?;
assert_eq!(0, container_ids.len());
assert!(exists_network(&network_name));
drop(network); drop(network);
assert!(exists_network(&network_name));
drop(container);
assert!(!exists_network(&network_name));
Ok(()) Ok(())
} }