#![cfg(all(unix, feature = "docker", feature = "integration-tests"))]
use foundation_core::valtron::valtron_test;
use foundation_deployment_docker::DockerClient;
fn client() -> DockerClient {
DockerClient::connect_unix("/var/run/docker.sock")
}
#[valtron_test]
async fn image_inspect_alpine() {
let c = client();
let info = c.image_inspect("alpine:latest").await.expect("image_inspect");
assert!(
info.id.as_ref().map_or(false, |id| !id.is_empty()),
"Id must be non-empty"
);
assert!(
info.repo_tags
.as_ref()
.map_or(false, |tags| tags.iter().any(|t| t == "alpine:latest")),
"RepoTags must contain alpine:latest"
);
}
#[valtron_test]
async fn image_history() {
let c = client();
let history = c.image_history("alpine:latest").await.expect("image_history");
let arr = history
.as_array()
.expect("history must be a JSON array");
assert!(!arr.is_empty(), "history must have at least one entry");
}
#[valtron_test]
async fn image_search() {
let c = client();
let results = c
.image_search(Some("alpine"), None, None)
.await
.expect("image_search");
let arr = results
.as_array()
.expect("search results must be a JSON array");
assert!(!arr.is_empty(), "search must return at least one result");
let first = &arr[0];
assert!(
first.get("name").is_some(),
"first search result must have a 'name' field"
);
}
#[valtron_test]
async fn image_tag_then_delete() {
let c = client();
c.image_tag("alpine:latest", Some("ewe-it-img-test"), Some("latest"))
.await
.expect("image_tag");
c.image_delete("ewe-it-img-test:latest", None, None)
.await
.expect("image_delete");
}
#[valtron_test]
async fn image_delete_untagged() {
let c = client();
c.image_tag("alpine:latest", Some("ewe-it-img-del"), Some("test"))
.await
.expect("image_tag");
let deleted = c
.image_delete("ewe-it-img-del:test", None, None)
.await
.expect("image_delete");
assert!(
deleted.is_array(),
"delete must return a JSON array of deleted layers"
);
}
#[valtron_test]
async fn image_prune_ok() {
let c = client();
c.image_prune(None).await.expect("image_prune");
}
#[valtron_test]
async fn distribution_inspect_alpine() {
let c = client();
match c.distribution_inspect("alpine:latest").await {
Ok(d) => {
let digest = d.descriptor.digest.unwrap_or_default();
assert!(!digest.is_empty(), "should have a digest");
}
Err(e) => {
eprintln!("distribution_inspect (expected without auth): {e}");
}
}
}
#[valtron_test]
async fn build_prune_ok() {
let c = client();
c.build_prune(None, None, None, None).await.expect("build_prune");
}