#!/bin/bash # WebDAV Performance Benchmark # Tests: upload, download, PROPFIND, MKCOL, DELETE set -e WEBDAV_URL="http://127.0.0.1:11438/webdav" TEST_DIR="/tmp/webdav_benchmark" USER="demo" PASS="demo123" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo "================================================" echo "WebDAV Performance Benchmark" echo "================================================" echo "" # Setup test directory rm -rf "$TEST_DIR" mkdir -p "$TEST_DIR" cd "$TEST_DIR" # Generate test files echo "Generating test files..." dd if=/dev/urandom of=file_1mb.bin bs=1M count=1 2>/dev/null dd if=/dev/urandom of=file_10mb.bin bs=1M count=10 2>/dev/null dd if=/dev/urandom of=file_50mb.bin bs=1M count=50 2>/dev/null dd if=/dev/urandom of=file_100mb.bin bs=1M count=100 2>/dev/null echo "${GREEN}Test files generated${NC}" echo "" # Test 1: PROPFIND (directory listing) echo "=== Test 1: PROPFIND (directory listing) ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" -X PROPFIND -H "Depth: 1" "$WEBDAV_URL/" > /dev/null END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) echo "${GREEN}PROPFIND: ${ELAPSED}s${NC}" echo "" # Test 2: Upload 1MB file echo "=== Test 2: Upload 1MB file ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" -T file_1mb.bin "$WEBDAV_URL/file_1mb.bin" END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) THROUGHPUT=$(echo "scale=2; 1 / $ELAPSED" | bc) echo "${GREEN}Upload 1MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" echo "" # Test 3: Upload 10MB file echo "=== Test 3: Upload 10MB file ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" -T file_10mb.bin "$WEBDAV_URL/file_10mb.bin" END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) THROUGHPUT=$(echo "scale=2; 10 / $ELAPSED" | bc) echo "${GREEN}Upload 10MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" echo "" # Test 4: Download 10MB file echo "=== Test 4: Download 10MB file ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" "$WEBDAV_URL/file_10mb.bin" -o /tmp/download_10mb.bin END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) THROUGHPUT=$(echo "scale=2; 10 / $ELAPSED" | bc) echo "${GREEN}Download 10MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" echo "" # Test 5: Upload 50MB file echo "=== Test 5: Upload 50MB file ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" -T file_50mb.bin "$WEBDAV_URL/file_50mb.bin" END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) THROUGHPUT=$(echo "scale=2; 50 / $ELAPSED" | bc) echo "${GREEN}Upload 50MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" echo "" # Test 6: Download 50MB file echo "=== Test 6: Download 50MB file ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" "$WEBDAV_URL/file_50mb.bin" -o /tmp/download_50mb.bin END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) THROUGHPUT=$(echo "scale=2; 50 / $ELAPSED" | bc) echo "${GREEN}Download 50MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" echo "" # Test 7: Upload 100MB file echo "=== Test 7: Upload 100MB file ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" -T file_100mb.bin "$WEBDAV_URL/file_100mb.bin" END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) THROUGHPUT=$(echo "scale=2; 100 / $ELAPSED" | bc) echo "${GREEN}Upload 100MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" echo "" # Test 8: Download 100MB file echo "=== Test 8: Download 100MB file ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" "$WEBDAV_URL/file_100mb.bin" -o /tmp/download_100mb.bin END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) THROUGHPUT=$(echo "scale=2; 100 / $ELAPSED" | bc) echo "${GREEN}Download 100MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" echo "" # Test 9: MKCOL (create directory) echo "=== Test 9: MKCOL (create directory) ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" -X MKCOL "$WEBDAV_URL/test_dir/" END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) echo "${GREEN}MKCOL: ${ELAPSED}s${NC}" echo "" # Test 10: DELETE (cleanup) echo "=== Test 10: DELETE (cleanup) ===" START=$(date +%s.%N) curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_1mb.bin" curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_10mb.bin" curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_50mb.bin" curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_100mb.bin" curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/test_dir/" END=$(date +%s.%N) ELAPSED=$(echo "$END - $START" | bc) echo "${GREEN}DELETE (5 files): ${ELAPSED}s${NC}" echo "" # Cleanup rm -rf "$TEST_DIR" rm -f /tmp/download_*.bin echo "================================================" echo "${GREEN}WebDAV Performance Benchmark Complete${NC}" echo "================================================"