diff --git a/crates/jstzd/src/docker/image.rs b/crates/jstzd/src/docker/image.rs index 1b4489f5..0ebd0b6c 100644 --- a/crates/jstzd/src/docker/image.rs +++ b/crates/jstzd/src/docker/image.rs @@ -26,7 +26,7 @@ pub trait Image: Sized { } async fn pull_image(&self, client: Arc) -> Result<()> { if Self::image_exists(self, client.clone()).await { - info!("Image: {:?} already exists ", self.image_name()); + info!("Image: {:?} already exists ", self.image_uri()); return Ok(()); } self.create_image(client.clone()).await diff --git a/crates/jstzd/src/main.rs b/crates/jstzd/src/main.rs deleted file mode 100644 index e2ca89ee..00000000 --- a/crates/jstzd/src/main.rs +++ /dev/null @@ -1,22 +0,0 @@ -use bollard::Docker; -use env_logger::Env; -use jstzd::docker::{GenericImage, Image}; -use std::sync::Arc; - -pub async fn example() -> anyhow::Result<()> { - let docker = Docker::connect_with_socket_defaults().unwrap(); - let docker = Arc::new(docker); - let image = GenericImage::new("busybox").with_tag("latest"); - image.pull_image(docker.clone()).await?; - - Ok(()) -} - -#[tokio::main] -async fn main() { - env_logger::init_from_env(Env::default().default_filter_or("info")); - match example().await { - Ok(_) => log::info!("Success"), - Err(e) => log::error!("Error: {}", e), - } -} diff --git a/crates/jstzd/tests/pull_image.rs b/crates/jstzd/tests/pull_image.rs new file mode 100644 index 00000000..e7599aec --- /dev/null +++ b/crates/jstzd/tests/pull_image.rs @@ -0,0 +1,41 @@ +use std::{collections::HashMap, sync::Arc}; + +use anyhow::Result; +use bollard::{image::ListImagesOptions, secret::ImageSummary, Docker}; +use jstzd::docker::{GenericImage, Image}; + +// search image locally +async fn search_local_image( + image_uri: String, + client: Arc, +) -> Result> { + let filters = [("reference".to_string(), vec![image_uri])] + .into_iter() + .collect::>(); + let images = &client + .list_images(Some(ListImagesOptions:: { + all: true, + filters, + ..Default::default() + })) + .await; + match images { + Ok(images) => Ok(images.clone()), + Err(_) => Err(anyhow::anyhow!("Image not found")), + } +} + +#[tokio::test] +async fn test_pull_image() -> Result<()> { + let docker = Docker::connect_with_socket_defaults().unwrap(); + let docker = Arc::new(docker); + let image = GenericImage::new("busybox").with_tag("stable"); + let _ = docker.remove_image(&image.image_uri(), None, None).await; + image.pull_image(docker.clone()).await?; + let expected_image_digest = + "sha256:7db2ddde018a2a56e929855445bc7f30bc83db514a23404bd465a07d2770ac5f"; + let images = search_local_image(image.image_uri(), docker.clone()).await?; + assert!(images.iter().any(|image| image.id == expected_image_digest)); + let _ = docker.remove_image(&image.image_uri(), None, None).await; + Ok(()) +}