Vydané zdroje
Stáhnout zdroje ZIP
CH-J Tools
Procházejte adresáře a soubory konkrétního vydání aplikace.
CH-J / Server Manager
872 souborů
core-20261030T220507Z-61e4558d889f
Přidáno: · Sestaveno:
1
//! Remote Disk Manager (chj.disks): inventory model, operation planner, jobs.2
pub mod inventory;3
pub mod js;4
pub mod planner;5
pub mod service;7
#[cfg(test)]8
mod parity {9
use super::js::first_difference;10
use serde_json::Value;12
pub fn calls(name: &str) -> Vec<Value> {13
let fixture: Value = serde_json::from_str(include_str!("../../../tests/fixtures/disks/parity-0.1.0.json")).unwrap();14
let list: Vec<Value> = fixture["calls"].as_array().unwrap().iter().filter(|c| c["fn"] == name).cloned().collect();15
assert!(list.len() >= 10, "too few recorded {name} calls");16
list17
}19
#[test]20
fn inventory_matches_0_1_0() {21
let mut failures = Vec::new();22
for (i, call) in calls("buildInventory").iter().enumerate() {23
let built = super::inventory::build_inventory(call["input"][0].as_str().unwrap());24
if let Some(diff) = first_difference(&call["output"], &built, "$") {25
failures.push(format!("#{i}: {diff}"));26
}27
}28
assert!(failures.is_empty(), "{} mismatches:\n{}", failures.len(), failures.iter().take(8).cloned().collect::<Vec<_>>().join("\n"));29
}31
#[test]32
fn planner_matches_0_1_0() {33
let mut failures = Vec::new();34
for (i, call) in calls("planOperations").iter().enumerate() {35
let input = &call["input"];36
let title = input.get(2).and_then(|o| o.get("title"));37
let result = super::planner::plan_operations(&input[0], &input[1], title);38
match (result, call.get("error")) {39
(Ok(plan), None) => {40
if let Some(diff) = first_difference(&call["output"], &plan, "$") {41
failures.push(format!("#{i}: {diff}"));42
}43
}44
(Err(error), Some(expected)) => {45
if expected["code"] != error.code.as_str() || expected["message"] != error.message.as_str() {46
failures.push(format!("#{i}: error {} / {} vs {} / {}", expected["code"], expected["message"], error.code, error.message));47
}48
}49
(Ok(_), Some(expected)) => failures.push(format!("#{i}: expected error {}", expected["code"])),50
(Err(error), None) => failures.push(format!("#{i}: unexpected error {} {}", error.code, error.message)),51
}52
}53
for (i, call) in calls("suggestions").iter().enumerate() {54
let result = serde_json::Value::Array(super::planner::suggestions(&call["input"][0]));55
if let Some(diff) = first_difference(&call["output"], &result, "$") {56
failures.push(format!("suggestions #{i}: {diff}"));57
}58
}59
assert!(failures.is_empty(), "{} mismatches:\n{}", failures.len(), failures.iter().take(10).cloned().collect::<Vec<_>>().join("\n"));60
}61
}SHA-256
348f77add8cfd78fecbd884543457472fef0bb2d383d2d4fab81b619af2312aaCH-J Proprietary Software License 1.14 · Zdroje jsou zveřejněny pod CH-J Proprietary Software License 1.14. Jejich dostupnost nemění licenční podmínky ani neposkytuje další oprávnění.
SHA-256 archivu
77380d4805485ffa4027fbe7858b5836f197a4aa9d52358a43e2d12d018744df