1#[cfg(test)]
2use super::*;
3
4#[test]
5fn serialize_and_deserialize_spec() {
6 let spec: Spec = Default::default();
7 let json_string = serde_json::to_string(&spec).unwrap();
8 let new_spec = serde_json::from_str(&json_string).unwrap();
9 assert_eq!(spec, new_spec);
10}
11
12#[test]
13fn test_linux_device_cgroup_to_string() {
14 let ldc = LinuxDeviceCgroupBuilder::default()
15 .allow(true)
16 .typ(LinuxDeviceType::B)
17 .access("rwm".to_string())
18 .build()
19 .expect("build device cgroup");
20 assert_eq!(ldc.to_string(), "b *:* rwm");
21
22 let ldc = LinuxDeviceCgroupBuilder::default()
23 .allow(true)
24 .typ(LinuxDeviceType::A)
25 .major(1)
26 .minor(9)
27 .access("rwm".to_string())
28 .build()
29 .expect("build device cgroup");
30 assert_eq!(ldc.to_string(), "a 1:9 rwm");
31}
32
33#[test]
34fn test_load_sample_spec() {
35 let fixture_path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
36 .join("src/runtime/test/fixture/sample.json");
37 let err = Spec::load(fixture_path);
38 assert!(err.is_ok(), "failed to load spec: {err:?}");
39}
40
41#[test]
42fn test_load_sample_windows_spec() {
43 let fixture_path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
44 .join("src/runtime/test/fixture/sample_windows.json");
45 let err = Spec::load(fixture_path);
46 assert!(err.is_ok(), "failed to load spec: {err:?}");
47}
48
49#[test]
50fn test_linux_netdevice_lifecycle() {
51 let fixture_path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
52 .join("src/runtime/test/fixture/sample.json");
53
54 let spec =
55 Spec::load(fixture_path).unwrap_or_else(|err| panic!("Failed to load spec: {}", err));
56
57 let net_devices = spec.linux.as_ref().unwrap().net_devices().as_ref().unwrap();
58 assert_eq!(net_devices.len(), 3);
59
60 let eth0 = net_devices.get("eth0").unwrap();
62 assert_eq!(eth0.name().as_ref(), Some(&"container_eth0".to_string()));
63
64 let ens4 = net_devices.get("ens4").unwrap();
66 assert_eq!(ens4.name().as_ref(), None);
67
68 let ens5 = net_devices.get("ens5").unwrap();
70 assert_eq!(ens5.name().as_ref(), None);
71
72 let mut net_devices = net_devices.clone();
74 let ens6 = LinuxNetDeviceBuilder::default()
75 .name("ens6".to_string())
76 .build()
77 .unwrap();
78 net_devices.insert("ens6".to_string(), ens6);
79 assert_eq!(net_devices.len(), 4);
80
81 let ens6 = net_devices.get("ens6").unwrap();
83 assert_eq!(ens6.name().as_ref(), Some(&"ens6".to_string()));
84
85 let ens6 = net_devices.get_mut("ens6").unwrap();
87 ens6.set_name(Some("ens6_container".to_string()));
88 assert_eq!(ens6.name().as_ref(), Some(&"ens6_container".to_string()));
89}