#!/usr/bin/env bash # Warpgate Integration Test — Config Generator # # Generates a config.toml pointing at the mock NAS for testing. # Supports override parameters as key=value arguments. # # Usage: # source config-gen.sh # _gen_config # defaults # _gen_config cache.max_size=10M # override one field # _gen_config writeback.write_back=0s # instant write-back set -euo pipefail _gen_config() { local config_file="${TEST_CONFIG:-$TEST_DIR/config.toml}" # Defaults pointing at mock NAS local conn_name="${TEST_CONN_NAME:-nas}" local nas_host="${MOCK_NAS_IP:-10.99.0.2}" local nas_user="root" local nas_key_file="${TEST_SSH_KEY:-$TEST_DIR/test_key}" local sftp_port="22" local sftp_connections="4" local cache_dir="${CACHE_DIR:-$TEST_DIR/cache}" local cache_max_size="200G" local cache_max_age="720h" local cache_min_free="1G" local read_chunk_size="16M" local read_chunk_limit="64M" local read_ahead="32M" local buffer_size="16M" local bw_limit_up="0" local bw_limit_down="0" local bw_adaptive="true" local write_back="5s" local transfers="4" local dir_cache_time="5s" local enable_smb="true" local enable_nfs="false" local enable_webdav="false" local nfs_allowed_network="10.99.0.0/24" local webdav_port="8080" local warmup_auto="false" local warmup_schedule="" local warmup_rules="" local smb_auth_enabled="false" local smb_auth_username="" local smb_auth_smb_pass="" # Default share: single share at / local share_name="${TEST_SHARE_NAME:-data}" local share_remote_path="${TEST_SHARE_REMOTE_PATH:-/}" local share_mount_point="${TEST_MOUNT:-$TEST_DIR/mnt}" local shares_config="" # Apply overrides for override in "$@"; do local key="${override%%=*}" local value="${override#*=}" case "$key" in connection.name|conn_name) conn_name="$value" ;; connection.nas_host|nas_host) nas_host="$value" ;; connection.nas_user|nas_user) nas_user="$value" ;; connection.nas_key_file|nas_key_file) nas_key_file="$value" ;; connection.sftp_port|sftp_port) sftp_port="$value" ;; connection.sftp_connections|sftp_connections) sftp_connections="$value" ;; cache.dir|cache_dir) cache_dir="$value" ;; cache.max_size|cache_max_size) cache_max_size="$value" ;; cache.max_age|cache_max_age) cache_max_age="$value" ;; cache.min_free|cache_min_free) cache_min_free="$value" ;; read.chunk_size|read_chunk_size) read_chunk_size="$value" ;; read.chunk_limit|read_chunk_limit) read_chunk_limit="$value" ;; read.read_ahead|read_ahead) read_ahead="$value" ;; read.buffer_size|buffer_size) buffer_size="$value" ;; bandwidth.limit_up|bw_limit_up) bw_limit_up="$value" ;; bandwidth.limit_down|bw_limit_down) bw_limit_down="$value" ;; bandwidth.adaptive|bw_adaptive) bw_adaptive="$value" ;; writeback.write_back|write_back) write_back="$value" ;; writeback.transfers|transfers) transfers="$value" ;; directory_cache.cache_time|dir_cache_time) dir_cache_time="$value" ;; protocols.enable_smb|enable_smb) enable_smb="$value" ;; protocols.enable_nfs|enable_nfs) enable_nfs="$value" ;; protocols.enable_webdav|enable_webdav) enable_webdav="$value" ;; protocols.nfs_allowed_network|nfs_allowed_network) nfs_allowed_network="$value" ;; protocols.webdav_port|webdav_port) webdav_port="$value" ;; warmup.auto|warmup_auto) warmup_auto="$value" ;; warmup.warmup_schedule|warmup_schedule) warmup_schedule="$value" ;; warmup.rules) warmup_rules="$value" ;; smb_auth.enabled|smb_auth_enabled) smb_auth_enabled="$value" ;; smb_auth.username|smb_auth_username) smb_auth_username="$value" ;; smb_auth.smb_pass|smb_auth_smb_pass) smb_auth_smb_pass="$value" ;; share.name|share_name) share_name="$value" ;; share.remote_path|share_remote_path) share_remote_path="$value" ;; share.mount_point|share_mount_point) share_mount_point="$value" ;; shares) shares_config="$value" ;; *) echo "WARNING: unknown config override: $key" >&2 ;; esac done cat > "$config_file" <> "$config_file" fi # Append smb_auth section if enabled if [[ "$smb_auth_enabled" == "true" ]]; then cat >> "$config_file" <> "$config_file" fi if [[ -n "$smb_auth_smb_pass" ]]; then echo "smb_pass = \"$smb_auth_smb_pass\"" >> "$config_file" fi fi # Append shares config — use override or default single share if [[ -n "$shares_config" ]]; then echo "" >> "$config_file" echo "$shares_config" >> "$config_file" else cat >> "$config_file" <> "$config_file" echo "$warmup_rules" >> "$config_file" fi export TEST_CONFIG="$config_file" } # Generate a minimal config (only required fields) _gen_minimal_config() { local config_file="${TEST_CONFIG:-$TEST_DIR/config.toml}" local conn_name="${TEST_CONN_NAME:-nas}" cat > "$config_file" < "$config_file" < "$config_file" <&2 return 1 ;; esac export TEST_CONFIG="$config_file" }