mirror of
https://github.com/tw93/Mole.git
synced 2026-02-04 14:26:46 +00:00
179 lines
4.6 KiB
Bash
179 lines
4.6 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
setup_file() {
|
|
PROJECT_ROOT="$(cd "${BATS_TEST_DIRNAME}/.." && pwd)"
|
|
export PROJECT_ROOT
|
|
|
|
ORIGINAL_HOME="${HOME:-}"
|
|
export ORIGINAL_HOME
|
|
|
|
HOME="$(mktemp -d "${BATS_TEST_DIRNAME}/tmp-cli-home.XXXXXX")"
|
|
export HOME
|
|
|
|
mkdir -p "$HOME"
|
|
}
|
|
|
|
teardown_file() {
|
|
rm -rf "$HOME"
|
|
if [[ -n "${ORIGINAL_HOME:-}" ]]; then
|
|
export HOME="$ORIGINAL_HOME"
|
|
fi
|
|
}
|
|
|
|
create_fake_utils() {
|
|
local dir="$1"
|
|
mkdir -p "$dir"
|
|
|
|
cat > "$dir/sudo" <<'SCRIPT'
|
|
#!/usr/bin/env bash
|
|
if [[ "$1" == "-n" || "$1" == "-v" ]]; then
|
|
exit 0
|
|
fi
|
|
exec "$@"
|
|
SCRIPT
|
|
chmod +x "$dir/sudo"
|
|
|
|
cat > "$dir/bioutil" <<'SCRIPT'
|
|
#!/usr/bin/env bash
|
|
if [[ "$1" == "-r" ]]; then
|
|
echo "Touch ID: 1"
|
|
exit 0
|
|
fi
|
|
exit 0
|
|
SCRIPT
|
|
chmod +x "$dir/bioutil"
|
|
}
|
|
|
|
setup() {
|
|
rm -rf "$HOME/.config"
|
|
mkdir -p "$HOME"
|
|
}
|
|
|
|
@test "mole --help prints command overview" {
|
|
run env HOME="$HOME" "$PROJECT_ROOT/mole" --help
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" == *"mo clean"* ]]
|
|
[[ "$output" == *"mo analyze"* ]]
|
|
}
|
|
|
|
@test "mole --version reports script version" {
|
|
expected_version="$(grep '^VERSION=' "$PROJECT_ROOT/mole" | head -1 | sed 's/VERSION=\"\(.*\)\"/\1/')"
|
|
run env HOME="$HOME" "$PROJECT_ROOT/mole" --version
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" == *"$expected_version"* ]]
|
|
}
|
|
|
|
@test "mole unknown command returns error" {
|
|
run env HOME="$HOME" "$PROJECT_ROOT/mole" unknown-command
|
|
[ "$status" -ne 0 ]
|
|
[[ "$output" == *"Unknown command: unknown-command"* ]]
|
|
}
|
|
|
|
@test "touchid status reports current configuration" {
|
|
run env HOME="$HOME" "$PROJECT_ROOT/mole" touchid status
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" == *"Touch ID"* ]]
|
|
}
|
|
|
|
@test "mo optimize command is recognized" {
|
|
run bash -c "grep -q '\"optimize\")' '$PROJECT_ROOT/mole'"
|
|
[ "$status" -eq 0 ]
|
|
}
|
|
|
|
@test "mo analyze binary is valid" {
|
|
if [[ -f "$PROJECT_ROOT/bin/analyze-go" ]]; then
|
|
[ -x "$PROJECT_ROOT/bin/analyze-go" ]
|
|
run file "$PROJECT_ROOT/bin/analyze-go"
|
|
[[ "$output" == *"Mach-O"* ]] || [[ "$output" == *"executable"* ]]
|
|
else
|
|
skip "analyze-go binary not built"
|
|
fi
|
|
}
|
|
|
|
@test "mo clean --debug creates debug log file" {
|
|
mkdir -p "$HOME/.config/mole"
|
|
run env HOME="$HOME" TERM="xterm-256color" MOLE_TEST_MODE=1 MO_DEBUG=1 "$PROJECT_ROOT/mole" clean --dry-run
|
|
[ "$status" -eq 0 ]
|
|
MOLE_OUTPUT="$output"
|
|
|
|
DEBUG_LOG="$HOME/.config/mole/mole_debug_session.log"
|
|
[ -f "$DEBUG_LOG" ]
|
|
|
|
run grep "Mole Debug Session" "$DEBUG_LOG"
|
|
[ "$status" -eq 0 ]
|
|
|
|
[[ "$MOLE_OUTPUT" =~ "Debug session log saved to" ]]
|
|
}
|
|
|
|
@test "mo clean without debug does not show debug log path" {
|
|
mkdir -p "$HOME/.config/mole"
|
|
run env HOME="$HOME" TERM="xterm-256color" MOLE_TEST_MODE=1 MO_DEBUG=0 "$PROJECT_ROOT/mole" clean --dry-run
|
|
[ "$status" -eq 0 ]
|
|
|
|
[[ "$output" != *"Debug session log saved to"* ]]
|
|
}
|
|
|
|
@test "mo clean --debug logs system info" {
|
|
mkdir -p "$HOME/.config/mole"
|
|
run env HOME="$HOME" TERM="xterm-256color" MOLE_TEST_MODE=1 MO_DEBUG=1 "$PROJECT_ROOT/mole" clean --dry-run
|
|
[ "$status" -eq 0 ]
|
|
|
|
DEBUG_LOG="$HOME/.config/mole/mole_debug_session.log"
|
|
|
|
run grep "User:" "$DEBUG_LOG"
|
|
[ "$status" -eq 0 ]
|
|
|
|
run grep "Architecture:" "$DEBUG_LOG"
|
|
[ "$status" -eq 0 ]
|
|
}
|
|
|
|
@test "touchid status reflects pam file contents" {
|
|
pam_file="$HOME/pam_test"
|
|
cat > "$pam_file" <<'EOF'
|
|
auth sufficient pam_opendirectory.so
|
|
EOF
|
|
|
|
run env MOLE_PAM_SUDO_FILE="$pam_file" "$PROJECT_ROOT/bin/touchid.sh" status
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" == *"not configured"* ]]
|
|
|
|
cat > "$pam_file" <<'EOF'
|
|
auth sufficient pam_tid.so
|
|
EOF
|
|
|
|
run env MOLE_PAM_SUDO_FILE="$pam_file" "$PROJECT_ROOT/bin/touchid.sh" status
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" == *"enabled"* ]]
|
|
}
|
|
|
|
@test "enable_touchid inserts pam_tid line in pam file" {
|
|
pam_file="$HOME/pam_enable"
|
|
cat > "$pam_file" <<'EOF'
|
|
auth sufficient pam_opendirectory.so
|
|
EOF
|
|
|
|
fake_bin="$HOME/fake-bin"
|
|
create_fake_utils "$fake_bin"
|
|
|
|
run env PATH="$fake_bin:$PATH" MOLE_PAM_SUDO_FILE="$pam_file" "$PROJECT_ROOT/bin/touchid.sh" enable
|
|
[ "$status" -eq 0 ]
|
|
grep -q "pam_tid.so" "$pam_file"
|
|
[[ -f "${pam_file}.mole-backup" ]]
|
|
}
|
|
|
|
@test "disable_touchid removes pam_tid line" {
|
|
pam_file="$HOME/pam_disable"
|
|
cat > "$pam_file" <<'EOF'
|
|
auth sufficient pam_tid.so
|
|
auth sufficient pam_opendirectory.so
|
|
EOF
|
|
|
|
fake_bin="$HOME/fake-bin-disable"
|
|
create_fake_utils "$fake_bin"
|
|
|
|
run env PATH="$fake_bin:$PATH" MOLE_PAM_SUDO_FILE="$pam_file" "$PROJECT_ROOT/bin/touchid.sh" disable
|
|
[ "$status" -eq 0 ]
|
|
run grep "pam_tid.so" "$pam_file"
|
|
[ "$status" -ne 0 ]
|
|
}
|