mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-10-25 11:17:28 +02:00 
			
		
		
		
	# Description of Changes Please provide a summary of the changes, including: - What was changed - Why the change was made - Any challenges encountered Closes #(issue_number) --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. --------- Co-authored-by: a <a>
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Function to check a single webpage
 | |
| check_webpage() {
 | |
|     local url=$(echo "$1" | tr -d '\r')  # Remove carriage returns
 | |
|     local base_url=$(echo "$2" | tr -d '\r')
 | |
|     local full_url="${base_url}${url}"
 | |
|     local timeout=10
 | |
|     echo -n "Testing $full_url ... "
 | |
|     
 | |
|     # Use curl to fetch the page with timeout
 | |
|     response=$(curl -s -w "\n%{http_code}" --max-time $timeout "$full_url")
 | |
|     if [ $? -ne 0 ]; then
 | |
|         echo "FAILED - Connection error or timeout $full_url "
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     # Split response into body and status code
 | |
|     HTTP_STATUS=$(echo "$response" | tail -n1)
 | |
|     BODY=$(echo "$response" | sed '$d')
 | |
| 
 | |
|     # Check HTTP status
 | |
|     if [ "$HTTP_STATUS" != "200" ]; then
 | |
|         echo "FAILED - HTTP Status: $HTTP_STATUS"
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     # Check if response contains HTML
 | |
|     if ! printf '%s' "$BODY" | grep -q "<!DOCTYPE html>\|<html"; then
 | |
|         echo "FAILED - Response is not HTML"
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     echo "OK"
 | |
|     return 0
 | |
| }
 | |
| 
 | |
| # Main function to test all URLs from the list
 | |
| test_all_urls() {
 | |
|     local url_file=$1
 | |
|     local base_url=${2:-"http://localhost:8080"}
 | |
|     local failed_count=0
 | |
|     local total_count=0
 | |
|     local start_time=$(date +%s)
 | |
| 
 | |
|     echo "Starting webpage tests..."
 | |
|     echo "Base URL: $base_url"
 | |
| 	echo "Number of lines: $(wc -l < "$url_file")"
 | |
|     echo "----------------------------------------"
 | |
| 	
 | |
|     while IFS= read -r url || [ -n "$url" ]; do
 | |
|         # Skip empty lines and comments
 | |
|         [[ -z "$url" || "$url" =~ ^#.*$ ]] && continue
 | |
|         
 | |
|         ((total_count++))
 | |
|         if ! check_webpage "$url" "$base_url"; then
 | |
|             ((failed_count++))
 | |
|         fi
 | |
|     done < "$url_file"
 | |
| 
 | |
|     local end_time=$(date +%s)
 | |
|     local duration=$((end_time - start_time))
 | |
|     
 | |
|     echo "----------------------------------------"
 | |
|     echo "Test Summary:"
 | |
|     echo "Total tests: $total_count"
 | |
|     echo "Failed tests: $failed_count"
 | |
|     echo "Passed tests: $((total_count - failed_count))"
 | |
|     echo "Duration: ${duration} seconds"
 | |
| 
 | |
|     return $failed_count
 | |
| }
 | |
| 
 | |
| # Print usage information
 | |
| usage() {
 | |
|     echo "Usage: $0 [-f url_file] [-b base_url]"
 | |
|     echo "Options:"
 | |
|     echo "  -f url_file   Path to file containing URLs to test (required)"
 | |
|     echo "  -b base_url   Base URL to prepend to test URLs (default: http://localhost:8080)"
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| # Main execution
 | |
| main() {
 | |
|     local url_file=""
 | |
|     local base_url="http://localhost:8080"
 | |
| 
 | |
|     # Parse command line options
 | |
|     while getopts ":f:b:h" opt; do
 | |
|         case $opt in
 | |
|             f) url_file="$OPTARG" ;;
 | |
|             b) base_url="$OPTARG" ;;
 | |
|             h) usage ;;
 | |
|             \?) echo "Invalid option -$OPTARG" >&2; usage ;;
 | |
|         esac
 | |
|     done
 | |
| 
 | |
|     # Check if URL file is provided
 | |
|     if [ -z "$url_file" ]; then
 | |
|         echo "Error: URL file is required"
 | |
|         usage
 | |
|     fi
 | |
| 
 | |
|     # Check if URL file exists
 | |
|     if [ ! -f "$url_file" ]; then
 | |
|         echo "Error: URL list file not found: $url_file"
 | |
|         exit 1
 | |
|     fi
 | |
|     
 | |
|     # Run tests using the URL list
 | |
|     if test_all_urls "$url_file" "$base_url"; then
 | |
|         echo "All webpage tests passed!"
 | |
|         exit 0
 | |
|     else
 | |
|         echo "Some webpage tests failed!"
 | |
|         exit 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # Run main if script is executed directly
 | |
| if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
 | |
|     main "$@"
 | |
| fi |