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.
		
		
		
		
		
			
		
			
				
					
					
						
							145 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							145 lines
						
					
					
						
							4.0 KiB
						
					
					
				| #!/bin/bash | |
|  | |
| # File header documentation | |
| # @file run-deeplink-tests.sh | |
| # @brief Automated deeplink testing script using generated JSON files and ADB | |
| # @author Matthew Raymer | |
| # @date $(date +%Y-%m-%d) | |
| 
 | |
| # Color definitions | |
| BLUE='\033[0;34m' | |
| GREEN='\033[0;32m' | |
| RED='\033[0;31m' | |
| YELLOW='\033[1;33m' | |
| NC='\033[0m' | |
| 
 | |
| # Parse command line arguments | |
| TIMEOUT=10 | |
| TEST_MODE="execute"  # Default to execute mode | |
| 
 | |
| while getopts "t:p" opt; do | |
|     case $opt in | |
|         t) TIMEOUT=$OPTARG ;; | |
|         p) TEST_MODE="print" ;; | |
|         \?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;; | |
|     esac | |
| done | |
| 
 | |
| # Verify .generated directory exists | |
| if [ ! -d .generated ]; then | |
|     echo -e "${RED}Error: .generated directory not found${NC}" | |
|     echo "Please run the DID generation script first" | |
|     exit 1 | |
| fi | |
| 
 | |
| # Function to read and validate JSON files | |
| validate_json_files() { | |
|     local required_files=("test-env.sh" "claim_details.json" "contacts.json") | |
|     for file in "${required_files[@]}"; do | |
|         if [ ! -f ".generated/$file" ]; then | |
|             echo -e "${RED}Error: Missing required file .generated/$file${NC}" | |
|             return 1 | |
|         fi | |
|     done | |
|     return 0 | |
| } | |
| 
 | |
| # Function to URL encode string | |
| urlencode() { | |
|     local string="${1}" | |
|     local strlen=${#string} | |
|     local encoded="" | |
|     local pos c o | |
| 
 | |
|     for (( pos=0 ; pos<strlen ; pos++ )); do | |
|         c=${string:$pos:1} | |
|         case "$c" in | |
|             [-_.~a-zA-Z0-9:] ) o="${c}" ;; | |
|             * )               printf -v o '%%%02x' "'$c" | |
|         esac | |
|         encoded+="${o}" | |
|     done | |
|     echo "${encoded}" | |
| } | |
| 
 | |
| # Function to execute or print deeplink | |
| execute_deeplink() { | |
|     local url="$1" | |
|     local description="$2" | |
|      | |
|     echo -e "\n${BLUE}Testing: $description${NC}" | |
|     echo -e "${YELLOW}Original URL: $url${NC}" | |
|      | |
|     if [ "$TEST_MODE" = "print" ]; then | |
|         echo "---" | |
|     else | |
|         # Stop the app before executing the deep link | |
|         adb shell am force-stop app.timesafari | |
|         sleep 1  # Give it a moment to fully stop | |
|          | |
|         if adb shell am start -W -a android.intent.action.VIEW \ | |
|             -d "$url" \ | |
|             -c android.intent.category.BROWSABLE; then | |
|             echo -e "${GREEN}Success: Deeplink executed${NC}" | |
|             sleep "$TIMEOUT" | |
|         else | |
|             echo -e "${RED}Error: Failed to execute deeplink${NC}" | |
|             return 1 | |
|         fi | |
|     fi | |
| } | |
| 
 | |
| # Main test sequence | |
| main() { | |
|     # Validate environment and files | |
|     if ! validate_json_files; then | |
|         exit 1 | |
|     fi | |
|      | |
|     # Source environment variables | |
|     source .generated/test-env.sh | |
|      | |
|     # Load JSON data | |
|     CLAIM_DETAILS=$(cat .generated/claim_details.json) | |
|     CONTACTS=$(cat .generated/contacts.json) | |
|      | |
|     # 1. Claim-based deeplinks | |
|     execute_deeplink "timesafari://claim/$(jq -r .claim_id <<< "$CLAIM_DETAILS")" \ | |
|         "Testing claim view" | |
| 
 | |
|     execute_deeplink "timesafari://claim-cert/$(jq -r .claim_id <<< "$CLAIM_DETAILS")" \ | |
|         "Testing claim certificate view" | |
|          | |
|     execute_deeplink "timesafari://claim-add-raw/$(jq -r .claim_id <<< "$CLAIM_DETAILS")" \ | |
|         "Testing raw claim addition" | |
|      | |
|     # 2. DID-based deeplinks | |
|     execute_deeplink "timesafari://did/test" \ | |
|         "Testing DID view with test identifier" | |
|     /d | |
|     execute_deeplink "timesafari://did/$CONTACT1_DID" \ | |
|         "Testing DID view with contact DID" | |
|          | |
|     execute_deeplink "timesafari://contact-edit/$CONTACT1_DID" \ | |
|         "Testing contact editing" | |
|      | |
|     # 3. JSON-based deeplinks | |
|     execute_deeplink "timesafari://contacts/import?contacts=$(jq -r @uri <<< "$CONTACTS")" \ | |
|         "Testing contacts import" | |
|      | |
|     echo -e "\n${GREEN}All deeplink tests completed${NC}" | |
| } | |
| 
 | |
| # Check for adb if not in print mode | |
| if [ "$TEST_MODE" = "execute" ]; then | |
|     if ! command -v adb >/dev/null 2>&1; then | |
|         echo -e "${YELLOW}Warning: adb not found, switching to print mode${NC}" | |
|         TEST_MODE="print" | |
|     elif [ -z "$(adb devices | grep -v List | grep device)" ]; then | |
|         echo -e "${YELLOW}Warning: no devices/emulators found, switching to print mode${NC}" | |
|         TEST_MODE="print" | |
|     fi | |
| fi | |
| 
 | |
| # Execute main test sequence | |
| main  |