feat(scripts): add automated testing scripts for notification system
- Add daily-notification-test.sh for basic notification testing - Add daily-notification-test.py for Python-based testing - Add reboot-test.sh for automated reboot recovery testing - Include comprehensive error handling and logging - Add colored output for better user experience - Support for different testing scenarios and edge cases - Include ADB command validation and device connectivity checks Scripts provide: - Automated notification scheduling and verification - Reboot recovery testing with proper timing - Permission management testing - Comprehensive logging and error reporting - Cross-platform compatibility (bash and Python) These scripts enable automated testing of the complete notification system including boot receiver and app startup recovery mechanisms.
This commit is contained in:
213
scripts/daily-notification-test.sh
Executable file
213
scripts/daily-notification-test.sh
Executable file
@@ -0,0 +1,213 @@
|
||||
#!/bin/bash
|
||||
# DailyNotification Plugin Test Script
|
||||
# Usage: ./daily-notification-test.sh
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
APP_PACKAGE="com.timesafari.dailynotification"
|
||||
APP_ACTIVITY=".MainActivity"
|
||||
TEST_TIMEOUT=120 # 2 minutes
|
||||
LOG_TAG="DailyNotification"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
}
|
||||
|
||||
# Function to check if app is running
|
||||
check_app_running() {
|
||||
adb shell "ps | grep $APP_PACKAGE" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
# Function to wait for app to be ready
|
||||
wait_for_app() {
|
||||
print_status $YELLOW "⏳ Waiting for app to be ready..."
|
||||
sleep 3
|
||||
}
|
||||
|
||||
# Function to schedule notification (manual step)
|
||||
schedule_notification() {
|
||||
print_status $BLUE "📅 Scheduling test notification..."
|
||||
print_status $YELLOW "⚠️ Manual step: Schedule notification in app UI"
|
||||
print_status $YELLOW " - Tap 'Test Notification' button"
|
||||
print_status $YELLOW " - Wait for 'Notification scheduled' message"
|
||||
read -p "Press Enter when notification is scheduled..."
|
||||
}
|
||||
|
||||
# Function to check notification in logs
|
||||
check_notification_logs() {
|
||||
local timeout=$1
|
||||
local start_time=$(date +%s)
|
||||
|
||||
print_status $BLUE "👀 Monitoring logs for notification delivery..."
|
||||
|
||||
while [ $(($(date +%s) - start_time)) -lt $timeout ]; do
|
||||
if adb logcat -d | grep -q "Notification displayed successfully"; then
|
||||
print_status $GREEN "✅ Notification displayed successfully"
|
||||
return 0
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
|
||||
print_status $RED "❌ Notification not found in logs"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to run ADB command and check result
|
||||
run_adb_command() {
|
||||
local command=$1
|
||||
local description=$2
|
||||
|
||||
print_status $BLUE "🔧 $description"
|
||||
if adb $command; then
|
||||
print_status $GREEN "✅ $description - Success"
|
||||
return 0
|
||||
else
|
||||
print_status $RED "❌ $description - Failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main test function
|
||||
main() {
|
||||
print_status $BLUE "🧪 Starting DailyNotification Plugin Tests"
|
||||
print_status $BLUE "=========================================="
|
||||
|
||||
# Check ADB connection
|
||||
if ! adb devices | grep -q "device$"; then
|
||||
print_status $RED "❌ No Android device connected via ADB"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_status $GREEN "✅ ADB device connected"
|
||||
|
||||
# Test 1: App Launch
|
||||
print_status $BLUE "🚀 Test 1: App Launch"
|
||||
if run_adb_command "shell am start -n $APP_PACKAGE/$APP_ACTIVITY" "Launching app"; then
|
||||
wait_for_app
|
||||
if check_app_running; then
|
||||
print_status $GREEN "✅ App launched and running"
|
||||
else
|
||||
print_status $RED "❌ App failed to start"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test 2: Background Test
|
||||
print_status $BLUE "🔄 Test 2: Background Notification Test"
|
||||
schedule_notification
|
||||
|
||||
print_status $BLUE "📱 Sending app to background..."
|
||||
if run_adb_command "shell input keyevent KEYCODE_HOME" "Send to background"; then
|
||||
sleep 2
|
||||
if check_app_running; then
|
||||
print_status $GREEN "✅ App running in background"
|
||||
else
|
||||
print_status $RED "❌ App not running in background"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test 3: Wait for notification
|
||||
print_status $BLUE "⏰ Test 3: Waiting for notification ($TEST_TIMEOUT seconds)..."
|
||||
print_status $YELLOW "👀 Watch for notification in system panel"
|
||||
|
||||
if check_notification_logs $TEST_TIMEOUT; then
|
||||
print_status $GREEN "✅ Notification test passed"
|
||||
else
|
||||
print_status $RED "❌ Notification test failed or timed out"
|
||||
fi
|
||||
|
||||
# Test 4: Force Stop Test
|
||||
print_status $BLUE "🛑 Test 4: Force Stop Test (Expected Failure)"
|
||||
schedule_notification
|
||||
|
||||
print_status $BLUE "💀 Force stopping app..."
|
||||
if run_adb_command "shell am force-stop $APP_PACKAGE" "Force stop app"; then
|
||||
sleep 2
|
||||
if check_app_running; then
|
||||
print_status $RED "❌ App still running after force stop"
|
||||
exit 1
|
||||
else
|
||||
print_status $GREEN "✅ App successfully force stopped"
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_status $BLUE "⏰ Waiting for notification (should NOT appear)..."
|
||||
sleep 60
|
||||
|
||||
if adb logcat -d | grep -q "Notification displayed successfully"; then
|
||||
print_status $RED "❌ Notification appeared after force stop (unexpected)"
|
||||
else
|
||||
print_status $GREEN "✅ No notification after force stop (expected)"
|
||||
fi
|
||||
|
||||
# Test 5: Permission Check
|
||||
print_status $BLUE "🔐 Test 5: Permission Status Check"
|
||||
run_adb_command "shell \"dumpsys notification | grep -A5 -B5 $APP_PACKAGE\"" "Check notification settings"
|
||||
|
||||
# Test 6: Alarm Status Check
|
||||
print_status $BLUE "⏰ Test 6: Alarm Status Check"
|
||||
run_adb_command "shell \"dumpsys alarm | grep $APP_PACKAGE\"" "Check scheduled alarms"
|
||||
|
||||
print_status $GREEN "🎉 All tests completed!"
|
||||
print_status $BLUE "📊 Check the results above for any failures"
|
||||
}
|
||||
|
||||
# Help function
|
||||
show_help() {
|
||||
echo "DailyNotification Plugin Test Script"
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -h, --help Show this help message"
|
||||
echo " -v, --verbose Enable verbose output"
|
||||
echo " -t, --timeout Set test timeout in seconds (default: 120)"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Run all tests"
|
||||
echo " $0 -t 60 # Run with 60 second timeout"
|
||||
echo " $0 -v # Run with verbose output"
|
||||
}
|
||||
|
||||
# Parse command line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-v|--verbose)
|
||||
set -x
|
||||
shift
|
||||
;;
|
||||
-t|--timeout)
|
||||
TEST_TIMEOUT="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
print_status $RED "Unknown option: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Run main function
|
||||
main
|
||||
Reference in New Issue
Block a user