diff --git a/cloud-hypervisor/tests/integration.rs b/cloud-hypervisor/tests/integration.rs index 0866249e0..b3613067e 100644 --- a/cloud-hypervisor/tests/integration.rs +++ b/cloud-hypervisor/tests/integration.rs @@ -109,12 +109,7 @@ fn _test_api_create_boot(target_api: &TargetApi, guest: &Guest) { assert!(target_api.remote_command("ping", None)); // Create the VM first - let cpu_count: u8 = 4; - let request_body = guest.api_create_body( - cpu_count, - direct_kernel_boot_path().to_str().unwrap(), - DIRECT_KERNEL_BOOT_CMDLINE, - ); + let request_body = guest.api_create_body(); let temp_config_path = guest.tmp_dir.as_path().join("config"); std::fs::write(&temp_config_path, request_body).unwrap(); @@ -124,12 +119,12 @@ fn _test_api_create_boot(target_api: &TargetApi, guest: &Guest) { // Then boot it assert!(target_api.remote_command("boot", None)); - thread::sleep(std::time::Duration::new(20, 0)); let r = std::panic::catch_unwind(|| { + guest.wait_vm_boot().unwrap(); // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); }); kill_child(&mut child); @@ -154,12 +149,7 @@ fn _test_api_shutdown(target_api: &TargetApi, guest: &Guest) { assert!(target_api.remote_command("ping", None)); // Create the VM first - let cpu_count: u8 = 4; - let request_body = guest.api_create_body( - cpu_count, - direct_kernel_boot_path().to_str().unwrap(), - DIRECT_KERNEL_BOOT_CMDLINE, - ); + let request_body = guest.api_create_body(); let temp_config_path = guest.tmp_dir.as_path().join("config"); std::fs::write(&temp_config_path, request_body).unwrap(); @@ -174,8 +164,8 @@ fn _test_api_shutdown(target_api: &TargetApi, guest: &Guest) { guest.wait_vm_boot().unwrap(); // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); // Sync and shutdown without powering off to prevent filesystem // corruption. @@ -194,8 +184,8 @@ fn _test_api_shutdown(target_api: &TargetApi, guest: &Guest) { guest.wait_vm_boot().unwrap(); // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); }); kill_child(&mut child); @@ -220,12 +210,8 @@ fn _test_api_delete(target_api: &TargetApi, guest: &Guest) { assert!(target_api.remote_command("ping", None)); // Create the VM first - let cpu_count: u8 = 4; - let request_body = guest.api_create_body( - cpu_count, - direct_kernel_boot_path().to_str().unwrap(), - DIRECT_KERNEL_BOOT_CMDLINE, - ); + let request_body = guest.api_create_body(); + let temp_config_path = guest.tmp_dir.as_path().join("config"); std::fs::write(&temp_config_path, request_body).unwrap(); let create_config = temp_config_path.as_os_str().to_str().unwrap(); @@ -239,8 +225,8 @@ fn _test_api_delete(target_api: &TargetApi, guest: &Guest) { guest.wait_vm_boot().unwrap(); // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); // Sync and shutdown without powering off to prevent filesystem // corruption. @@ -261,8 +247,8 @@ fn _test_api_delete(target_api: &TargetApi, guest: &Guest) { guest.wait_vm_boot().unwrap(); // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); }); kill_child(&mut child); @@ -288,12 +274,7 @@ fn _test_api_pause_resume(target_api: &TargetApi, guest: &Guest) { assert!(target_api.remote_command("ping", None)); // Create the VM first - let cpu_count: u8 = 4; - let request_body = guest.api_create_body( - cpu_count, - direct_kernel_boot_path().to_str().unwrap(), - DIRECT_KERNEL_BOOT_CMDLINE, - ); + let request_body = guest.api_create_body(); let temp_config_path = guest.tmp_dir.as_path().join("config"); std::fs::write(&temp_config_path, request_body).unwrap(); @@ -307,8 +288,8 @@ fn _test_api_pause_resume(target_api: &TargetApi, guest: &Guest) { let r = std::panic::catch_unwind(|| { // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); // We now pause the VM assert!(target_api.remote_command("pause", None)); @@ -336,7 +317,7 @@ fn _test_api_pause_resume(target_api: &TargetApi, guest: &Guest) { thread::sleep(std::time::Duration::new(2, 0)); // Now we should be able to SSH back in and get the right number of CPUs - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); + guest.validate_cpu_count(None); }); kill_child(&mut child); @@ -2522,6 +2503,7 @@ mod common_parallel { use std::process::Command; use block::ImageType; + use test_infra::GuestFactory; use crate::*; @@ -5961,7 +5943,9 @@ mod common_parallel { #[test] fn test_api_http_shutdown() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_http_api(&guest.tmp_dir); _test_api_shutdown(&target_api, &guest); @@ -5970,7 +5954,9 @@ mod common_parallel { #[test] fn test_api_http_delete() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_http_api(&guest.tmp_dir); _test_api_delete(&target_api, &guest); @@ -5979,7 +5965,9 @@ mod common_parallel { #[test] fn test_api_http_pause_resume() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_http_api(&guest.tmp_dir); _test_api_pause_resume(&target_api, &guest); @@ -5988,7 +5976,9 @@ mod common_parallel { #[test] fn test_api_http_create_boot() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_http_api(&guest.tmp_dir); _test_api_create_boot(&target_api, &guest); @@ -10105,12 +10095,7 @@ mod dbus_api { assert!(http_api.remote_command("ping", None)); // Create the VM first - let cpu_count: u8 = 4; - let request_body = guest.api_create_body( - cpu_count, - direct_kernel_boot_path().to_str().unwrap(), - DIRECT_KERNEL_BOOT_CMDLINE, - ); + let request_body = guest.api_create_body(); let temp_config_path = guest.tmp_dir.as_path().join("config"); std::fs::write(&temp_config_path, request_body).unwrap(); @@ -10125,8 +10110,8 @@ mod dbus_api { guest.wait_vm_boot().unwrap(); // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); // Sync and shutdown without powering off to prevent filesystem // corruption. @@ -10144,8 +10129,8 @@ mod dbus_api { guest.wait_vm_boot().unwrap(); // Check that the VM booted as expected - assert_eq!(guest.get_cpu_count().unwrap_or_default() as u8, cpu_count); - assert!(guest.get_total_memory().unwrap_or_default() > 480_000); + guest.validate_cpu_count(None); + guest.validate_memory(None); }); kill_child(&mut child); @@ -10157,7 +10142,9 @@ mod dbus_api { #[test] fn test_api_dbus_create_boot() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_dbus_api(&guest.tmp_dir); _test_api_create_boot(&target_api, &guest); @@ -10166,7 +10153,9 @@ mod dbus_api { #[test] fn test_api_dbus_shutdown() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_dbus_api(&guest.tmp_dir); _test_api_shutdown(&target_api, &guest); @@ -10175,7 +10164,9 @@ mod dbus_api { #[test] fn test_api_dbus_delete() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_dbus_api(&guest.tmp_dir); _test_api_delete(&target_api, &guest); @@ -10184,7 +10175,9 @@ mod dbus_api { #[test] fn test_api_dbus_pause_resume() { let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); - let guest = Guest::new(Box::new(disk_config)); + let guest = GuestFactory::new_regular_guest_factory() + .create_guest(Box::new(disk_config)) + .with_cpu(4); let target_api = TargetApi::new_dbus_api(&guest.tmp_dir); _test_api_pause_resume(&target_api, &guest); diff --git a/test_infra/src/lib.rs b/test_infra/src/lib.rs index 27b608c98..fba95ed97 100644 --- a/test_infra/src/lib.rs +++ b/test_infra/src/lib.rs @@ -1083,11 +1083,11 @@ impl Guest { ) } - pub fn api_create_body(&self, cpu_count: u8, kernel_path: &str, kernel_cmd: &str) -> String { + pub fn api_create_body(&self) -> String { let mut body = serde_json::json!({ "cpus": { - "boot_vcpus": cpu_count, - "max_vcpus": cpu_count, + "boot_vcpus": self.num_cpu, + "max_vcpus": self.num_cpu, }, "net": [ { @@ -1117,13 +1117,13 @@ impl Guest { .unwrap() .to_str() .unwrap(), - "cmdline": kernel_cmd, + "cmdline": self.kernel_cmdline.as_deref().unwrap(), "host_data": generate_host_data(), }); } else { body["payload"] = serde_json::json!({ - "kernel": kernel_path, - "cmdline": kernel_cmd, + "kernel": self.kernel_path.as_deref().unwrap(), + "cmdline": self.kernel_cmdline.as_deref().unwrap(), }); }