Refactor tests to check network state
This commit is contained in:
parent
a4ca3d6423
commit
014662d218
@ -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(())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user