prvng_core/nulib/test/run_plugin_tests.nu
Jesús Pérez 85ce530733
feat: update provisioning core CLI, libraries, and plugins
Update core components including CLI, Nushell libraries, plugins system,
and utility scripts for the provisioning system.

CLI Updates:
- Command implementations
- CLI utilities and dispatching
- Help system improvements
- Command validation

Library Updates:
- Configuration management system
- Infrastructure validation
- Extension system improvements
- Secrets management
- Workspace operations
- Cache management system

Plugin System:
- Interactive form plugin (inquire)
- KCL integration plugin
- Performance optimization plugins
- Plugin registration system

Utilities:
- Build and distribution scripts
- Installation procedures
- Testing utilities
- Development tools

Documentation:
- Library module documentation
- Extension API guides
- Plugin usage guides
- Service management documentation

All changes are backward compatible. No breaking changes.
2025-12-11 21:57:05 +00:00

257 lines
7.5 KiB
Plaintext

#!/usr/bin/env nu
# Plugin Test Runner
# Executes all plugin integration tests and generates comprehensive report
# Color codes for output
const COLOR_RESET = "\e[0m"
const COLOR_GREEN = "\e[32m"
const COLOR_YELLOW = "\e[33m"
const COLOR_RED = "\e[31m"
const COLOR_BLUE = "\e[34m"
const COLOR_CYAN = "\e[36m"
# Print colored message
def print_color [color: string, message: string] {
print $"($color)($message)($COLOR_RESET)"
}
# Print section header
def print_header [title: string] {
let line = ("=" * 70)
print ""
print_color $COLOR_CYAN $line
print_color $COLOR_CYAN $title
print_color $COLOR_CYAN $line
print ""
}
# Print test result
def print_result [test_name: string, success: bool, duration: int] {
if $success {
print_color $COLOR_GREEN $" ✅ ($test_name) \(($duration)ms\)"
} else {
print_color $COLOR_RED $" ❌ ($test_name) \(($duration)ms\)"
}
}
# Run individual test file
def run_test_file [file_path: string, test_name: string] -> record {
let start = (date now)
print_color $COLOR_BLUE $"\n🧪 Running ($test_name)..."
let result = (do {
nu $file_path
} | complete)
let end = (date now)
let duration = (($end - $start) | into duration | into int) / 1_000_000
{
name: $test_name
file: $file_path
success: ($result.exit_code == 0)
exit_code: $result.exit_code
duration_ms: $duration
stdout: $result.stdout
stderr: $result.stderr
}
}
# Check prerequisites
def check_prerequisites [] {
print_header "🔍 Checking Prerequisites"
# Check Nushell version
let nu_version = (version | get version)
print $" • Nushell version: ($nu_version)"
# Check if plugin test files exist
let test_files = [
"../lib_provisioning/plugins/auth_test.nu"
"../lib_provisioning/plugins/kms_test.nu"
"../lib_provisioning/plugins/orchestrator_test.nu"
"./test_plugin_integration.nu"
]
mut all_exist = true
for file in $test_files {
let exists = ($file | path exists)
if $exists {
print_color $COLOR_GREEN $" ✅ Found: ($file)"
} else {
print_color $COLOR_RED $" ❌ Missing: ($file)"
$all_exist = false
}
}
# Check plugin availability
let auth_plugin = (which auth | length) > 0
let kms_plugin = (which kms | length) > 0
let orch_plugin = (which orch | length) > 0
print ""
print " Plugin Availability:"
print_color (if $auth_plugin { $COLOR_GREEN } else { $COLOR_YELLOW }) $" • Auth: ($auth_plugin)"
print_color (if $kms_plugin { $COLOR_GREEN } else { $COLOR_YELLOW }) $" • KMS: ($kms_plugin)"
print_color (if $orch_plugin { $COLOR_GREEN } else { $COLOR_YELLOW }) $" • Orchestrator: ($orch_plugin)"
if not ($auth_plugin or $kms_plugin or $orch_plugin) {
print_color $COLOR_YELLOW "\n ⚠️ No plugins detected. Tests will use HTTP/SOPS fallback."
}
$all_exist
}
# Run all plugin tests
def run_all_tests [] -> list<record> {
print_header "🚀 Running All Plugin Tests"
mut results = []
# Test 1: Authentication Plugin
$results = ($results | append (run_test_file
"../lib_provisioning/plugins/auth_test.nu"
"Authentication Plugin Tests"
))
# Test 2: KMS Plugin
$results = ($results | append (run_test_file
"../lib_provisioning/plugins/kms_test.nu"
"KMS Plugin Tests"
))
# Test 3: Orchestrator Plugin
$results = ($results | append (run_test_file
"../lib_provisioning/plugins/orchestrator_test.nu"
"Orchestrator Plugin Tests"
))
# Test 4: Integration Tests
$results = ($results | append (run_test_file
"./test_plugin_integration.nu"
"Plugin Integration Tests"
))
$results
}
# Generate test report
def generate_report [results: list<record>] {
print_header "📊 Test Report"
# Summary statistics
let total = ($results | length)
let passed = ($results | where success == true | length)
let failed = ($results | where success == false | length)
let total_duration = ($results | get duration_ms | math sum)
let avg_duration = ($results | get duration_ms | math avg)
print "Summary:"
print $" • Total tests: ($total)"
print_color $COLOR_GREEN $" • Passed: ($passed)"
if $failed > 0 {
print_color $COLOR_RED $" • Failed: ($failed)"
} else {
print_color $COLOR_GREEN $" • Failed: ($failed)"
}
print $" • Total duration: ($total_duration)ms"
print $" • Average duration: ($avg_duration)ms"
print ""
print "Individual Test Results:"
for result in $results {
print_result $result.name $result.success $result.duration_ms
}
# Performance analysis
print ""
print "Performance Analysis:"
let fastest = ($results | sort-by duration_ms | first)
let slowest = ($results | sort-by duration_ms | last)
print_color $COLOR_GREEN $" • Fastest: ($fastest.name) \(($fastest.duration_ms)ms\)"
print_color $COLOR_YELLOW $" • Slowest: ($slowest.name) \(($slowest.duration_ms)ms\)"
# Failed tests details
if $failed > 0 {
print ""
print_color $COLOR_RED "Failed Tests Details:"
for result in ($results | where success == false) {
print_color $COLOR_RED $" • ($result.name)"
print $" Exit code: ($result.exit_code)"
if ($result.stderr | str length) > 0 {
print " Error output:"
print $"($result.stderr)" | lines | each {|line|
print $" ($line)"
}
}
}
}
# Return overall success
$failed == 0
}
# Save detailed report to file
def save_report [results: list<record>, output_file: string] {
let report = {
timestamp: (date now | format date "%Y-%m-%d %H:%M:%S")
summary: {
total: ($results | length)
passed: ($results | where success == true | length)
failed: ($results | where success == false | length)
total_duration_ms: ($results | get duration_ms | math sum)
average_duration_ms: ($results | get duration_ms | math avg)
}
tests: $results
plugins: {
auth: (which auth | length) > 0
kms: (which kms | length) > 0
orchestrator: (which orch | length) > 0
}
environment: {
nushell_version: (version | get version)
os: $nu.os-info.name
arch: $nu.os-info.arch
}
}
$report | to json | save -f $output_file
print_color $COLOR_CYAN $"\n📄 Detailed report saved to: ($output_file)"
}
# Main function
export def main [
--output-file (-o): string = "plugin-test-report.json" # Output report file
--skip-integration (-s) # Skip integration tests
--verbose (-v) # Show verbose output
] {
print_header "🧪 Plugin Integration Test Suite"
# Check prerequisites
if not (check_prerequisites) {
print_color $COLOR_RED "\n❌ Prerequisites check failed. Some test files are missing."
exit 1
}
# Run all tests
let results = (run_all_tests)
# Generate and display report
let all_passed = (generate_report $results)
# Save detailed report
save_report $results $output_file
# Final result
if $all_passed {
print_header "✅ All Tests Passed!"
exit 0
} else {
print_header "❌ Some Tests Failed"
exit 1
}
}