From 915fcc5efbf45d8adee870cfbe2a25e466454a2f Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 12 Aug 2026 01:06:37 +0000 Subject: Isolate Hasher behind typed installer adapter --- tests/package_installer.rs | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 tests/package_installer.rs (limited to 'tests/package_installer.rs') diff --git a/tests/package_installer.rs b/tests/package_installer.rs new file mode 100644 index 0000000..622d378 --- /dev/null +++ b/tests/package_installer.rs @@ -0,0 +1,72 @@ +use std::path::PathBuf; + +use alt_controller_image::hasher::{CommandRunner, HasherInstaller, Invocation}; +use alt_controller_image::package_installer::{AptConfig, PackageInstaller, PackageRequest}; + +#[derive(Default)] +struct RecordingRunner { + invocations: std::cell::RefCell>, +} + +impl CommandRunner for RecordingRunner { + fn run(&self, invocation: Invocation) -> anyhow::Result<()> { + self.invocations.borrow_mut().push(invocation); + Ok(()) + } +} + +#[test] +fn hasher_installer_passes_typed_request_to_initroot_and_install_commands() { + let runner = RecordingRunner::default(); + let installer = HasherInstaller::new(runner); + let request = PackageRequest::new( + "/build/work", + AptConfig::new("profiles/apt.conf").expect("valid apt config path"), + ["basesystem", "make-initrd"], + ["^kernel-image-rt$"], + ) + .expect("valid package request"); + + installer.install(&request).expect("installation succeeds"); + let invocations = &installer.runner().invocations.borrow(); + + assert_eq!( + invocations.as_slice(), + [ + Invocation::new( + "hsh", + [ + "--mountpoints=/proc", + "--initroot-only", + "--apt-config", + "profiles/apt.conf", + "--workdir", + "/build/work", + ], + ), + Invocation::new( + "hsh-install", + [ + "--mountpoints=/proc", + "--workdir", + "/build/work", + "^kernel-image-rt$", + "basesystem", + "make-initrd", + ], + ), + ] + ); +} + +#[test] +fn package_request_rejects_empty_packages_and_unsafe_apt_config_paths() { + assert!(AptConfig::new("").is_err()); + assert!(PackageRequest::new( + PathBuf::from("work"), + AptConfig::new("profiles/apt.conf").expect("valid apt config"), + ["basesystem", ""], + std::iter::empty::<&str>(), + ) + .is_err()); +} -- cgit v1.2.3