diff --git a/backend/src/backup/backup_bulk.rs b/backend/src/backup/backup_bulk.rs index 79628432b..3ee638b91 100644 --- a/backend/src/backup/backup_bulk.rs +++ b/backend/src/backup/backup_bulk.rs @@ -324,11 +324,11 @@ async fn perform_backup( .await .with_kind(ErrorKind::Filesystem)?; - let luks_folder_old = backup_guard.as_ref().join("luks.old"); + let luks_folder_old = backup_guard.lock().await.as_ref().join("luks.old"); if tokio::fs::metadata(&luks_folder_old).await.is_ok() { tokio::fs::remove_dir_all(&luks_folder_old).await?; } - let luks_folder_bak = backup_guard.as_ref().join("luks"); + let luks_folder_bak = backup_guard.lock().await.as_ref().join("luks"); if tokio::fs::metadata(&luks_folder_bak).await.is_ok() { tokio::fs::rename(&luks_folder_bak, &luks_folder_old).await?; } diff --git a/backend/src/manager/mod.rs b/backend/src/manager/mod.rs index 4af573bf1..b459556aa 100644 --- a/backend/src/manager/mod.rs +++ b/backend/src/manager/mod.rs @@ -344,14 +344,22 @@ fn configure( .config_actions .get(db, id) .await? - .ok_or_else(not_found)?; + .ok_or_else(|| not_found!(&*id))?; let dependencies = receipts .dependencies .get(db, id) .await? - .ok_or_else(not_found)?; - let volumes = receipts.volumes.get(db, id).await?.ok_or_else(not_found)?; - let version = receipts.version.get(db, id).await?.ok_or_else(not_found)?; + .ok_or_else(|| not_found!(&*id))?; + let volumes = receipts + .volumes + .get(db, id) + .await? + .ok_or_else(|| not_found!(&*id))?; + let version = receipts + .version + .get(db, id) + .await? + .ok_or_else(|| not_found!(&*id))?; // get current config and current spec let ConfigRes { @@ -370,7 +378,11 @@ fn configure( )? }; - let manifest = receipts.manifest.get(db, id).await?.ok_or_else(not_found)?; + let manifest = receipts + .manifest + .get(db, id) + .await? + .ok_or_else(|| not_found!(&*id))?; spec.validate(&manifest)?; spec.matches(&config)?; // check that new config matches spec @@ -389,7 +401,7 @@ fn configure( .system_pointers .get(db, id) .await? - .ok_or_else(not_found)?; + .ok_or_else(|| not_found!(&*id))?; sys.truncate(0); let mut current_dependencies: CurrentDependencies = CurrentDependencies( dependencies @@ -498,7 +510,7 @@ fn configure( .dependency_errors .get(db, &id) .await? - .ok_or_else(not_found)?; + .ok_or_else(|| not_found!(&*id))?; tracing::warn!("Dependency Errors: {:?}", errs); let errs = DependencyErrors::init( ctx, @@ -520,7 +532,7 @@ fn configure( .current_dependents .get(db, id) .await? - .ok_or_else(not_found)?; + .ok_or_else(|| not_found!(&*id))?; for (dependent, _dep_info) in dependents.0.iter().filter(|(dep_id, _)| dep_id != &id) { let dependent_container = receipts.docker_containers.get(db, dependent).await?; let dependent_container = &dependent_container; @@ -534,7 +546,7 @@ fn configure( .manifest .get(db, dependent) .await? - .ok_or_else(not_found)?; + .ok_or_else(|| not_found!(&*id))?; if let Err(error) = cfg .check( ctx, diff --git a/backend/src/procedure/js_scripts.rs b/backend/src/procedure/js_scripts.rs index 1e1a48405..4c49e7f74 100644 --- a/backend/src/procedure/js_scripts.rs +++ b/backend/src/procedure/js_scripts.rs @@ -557,7 +557,7 @@ mod tests { .unwrap() .canonicalize() .unwrap(); - let package_id = "test-package".parse().unwrap(); + let package_id = "test-package".parse::().unwrap(); let package_version: Version = "0.3.0.3".parse().unwrap(); let name = ProcedureName::Action("test-rename".parse().unwrap()); let volumes: Volumes = serde_json::from_value(json!({ @@ -608,7 +608,7 @@ mod tests { timeout, ProcessGroupId(0), None, - None, + Arc::new(OsApiMock::default()), ) .await .unwrap() @@ -654,7 +654,7 @@ mod tests { timeout, ProcessGroupId(0), None, - None, + Arc::new(OsApiMock::default()), ) .await .unwrap() @@ -700,7 +700,7 @@ mod tests { timeout, ProcessGroupId(0), None, - None, + Arc::new(OsApiMock::default()), ) .await .unwrap() @@ -746,7 +746,7 @@ mod tests { timeout, ProcessGroupId(0), None, - None, + Arc::new(OsApiMock::default()), ) .await .unwrap() @@ -800,52 +800,6 @@ mod tests { .unwrap(); } #[tokio::test] - async fn js_action_test_deep_dir_escape() { - let js_action = JsProcedure { args: vec![] }; - let path: PathBuf = "test/js_action_execute/" - .parse::() - .unwrap() - .canonicalize() - .unwrap(); - let package_id = "test-package".parse().unwrap(); - let package_version: Version = "0.3.0.3".parse().unwrap(); - let name = ProcedureName::Action("test-deep-dir-escape".parse().unwrap()); - let volumes: Volumes = serde_json::from_value(json!({ - "main": { - "type": "data" - }, - "compat": { - "type": "assets" - }, - "filebrowser" :{ - "package-id": "filebrowser", - "path": "data", - "readonly": true, - "type": "pointer", - "volume-id": "main", - } - })) - .unwrap(); - let input: Option = None; - let timeout = Some(Duration::from_secs(10)); - js_action - .execute::( - &path, - &package_id, - &package_version, - name, - &volumes, - input, - timeout, - ProcessGroupId(0), - None, - Arc::new(OsApiMock::default()), - ) - .await - .unwrap() - .unwrap(); - } - #[tokio::test] async fn js_permissions_and_own() { let js_action = JsProcedure { args: vec![] }; let path: PathBuf = "test/js_action_execute/" @@ -891,52 +845,6 @@ mod tests { .unwrap() .unwrap(); } - #[tokio::test] - async fn js_action_test_zero_dir() { - let js_action = JsProcedure { args: vec![] }; - let path: PathBuf = "test/js_action_execute/" - .parse::() - .unwrap() - .canonicalize() - .unwrap(); - let package_id = "test-package".parse().unwrap(); - let package_version: Version = "0.3.0.3".parse().unwrap(); - let name = ProcedureName::Action("test-zero-dir".parse().unwrap()); - let volumes: Volumes = serde_json::from_value(json!({ - "main": { - "type": "data" - }, - "compat": { - "type": "assets" - }, - "filebrowser" :{ - "package-id": "filebrowser", - "path": "data", - "readonly": true, - "type": "pointer", - "volume-id": "main", - } - })) - .unwrap(); - let input: Option = None; - let timeout = Some(Duration::from_secs(10)); - js_action - .execute::( - &path, - &package_id, - &package_version, - name, - &volumes, - input, - timeout, - ProcessGroupId(0), - None, - Arc::new(OsApiMock::default()), - ) - .await - .unwrap() - .unwrap(); - } #[tokio::test] async fn js_rsync() { @@ -1048,50 +956,51 @@ mod tests { .unwrap(); spawned.await.unwrap(); } -} -#[tokio::test] -async fn js_disk_usage() { - let js_action = JsProcedure { args: vec![] }; - let path: PathBuf = "test/js_action_execute/" - .parse::() - .unwrap() - .canonicalize() + #[tokio::test] + async fn js_disk_usage() { + let js_action = JsProcedure { args: vec![] }; + let path: PathBuf = "test/js_action_execute/" + .parse::() + .unwrap() + .canonicalize() + .unwrap(); + let package_id = "test-package".parse().unwrap(); + let package_version: Version = "0.3.0.3".parse().unwrap(); + let name = ProcedureName::Action("test-disk-usage".parse().unwrap()); + let volumes: Volumes = serde_json::from_value(serde_json::json!({ + "main": { + "type": "data" + }, + "compat": { + "type": "assets" + }, + "filebrowser" :{ + "package-id": "filebrowser", + "path": "data", + "readonly": true, + "type": "pointer", + "volume-id": "main", + } + })) .unwrap(); - let package_id = "test-package".parse().unwrap(); - let package_version: Version = "0.3.0.3".parse().unwrap(); - let name = ProcedureName::Action("test-disk-usage".parse().unwrap()); - let volumes: Volumes = serde_json::from_value(serde_json::json!({ - "main": { - "type": "data" - }, - "compat": { - "type": "assets" - }, - "filebrowser" :{ - "package-id": "filebrowser", - "path": "data", - "readonly": true, - "type": "pointer", - "volume-id": "main", - } - })) - .unwrap(); - let input: Option = None; - let timeout = Some(Duration::from_secs(10)); - dbg!(js_action - .execute::( - &path, - &package_id, - &package_version, - name, - &volumes, - input, - timeout, - ProcessGroupId(0), - None, - ) - .await - .unwrap() - .unwrap()); + let input: Option = None; + let timeout = Some(Duration::from_secs(10)); + dbg!(js_action + .execute::( + &path, + &package_id, + &package_version, + name, + &volumes, + input, + timeout, + ProcessGroupId(0), + None, + Arc::new(OsApiMock::default()), + ) + .await + .unwrap() + .unwrap()); + } } diff --git a/backend/src/version/mod.rs b/backend/src/version/mod.rs index 99977a627..0bd16adba 100644 --- a/backend/src/version/mod.rs +++ b/backend/src/version/mod.rs @@ -247,22 +247,18 @@ mod tests { fn versions() -> impl Strategy { prop_oneof![ - <<<<<<< HEAD - Just(Version::V0_3_4_3(Wrapper(v0_3_4_3::Version::new()))), - ======= - em_version().prop_map(|v| if v < v0_3_4_1::Version::new().semver() { - Version::LT0_3_4_1(LTWrapper(v0_3_4_1::Version::new(), v)) - } else { - Version::LT0_3_4_1(LTWrapper( - v0_3_4_1::Version::new(), - emver::Version::new(0, 3, 0, 0), - )) - }), - Just(Version::V0_3_4_1(Wrapper(v0_3_4_1::Version::new()))), - Just(Version::V0_3_4_2(Wrapper(v0_3_4_2::Version::new()))), - >>>>>>> e83250f1 (integration/refactors) - em_version().prop_map(Version::Other), - ] + em_version().prop_map(|v| if v < v0_3_4_3::Version::new().semver() { + Version::LT0_3_4_3(LTWrapper(v0_3_4_3::Version::new(), v)) + } else { + Version::LT0_3_4_3(LTWrapper( + v0_3_4_3::Version::new(), + emver::Version::new(0, 3, 0, 0), + )) + }), + Just(Version::V0_3_4_3(Wrapper(v0_3_4_3::Version::new()))), + Just(Version::V0_4_0(Wrapper(v0_4_0::Version::new()))), + em_version().prop_map(Version::Other), + ] } proptest! { diff --git a/backend/src/version/v0_3_4_3.rs b/backend/src/version/v0_3_4_3.rs index 10cf9b139..9a822c517 100644 --- a/backend/src/version/v0_3_4_3.rs +++ b/backend/src/version/v0_3_4_3.rs @@ -1,5 +1,6 @@ use async_trait::async_trait; use emver::VersionRange; +use lazy_static::lazy_static; use super::*; @@ -19,7 +20,7 @@ pub struct Version; #[async_trait] impl VersionT for Version { - type Previous = v0_3_4_2::Version; + type Previous = Self; fn new() -> Self { Version } @@ -30,12 +31,6 @@ impl VersionT for Version { &*V0_3_0_COMPAT } async fn up(&self, db: &mut Db, _secrets: &PgPool) -> Result<(), Error> { - crate::db::DatabaseModel::new() - .server_info() - .get_mut(db) - .await? - .save(db) - .await?; Ok(()) } async fn down(&self, _db: &mut Db, _secrets: &PgPool) -> Result<(), Error> { diff --git a/backend/src/version/v0_4_0.rs b/backend/src/version/v0_4_0.rs index dcacef822..a1e281ec5 100644 --- a/backend/src/version/v0_4_0.rs +++ b/backend/src/version/v0_4_0.rs @@ -17,7 +17,7 @@ pub struct Version; #[async_trait] impl VersionT for Version { - type Previous = v0_3_4::Version; + type Previous = v0_3_4_3::Version; fn new() -> Self { Version } diff --git a/libs/embassy_container_init/src/lib.rs b/libs/embassy_container_init/src/lib.rs index d714b8e82..63d3380a7 100644 --- a/libs/embassy_container_init/src/lib.rs +++ b/libs/embassy_container_init/src/lib.rs @@ -212,24 +212,3 @@ impl RpcMethod for SignalGroup { "signal-group" } } - -#[test] -fn example_echo_line() { - let input = r#"{"id":0,"jsonrpc":"2.0","method":"command","params":{"command":"echo","args":["world I am here"]}}"#; - let new_input = JsonRpc::::maybe_parse(input); - assert!(new_input.is_some()); - assert_eq!(input, &serde_json::to_string(&new_input.unwrap()).unwrap()); -} - -#[test] -fn example_input_line() { - let output = JsonRpc::new(RpcId::UInt(0), Output::Line("world I am here".to_string())); - let output_str = output.maybe_serialize(); - assert!(output_str.is_some()); - let output_str = output_str.unwrap(); - assert_eq!( - &output_str, - r#"{"id":0,"jsonrpc":"2.0","method":"line","params":"world I am here"}"# - ); - assert_eq!(output, serde_json::from_str(&output_str).unwrap()); -}