Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add kill test #2996

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions tests/contest/contest/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use crate::tests::hooks::get_hooks_tests;
use crate::tests::hostname::get_hostname_test;
use crate::tests::intel_rdt::get_intel_rdt_test;
use crate::tests::io_priority::get_io_priority_test;
use crate::tests::kill::get_kill_test;
use crate::tests::lifecycle::{ContainerCreate, ContainerLifecycle};
use crate::tests::linux_ns_itype::get_ns_itype_tests;
use crate::tests::mounts_recursive::get_mounts_recursive_test;
Expand Down Expand Up @@ -125,6 +126,7 @@ fn main() -> Result<()> {
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();
let kill = get_kill_test();

tm.add_test_group(Box::new(cl));
tm.add_test_group(Box::new(cc));
Expand Down Expand Up @@ -154,6 +156,7 @@ fn main() -> Result<()> {
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(kill));

tm.add_test_group(Box::new(io_priority_test));
tm.add_cleanup(Box::new(cgroups::cleanup_v1));
Expand Down
131 changes: 131 additions & 0 deletions tests/contest/contest/src/tests/kill/kill_test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
use anyhow::anyhow;
use test_framework::{Test, TestGroup, TestResult};

use crate::tests::lifecycle::ContainerLifecycle;

fn kill_with_empty_id_test() -> TestResult {
let mut container = ContainerLifecycle::new();

// kill with empty id
container.set_id("");
let result = match container.kill() {
TestResult::Failed(_) => TestResult::Passed,
TestResult::Passed => TestResult::Failed(anyhow!("Expected failure but got success")),
_ => TestResult::Failed(anyhow!("Unexpected test result")),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
TestResult::Passed => TestResult::Failed(anyhow!("Expected failure but got success")),
_ => TestResult::Failed(anyhow!("Unexpected test result")),
TestResult::Passed => TestResult::Failed(anyhow!("Expected killing container with empty id to fail, but was successful")),
_ => TestResult::Failed(anyhow!("Unexpected test result")),

Similarly update the failed messages in others as well.

};
container.delete();
result
}

fn kill_non_existed_container() -> TestResult {
let mut container = ContainerLifecycle::new();

// kill for non existed container
container.set_id("non-existent-container-id");
let result = match container.kill() {
TestResult::Failed(_) => TestResult::Passed,
TestResult::Passed => TestResult::Failed(anyhow!("Expected failure but got success")),
_ => TestResult::Failed(anyhow!("Unexpected test result")),
};
container.delete();
result
}
fn kill_created_container_test() -> TestResult {
let container = ContainerLifecycle::new();

// kill created container
match container.create() {
TestResult::Passed => {}
_ => return TestResult::Failed(anyhow!("Failed to create container")),
}

Check warning on line 40 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 40 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 40 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 40 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
let result = match container.kill() {
TestResult::Passed => TestResult::Passed,
TestResult::Failed(_) => {
TestResult::Failed(anyhow!("Expected success but got failure"))
}
_ => TestResult::Failed(anyhow!("Unexpected test result")),
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think in both these cases you can use test_result! macro to directly return the error without having to do manual match. Same for the cases below.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

container.kill() return TestResult. type.
So I think we don't have to use test_result macro.
Is it true?

container.delete();
result
}

fn kill_stopped_container_test() -> TestResult {
let container = ContainerLifecycle::new();

// kill stopped container
match container.create() {
TestResult::Passed => {}
_ => return TestResult::Failed(anyhow!("Failed to create container")),
}
match container.delete() {
TestResult::Passed => {}
_ => return TestResult::Failed(anyhow!("Failed to delete container")),
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think here you need to call container.start instead of delete, then wait a little, then call kill and finally delete.

match container.kill() {
TestResult::Failed(_) => TestResult::Passed,
TestResult::Passed => TestResult::Failed(anyhow!("Expected failure but got success")),
_ => TestResult::Failed(anyhow!("Unexpected test result")),

Check warning on line 67 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 67 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 67 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 67 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
}
}


fn kill_start_container_test() -> TestResult {
let container = ContainerLifecycle::new();

Check warning on line 74 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 74 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 74 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 74 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
// kill start container
match container.create() {
TestResult::Passed => {}
_ => return TestResult::Failed(anyhow!("Failed to recreate container")),
}

match container.start() {
TestResult::Passed => {}
TestResult::Failed(err) => {
return TestResult::Failed(anyhow!("Failed to start container: {:?}", err));
}
_ => unreachable!(),
}

Check warning on line 87 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 87 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 87 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 87 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
let result = match container.kill() {
TestResult::Passed => TestResult::Passed,
TestResult::Failed(_) => {
TestResult::Failed(anyhow!("Expected success but got failure"))
}
_ => TestResult::Failed(anyhow!("Unexpected test result")),
};
container.delete();
result

Check warning on line 96 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 96 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 96 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 96 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
}


pub fn get_kill_test() -> TestGroup {
let mut test_group = TestGroup::new("kill_container");

let kill_with_empty_id_test = Test::new(

Check warning on line 103 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 103 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 103 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 103 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
"kill_with_empty_id_test",
Box::new(kill_with_empty_id_test),
);
let kill_non_existed_container = Test::new(
"kill_non_existed_container",
Box::new(kill_non_existed_container)
);
let kill_created_container_test = Test::new(
"kill_created_container_test",
Box::new(kill_created_container_test)

Check warning on line 113 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 113 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 113 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 113 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
);
let kill_stopped_container_test = Test::new(
"kill_stopped_container_test",
Box::new(kill_stopped_container_test)

Check warning on line 117 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 117 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 117 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 117 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
);
let kill_start_container_test = Test::new(
"kill_start_container_test",
Box::new(kill_start_container_test)

Check warning on line 121 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 121 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 121 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 121 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
);
test_group.add(vec![
Box::new(kill_with_empty_id_test),
Box::new(kill_non_existed_container),

Check warning on line 125 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 125 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (x86_64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 125 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, gnu)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs

Check warning on line 125 in tests/contest/contest/src/tests/kill/kill_test.rs

View workflow job for this annotation

GitHub Actions / check (aarch64, musl)

Diff in /home/runner/work/youki/youki/tests/contest/contest/src/tests/kill/kill_test.rs
Box::new(kill_created_container_test),
Box::new(kill_stopped_container_test),
Box::new(kill_start_container_test)
]);
test_group
}
3 changes: 3 additions & 0 deletions tests/contest/contest/src/tests/kill/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mod kill_test;

pub use kill_test::get_kill_test;
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ impl ContainerLifecycle {
}
}

pub fn set_id(&mut self, id: &str) {
self.container_id = id.to_string();
}

pub fn get_id(&self) -> &str {
&self.container_id
}

pub fn create(&self) -> TestResult {
create::create(self.project_path.path(), &self.container_id).into()
}
Expand Down
1 change: 1 addition & 0 deletions tests/contest/contest/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ pub mod hooks;
pub mod hostname;
pub mod intel_rdt;
pub mod io_priority;
pub mod kill;
pub mod lifecycle;
pub mod linux_ns_itype;
pub mod mounts_recursive;
Expand Down
Loading