feat: define minimal app context for cli use
This commit is contained in:
parent
db161fe6f0
commit
3f4b8d363e
3 changed files with 89 additions and 112 deletions
193
src/ctx.rs
193
src/ctx.rs
|
@ -26,95 +26,6 @@ pub trait FullAppContext: std::marker::Send + std::marker::Sync + CloneFullAppCt
|
||||||
fn port(&self) -> u32;
|
fn port(&self) -> u32;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait MinAppContext: std::marker::Send + std::marker::Sync {
|
|
||||||
fn docker_(&self) -> Arc<dyn DockerLike>;
|
|
||||||
fn results_(&self) -> &ResultStore;
|
|
||||||
fn port_(&self) -> u32;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MinAppContext for Arc<dyn FullAppContext> {
|
|
||||||
fn docker_(&self) -> Arc<dyn DockerLike> {
|
|
||||||
self.docker()
|
|
||||||
}
|
|
||||||
fn results_(&self) -> &ResultStore {
|
|
||||||
self.results()
|
|
||||||
}
|
|
||||||
fn port_(&self) -> u32 {
|
|
||||||
self.port()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct Ctx {
|
|
||||||
settings: Settings,
|
|
||||||
db: Database,
|
|
||||||
results: ResultStore,
|
|
||||||
docker: Arc<dyn DockerLike>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FullAppContext for Ctx {
|
|
||||||
fn settings(&self) -> &Settings {
|
|
||||||
&self.settings
|
|
||||||
}
|
|
||||||
fn db(&self) -> &Database {
|
|
||||||
&self.db
|
|
||||||
}
|
|
||||||
fn docker(&self) -> Arc<dyn DockerLike> {
|
|
||||||
self.docker.clone()
|
|
||||||
}
|
|
||||||
fn results(&self) -> &ResultStore {
|
|
||||||
&self.results
|
|
||||||
}
|
|
||||||
fn port(&self) -> u32 {
|
|
||||||
self.settings.server.port
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MinAppContext for Ctx {
|
|
||||||
fn docker_(&self) -> Arc<dyn DockerLike> {
|
|
||||||
self.docker()
|
|
||||||
}
|
|
||||||
fn results_(&self) -> &ResultStore {
|
|
||||||
self.results()
|
|
||||||
}
|
|
||||||
fn port_(&self) -> u32 {
|
|
||||||
self.port()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//impl MinAppContext for Arc<dyn MinAppContext> {
|
|
||||||
// fn docker_(&self) -> Arc<dyn DockerLike>{
|
|
||||||
// self.docker_()
|
|
||||||
// }
|
|
||||||
// fn results_(&self) -> &ResultStore {
|
|
||||||
// self.results_()
|
|
||||||
// }
|
|
||||||
// fn port_(&self) -> u32 {
|
|
||||||
// self.port_()
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//impl FullAppContext for Arc<dyn FullAppContext> {
|
|
||||||
// fn settings(&self) -> &Settings {
|
|
||||||
// self.settings()
|
|
||||||
// }
|
|
||||||
// fn db(&self) -> &Database {
|
|
||||||
// self.db()
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// fn docker(&self) -> Arc<dyn DockerLike>{
|
|
||||||
// self.docker()
|
|
||||||
// }
|
|
||||||
// fn results(&self) -> &ResultStore {
|
|
||||||
// self.results()
|
|
||||||
// }
|
|
||||||
// fn port(&self) -> u32 {
|
|
||||||
// self.port()
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
|
|
||||||
pub trait CloneFullAppCtx {
|
pub trait CloneFullAppCtx {
|
||||||
fn clone_f(&self) -> Box<dyn FullAppContext>;
|
fn clone_f(&self) -> Box<dyn FullAppContext>;
|
||||||
}
|
}
|
||||||
|
@ -134,28 +45,65 @@ impl Clone for Box<dyn FullAppContext> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//pub trait CloneMinAppContext {
|
pub trait MinAppContext: std::marker::Send + std::marker::Sync {
|
||||||
// fn clone_fi(&self) -> Box<dyn MinAppContext>;
|
fn docker_(&self) -> Arc<dyn DockerLike>;
|
||||||
//}
|
fn results_(&self) -> &ResultStore;
|
||||||
//
|
fn port_(&self) -> u32;
|
||||||
//impl<T> CloneMinAppContext for T
|
}
|
||||||
//where
|
|
||||||
// T: CloneMinAppContext + Clone + 'static,
|
impl MinAppContext for Arc<dyn FullAppContext> {
|
||||||
//{
|
fn docker_(&self) -> Arc<dyn DockerLike> {
|
||||||
// fn clone_fi(&self) -> Box<dyn MinAppContext> {
|
self.docker()
|
||||||
// Box::new(self.clone())
|
}
|
||||||
// }
|
fn results_(&self) -> &ResultStore {
|
||||||
//}
|
self.results()
|
||||||
//
|
}
|
||||||
//impl Clone for Box<dyn MinAppContext> {
|
fn port_(&self) -> u32 {
|
||||||
// fn clone(&self) -> Self {
|
self.port()
|
||||||
// (**self).clone_fi()
|
}
|
||||||
// }
|
}
|
||||||
//}
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct DaemonCtx {
|
||||||
|
settings: Settings,
|
||||||
|
db: Database,
|
||||||
|
results: ResultStore,
|
||||||
|
docker: Arc<dyn DockerLike>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FullAppContext for DaemonCtx {
|
||||||
|
fn settings(&self) -> &Settings {
|
||||||
|
&self.settings
|
||||||
|
}
|
||||||
|
fn db(&self) -> &Database {
|
||||||
|
&self.db
|
||||||
|
}
|
||||||
|
fn docker(&self) -> Arc<dyn DockerLike> {
|
||||||
|
self.docker.clone()
|
||||||
|
}
|
||||||
|
fn results(&self) -> &ResultStore {
|
||||||
|
&self.results
|
||||||
|
}
|
||||||
|
fn port(&self) -> u32 {
|
||||||
|
self.settings.server.port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MinAppContext for DaemonCtx {
|
||||||
|
fn docker_(&self) -> Arc<dyn DockerLike> {
|
||||||
|
self.docker()
|
||||||
|
}
|
||||||
|
fn results_(&self) -> &ResultStore {
|
||||||
|
self.results()
|
||||||
|
}
|
||||||
|
fn port_(&self) -> u32 {
|
||||||
|
self.port()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub type ResultStore = Arc<RwLock<HashMap<String, Sender<CResult>>>>;
|
pub type ResultStore = Arc<RwLock<HashMap<String, Sender<CResult>>>>;
|
||||||
|
|
||||||
impl Ctx {
|
impl DaemonCtx {
|
||||||
pub async fn new(settings: Settings) -> Self {
|
pub async fn new(settings: Settings) -> Self {
|
||||||
let results = HashMap::default();
|
let results = HashMap::default();
|
||||||
let results = Arc::new(RwLock::new(results));
|
let results = Arc::new(RwLock::new(results));
|
||||||
|
@ -168,3 +116,32 @@ impl Ctx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct CliCtx {
|
||||||
|
results: ResultStore,
|
||||||
|
docker: Arc<dyn DockerLike>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MinAppContext for CliCtx {
|
||||||
|
fn docker_(&self) -> Arc<dyn DockerLike> {
|
||||||
|
self.docker.clone()
|
||||||
|
}
|
||||||
|
fn results_(&self) -> &ResultStore {
|
||||||
|
&self.results
|
||||||
|
}
|
||||||
|
fn port_(&self) -> u32 {
|
||||||
|
29130
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CliCtx {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
let results = HashMap::default();
|
||||||
|
let results = Arc::new(RwLock::new(results));
|
||||||
|
Self {
|
||||||
|
results,
|
||||||
|
docker: Arc::new(Docker::new()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -59,14 +59,14 @@ mod tests {
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::docker_compose::DockerCompose;
|
use crate::docker_compose::DockerCompose;
|
||||||
use crate::{AppMinCtx, Ctx, Settings};
|
use crate::{AppMinCtx, DaemonCtx, Settings};
|
||||||
|
|
||||||
use crate::complaince::suite::Test;
|
use crate::complaince::suite::Test;
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn launch_init_containers_works() {
|
async fn launch_init_containers_works() {
|
||||||
let settings = Settings::new().unwrap();
|
let settings = Settings::new().unwrap();
|
||||||
let ctx = AppMinCtx::new(Arc::new(Ctx::new(settings.clone()).await));
|
let ctx = AppMinCtx::new(Arc::new(DaemonCtx::new(settings.clone()).await));
|
||||||
// let base_dir = Path::new(&ctx.settings.repository.base_dir);
|
// let base_dir = Path::new(&ctx.settings.repository.base_dir);
|
||||||
// let control = base_dir.join("control");
|
// let control = base_dir.join("control");
|
||||||
|
|
||||||
|
|
|
@ -172,7 +172,7 @@ mod tests {
|
||||||
|
|
||||||
use crate::complaince::result::Result as CResult;
|
use crate::complaince::result::Result as CResult;
|
||||||
use crate::complaince::suite::Test;
|
use crate::complaince::suite::Test;
|
||||||
use crate::{AppMinCtx, Ctx, Settings};
|
use crate::{AppMinCtx, DaemonCtx, Settings};
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
@ -240,7 +240,7 @@ mod tests {
|
||||||
const LOGS: &str = "SUITE RUNNER LOG STRING";
|
const LOGS: &str = "SUITE RUNNER LOG STRING";
|
||||||
|
|
||||||
let settings = Settings::new().unwrap();
|
let settings = Settings::new().unwrap();
|
||||||
let ctx = Ctx::new(settings.clone()).await;
|
let ctx = DaemonCtx::new(settings.clone()).await;
|
||||||
// ctx.docker_ = Arc::new(Testdocker_::new());
|
// ctx.docker_ = Arc::new(Testdocker_::new());
|
||||||
let ctx = crate::AppFullCtx::new(Arc::new(ctx));
|
let ctx = crate::AppFullCtx::new(Arc::new(ctx));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue