mod common; use common::{api::Manifest, init_runtime, opts, Podman, DEFAULT_IMAGE}; //#################################################################################################### async fn create_base_manifest( podman: &Podman, name: &str, opts: Option, ) -> Manifest { let manifests = podman.manifests(); let _ = manifests.get(name).delete().await; let opts = opts.unwrap_or_else(|| { opts::ManifestCreateOpts::builder(name) .images([DEFAULT_IMAGE]) .build() }); manifests.create(&opts).await.expect("created manifest") } //#################################################################################################### #[tokio::test] async fn manifest_create_exists_remove() { let podman = init_runtime(); let manifest_name = "test-create-manifest"; assert!(!podman .manifests() .get(manifest_name) .exists() .await .unwrap()); let manifest = create_base_manifest(&podman, manifest_name, None).await; assert!(manifest.exists().await.unwrap()); assert!(manifest.delete().await.is_ok()); assert!(!manifest.exists().await.unwrap()); } #[tokio::test] async fn manifest_inspect() { let podman = init_runtime(); let manifest_name = "test-inspect-manifest"; let manifest = create_base_manifest(&podman, manifest_name, None).await; let inspect_result = manifest.inspect().await; assert!(inspect_result.is_ok()); assert!(manifest.delete().await.is_ok()); } #[tokio::test] async fn manifest_add_image() { let podman = init_runtime(); let manifest_name = "test-add-image-manifest"; let manifest = create_base_manifest(&podman, manifest_name, None).await; let opts = opts::ManifestImageAddOpts::builder() .all(true) .images(["docker.io/library/alpine:latest"]) .build(); let add_result = manifest.add_image(&opts).await; assert!(add_result.is_ok()); let new_id = add_result.unwrap().id; let new_manifest = podman.manifests().get(new_id); let new_data = new_manifest.inspect().await; assert!(new_data.is_ok()); let _ = manifest.delete().await; let _ = new_manifest.delete().await; } #[tokio::test] async fn manifest_remove_image() { let podman = init_runtime(); let manifest_name = "test-remove-image-manifest"; let manifest = create_base_manifest(&podman, manifest_name, None).await; let opts = opts::ManifestImageAddOpts::builder() .all(true) .images(["docker.io/library/alpine:latest"]) .build(); let add_result = manifest.add_image(&opts).await; assert!(add_result.is_ok()); let new_id = add_result.unwrap().id; let new_manifest = podman.manifests().get(new_id); let inspect_data = new_manifest.inspect().await.expect("manifest inspect data"); let digest = inspect_data.manifests.as_ref().unwrap()[0] .digest .as_ref() .unwrap(); let remove_result = manifest.remove_image(digest).await; assert!(remove_result.is_ok()); assert!(remove_result .unwrap() .untagged .unwrap() .iter() .any(|it| it.contains(manifest_name))); let _ = manifest.delete().await; let _ = new_manifest.delete().await; }