rash_core 2.18.1

Declarative shell scripting using Rust native bindings
Documentation
use crate::cli::modules::run_test;

#[test]
fn test_grub_configure_check_mode() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Configure GRUB
  grub:
    action: configure
    kernel_params:
      - quiet
      - splash
    timeout: 5
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}

#[test]
fn test_grub_configure_with_config() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Configure GRUB with config dict
  grub:
    action: configure
    config:
      GRUB_CMDLINE_LINUX: "root=ZFS=rpool/ROOT/ubuntu"
      GRUB_TIMEOUT: "0"
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}

#[test]
fn test_grub_install_bios_check_mode() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Install GRUB for BIOS
  grub:
    action: install
    device: /dev/sda
    target: i386-pc
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}

#[test]
fn test_grub_install_uefi_check_mode() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Install GRUB for UEFI
  grub:
    action: install
    efi_directory: /boot/efi
    target: x86_64-efi
    removable: true
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}

#[test]
fn test_grub_install_missing_device() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Install GRUB without device for BIOS
  grub:
    action: install
    target: i386-pc
        "#
    .to_string();

    let args = ["--diff"];
    let (_stdout, stderr) = run_test(&script_text, &args);

    assert!(!stderr.is_empty());
    assert!(stderr.contains("device is required"));
}

#[test]
fn test_grub_install_missing_efi_directory() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Install GRUB without EFI directory for UEFI
  grub:
    action: install
    target: x86_64-efi
        "#
    .to_string();

    let args = ["--diff"];
    let (_stdout, stderr) = run_test(&script_text, &args);

    assert!(!stderr.is_empty());
    assert!(stderr.contains("efi_directory is required"));
}

#[test]
fn test_grub_update_check_mode() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Update GRUB
  grub:
    action: update
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}

#[test]
fn test_grub_configure_serial() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Configure serial console
  grub:
    action: configure
    terminal: serial
    serial: "--unit=0 --speed=115200"
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}

#[test]
fn test_grub_configure_no_changes() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Configure GRUB with no changes
  grub:
    action: configure
        "#
    .to_string();

    let args = ["--diff"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(
        stdout.contains("changed: false")
            || stdout.contains("changed:False")
            || !stdout.contains("changed: true")
    );
}

#[test]
fn test_grub_configure_disable_os_prober() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Disable os-prober
  grub:
    action: configure
    disable_os_prober: true
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}

#[test]
fn test_grub_configure_kernel_params_default() {
    let script_text = r#"
#!/usr/bin/env rash
- name: Configure kernel params default
  grub:
    action: configure
    kernel_params_default:
      - console=tty1
      - console=ttyS0,115200n8
        "#
    .to_string();

    let args = ["--diff", "--check"];
    let (stdout, stderr) = run_test(&script_text, &args);

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:"));
}