Rustelo/config/scripts/test-config.sh
Jesús Pérex 515c9343f4
Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
chore: add config path
2025-07-07 23:13:01 +01:00

406 lines
11 KiB
Bash
Executable File

#!/bin/bash
# Configuration Test Script for Rustelo
# Tests the configuration building and validation system
# Usage: ./test-config.sh
set -e
# Script configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_DIR="$(dirname "$SCRIPT_DIR")"
PROJECT_ROOT="$(dirname "$CONFIG_DIR")"
TEST_OUTPUT_DIR="$CONFIG_DIR/test_outputs"
ENVIRONMENTS=("dev" "prod" "example")
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
NC='\033[0m' # No Color
# Test counters
TESTS_PASSED=0
TESTS_FAILED=0
TESTS_TOTAL=0
# Logging functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_test() {
echo -e "${PURPLE}[TEST]${NC} $1"
}
# Test result functions
test_passed() {
local test_name="$1"
TESTS_PASSED=$((TESTS_PASSED + 1))
TESTS_TOTAL=$((TESTS_TOTAL + 1))
log_success "$test_name"
}
test_failed() {
local test_name="$1"
local error_msg="$2"
TESTS_FAILED=$((TESTS_FAILED + 1))
TESTS_TOTAL=$((TESTS_TOTAL + 1))
log_error "$test_name"
if [ -n "$error_msg" ]; then
log_error " Error: $error_msg"
fi
}
# Setup test environment
setup_test_environment() {
log_info "Setting up test environment..."
# Create test output directory
rm -rf "$TEST_OUTPUT_DIR"
mkdir -p "$TEST_OUTPUT_DIR"
# Check if required scripts exist
if [ ! -f "$SCRIPT_DIR/build-config.sh" ]; then
log_error "build-config.sh not found"
exit 1
fi
if [ ! -f "$SCRIPT_DIR/manage-config.sh" ]; then
log_error "manage-config.sh not found"
exit 1
fi
# Check if scripts are executable
if [ ! -x "$SCRIPT_DIR/build-config.sh" ]; then
chmod +x "$SCRIPT_DIR/build-config.sh"
fi
if [ ! -x "$SCRIPT_DIR/manage-config.sh" ]; then
chmod +x "$SCRIPT_DIR/manage-config.sh"
fi
log_success "Test environment setup complete"
}
# Test configuration building
test_build_configurations() {
log_info "Testing configuration building..."
for env in "${ENVIRONMENTS[@]}"; do
log_test "Building configuration for $env environment"
local output_file="$TEST_OUTPUT_DIR/config_${env}_test.toml"
if "$SCRIPT_DIR/build-config.sh" "$env" "$output_file" > /dev/null 2>&1; then
if [ -f "$output_file" ]; then
test_passed "Build $env configuration"
else
test_failed "Build $env configuration" "Output file not created"
fi
else
test_failed "Build $env configuration" "Build script failed"
fi
done
}
# Test configuration validation
test_validate_configurations() {
log_info "Testing configuration validation..."
for env in "${ENVIRONMENTS[@]}"; do
log_test "Validating configuration for $env environment"
if "$SCRIPT_DIR/manage-config.sh" validate "$env" > /dev/null 2>&1; then
test_passed "Validate $env configuration"
else
test_failed "Validate $env configuration" "Validation failed"
fi
done
}
# Test configuration file structure
test_configuration_structure() {
log_info "Testing configuration file structure..."
for env in "${ENVIRONMENTS[@]}"; do
log_test "Checking structure of $env configuration"
local config_file="$TEST_OUTPUT_DIR/config_${env}_test.toml"
if [ ! -f "$config_file" ]; then
test_failed "Check $env structure" "Configuration file not found"
continue
fi
# Check for required sections
local required_sections=("server" "database" "app" "build_info")
local missing_sections=()
for section in "${required_sections[@]}"; do
if ! grep -q "^\[${section}\]" "$config_file"; then
missing_sections+=("$section")
fi
done
if [ ${#missing_sections[@]} -eq 0 ]; then
test_passed "Check $env structure"
else
test_failed "Check $env structure" "Missing sections: ${missing_sections[*]}"
fi
done
}
# Test feature configurations
test_feature_configurations() {
log_info "Testing feature configurations..."
local features_dir="$CONFIG_DIR/features"
if [ ! -d "$features_dir" ]; then
test_failed "Check features directory" "Features directory not found"
return
fi
# Check if features directory has subdirectories
local feature_count=0
for feature_dir in "$features_dir"/*; do
if [ -d "$feature_dir" ]; then
feature_count=$((feature_count + 1))
local feature_name=$(basename "$feature_dir")
log_test "Checking feature: $feature_name"
# Check if feature has environment configs
local env_configs=0
for env in "${ENVIRONMENTS[@]}"; do
if [ -f "$feature_dir/$env.toml" ]; then
env_configs=$((env_configs + 1))
fi
done
if [ $env_configs -gt 0 ]; then
test_passed "Feature $feature_name has environment configs"
else
test_failed "Feature $feature_name has environment configs" "No environment configs found"
fi
fi
done
if [ $feature_count -gt 0 ]; then
test_passed "Features directory structure"
else
test_failed "Features directory structure" "No features found"
fi
}
# Test base configurations
test_base_configurations() {
log_info "Testing base configurations..."
local base_dir="$CONFIG_DIR/base"
if [ ! -d "$base_dir" ]; then
test_failed "Check base directory" "Base directory not found"
return
fi
for env in "${ENVIRONMENTS[@]}"; do
log_test "Checking base configuration for $env"
local base_file="$base_dir/$env.toml"
if [ -f "$base_file" ]; then
# Check if file is valid TOML (basic check)
if grep -q "^\[.*\]" "$base_file"; then
test_passed "Base $env configuration exists and has sections"
else
test_failed "Base $env configuration exists and has sections" "No TOML sections found"
fi
else
test_failed "Base $env configuration exists" "File not found"
fi
done
}
# Test management script commands
test_management_commands() {
log_info "Testing management script commands..."
# Test list-features command
log_test "Testing list-features command"
if "$SCRIPT_DIR/manage-config.sh" list-features > /dev/null 2>&1; then
test_passed "list-features command"
else
test_failed "list-features command" "Command failed"
fi
# Test list-environments command
log_test "Testing list-environments command"
if "$SCRIPT_DIR/manage-config.sh" list-environments > /dev/null 2>&1; then
test_passed "list-environments command"
else
test_failed "list-environments command" "Command failed"
fi
# Test status command
log_test "Testing status command"
if "$SCRIPT_DIR/manage-config.sh" status > /dev/null 2>&1; then
test_passed "status command"
else
test_failed "status command" "Command failed"
fi
}
# Test Python configuration builder (if available)
test_python_builder() {
log_info "Testing shell configuration builder (Python builder removed)..."
test_skipped "Python builder" "Python builder has been removed from the project"
}
# Test configuration comparison
test_configuration_comparison() {
log_info "Testing configuration comparison..."
log_test "Testing configuration diff between dev and prod"
if "$SCRIPT_DIR/manage-config.sh" diff dev prod > /dev/null 2>&1; then
test_passed "Configuration diff"
else
test_failed "Configuration diff" "Diff command failed"
fi
}
# Test backup and restore functionality
test_backup_restore() {
log_info "Testing backup and restore functionality..."
# Create a test config file
local test_config="$TEST_OUTPUT_DIR/test_config.toml"
echo "[test]" > "$test_config"
echo "value = \"test\"" >> "$test_config"
# Change to test directory
cd "$TEST_OUTPUT_DIR"
cp "$test_config" "config.toml"
log_test "Testing backup creation"
if "$SCRIPT_DIR/manage-config.sh" backup dev > /dev/null 2>&1; then
test_passed "Backup creation"
else
test_failed "Backup creation" "Backup command failed"
fi
# Return to original directory
cd - > /dev/null
}
# Test error handling
test_error_handling() {
log_info "Testing error handling..."
# Test invalid environment
log_test "Testing invalid environment handling"
if ! "$SCRIPT_DIR/build-config.sh" "invalid_env" "/tmp/test.toml" > /dev/null 2>&1; then
test_passed "Invalid environment handling"
else
test_failed "Invalid environment handling" "Should have failed with invalid environment"
fi
# Test missing base config
log_test "Testing missing base config handling"
local backup_base="$CONFIG_DIR/base/dev.toml.backup"
if [ -f "$CONFIG_DIR/base/dev.toml" ]; then
mv "$CONFIG_DIR/base/dev.toml" "$backup_base"
if ! "$SCRIPT_DIR/build-config.sh" "dev" "/tmp/test.toml" > /dev/null 2>&1; then
test_passed "Missing base config handling"
else
test_failed "Missing base config handling" "Should have failed with missing base config"
fi
# Restore backup
mv "$backup_base" "$CONFIG_DIR/base/dev.toml"
else
test_failed "Missing base config handling" "Base config already missing"
fi
}
# Cleanup test environment
cleanup_test_environment() {
log_info "Cleaning up test environment..."
# Remove test output directory
if [ -d "$TEST_OUTPUT_DIR" ]; then
rm -rf "$TEST_OUTPUT_DIR"
fi
log_success "Test environment cleanup complete"
}
# Show test summary
show_test_summary() {
echo ""
echo "========================================"
echo "Configuration Test Summary"
echo "========================================"
echo "Total Tests: $TESTS_TOTAL"
echo "Passed: $TESTS_PASSED"
echo "Failed: $TESTS_FAILED"
if [ $TESTS_FAILED -eq 0 ]; then
log_success "All tests passed! ✓"
echo ""
echo "The configuration system is working correctly."
else
log_error "Some tests failed! ✗"
echo ""
echo "Please review the failed tests and fix any issues."
exit 1
fi
}
# Main function
main() {
echo "========================================"
echo "Rustelo Configuration System Test Suite"
echo "========================================"
echo ""
# Check if we're in the right directory
if [ ! -d "$CONFIG_DIR" ]; then
log_error "Configuration directory not found: $CONFIG_DIR"
exit 1
fi
# Run tests
setup_test_environment
test_base_configurations
test_feature_configurations
test_build_configurations
test_validate_configurations
test_configuration_structure
test_management_commands
test_python_builder
test_configuration_comparison
test_backup_restore
test_error_handling
cleanup_test_environment
show_test_summary
}
# Run main function
main "$@"