Skip to content

Commit c2771f2

Browse files
n4mlzutam0k
authored andcommitted
Add memory policy modes and flags support with serialization tests
Signed-off-by: n4mlz <[email protected]>
1 parent c555856 commit c2771f2

File tree

2 files changed

+161
-0
lines changed

2 files changed

+161
-0
lines changed

src/runtime/features.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,22 @@ mod tests {
595595
"intelRdt": {
596596
"enabled": true
597597
},
598+
"memoryPolicy": {
599+
"modes": [
600+
"MPOL_DEFAULT",
601+
"MPOL_BIND",
602+
"MPOL_INTERLEAVE",
603+
"MPOL_WEIGHTED_INTERLEAVE",
604+
"MPOL_PREFERRED",
605+
"MPOL_PREFERRED_MANY",
606+
"MPOL_LOCAL"
607+
],
608+
"flags": [
609+
"MPOL_F_NUMA_BALANCING",
610+
"MPOL_F_RELATIVE_NODES",
611+
"MPOL_F_STATIC_NODES"
612+
]
613+
},
598614
"netDevices": {
599615
"enabled": true
600616
}
@@ -840,6 +856,26 @@ mod tests {
840856
}
841857
);
842858

859+
assert_eq!(
860+
linux.memory_policy.as_ref().unwrap(),
861+
&MemoryPolicy {
862+
modes: Some(vec![
863+
"MPOL_DEFAULT".to_string(),
864+
"MPOL_BIND".to_string(),
865+
"MPOL_INTERLEAVE".to_string(),
866+
"MPOL_WEIGHTED_INTERLEAVE".to_string(),
867+
"MPOL_PREFERRED".to_string(),
868+
"MPOL_PREFERRED_MANY".to_string(),
869+
"MPOL_LOCAL".to_string(),
870+
]),
871+
flags: Some(vec![
872+
"MPOL_F_NUMA_BALANCING".to_string(),
873+
"MPOL_F_RELATIVE_NODES".to_string(),
874+
"MPOL_F_STATIC_NODES".to_string(),
875+
]),
876+
}
877+
);
878+
843879
assert_eq!(
844880
linux.net_devices.as_ref().unwrap(),
845881
&NetDevices {

src/runtime/linux.rs

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,4 +1891,129 @@ mod tests {
18911891
let unknown_operator = invalid_seccomp_operator_str.parse::<LinuxSeccompOperator>();
18921892
assert!(unknown_operator.is_err());
18931893
}
1894+
1895+
// MemoryPolicyModeType test cases
1896+
#[test]
1897+
fn memory_policy_mode_enum_to_string() {
1898+
let mode_a = MemoryPolicyModeType::MpolDefault;
1899+
assert_eq!(mode_a.to_string(), "MPOL_DEFAULT");
1900+
1901+
let mode_b = MemoryPolicyModeType::MpolBind;
1902+
assert_eq!(mode_b.to_string(), "MPOL_BIND");
1903+
1904+
let mode_c = MemoryPolicyModeType::MpolInterleave;
1905+
assert_eq!(mode_c.to_string(), "MPOL_INTERLEAVE");
1906+
1907+
let mode_d = MemoryPolicyModeType::MpolWeightedInterleave;
1908+
assert_eq!(mode_d.to_string(), "MPOL_WEIGHTED_INTERLEAVE");
1909+
1910+
let mode_e = MemoryPolicyModeType::MpolPreferred;
1911+
assert_eq!(mode_e.to_string(), "MPOL_PREFERRED");
1912+
1913+
let mode_f = MemoryPolicyModeType::MpolPreferredMany;
1914+
assert_eq!(mode_f.to_string(), "MPOL_PREFERRED_MANY");
1915+
1916+
let mode_g = MemoryPolicyModeType::MpolLocal;
1917+
assert_eq!(mode_g.to_string(), "MPOL_LOCAL");
1918+
}
1919+
1920+
#[test]
1921+
fn memory_policy_mode_string_to_enum() {
1922+
let mode_str = "MPOL_INTERLEAVE";
1923+
let mode_enum: MemoryPolicyModeType = mode_str.parse().unwrap();
1924+
assert_eq!(mode_enum, MemoryPolicyModeType::MpolInterleave);
1925+
1926+
let mode_str = "MPOL_BIND";
1927+
let mode_enum: MemoryPolicyModeType = mode_str.parse().unwrap();
1928+
assert_eq!(mode_enum, MemoryPolicyModeType::MpolBind);
1929+
1930+
let mode_str = "MPOL_DEFAULT";
1931+
let mode_enum: MemoryPolicyModeType = mode_str.parse().unwrap();
1932+
assert_eq!(mode_enum, MemoryPolicyModeType::MpolDefault);
1933+
1934+
let mode_str = "MPOL_WEIGHTED_INTERLEAVE";
1935+
let mode_enum: MemoryPolicyModeType = mode_str.parse().unwrap();
1936+
assert_eq!(mode_enum, MemoryPolicyModeType::MpolWeightedInterleave);
1937+
1938+
let mode_str = "MPOL_PREFERRED";
1939+
let mode_enum: MemoryPolicyModeType = mode_str.parse().unwrap();
1940+
assert_eq!(mode_enum, MemoryPolicyModeType::MpolPreferred);
1941+
1942+
let mode_str = "MPOL_PREFERRED_MANY";
1943+
let mode_enum: MemoryPolicyModeType = mode_str.parse().unwrap();
1944+
assert_eq!(mode_enum, MemoryPolicyModeType::MpolPreferredMany);
1945+
1946+
let mode_str = "MPOL_LOCAL";
1947+
let mode_enum: MemoryPolicyModeType = mode_str.parse().unwrap();
1948+
assert_eq!(mode_enum, MemoryPolicyModeType::MpolLocal);
1949+
1950+
let invalid_mode_str = "INVALID_MODE";
1951+
let unknown_mode = invalid_mode_str.parse::<MemoryPolicyModeType>();
1952+
assert!(unknown_mode.is_err());
1953+
}
1954+
1955+
// MemoryPolicyFlagType test cases
1956+
#[test]
1957+
fn memory_policy_flag_enum_to_string() {
1958+
let flag_a = MemoryPolicyFlagType::MpolFNumaBalancing;
1959+
assert_eq!(flag_a.to_string(), "MPOL_F_NUMA_BALANCING");
1960+
1961+
let flag_b = MemoryPolicyFlagType::MpolFRelativeNodes;
1962+
assert_eq!(flag_b.to_string(), "MPOL_F_RELATIVE_NODES");
1963+
1964+
let flag_c = MemoryPolicyFlagType::MpolFStaticNodes;
1965+
assert_eq!(flag_c.to_string(), "MPOL_F_STATIC_NODES");
1966+
}
1967+
1968+
#[test]
1969+
fn memory_policy_flag_string_to_enum() {
1970+
let flag_str = "MPOL_F_NUMA_BALANCING";
1971+
let flag_enum: MemoryPolicyFlagType = flag_str.parse().unwrap();
1972+
assert_eq!(flag_enum, MemoryPolicyFlagType::MpolFNumaBalancing);
1973+
1974+
let flag_str = "MPOL_F_RELATIVE_NODES";
1975+
let flag_enum: MemoryPolicyFlagType = flag_str.parse().unwrap();
1976+
assert_eq!(flag_enum, MemoryPolicyFlagType::MpolFRelativeNodes);
1977+
1978+
let flag_str = "MPOL_F_STATIC_NODES";
1979+
let flag_enum: MemoryPolicyFlagType = flag_str.parse().unwrap();
1980+
assert_eq!(flag_enum, MemoryPolicyFlagType::MpolFStaticNodes);
1981+
1982+
let invalid_flag_str = "INVALID_FLAG";
1983+
let unknown_flag = invalid_flag_str.parse::<MemoryPolicyFlagType>();
1984+
assert!(unknown_flag.is_err());
1985+
}
1986+
1987+
#[test]
1988+
fn test_linux_memory_policy_serialization() {
1989+
let memory_policy = LinuxMemoryPolicy {
1990+
mode: MemoryPolicyModeType::MpolInterleave,
1991+
nodes: Some("0-3,7".to_string()),
1992+
flags: Some(vec![
1993+
MemoryPolicyFlagType::MpolFStaticNodes,
1994+
MemoryPolicyFlagType::MpolFRelativeNodes,
1995+
]),
1996+
};
1997+
1998+
let json = serde_json::to_string(&memory_policy).unwrap();
1999+
let deserialized: LinuxMemoryPolicy = serde_json::from_str(&json).unwrap();
2000+
2001+
assert_eq!(deserialized.mode, MemoryPolicyModeType::MpolInterleave);
2002+
assert_eq!(deserialized.nodes, Some("0-3,7".to_string()));
2003+
assert_eq!(
2004+
deserialized.flags,
2005+
Some(vec![
2006+
MemoryPolicyFlagType::MpolFStaticNodes,
2007+
MemoryPolicyFlagType::MpolFRelativeNodes,
2008+
])
2009+
);
2010+
}
2011+
2012+
#[test]
2013+
fn test_linux_memory_policy_default() {
2014+
let memory_policy = LinuxMemoryPolicy::default();
2015+
assert_eq!(memory_policy.mode, MemoryPolicyModeType::MpolDefault);
2016+
assert_eq!(memory_policy.nodes, None);
2017+
assert_eq!(memory_policy.flags, None);
2018+
}
18942019
}

0 commit comments

Comments
 (0)