From 64b4f69847ac69d39fd7ac416983e30d3cce936b Mon Sep 17 00:00:00 2001 From: Peng Tao Date: Mon, 28 Sep 2020 14:03:55 +0800 Subject: [PATCH 1/2] agent: fix UT failures due to chdir Current working directory is a process level resource. We cannot call chdir in parallel from multiple threads, which would cause cwd confusion and result in UT failures. The agent code itself is correct that chdir is only called from spawned child init process. Well, there is one exception that it is also called in do_create_container() but it is safe to assume that containers are never created in parallel (at least for now). Fixes: #782 Signed-off-by: Peng Tao --- src/agent/Cargo.lock | 73 ++++++++++++++++++++++++++++++++- src/agent/rustjail/Cargo.toml | 3 ++ src/agent/rustjail/src/lib.rs | 3 ++ src/agent/rustjail/src/mount.rs | 6 +++ 4 files changed, 84 insertions(+), 1 deletion(-) diff --git a/src/agent/Cargo.lock b/src/agent/Cargo.lock index 6a7b14895..c1f2fb3fb 100644 --- a/src/agent/Cargo.lock +++ b/src/agent/Cargo.lock @@ -119,6 +119,15 @@ dependencies = [ "time", ] +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -305,6 +314,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b" +[[package]] +name = "lock_api" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.8" @@ -416,6 +434,30 @@ dependencies = [ "serde_json", ] +[[package]] +name = "parking_lot" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" +dependencies = [ + "cfg-if", + "cloudabi", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + [[package]] name = "path-absolutize" version = "1.2.1" @@ -448,7 +490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "059a34f111a9dee2ce1ac2826a68b24601c4298cfeb1a587c3cb493d5ab46f52" dependencies = [ "libc", - "nix 0.17.0", + "nix 0.18.0", ] [[package]] @@ -659,6 +701,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "serial_test", "slog", "slog-scope", "tempfile", @@ -713,6 +756,28 @@ dependencies = [ "serde", ] +[[package]] +name = "serial_test" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b15f74add9a9d4a3eb2bf739c9a427d266d3895b53d992c3a7c234fec2ff1f1" +dependencies = [ + "lazy_static", + "parking_lot", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65f59259be9fc1bf677d06cc1456e97756004a1a5a577480f71430bd7c17ba33" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "signal-hook" version = "0.1.15" @@ -780,6 +845,12 @@ dependencies = [ "slog", ] +[[package]] +name = "smallvec" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252" + [[package]] name = "spin" version = "0.5.2" diff --git a/src/agent/rustjail/Cargo.toml b/src/agent/rustjail/Cargo.toml index 6aaebe855..72b9e9bf6 100644 --- a/src/agent/rustjail/Cargo.toml +++ b/src/agent/rustjail/Cargo.toml @@ -26,3 +26,6 @@ dirs = "3.0.1" anyhow = "1.0.32" cgroups = { git = "https://github.com/kata-containers/cgroups-rs", branch = "stable-0.1.1"} tempfile = "3.1.0" + +[dev-dependencies] +serial_test = "0.5.0" diff --git a/src/agent/rustjail/src/lib.rs b/src/agent/rustjail/src/lib.rs index 6c14ed8a0..e71b7c643 100644 --- a/src/agent/rustjail/src/lib.rs +++ b/src/agent/rustjail/src/lib.rs @@ -13,6 +13,9 @@ #![allow(non_upper_case_globals)] // #![allow(unused_comparisons)] #[macro_use] +#[cfg(test)] +extern crate serial_test; +#[macro_use] extern crate serde; extern crate serde_json; #[macro_use] diff --git a/src/agent/rustjail/src/mount.rs b/src/agent/rustjail/src/mount.rs index 001101cc6..34d4ae188 100644 --- a/src/agent/rustjail/src/mount.rs +++ b/src/agent/rustjail/src/mount.rs @@ -968,6 +968,7 @@ mod tests { use tempfile::tempdir; #[test] + #[serial(chdir)] fn test_init_rootfs() { let stdout_fd = std::io::stdout().as_raw_fd(); let mut spec = oci::Spec::default(); @@ -1052,6 +1053,7 @@ mod tests { } #[test] + #[serial(chdir)] fn test_mount_cgroups() { let stdout_fd = std::io::stdout().as_raw_fd(); let mount = oci::Mount { @@ -1093,12 +1095,14 @@ mod tests { } #[test] + #[serial(chdir)] fn test_pivot_root() { let ret = pivot_rootfs("/tmp"); assert!(ret.is_ok(), "Should pass. Got: {:?}", ret); } #[test] + #[serial(chdir)] fn test_ms_move_rootfs() { let ret = ms_move_root("/abc"); assert!( @@ -1132,6 +1136,7 @@ mod tests { } #[test] + #[serial(chdir)] fn test_finish_rootfs() { let stdout_fd = std::io::stdout().as_raw_fd(); let mut spec = oci::Spec::default(); @@ -1167,6 +1172,7 @@ mod tests { } #[test] + #[serial(chdir)] fn test_mknod_dev() { skip_if_not_root!(); From b03d958e2fdcf7049744901d41828b2476aa7010 Mon Sep 17 00:00:00 2001 From: Peng Tao Date: Mon, 28 Sep 2020 14:16:11 +0800 Subject: [PATCH 2/2] gitignore: ignore agent service file As it is auto-generated. Signed-off-by: Peng Tao --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2c1c59761..1abf5ef3b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ **/target **/.vscode src/agent/src/version.rs +src/agent/kata-agent.service