CH-J ToolsSerververwaltung über SSH
Menü
Veröffentlichte Quellen

CH-J Tools

Durchsuchen Sie Verzeichnisse und Dateien einer bestimmten Anwendungsausgabe.

Quellen als ZIP herunterladen
CH-J / Server Manager 872 Dateien
core-20261030T220507Z-61e4558d889f Hinzugefügt: · Erstellt:
mod.rs Hinzugefügt: Datum nicht erfasst 2,8 KB · 61 Zeilen
Code Datei herunterladen
1//! Remote Disk Manager (chj.disks): inventory model, operation planner, jobs.
2pub mod inventory;
3pub mod js;
4pub mod planner;
5pub mod service;
7#[cfg(test)]
8mod 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 list
17 }
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 }
SHA-256348f77add8cfd78fecbd884543457472fef0bb2d383d2d4fab81b619af2312aa

CH-J Proprietary Software License 1.14 · Die Quellen werden unter der CH-J Proprietary Software License 1.14 bereitgestellt. Ihre Verfügbarkeit ändert die Lizenzbedingungen nicht und gewährt keine zusätzlichen Rechte.

SHA-256 des Archivs77380d4805485ffa4027fbe7858b5836f197a4aa9d52358a43e2d12d018744df
Dateien