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

#!/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 "$@"