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()); }