in below/model/src/cgroup.rs [614:670]
fn query_nested_cgroup() {
let model_json = r#"
{
"data": { "name": "<root>", "full_path": "", "depth": 0 },
"count": 4,
"recreate_flag": false,
"children": [
{
"data": { "name": "system.slice", "full_path": "/system.slice", "depth": 1 },
"count": 2,
"recreate_flag": false,
"children": [
{
"data": { "name": "foo.service", "full_path": "/system.slice/foo.service", "depth": 2 },
"count": 1,
"recreate_flag": false,
"children": []
}
]
},
{
"data": { "name": ".hidden.slice", "full_path": "/.hidden.slice", "depth": 1 },
"count": 1,
"recreate_flag": false,
"children": []
}
]
}
"#;
let model: CgroupModel =
serde_json::from_str(model_json).expect("Failed to deserialize cgroup model JSON");
for (field_id, expected) in &[
// "path:" omitted falls back to querying self (root)
("full_path", Some("")),
// Ignore consecutive slashes
("path:///////.name", Some("<root>")),
("path:/system.slice/.full_path", Some("/system.slice")),
(
"path:/system.slice/foo.service/.full_path",
Some("/system.slice/foo.service"),
),
// Allow path param to contain "/."
("path:/.hidden.slice/.full_path", Some("/.hidden.slice")),
// Non-existent cgroups
("path:/no_such.slice/.full_path", None),
("path:/system.slice/no_such.service/.full_path", None),
] {
assert_eq!(
model.query(
&CgroupModelFieldId::from_str(field_id)
.map_err(|e| format!("Failed to parse field id {}: {:?}", field_id, e))
.unwrap()
),
expected.map(|s| Field::Str(s.to_string()))
);
}
}