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 "$@"
							 | 
						|
								
							 |