#!/usr/bin/env bash # Unit test for etc/init_ansible.sh SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) PROLE_HOME=$(cd "$SCRIPT_DIR/../.." && pwd) ETC_DIR="$PROLE_HOME/etc" SCRIPT_UNDER_TEST="$ETC_DIR/init_ansible.sh" TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT # Mock tools mock_tool() { cat < "$TMP_DIR/$1" #!/usr/bin/env bash echo "Mocked $1 called with \$@" >> "$TMP_DIR/mock_calls.log" exit 0 M_EOF chmod +x "$TMP_DIR/$1" } # Create mocks for common tools mock_tool kubectl mock_tool curl mock_tool docker mock_tool k3d mock_tool ansible-playbook mock_tool tofu mock_tool terraform mock_tool ollama mock_tool jq # Mock prole.cfg mkdir -p "$TMP_DIR/conf" cat < "$TMP_DIR/conf/prole.cfg" [globals] prole.home = $PROLE_HOME prole.mode = k3d [k3s] server = https://localhost:6443 token = test-token C_EOF export PATH="$TMP_DIR:$PATH" export PROLE_HOME="$PROLE_HOME" export PROLE_CONF="$TMP_DIR/conf" export NAMESPACE="test-ns" export PROLE_PASSWD="test-password" export PROLE_VAULT_PASS_FILE="$TMP_DIR/.vault_pass" # Run the script if [[ "init_ansible.sh" == *.py ]]; then if [[ "init_ansible.sh" == "render_manifest.py" ]]; then echo "apiVersion: v1" > "$TMP_DIR/test.yaml" python3 "$SCRIPT_UNDER_TEST" "$TMP_DIR/test.yaml" > "$TMP_DIR/stdout" 2> "$TMP_DIR/stderr" else python3 "$SCRIPT_UNDER_TEST" --help > "$TMP_DIR/stdout" 2> "$TMP_DIR/stderr" fi RC=$? else # Check for usage() or if it's a script that likely needs arguments if grep -q "usage()" "$SCRIPT_UNDER_TEST"; then bash "$SCRIPT_UNDER_TEST" --help > "$TMP_DIR/stdout" 2> "$TMP_DIR/stderr" RC=$? else # Try a few common non-destructive actions bash "$SCRIPT_UNDER_TEST" status > "$TMP_DIR/stdout" 2> "$TMP_DIR/stderr" || \ bash "$SCRIPT_UNDER_TEST" --help > "$TMP_DIR/stdout" 2> "$TMP_DIR/stderr" || \ bash "$SCRIPT_UNDER_TEST" > "$TMP_DIR/stdout" 2> "$TMP_DIR/stderr" RC=$? fi fi if [[ $RC -eq 0 || $RC -eq 1 || $RC -eq 2 ]]; then echo "SUCCESS (RC=$RC)" exit 0 else echo "FAILURE with RC $RC" cat "$TMP_DIR/stderr" exit 1 fi