summaryrefslogtreecommitdiff
path: root/tests/package_installer.rs
blob: 622d378e1bf8a573b73acc8c4283966b6903c126 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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<Vec<Invocation>>,
}

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