#!/bin/bash # Test Generator for GnuRAMage # Creates sample files and directory structures for testing # Default values TEST_SOURCE_DIR="/tmp/ram_disk_test_source" TEST_RAMDISK_DIR="/tmp/ram_disk_test_ramdisk" FILE_COUNT=20 DIR_COUNT=5 FILE_SIZE="10k" # Default file size in KB CONFIG_FILE="gnuramage_test.ini" # Print usage information print_usage() { echo "Usage: $0 [OPTIONS]" echo "Test Generator for GnuRAMage" echo "" echo "Options:" echo " --source <dir> Path to the source directory (default: $TEST_SOURCE_DIR)" echo " --ramdisk <dir> Path to the RAM disk directory (default: $TEST_RAMDISK_DIR)" echo " --files <count> Number of files to create (default: $FILE_COUNT)" echo " --dirs <count> Number of directories to create (default: $DIR_COUNT)" echo " --size <size> Size of each file (default: $FILE_SIZE)" echo " --config <file> Path to write the test configuration (default: $CONFIG_FILE)" echo " --help Display this help message and exit" echo "" } # Parse command line arguments while [[ $# -gt 0 ]]; do case $1 in --source) TEST_SOURCE_DIR="$2" shift 2 ;; --ramdisk) TEST_RAMDISK_DIR="$2" shift 2 ;; --files) FILE_COUNT="$2" shift 2 ;; --dirs) DIR_COUNT="$2" shift 2 ;; --size) FILE_SIZE="$2" shift 2 ;; --config) CONFIG_FILE="$2" shift 2 ;; --help) print_usage exit 0 ;; *) echo "Error: Unknown option $1" print_usage exit 1 ;; esac done # Create test directories echo "Creating test directories..." mkdir -p "$TEST_SOURCE_DIR" # Note: We don't create the RAM disk directory here as the main script should handle that # Create random directories echo "Creating $DIR_COUNT random directories..." for ((i=1; i<=DIR_COUNT; i++)); do dir_name="dir_$i" mkdir -p "$TEST_SOURCE_DIR/$dir_name" # Create subdirectories with random depth depth=$((RANDOM % 3 + 1)) subdir="$TEST_SOURCE_DIR/$dir_name" for ((j=1; j<=depth; j++)); do subdir="$subdir/subdir_$j" mkdir -p "$subdir" done done # Create random files echo "Creating $FILE_COUNT random files..." for ((i=1; i<=FILE_COUNT; i++)); do # Decide whether to put the file in a directory or the root if [ $((RANDOM % 3)) -eq 0 ] || [ $DIR_COUNT -eq 0 ]; then # Put in root file_path="$TEST_SOURCE_DIR/file_$i.txt" else # Put in a random directory dir_num=$((RANDOM % DIR_COUNT + 1)) dir_path="$TEST_SOURCE_DIR/dir_$dir_num" # Check if there are subdirectories subdirs=($(find "$dir_path" -type d)) if [ ${#subdirs[@]} -gt 1 ]; then # Pick a random subdirectory subdir_index=$((RANDOM % ${#subdirs[@]})) file_path="${subdirs[$subdir_index]}/file_$i.txt" else file_path="$dir_path/file_$i.txt" fi fi # Create file with random content dd if=/dev/urandom of="$file_path" bs="$FILE_SIZE" count=1 status=none echo "Created: $file_path" done # Create a special .rsyncignore file echo "Creating .rsyncignore file..." cat > "$TEST_SOURCE_DIR/.rsyncignore" << EOF # Test ignore patterns *.bak *.tmp temp_* test_ignore_dir/ EOF # Create some files that should be ignored echo "Creating files that should be ignored..." mkdir -p "$TEST_SOURCE_DIR/test_ignore_dir" touch "$TEST_SOURCE_DIR/file1.bak" touch "$TEST_SOURCE_DIR/file2.tmp" touch "$TEST_SOURCE_DIR/temp_file.txt" touch "$TEST_SOURCE_DIR/test_ignore_dir/should_be_ignored.txt" # Create a test config file echo "Creating test configuration file: $CONFIG_FILE" cat > "$CONFIG_FILE" << EOF # GnuRAMage Test Configuration File [SETTINGS] # Interval between synchronizations in seconds (short for testing) sync_interval = 10 # Log level: ERROR, WARN, INFO, DEBUG log_level = DEBUG # Verify checksums during sync (test both true and false) verify_checksums = true [DIRECTORIES] # Source directory on hard disk source_dir = $TEST_SOURCE_DIR # Target directory on RAM disk ramdisk_dir = $TEST_RAMDISK_DIR [EXCLUDE] # Patterns to exclude from synchronization # Each line is a pattern in rsync format *.bak *.tmp temp_* test_ignore_dir/ EOF echo "Test environment setup complete!" echo "Created $FILE_COUNT files across $DIR_COUNT directories" echo "" echo "To use the test environment, run:" echo "../gramage.sh --config ../test/$CONFIG_FILE" echo "" echo "For a dry run test first, use:" echo "../gramage.sh --config ../test/$CONFIG_FILE --dry-run --verbose"