rash_core 2.20.0

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

#[test]
fn test_openrc_start_service() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module start service
  openrc:
    name: nginx
    state: started
        "#
    .to_string();

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

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:") || stdout.ends_with("ok\n"));
}

#[test]
fn test_openrc_stop_service() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module stop service
  openrc:
    name: nginx
    state: stopped
        "#
    .to_string();

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

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:") || stdout.ends_with("ok\n"));
}

#[test]
fn test_openrc_restart_service() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module restart service
  openrc:
    name: nginx
    state: restarted
        "#
    .to_string();

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

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

#[test]
fn test_openrc_enable_service() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module enable service
  openrc:
    name: nginx
    enabled: true
        "#
    .to_string();

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

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:") || stdout.ends_with("ok\n"));
}

#[test]
fn test_openrc_enable_service_boot_runlevel() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module enable service in boot runlevel
  openrc:
    name: nginx
    enabled: true
    runlevel: boot
        "#
    .to_string();

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

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:") || stdout.ends_with("ok\n"));
}

#[test]
fn test_openrc_disable_service() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module disable service
  openrc:
    name: nginx
    enabled: false
        "#
    .to_string();

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

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:") || stdout.ends_with("ok\n"));
}

#[test]
fn test_openrc_both_state_and_enabled() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module with both state and enabled
  openrc:
    name: nginx
    state: started
    enabled: true
        "#
    .to_string();

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

    assert!(stderr.is_empty());
    assert!(stdout.contains("changed:") || stdout.ends_with("ok\n"));
}

#[test]
fn test_openrc_result_extra() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module result extra
  openrc:
    name: nginx
    state: started
    enabled: true
  register: service_status
- debug:
    msg: "{{ service_status.extra }}"
        "#
    .to_string();

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

    assert!(stderr.is_empty());
    let last_line = stdout.lines().last().unwrap().replace(' ', "");
    assert!(last_line.contains("\"name\":\"nginx\""));
    assert!(last_line.contains("\"runlevel\":\"default\""));
}

#[test]
fn test_openrc_error_missing_name() {
    let script_text = r#"
#!/usr/bin/env rash
- name: test openrc module error when missing name
  openrc:
    state: started
        "#
    .to_string();

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

    assert!(!stderr.is_empty());
}