#!/bin/bash # Test script for runaway process killer # WARNING: This will stress your system! set -e echo "============================================" echo "Runaway Process Killer - Test Suite" echo "============================================" echo "" echo "WARNING: This will temporarily stress your CPU and RAM!" echo "" if [ "$EUID" -ne 0 ]; then echo "Error: Please run as root (sudo ./test.sh)" exit 1 fi # Check stress is installed if ! command -v stress &> /dev/null; then echo "Installing stress tool..." apt-get install -y -qq stress fi # Backup current config ORIG_CYCLES=$(grep "for.*cycles" /etc/monit/conf.d/cpu-killer | grep -oP '\d+(?= cycles)') echo "Current CPU threshold: ${ORIG_CYCLES} cycles" echo "Temporarily setting to 2 cycles for testing..." # Set to 2 cycles for testing sed -i "s/for ${ORIG_CYCLES} cycles/for 2 cycles/" /etc/monit/conf.d/cpu-killer monit reload sleep 2 echo "" echo "=== TEST 1: CPU Protection ===" echo "Starting CPU stress (expect kill in ~2 minutes)..." echo "" stress --cpu 4 --timeout 300 & STRESS_PID=$! sleep 2 START=$(date +%s) while kill -0 $STRESS_PID 2>/dev/null; do sleep 5 NOW=$(date +%s) ELAPSED=$((NOW - START)) if [ $ELAPSED -ge 180 ]; then echo "FAILED: CPU stress not killed after 3 minutes" kill $STRESS_PID 2>/dev/null || true break fi if ! pgrep -x stress > /dev/null 2>&1; then echo "PASSED: CPU stress killed after ${ELAPSED}s" break fi [ $((ELAPSED % 30)) -eq 0 ] && echo "[${ELAPSED}s] Stress still running..." done sleep 2 echo "" echo "=== TEST 2: RAM Protection ===" echo "Starting RAM stress (expect quick kill)..." echo "" stress --vm 4 --vm-bytes 4G --vm-keep --timeout 300 & STRESS_PID=$! sleep 2 START=$(date +%s) while pgrep -x stress > /dev/null 2>&1; do sleep 5 NOW=$(date +%s) ELAPSED=$((NOW - START)) if [ $ELAPSED -ge 120 ]; then echo "FAILED: RAM stress not killed after 2 minutes" pkill stress 2>/dev/null || true break fi if ! pgrep -x stress > /dev/null 2>&1; then echo "PASSED: RAM stress killed after ${ELAPSED}s" break fi MEM_FREE=$(free -m | awk '/Mem:/ {print $7}') echo "[${ELAPSED}s] Stress running, ${MEM_FREE}MB free" done # Restore original config echo "" echo "Restoring original CPU threshold (${ORIG_CYCLES} cycles)..." sed -i "s/for 2 cycles/for ${ORIG_CYCLES} cycles/" /etc/monit/conf.d/cpu-killer monit reload echo "" echo "============================================" echo "Tests Complete" echo "============================================"