awebsite/scripts/test_site.sh

165 lines
4.5 KiB
Bash
Raw Normal View History

2025-10-06 15:04:55 +02:00
#!/bin/bash
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}Starting Zola site testing...${NC}"
# Function to clean up background processes
cleanup() {
echo -e "\n${YELLOW}Cleaning up...${NC}"
# Kill any running zola processes
pkill -f "zola serve" 2>/dev/null
exit
}
# Set up trap for cleanup
trap cleanup SIGINT SIGTERM
# Check if zola is installed
if ! command -v zola &> /dev/null; then
echo -e "${RED}Error: Zola is not installed. Please install it first.${NC}"
exit 1
fi
# Test 1: Check zola build
echo -e "\n${YELLOW}Test 1: Checking if site builds successfully...${NC}"
if zola build; then
echo -e "${GREEN}✓ Site builds successfully${NC}"
else
echo -e "${RED}✗ Site build failed${NC}"
exit 1
fi
# Test 2: Check for broken links
echo -e "\n${YELLOW}Test 2: Starting server and checking for broken links...${NC}"
zola serve &
SERVER_PID=$!
# Wait for server to start
sleep 2
# Use curl to check if server is running
if ! curl -s http://127.0.0.1:1111 > /dev/null; then
echo -e "${RED}✗ Server is not responding${NC}"
kill $SERVER_PID
exit 1
fi
echo -e "${GREEN}✓ Server is responding${NC}"
# Extract and check all links using curl
echo -e "${YELLOW}Checking for broken links...${NC}"
# Create temp files for storing links
INTERNAL_LINKS=$(mktemp)
EXTERNAL_LINKS=$(mktemp)
# Get the site content and extract all links
curl -s http://127.0.0.1:1111 | grep -o 'href="[^"]*"' | sed 's/href="\([^"]*\)"/\1/g' > "$INTERNAL_LINKS"
# Add other important pages to check
echo "/de" >> "$INTERNAL_LINKS"
echo "/atom.xml" >> "$INTERNAL_LINKS"
echo "/tags" >> "$INTERNAL_LINKS"
echo "/project" >> "$INTERNAL_LINKS"
# Also check project pages and other content
for page in $(curl -s http://127.0.0.1:1111/project/ | grep -o 'href="[^"]*"' | sed 's/href="\([^"]*\)"/\1/g'); do
echo "$page" >> "$INTERNAL_LINKS"
done
# Function to check a URL with proper user agent and timeout
check_url() {
local url="$1"
local timeout=10
curl -s -f -o /dev/null \
--max-time "$timeout" \
-H "User-Agent: Mozilla/5.0 (compatible; LinkChecker/1.0)" \
"$url"
return $?
}
echo -e "${YELLOW}Checking internal links...${NC}"
BROKEN_INTERNAL=0
while read -r link; do
# Skip empty lines and external links
[[ -z "$link" ]] && continue
if [[ "$link" =~ ^(http|https|mailto|tel): ]]; then
echo "$link" >> "$EXTERNAL_LINKS"
continue
fi
# Construct full URL for relative links
url="http://127.0.0.1:1111${link}"
# Check the link
if check_url "$url"; then
echo -e "${GREEN}✓ Valid internal link: $link${NC}"
else
echo -e "${RED}✗ Broken internal link: $link${NC}"
BROKEN_INTERNAL=$((BROKEN_INTERNAL + 1))
fi
done < "$INTERNAL_LINKS"
echo -e "\n${YELLOW}Checking external links...${NC}"
BROKEN_EXTERNAL=0
while read -r url; do
# Skip empty lines and non-http(s) links
[[ -z "$url" || ! "$url" =~ ^https?:// ]] && continue
# Check the external link
if check_url "$url"; then
echo -e "${GREEN}✓ Valid external link: $url${NC}"
else
echo -e "${RED}✗ Broken external link: $url${NC}"
BROKEN_EXTERNAL=$((BROKEN_EXTERNAL + 1))
fi
done < "$EXTERNAL_LINKS"
# Clean up
rm "$INTERNAL_LINKS" "$EXTERNAL_LINKS"
# Report summary
echo -e "\n${YELLOW}Link Check Summary:${NC}"
if [ $BROKEN_INTERNAL -eq 0 ]; then
echo -e "${GREEN}✓ All internal links are valid${NC}"
else
echo -e "${RED}✗ Found $BROKEN_INTERNAL broken internal links${NC}"
fi
if [ $BROKEN_EXTERNAL -eq 0 ]; then
echo -e "${GREEN}✓ All external links are valid${NC}"
else
echo -e "${RED}✗ Found $BROKEN_EXTERNAL broken external links${NC}"
fi
# Test 3: Check multilingual content
echo -e "\n${YELLOW}Test 3: Checking multilingual content...${NC}"
if curl -s http://127.0.0.1:1111/de > /dev/null; then
echo -e "${GREEN}✓ German version is accessible${NC}"
else
echo -e "${RED}✗ German version is not accessible${NC}"
fi
if curl -s http://127.0.0.1:1111/en > /dev/null; then
echo -e "${GREEN}✓ English version is accessible${NC}"
else
echo -e "${RED}✗ English version is not accessible${NC}"
fi
# Test 4: Check RSS feeds
echo -e "\n${YELLOW}Test 4: Checking RSS feeds...${NC}"
if curl -s http://127.0.0.1:1111/atom.xml > /dev/null; then
echo -e "${GREEN}✓ RSS feed is accessible${NC}"
else
echo -e "${RED}✗ RSS feed is not accessible${NC}"
fi
# Cleanup
kill $SERVER_PID
echo -e "\n${GREEN}All tests completed!${NC}"