Skip to content

Commit 27709c0

Browse files
committed
test(core): cover CDI policy generation from NVIDIA specs
Signed-off-by: Evan Lezar <elezar@nvidia.com>
1 parent 9ab5230 commit 27709c0

8 files changed

Lines changed: 3930 additions & 0 deletions

File tree

‎crates/openshell-core/src/cdi_linux.rs‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,59 @@ mod tests {
445445
.then_some(CdiPathKind::CharacterDevice)
446446
}
447447

448+
#[derive(serde::Serialize)]
449+
struct CdiRequirementsBaseline<'a> {
450+
device_node_paths: &'a [String],
451+
read_only_paths: &'a [String],
452+
read_write_mount_paths: &'a [String],
453+
additional_gids: &'a [u32],
454+
}
455+
456+
fn assert_cdi_spec_matches_derived_requirements_baseline(spec: &str, expected: &str) {
457+
let dir = tempfile::tempdir().unwrap();
458+
write_spec(dir.path(), "nvidia.yaml", spec);
459+
460+
let requirements = resolve_with_kind(
461+
&context(dir.path(), &["nvidia.com/gpu=all"]),
462+
&[],
463+
fake_device_node,
464+
)
465+
.unwrap();
466+
let baseline = CdiRequirementsBaseline {
467+
device_node_paths: &requirements.device_node_paths,
468+
read_only_paths: &requirements.read_only_paths,
469+
read_write_mount_paths: &requirements.read_write_mount_paths,
470+
additional_gids: &requirements.additional_gids,
471+
};
472+
let generated = serde_json::to_string_pretty(&baseline).unwrap() + "\n";
473+
474+
assert_eq!(generated, expected);
475+
}
476+
477+
#[test]
478+
fn orin_cdi_spec_matches_derived_requirements_baseline() {
479+
assert_cdi_spec_matches_derived_requirements_baseline(
480+
include_str!("../testdata/orin-nvidia.yaml"),
481+
include_str!("../testdata/orin-nvidia-policy-baseline.json"),
482+
);
483+
}
484+
485+
#[test]
486+
fn spark_cdi_spec_matches_derived_requirements_baseline() {
487+
assert_cdi_spec_matches_derived_requirements_baseline(
488+
include_str!("../testdata/spark-nvidia.yaml"),
489+
include_str!("../testdata/spark-nvidia-policy-baseline.json"),
490+
);
491+
}
492+
493+
#[test]
494+
fn multi_gpu_cdi_spec_matches_derived_requirements_baseline() {
495+
assert_cdi_spec_matches_derived_requirements_baseline(
496+
include_str!("../testdata/multi-gpu-nvidia.yaml"),
497+
include_str!("../testdata/multi-gpu-nvidia-policy-baseline.json"),
498+
);
499+
}
500+
448501
#[test]
449502
fn resolves_native_single_device_requirements() {
450503
let dir = tempfile::tempdir().unwrap();
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"device_node_paths": [
3+
"/dev/nvidia-modeset",
4+
"/dev/nvidia-uvm",
5+
"/dev/nvidia-uvm-tools",
6+
"/dev/nvidia0",
7+
"/dev/nvidia1",
8+
"/dev/nvidiactl"
9+
],
10+
"read_only_paths": [
11+
"/etc/OpenCL/vendors/nvidia.icd",
12+
"/etc/vulkan/icd.d/nvidia_icd.json",
13+
"/etc/vulkan/implicit_layer.d/nvidia_layers.json",
14+
"/lib/firmware/nvidia/615.71.09/gsp_ga10x.bin",
15+
"/lib/firmware/nvidia/615.71.09/gsp_tu10x.bin",
16+
"/run/nvidia-persistenced/socket",
17+
"/run/nvidia/driver/lib/firmware/nvidia/615.71.09/gsp_ga10x.bin",
18+
"/run/nvidia/driver/lib/firmware/nvidia/615.71.09/gsp_tu10x.bin",
19+
"/usr/bin/nvidia-cuda-mps-control",
20+
"/usr/bin/nvidia-cuda-mps-server",
21+
"/usr/bin/nvidia-debugdump",
22+
"/usr/bin/nvidia-imex",
23+
"/usr/bin/nvidia-imex-ctl",
24+
"/usr/bin/nvidia-persistenced",
25+
"/usr/bin/nvidia-smi",
26+
"/usr/bin/nvidia-xconfig",
27+
"/usr/lib/x86_64-linux-gnu",
28+
"/usr/lib/x86_64-linux-gnu/vdpau",
29+
"/usr/share/egl/egl_external_platform.d/09_nvidia_wayland2.json",
30+
"/usr/share/egl/egl_external_platform.d/10_nvidia_wayland.json",
31+
"/usr/share/egl/egl_external_platform.d/15_nvidia_gbm.json",
32+
"/usr/share/egl/egl_external_platform.d/20_nvidia_xcb.json",
33+
"/usr/share/egl/egl_external_platform.d/20_nvidia_xlib.json",
34+
"/usr/share/glvnd/egl_vendor.d/10_nvidia.json",
35+
"/usr/share/nvidia/nvoptix.bin"
36+
],
37+
"read_write_mount_paths": [],
38+
"additional_gids": []
39+
}

0 commit comments

Comments
 (0)