Signed-off-by: Christoph Heiss <c.he...@proxmox.com> --- proxmox-post-hook/src/main.rs | 126 ++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+)
diff --git a/proxmox-post-hook/src/main.rs b/proxmox-post-hook/src/main.rs index 9e5680b..dc25a79 100644 --- a/proxmox-post-hook/src/main.rs +++ b/proxmox-post-hook/src/main.rs @@ -370,3 +370,129 @@ fn main() -> ExitCode { } } } + +#[cfg(test)] +mod tests { + use crate::PostHookInfo; + use proxmox_installer_common::setup::{ProxmoxProduct, SetupInfo}; + + #[test] + fn dpkg_query_parsing_returns_correct_kernel() { + const OUTPUT: &str = r#" +ii |all|proxmox-kernel-6.8 + +un ||proxmox-kernel-6.8.8-2-pve +foobarinvalidentry +ii |amd64|proxmox-kernel-6.8.8-2-pve-signed + "#; + + assert_eq!( + PostHookInfo::parse_dpkg_query_kernel_output(OUTPUT, "amd64") + .as_deref() + .unwrap(), + "proxmox-kernel-6.8.8-2-pve-signed" + ); + } + + #[test] + fn dpkg_query_parsing_returns_error_on_invalid_arch() { + const OUTPUT: &str = r#" +ii |all|proxmox-kernel-6.8 + +un ||proxmox-kernel-6.8.8-2-pve +foobarinvalidentry +ii |amd64|proxmox-kernel-6.8.8-2-pve-signed + "#; + + assert_eq!( + PostHookInfo::parse_dpkg_query_kernel_output(OUTPUT, "arm64") + .as_deref() + .unwrap_err() + .to_string(), + "failed to find kernel package" + ); + } + + #[test] + fn correctly_parses_pveversion_output() { + const OUTPUT: &str = "pve-manager/8.2.4/faa83925c9641325 (running kernel: 6.8.8-2-pve)\n"; + + assert_eq!( + PostHookInfo::gather_product_version(&SetupInfo::mocked(), &|_| Ok(OUTPUT.to_owned())) + .as_deref() + .unwrap(), + "pve-manager/8.2.4/faa83925c9641325" + ); + } + + #[test] + fn fails_to_parse_invalid_pveversion_output() { + assert_eq!( + PostHookInfo::gather_product_version(&SetupInfo::mocked(), &|_| Ok("".to_owned())) + .as_deref() + .unwrap_err() + .to_string(), + "failed to parse `pveversion` output" + ); + + assert_eq!( + PostHookInfo::gather_product_version(&SetupInfo::mocked(), &|_| Ok( + "invalid".to_owned() + )) + .as_deref() + .unwrap_err() + .to_string(), + "failed to parse `pveversion` output" + ); + } + + #[test] + fn correctly_parses_pmgversion_output() { + const OUTPUT: &str = "pmg-api/8.1.2/fd71566ae016 (running kernel: 6.8.8-1-pve)\n"; + + let mut setup_info = SetupInfo::mocked(); + setup_info.config.product = ProxmoxProduct::PMG; + assert_eq!( + PostHookInfo::gather_product_version(&setup_info, &|_| Ok(OUTPUT.to_owned())) + .as_deref() + .unwrap(), + "pmg-api/8.1.2/fd71566ae016" + ); + } + + #[test] + fn correctly_parses_proxmox_backup_manager_version_output() { + const OUTPUT: &str = r#"[{"Arch":"amd64","Description":"Proxmox Backup Server daemon with tools and GUI\n This package contains the Proxmox Backup Server daemons and related\n tools. This includes a web-based graphical user interface.","ExtraInfo":"running version: 3.2.7","OldVersion":"3.2.7-1","Origin":"Proxmox","Package":"proxmox-backup-server","Priority":"optional","Section":"admin","Title":"Proxmox Backup Server daemon with tools and GUI","Version":"3.2.7-1"}]"#; + + let mut setup_info = SetupInfo::mocked(); + setup_info.config.product = ProxmoxProduct::PBS; + + assert_eq!( + PostHookInfo::gather_product_version(&setup_info, &|_| Ok(OUTPUT.to_owned())) + .as_deref() + .unwrap(), + "proxmox-backup-server/3.2.7-1" + ); + } + + #[test] + fn fails_to_parse_invalid_proxmox_backup_manager_version_output() { + let mut setup_info = SetupInfo::mocked(); + setup_info.config.product = ProxmoxProduct::PBS; + + assert_eq!( + PostHookInfo::gather_product_version(&setup_info, &|_| Ok("".to_owned())) + .as_deref() + .unwrap_err() + .to_string(), + "failed to parse json output from 'proxmox-backup-manager'" + ); + assert_eq!( + PostHookInfo::gather_product_version(&setup_info, &|_| Ok("invalid".to_owned())) + .as_deref() + .unwrap_err() + .to_string(), + "failed to parse json output from 'proxmox-backup-manager'" + ); + } +} -- 2.45.1 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel