From 9307ee1c5e30923a4876af9e1a7138782094f276 Mon Sep 17 00:00:00 2001 From: Yusuke Sakurai Date: Sun, 27 Oct 2024 19:13:33 +0900 Subject: [PATCH] add test process_oom_score_adj Signed-off-by: Yusuke Sakurai --- tests/contest/contest/src/main.rs | 3 ++ tests/contest/contest/src/tests/mod.rs | 1 + .../src/tests/process_oom_score_adj/mod.rs | 2 ++ .../process_oom_score_adj_test.rs | 33 +++++++++++++++++++ tests/contest/runtimetest/src/main.rs | 1 + tests/contest/runtimetest/src/tests.rs | 17 ++++++++++ 6 files changed, 57 insertions(+) create mode 100644 tests/contest/contest/src/tests/process_oom_score_adj/mod.rs create mode 100644 tests/contest/contest/src/tests/process_oom_score_adj/process_oom_score_adj_test.rs diff --git a/tests/contest/contest/src/main.rs b/tests/contest/contest/src/main.rs index e18f639af..2245a246d 100644 --- a/tests/contest/contest/src/main.rs +++ b/tests/contest/contest/src/main.rs @@ -22,6 +22,7 @@ use crate::tests::mounts_recursive::get_mounts_recursive_test; use crate::tests::no_pivot::get_no_pivot_test; use crate::tests::pidfile::get_pidfile_test; use crate::tests::process_rlimits::get_process_rlimits_test; +use crate::tests::process_oom_score_adj::get_process_oom_score_adj_test; use crate::tests::readonly_paths::get_ro_paths_test; use crate::tests::scheduler::get_scheduler_test; use crate::tests::seccomp::get_seccomp_test; @@ -117,6 +118,7 @@ fn main() -> Result<()> { let devices = get_devices_test(); let process_rlimtis = get_process_rlimits_test(); let no_pivot = get_no_pivot_test(); + let process_oom_score_adj = get_process_oom_score_adj_test(); tm.add_test_group(Box::new(cl)); tm.add_test_group(Box::new(cc)); @@ -142,6 +144,7 @@ fn main() -> Result<()> { tm.add_test_group(Box::new(devices)); tm.add_test_group(Box::new(process_rlimtis)); tm.add_test_group(Box::new(no_pivot)); + tm.add_test_group(Box::new(process_oom_score_adj)); tm.add_test_group(Box::new(io_priority_test)); tm.add_cleanup(Box::new(cgroups::cleanup_v1)); diff --git a/tests/contest/contest/src/tests/mod.rs b/tests/contest/contest/src/tests/mod.rs index b33210152..ef277062b 100644 --- a/tests/contest/contest/src/tests/mod.rs +++ b/tests/contest/contest/src/tests/mod.rs @@ -12,6 +12,7 @@ pub mod mounts_recursive; pub mod no_pivot; pub mod pidfile; pub mod process_rlimits; +pub mod process_oom_score_adj; pub mod readonly_paths; pub mod scheduler; pub mod seccomp; diff --git a/tests/contest/contest/src/tests/process_oom_score_adj/mod.rs b/tests/contest/contest/src/tests/process_oom_score_adj/mod.rs new file mode 100644 index 000000000..a83d7b470 --- /dev/null +++ b/tests/contest/contest/src/tests/process_oom_score_adj/mod.rs @@ -0,0 +1,2 @@ +mod process_oom_score_adj_test; +pub use process_oom_score_adj_test::get_process_oom_score_adj_test; diff --git a/tests/contest/contest/src/tests/process_oom_score_adj/process_oom_score_adj_test.rs b/tests/contest/contest/src/tests/process_oom_score_adj/process_oom_score_adj_test.rs new file mode 100644 index 000000000..93b957aec --- /dev/null +++ b/tests/contest/contest/src/tests/process_oom_score_adj/process_oom_score_adj_test.rs @@ -0,0 +1,33 @@ +use crate::utils::test_inside_container; +use anyhow::{Context, Ok, Result}; +use oci_spec::runtime::{ProcessBuilder, Spec, SpecBuilder}; +use test_framework::{test_result, Test, TestGroup, TestResult}; + +fn create_spec() -> Result { + let spec = SpecBuilder::default().process( + ProcessBuilder::default() + .args(vec![ + "runtimetest".to_string(), + "process_oom_score_adj".to_string(), + ]) + .oom_score_adj(500) + .build() + .expect("error in creating process config"), + ).build().context("failed to build spec")?; + + Ok(spec) +} + +fn process_oom_score_adj_test() -> TestResult { + let spec = test_result!(create_spec()); + test_inside_container(spec, &|_| Ok(())) +} + +pub fn get_process_oom_score_adj_test() -> TestGroup { + let mut process_oom_score_adj_test_group = TestGroup::new("process_oom_score_adj"); + + let test = Test::new("process_oom_score_adj", Box::new(process_oom_score_adj_test)); + process_oom_score_adj_test_group.add(vec![Box::new(test)]); + + process_oom_score_adj_test_group +} diff --git a/tests/contest/runtimetest/src/main.rs b/tests/contest/runtimetest/src/main.rs index cbb96226c..81af19fce 100644 --- a/tests/contest/runtimetest/src/main.rs +++ b/tests/contest/runtimetest/src/main.rs @@ -46,6 +46,7 @@ fn main() { "devices" => tests::validate_devices(&spec), "process_rlimits" => tests::validate_process_rlimits(&spec), "no_pivot" => tests::validate_rootfs(), + "process_oom_score_adj" => tests::validate_process_oom_score_adj(&spec), _ => eprintln!("error due to unexpected execute test name: {execute_test}"), } } diff --git a/tests/contest/runtimetest/src/tests.rs b/tests/contest/runtimetest/src/tests.rs index 57b9e7796..a3e1e6d66 100644 --- a/tests/contest/runtimetest/src/tests.rs +++ b/tests/contest/runtimetest/src/tests.rs @@ -629,3 +629,20 @@ pub fn validate_rootfs() { eprintln!("error due to rootfs want {expected:?}, got {entries:?}"); } } + +pub fn validate_process_oom_score_adj(spec: &Spec) { + let process = spec.process().as_ref().unwrap(); + let expected_value = process.oom_score_adj().unwrap(); + + let pid = std::process::id(); + let oom_score_adj_path = format!("/proc/{}/oom_score_adj", pid); + + let actual_value = fs::read_to_string(oom_score_adj_path) + .unwrap_or_else(|_| panic!("Failed to read file content")); + + if actual_value != expected_value.to_string() { + eprintln!( + "Unexpected oom_score_adj, expected: {expected_value} found: {actual_value}" + ); + } +}