P0: Add performance benchmark scripts
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

- webdav_benchmark.sh: PROPFIND, upload/download 1-100MB
- ssh_benchmark.sh: SCP, rsync upload/download, delta transfer
- Tests throughput for all file sizes

Ready for performance testing
This commit is contained in:
Warren
2026-06-21 23:55:25 +08:00
parent 321310582b
commit 7d229d0b62
2 changed files with 298 additions and 0 deletions

144
scripts/webdav_benchmark.sh Executable file
View File

@@ -0,0 +1,144 @@
#!/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 "================================================"