From 6a4e21647ca97a83fa039cbb2312d80b05188f97 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 | 46 +++++++++++++++++++ tests/contest/runtimetest/src/main.rs | 1 + tests/contest/runtimetest/src/tests.rs | 15 ++++++ 6 files changed, 68 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 e18f639a..8bc5000c 100644 --- a/tests/contest/contest/src/main.rs +++ b/tests/contest/contest/src/main.rs @@ -21,6 +21,7 @@ use crate::tests::linux_ns_itype::get_ns_itype_tests; 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_oom_score_adj::get_process_oom_score_adj_test; use crate::tests::process_rlimits::get_process_rlimits_test; use crate::tests::readonly_paths::get_ro_paths_test; use crate::tests::scheduler::get_scheduler_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 b3321015..20e3445d 100644 --- a/tests/contest/contest/src/tests/mod.rs +++ b/tests/contest/contest/src/tests/mod.rs @@ -11,6 +11,7 @@ pub mod linux_ns_itype; pub mod mounts_recursive; pub mod no_pivot; pub mod pidfile; +pub mod process_oom_score_adj; pub mod process_rlimits; pub mod readonly_paths; pub mod scheduler; 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 00000000..a83d7b47 --- /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 00000000..ac816780 --- /dev/null +++ b/tests/contest/contest/src/tests/process_oom_score_adj/process_oom_score_adj_test.rs @@ -0,0 +1,46 @@ +use anyhow::{Context, Ok, Result}; +use oci_spec::runtime::{ProcessBuilder, Spec, SpecBuilder}; +use rand::Rng; +use test_framework::{test_result, Test, TestGroup, TestResult}; + +use crate::utils::test_inside_container; + +fn generate_random_number() -> i32 { + let mut rng = rand::thread_rng(); + rng.gen_range(300..=700) +} + +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(generate_random_number()) + .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 cbb96226..81af19fc 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 57b9e779..03006ac7 100644 --- a/tests/contest/runtimetest/src/tests.rs +++ b/tests/contest/runtimetest/src/tests.rs @@ -629,3 +629,18 @@ 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.trim() != expected_value.to_string() { + eprintln!("Unexpected oom_score_adj, expected: {expected_value} found: {actual_value}"); + } +}