diff --git a/src/engine/docker_engine.rs b/src/engine/docker_engine.rs index a381d03..dc92dd9 100644 --- a/src/engine/docker_engine.rs +++ b/src/engine/docker_engine.rs @@ -22,9 +22,10 @@ use crate::Application; /// # Docker execution engine /// Implementation of an execution engine that uses Docker as a backend. +#[derive(Debug)] pub struct DockerEngine { /// The Docker driver. - docker: Docker, + pub docker: Docker, /// The application config, see [Config](Config) config: ApplicationConfig, } diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..8db8f0b --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,32 @@ +pub mod application; +mod config; +pub mod engine; +mod grpc_server; + +use log::{error, info}; +use std::error; + +use crate::application::Application; +pub use crate::engine::docker_engine::DockerEngine; + +pub async fn run_server() -> Result<(), Box> { + // Start the application + env_logger::builder() + .filter(None, log::LevelFilter::Info) + .parse_default_env() + .init(); + + info!( + "Starting {} version {}", + env!("CARGO_PKG_NAME"), + env!("CARGO_PKG_VERSION") + ); + + // Init the Docker engine + let engine = DockerEngine::new(); + + grpc_server::start_server(engine).await.map_err(|e| { + error!("Failed to start gRPC server: {}", e); + e + }) +} diff --git a/src/main.rs b/src/main.rs index e8fa614..2af7581 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,33 +1,8 @@ -mod application; -mod config; -mod engine; -mod grpc_server; +use pomegranate::run_server; -use log::{error, info}; use std::error; -use crate::application::Application; -use crate::engine::docker_engine::DockerEngine; - #[tokio::main] async fn main() -> Result<(), Box> { - // Start the application - env_logger::builder() - .filter(None, log::LevelFilter::Info) - .parse_default_env() - .init(); - - info!( - "Starting {} version {}", - env!("CARGO_PKG_NAME"), - env!("CARGO_PKG_VERSION") - ); - - // Init the Docker engine - let engine = DockerEngine::new(); - - grpc_server::start_server(engine).await.map_err(|e| { - error!("Failed to start gRPC server: {}", e); - e - }) + run_server().await } diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs new file mode 100644 index 0000000..1216402 --- /dev/null +++ b/tests/integration_tests.rs @@ -0,0 +1,38 @@ +use bollard::container::ListContainersOptions; +use std::collections::HashMap; +use std::default::Default; + +extern crate pomegranate; + +async fn list_containers() { + let mut filters = HashMap::new(); + filters.insert("health", vec!["unhealthy"]); + + let options = Some(ListContainersOptions { + all: true, + filters, + ..Default::default() + }); + + let docker_engine = pomegranate::DockerEngine::new(); + println!("{:#?}", docker_engine.docker.list_containers(options).await); +} + +#[test] +fn test_add() { + let app = pomegranate::application::Application { + application_id: "application".to_string(), + project_id: "project".to_string(), + image_name: "nginx".to_string(), + image_tag: String::from("latest"), + ..Default::default() + }; + + + + let docker_engine = pomegranate::DockerEngine::new(); + pomegranate::engine::Engine::start_application(&docker_engine, &app); + list_containers(); + //println!(" Test : {:?}", docker_engine.docker.inspect_container()); + assert_eq!(list_containers(), ""); +}