You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
264 lines
7.6 KiB
264 lines
7.6 KiB
#!/bin/bash
|
|
|
|
# Comprehensive Test Suite for Daily Notification Plugin v2
|
|
# Tests all P0 production-grade features
|
|
# Author: Matthew Raymer
|
|
# Date: 2025-10-14
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Test configuration
|
|
APP_PACKAGE="com.timesafari.dailynotification"
|
|
APP_ACTIVITY="com.timesafari.dailynotification.MainActivity"
|
|
TEST_TIMEOUT=30
|
|
NOTIFICATION_DELAY=5 # 5 minutes for testing
|
|
|
|
# Test results tracking
|
|
TESTS_PASSED=0
|
|
TESTS_FAILED=0
|
|
TESTS_TOTAL=0
|
|
|
|
# Logging functions
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[PASS]${NC} $1"
|
|
((TESTS_PASSED++))
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[FAIL]${NC} $1"
|
|
((TESTS_FAILED++))
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
# Test execution function
|
|
run_test() {
|
|
local test_name="$1"
|
|
local test_command="$2"
|
|
local expected_result="$3"
|
|
|
|
((TESTS_TOTAL++))
|
|
log_info "Running: $test_name"
|
|
|
|
if eval "$test_command"; then
|
|
log_success "$test_name - $expected_result"
|
|
return 0
|
|
else
|
|
log_error "$test_name - Expected: $expected_result"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Check if device is connected
|
|
check_device() {
|
|
log_info "Checking device connection..."
|
|
if ! adb devices | grep -q "device$"; then
|
|
log_error "No Android device connected"
|
|
exit 1
|
|
fi
|
|
log_success "Device connected"
|
|
}
|
|
|
|
# Check if app is installed
|
|
check_app_installed() {
|
|
log_info "Checking if app is installed..."
|
|
if ! adb shell pm list packages | grep -q "$APP_PACKAGE"; then
|
|
log_error "App not installed: $APP_PACKAGE"
|
|
exit 1
|
|
fi
|
|
log_success "App installed: $APP_PACKAGE"
|
|
}
|
|
|
|
# Test 2.1: Channel Management
|
|
test_channel_management() {
|
|
log_info "=== Test 2.1: Channel Management ==="
|
|
|
|
# Check if channel exists
|
|
run_test "Channel Exists" \
|
|
"adb shell 'dumpsys notification | grep -q daily_default'" \
|
|
"Channel daily_default exists"
|
|
|
|
# Check channel importance
|
|
run_test "Channel Importance" \
|
|
"adb shell 'dumpsys notification | grep -A5 daily_default | grep -q mImportance=4'" \
|
|
"Channel has proper importance level"
|
|
|
|
# Check channel features
|
|
run_test "Channel Sound" \
|
|
"adb shell 'dumpsys notification | grep -A5 daily_default | grep -q mSound='" \
|
|
"Channel has sound enabled"
|
|
|
|
run_test "Channel Lights" \
|
|
"adb shell 'dumpsys notification | grep -A5 daily_default | grep -q mLights=true'" \
|
|
"Channel has lights enabled"
|
|
|
|
run_test "Channel Vibration" \
|
|
"adb shell 'dumpsys notification | grep -A5 daily_default | grep -q mVibrationEnabled=true'" \
|
|
"Channel has vibration enabled"
|
|
}
|
|
|
|
# Test 2.2: PendingIntent & Exact Alarms
|
|
test_pendingintent_exact_alarms() {
|
|
log_info "=== Test 2.2: PendingIntent & Exact Alarms ==="
|
|
|
|
# Check exact alarm permission
|
|
run_test "Exact Alarm Permission" \
|
|
"adb shell 'dumpsys alarm | grep -q SCHEDULE_EXACT_ALARM.*10192'" \
|
|
"App has exact alarm permission"
|
|
|
|
# Check scheduled alarms
|
|
run_test "Alarms Scheduled" \
|
|
"adb shell 'dumpsys alarm | grep timesafari | wc -l | grep -q [0-9]'" \
|
|
"Alarms are scheduled"
|
|
|
|
# Check alarm type
|
|
run_test "RTC_WAKEUP Alarms" \
|
|
"adb shell 'dumpsys alarm | grep timesafari | grep -q RTC_WAKEUP'" \
|
|
"Alarms use RTC_WAKEUP type"
|
|
|
|
# Check exact timing
|
|
run_test "Exact Timing" \
|
|
"adb shell 'dumpsys alarm | grep timesafari -A2 | grep -q window=0'" \
|
|
"Alarms use exact timing (window=0)"
|
|
|
|
# Check PendingIntent records
|
|
run_test "PendingIntent Records" \
|
|
"adb shell 'dumpsys alarm | grep timesafari | grep -q PendingIntent'" \
|
|
"PendingIntent records exist"
|
|
}
|
|
|
|
# Test 3.1: JIT Freshness Re-check
|
|
test_jit_freshness() {
|
|
log_info "=== Test 3.1: JIT Freshness Re-check ==="
|
|
|
|
# Start monitoring logs
|
|
log_info "Starting log monitoring for JIT freshness..."
|
|
|
|
# Launch app to trigger JIT check
|
|
adb shell am start -n "$APP_PACKAGE/$APP_ACTIVITY" > /dev/null 2>&1
|
|
sleep 2
|
|
|
|
# Check for JIT freshness logs
|
|
run_test "JIT Freshness Check" \
|
|
"adb logcat -d | grep -q 'Content is fresh.*skipping JIT refresh'" \
|
|
"JIT freshness check is working"
|
|
|
|
# Check for TTL enforcer logs
|
|
run_test "TTL Enforcer" \
|
|
"adb logcat -d | grep -q 'DailyNotificationTTLEnforcer'" \
|
|
"TTL enforcer is active"
|
|
}
|
|
|
|
# Test 4.1: Recovery Coexistence
|
|
test_recovery_coexistence() {
|
|
log_info "=== Test 4.1: Recovery Coexistence ==="
|
|
|
|
# Check RecoveryManager logs
|
|
run_test "RecoveryManager Active" \
|
|
"adb logcat -d | grep -q 'RecoveryManager'" \
|
|
"RecoveryManager is active"
|
|
|
|
# Check app startup recovery
|
|
run_test "App Startup Recovery" \
|
|
"adb logcat -d | grep -q 'APP_STARTUP'" \
|
|
"App startup recovery is working"
|
|
|
|
# Check alarm count after recovery
|
|
local alarm_count=$(adb shell 'dumpsys alarm | grep timesafari | wc -l')
|
|
run_test "Alarms After Recovery" \
|
|
"test $alarm_count -gt 0" \
|
|
"Alarms exist after recovery ($alarm_count alarms)"
|
|
}
|
|
|
|
# Test notification scheduling
|
|
test_notification_scheduling() {
|
|
log_info "=== Test: Notification Scheduling ==="
|
|
|
|
# Launch app
|
|
adb shell am start -n "$APP_PACKAGE/$APP_ACTIVITY" > /dev/null 2>&1
|
|
sleep 2
|
|
|
|
# Check if we can schedule a notification
|
|
run_test "Notification Scheduling" \
|
|
"adb shell 'dumpsys alarm | grep timesafari | wc -l | grep -q [0-9]'" \
|
|
"Notifications can be scheduled"
|
|
|
|
# Get next notification time
|
|
local next_notification=$(adb shell "dumpsys alarm | grep 'timesafari.*NOTIFICATION' -A2 | grep 'origWhen=' | head -1 | sed 's/.*origWhen=//' | sed 's/ window.*//'")
|
|
log_info "Next notification scheduled for: $next_notification"
|
|
}
|
|
|
|
# Test comprehensive status
|
|
test_comprehensive_status() {
|
|
log_info "=== Test: Comprehensive Status ==="
|
|
|
|
# Launch app and check status
|
|
adb shell am start -n "$APP_PACKAGE/$APP_ACTIVITY" > /dev/null 2>&1
|
|
sleep 2
|
|
|
|
# Check if app is running
|
|
run_test "App Running" \
|
|
"adb shell 'ps | grep -q $APP_PACKAGE'" \
|
|
"App is running"
|
|
|
|
# Check notification permissions
|
|
run_test "Notification Permissions" \
|
|
"adb shell 'dumpsys package $APP_PACKAGE | grep -q POST_NOTIFICATIONS'" \
|
|
"App has notification permissions"
|
|
}
|
|
|
|
# Main test execution
|
|
main() {
|
|
echo "=========================================="
|
|
echo "Daily Notification Plugin - Comprehensive Test Suite v2"
|
|
echo "=========================================="
|
|
echo "Testing all P0 production-grade features"
|
|
echo "Date: $(date)"
|
|
echo "=========================================="
|
|
|
|
# Pre-flight checks
|
|
check_device
|
|
check_app_installed
|
|
|
|
# Run all tests
|
|
test_channel_management
|
|
test_pendingintent_exact_alarms
|
|
test_jit_freshness
|
|
test_recovery_coexistence
|
|
test_notification_scheduling
|
|
test_comprehensive_status
|
|
|
|
# Test results summary
|
|
echo "=========================================="
|
|
echo "TEST RESULTS SUMMARY"
|
|
echo "=========================================="
|
|
echo "Total Tests: $TESTS_TOTAL"
|
|
echo -e "Passed: ${GREEN}$TESTS_PASSED${NC}"
|
|
echo -e "Failed: ${RED}$TESTS_FAILED${NC}"
|
|
|
|
if [ $TESTS_FAILED -eq 0 ]; then
|
|
echo -e "${GREEN}ALL TESTS PASSED! 🎉${NC}"
|
|
echo "P0 features are working correctly"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}SOME TESTS FAILED${NC}"
|
|
echo "Please review failed tests and fix issues"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Run main function
|
|
main "$@"
|
|
|