Replace with B2 archive contents
This commit is contained in:
105
scripts/test.sh
Executable file
105
scripts/test.sh
Executable file
@@ -0,0 +1,105 @@
|
||||
#!/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 "============================================"
|
||||
Reference in New Issue
Block a user