use assert_cmd::Command;
use predicates::prelude::*;
use std::fs;
fn get_package_version() -> String {
let manifest_dir = env!("CARGO_MANIFEST_DIR");
let cargo_toml = fs::read_to_string(format!("{manifest_dir}/Cargo.toml"))
.expect("Failed to read Cargo.toml");
for line in cargo_toml.lines() {
let line = line.trim();
if line.starts_with("version = \"") {
let version = line
.trim_start_matches("version = \"")
.trim_end_matches('"');
return version.to_string();
}
}
panic!("Could not find version in Cargo.toml");
}
#[test]
fn test_cli_help() {
let mut cmd = Command::cargo_bin("kernel-builder").unwrap();
cmd.arg("--help")
.assert()
.success()
.stdout(predicate::str::contains("kernel-builder"));
}
#[test]
fn test_cli_version() {
let expected_version = get_package_version();
let mut cmd = Command::cargo_bin("kernel-builder").unwrap();
cmd.arg("--version")
.assert()
.success()
.stdout(predicate::str::contains(&expected_version));
}
mod kernel_paths_tests {
use kernel_builder::consts::KernelPaths;
#[test]
fn test_kernel_paths_backup_path() {
let paths = KernelPaths::new(
std::path::PathBuf::from("/boot/vmlinuz-linux"),
None,
std::path::PathBuf::from("/usr/src/.config"),
std::path::PathBuf::from("/usr/src"),
);
let backup = paths.backup_path(&paths.kernel_image, "-prev");
assert_eq!(backup.to_string_lossy(), "/boot/vmlinuz-linux-prev");
}
#[test]
fn test_kernel_paths_backup_path_initramfs() {
let paths = KernelPaths::new(
std::path::PathBuf::from("/boot/vmlinuz-linux"),
Some(std::path::PathBuf::from("/boot/initramfs-linux.img")),
std::path::PathBuf::from("/usr/src/.config"),
std::path::PathBuf::from("/usr/src"),
);
let backup = paths.backup_path(paths.initramfs.as_ref().unwrap(), "-prev.img");
assert_eq!(
backup.to_string_lossy(),
"/boot/initramfs-linux.img-prev.img"
);
}
}
mod config_validation_tests {
use kernel_builder::KBConfig;
use std::path::PathBuf;
use tempfile::TempDir;
#[test]
fn test_config_validates_missing_source_dir() {
let config = KBConfig {
kernel_file_path: PathBuf::from("/boot/vmlinuz-linux"),
initramfs_file_path: None,
kernel_config_file_path: PathBuf::from("/usr/src/.config"),
kernel_src: PathBuf::from("/nonexistent/path"),
keep_last_kernel: false,
last_kernel_suffix: None,
cleanup_keep_count: None,
};
let result = config.validate();
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("does not exist"));
}
#[test]
fn test_config_validates_existing_source_dir() {
let temp_dir = TempDir::new().unwrap();
let config = KBConfig {
kernel_file_path: PathBuf::from("/boot/vmlinuz-linux"),
initramfs_file_path: None,
kernel_config_file_path: PathBuf::from("/usr/src/.config"),
kernel_src: temp_dir.path().to_path_buf(),
keep_last_kernel: false,
last_kernel_suffix: None,
cleanup_keep_count: None,
};
let result = config.validate();
assert!(result.is_ok());
}
}