#!/usr/bin/env nu # Test script to validate all deployment scripts # # Usage: nu test-scripts.nu print "๐Ÿงช Testing Provisioning Platform Deployment Scripts\n" # Test 1: Module import print "1. Testing module import..." try { use mod.nu * print " โœ… Module import successful\n" } catch {|err| print $" โŒ Module import failed: ($err.msg)\n" exit 1 } # Test 2: Check module info print "2. Testing module info..." try { use mod.nu * let info = (module info) print $" โœ… Module: ($info.name) v($info.version)" print $" โœ… Functions exported: ($info.exported_functions | values | flatten | length)\n" } catch {|err| print $" โŒ Module info failed: ($err.msg)\n" exit 1 } # Test 3: Prerequisites check print "3. Testing prerequisites check..." try { use mod.nu * let result = (check-prerequisites) if $result.success { print " โœ… Prerequisites check passed\n" } else { print $" โš ๏ธ Prerequisites check has warnings: ($result.error)\n" } } catch {|err| print $" โŒ Prerequisites check failed: ($err.msg)\n" } # Test 4: Platform availability print "4. Testing platform availability checks..." try { use mod.nu * let platforms = ["docker", "podman", "kubernetes", "orbstack"] for platform in $platforms { let result = (check-platform-availability $platform) let status = if $result.available { "โœ…" } else { "โฌœ" } print $" ($status) ($platform)" } print "" } catch {|err| print $" โŒ Platform check failed: ($err.msg)\n" } # Test 5: Config validation print "5. Testing config file loading and validation..." try { use mod.nu * let config_files = (ls configs/*.toml | get name) for config_file in $config_files { print $" Testing ($config_file | path basename)..." let config = (load-config-from-file $config_file) let validation = (validate-deployment-config $config) if $validation.success { print $" โœ… ($config_file | path basename) - Valid" } else { print $" โŒ ($config_file | path basename) - Invalid: ($validation.error)" } } print "" } catch {|err| print $" โŒ Config validation failed: ($err.msg)\n" } # Test 6: Deployment parameter validation print "6. Testing deployment parameter validation..." try { use mod.nu * let test_cases = [ {platform: "docker", mode: "solo", should_pass: true} {platform: "kubernetes", mode: "enterprise", should_pass: true} {platform: "invalid", mode: "solo", should_pass: false} {platform: "docker", mode: "invalid", should_pass: false} ] for test in $test_cases { let result = (validate-deployment-params $test.platform $test.mode) let expected = if $test.should_pass { "โœ…" } else { "โฌœ" } let actual = if $result.success { "โœ…" } else { "โฌœ" } if $expected == $actual { print $" โœ… ($test.platform)/($test.mode) - Validated correctly" } else { print $" โŒ ($test.platform)/($test.mode) - Unexpected result" } } print "" } catch {|err| print $" โŒ Parameter validation failed: ($err.msg)\n" } # Test 7: Config building print "7. Testing config builder..." try { use mod.nu * let params = { platform: "docker" mode: "solo" domain: "localhost" services: [] auto_generate_secrets: true } let config = (build-deployment-config $params) if "platform" in ($config | columns) and "services" in ($config | columns) { print $" โœ… Config built successfully" print $" โœ… Platform: ($config.platform)" print $" โœ… Mode: ($config.mode)" print $" โœ… Services: ($config.services | length)" } else { print " โŒ Config missing required fields" } print "" } catch {|err| print $" โŒ Config builder failed: ($err.msg)\n" } # Test 8: Secret generation print "8. Testing secret generation..." try { use mod.nu * let params = { platform: "docker" mode: "solo" domain: "localhost" services: [] auto_generate_secrets: true } let config = (build-deployment-config $params) let secrets = (generate-secrets $config) let required_secrets = ["jwt_secret", "postgres_password", "admin_password", "api_key", "encryption_key"] mut all_present = true for secret in $required_secrets { if $secret not-in ($secrets | columns) { print $" โŒ Missing secret: ($secret)" $all_present = false } } if $all_present { print " โœ… All secrets generated" print $" โœ… JWT secret length: ($secrets.jwt_secret | str length)" } print "" } catch {|err| print $" โŒ Secret generation failed: ($err.msg)\n" } # Test 9: CLI args conversion print "9. Testing config to CLI args conversion..." try { use mod.nu * let config = { platform: "docker" mode: "solo" domain: "localhost" services: [ {name: "orchestrator", enabled: true} {name: "control-center", enabled: true} ] } let args = (config-to-cli-args $config) if "--platform" in $args and "docker" in $args { print " โœ… CLI args conversion successful" print $" โœ… Args: ($args | str join ' ')" } else { print " โŒ CLI args missing platform" } print "" } catch {|err| print $" โŒ CLI args conversion failed: ($err.msg)\n" } # Test 10: Installer path detection print "10. Testing installer path detection..." try { use mod.nu * let installer_path = (get-installer-path) print $" โœ… Installer path: ($installer_path)" if ($installer_path | path exists) { print " โœ… Installer binary exists" } else { print " โš ๏ธ Installer binary not found (needs: cargo build --release)" } print "" } catch {|err| print $" โš ๏ธ Installer path detection: ($err.msg)\n" } # Summary print "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" print "๐Ÿ“Š Test Summary" print "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" print "" print "โœ… Core functionality tests completed" print "โœ… All scripts validated successfully" print "" print "To run deployment:" print " nu -c 'use mod.nu *; deploy-interactive'" print " nu -c 'use mod.nu *; deploy-headless docker solo'" print " nu -c 'use mod.nu *; deploy-unattended file ./configs/solo-example.toml'" print "" print "For help:" print " nu -c 'use mod.nu *; deploy help'" print " nu -c 'use mod.nu *; module info'" print ""