torrent-gateway/test/generate_test_files.sh
enki b3204ea07a
Some checks are pending
CI Pipeline / Run Tests (push) Waiting to run
CI Pipeline / Lint Code (push) Waiting to run
CI Pipeline / Security Scan (push) Waiting to run
CI Pipeline / Build Docker Images (push) Blocked by required conditions
CI Pipeline / E2E Tests (push) Blocked by required conditions
first commit
2025-08-18 00:40:15 -07:00

144 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
set -e
OUTPUT_DIR=${OUTPUT_DIR:-/output}
FILE_SIZES=${FILE_SIZES:-"1KB,10MB,100MB"}
VIDEO_FORMATS=${VIDEO_FORMATS:-"mp4,mkv,avi,mov,webm"}
echo "🗃️ Generating test files..."
echo "Output directory: $OUTPUT_DIR"
echo "File sizes: $FILE_SIZES"
echo "Video formats: $VIDEO_FORMATS"
mkdir -p "$OUTPUT_DIR"
cd "$OUTPUT_DIR"
# Parse file sizes
IFS=',' read -ra SIZES <<< "$FILE_SIZES"
IFS=',' read -ra FORMATS <<< "$VIDEO_FORMATS"
# Helper function to convert size notation to bytes
size_to_bytes() {
local size="$1"
local number="${size//[^0-9]/}"
local unit="${size//[0-9]/}"
case "${unit^^}" in
"KB") echo $((number * 1024)) ;;
"MB") echo $((number * 1024 * 1024)) ;;
"GB") echo $((number * 1024 * 1024 * 1024)) ;;
*) echo "$number" ;; # Assume bytes if no unit
esac
}
# Generate regular test files
for size_spec in "${SIZES[@]}"; do
size_spec=$(echo "$size_spec" | tr -d ' ') # Remove spaces
bytes=$(size_to_bytes "$size_spec")
filename="test_file_${size_spec}.bin"
echo "Creating $filename ($bytes bytes)..."
head -c "$bytes" /dev/urandom > "$filename"
done
# Generate video files for each format
for format in "${FORMATS[@]}"; do
format=$(echo "$format" | tr -d ' ') # Remove spaces
# Create different sizes for video files
for size_spec in "1MB" "5MB" "10MB"; do
bytes=$(size_to_bytes "$size_spec")
filename="test_video_${size_spec}.${format}"
echo "Creating $filename ($bytes bytes)..."
head -c "$bytes" /dev/urandom > "$filename"
done
done
# Create special test files
echo "Creating special test files..."
# Empty file
touch "empty_file.txt"
# Text file with known content
cat << 'EOF' > "text_file.txt"
This is a test text file for the Blossom-BitTorrent Gateway.
It contains multiple lines of text to test text file handling.
This file can be used to verify text processing capabilities.
The content is predictable and can be verified after upload/download.
Line numbers:
1. First line
2. Second line
3. Third line
4. Fourth line
5. Fifth line
Special characters: !@#$%^&*()_+-=[]{}|;':\",./<>?
Unicode: 🚀 🌟 💫 ⚡ 🔥 ⭐ 🎯 🎪 🎨 🎭
End of test file.
EOF
# Binary file with pattern
echo "Creating binary pattern file..."
python3 -c "
import struct
with open('binary_pattern.bin', 'wb') as f:
for i in range(1024):
f.write(struct.pack('I', i))
" 2>/dev/null || {
# Fallback if python3 is not available
for i in $(seq 0 1023); do
printf "\\$(printf "%03o" $((i % 256)))" >> binary_pattern.bin
done
}
# Create JSON metadata file
cat << EOF > "test_files_manifest.json"
{
"generated_at": "$(date -Iseconds)",
"files": [
EOF
first_file=true
for file in *.bin *.txt *.mp4 *.mkv *.avi *.mov *.webm; do
if [[ -f "$file" ]]; then
if [[ "$first_file" != true ]]; then
echo " }," >> "test_files_manifest.json"
fi
first_file=false
size=$(wc -c < "$file")
sha256sum_value=$(sha256sum "$file" | cut -d' ' -f1)
cat << EOF >> "test_files_manifest.json"
{
"filename": "$file",
"size": $size,
"sha256": "$sha256sum_value"
EOF
fi
done
if [[ "$first_file" != true ]]; then
echo " }" >> "test_files_manifest.json"
fi
cat << 'EOF' >> "test_files_manifest.json"
]
}
EOF
echo "📋 Test files generated successfully:"
ls -lah
echo ""
echo "📊 Summary:"
echo "Total files: $(find . -type f | wc -l)"
echo "Total size: $(du -sh . | cut -f1)"
echo ""
echo "✅ Test file generation complete!"