provisioning/tools/test-provider-agnostic.nu
2025-10-07 11:12:02 +01:00

191 lines
6.3 KiB
Plaintext
Executable File

# Test Script for Provider-Agnostic Architecture
# Validates the new provider system works correctly
use ../core/nulib/lib_provisioning/providers/registry.nu *
use ../core/nulib/lib_provisioning/providers/loader.nu *
use ../core/nulib/lib_provisioning/providers/interface.nu *
use ../core/nulib/lib_provisioning/utils/logging.nu *
use ../extensions/providers/prov_lib/middleware_provider_agnostic.nu *
# Test provider registry
export def test-provider-registry []: nothing -> nothing {
log-section "Testing Provider Registry" "test"
# Initialize registry
init-provider-registry
# List providers
log-info "Listing available providers..." "test"
let providers = (list-providers)
print ($providers | table)
# Get provider stats
let stats = (get-provider-stats)
log-info $"Registry stats: ($stats.total_providers) total, ($stats.available_providers) available" "test"
# Test provider availability
for provider_name in ["aws", "upcloud", "local"] {
let available = (is-provider-available $provider_name)
if $available {
log-success $"Provider ($provider_name) is available" "test"
} else {
log-warning $"Provider ($provider_name) is not available" "test"
}
}
}
# Test provider loading
export def test-provider-loading []: nothing -> nothing {
log-section "Testing Provider Loading" "test"
# Test loading individual providers
for provider_name in ["aws", "upcloud", "local"] {
log-info $"Testing load of provider: ($provider_name)" "test"
let provider = try {
load-provider $provider_name
} catch {|err|
log-error $"Failed to load ($provider_name): ($err.msg)" "test"
{}
}
if not ($provider | is-empty) {
log-success $"Successfully loaded provider: ($provider_name)" "test"
} else {
log-error $"Failed to load provider: ($provider_name)" "test"
}
}
# Test batch loading
log-info "Testing batch provider loading..." "test"
let batch_result = (load-providers ["aws", "upcloud", "local"])
log-info $"Batch load result: ($batch_result.successful)/($batch_result.total) successful" "test"
}
# Test provider interface validation
export def test-provider-interface []: nothing -> nothing {
log-section "Testing Provider Interface Validation" "test"
# Get interface documentation
let interface_docs = (get-provider-interface-docs)
log-info $"Provider interface defines ($interface_docs | length) functions" "test"
# Show some key functions
let key_functions = ($interface_docs | where function in ["query_servers", "create_server", "get_ip"])
print "Key provider functions:"
print ($key_functions | table)
}
# Test middleware with mock settings
export def test-middleware []: nothing -> nothing {
log-section "Testing Provider-Agnostic Middleware" "test"
# Create mock settings for testing
let mock_settings = {
data: {
servers: [
{
hostname: "test-aws-server"
provider: "aws"
zone: "us-east-1"
}
{
hostname: "test-upcloud-server"
provider: "upcloud"
zone: "us-nyc1"
}
{
hostname: "test-local-server"
provider: "local"
zone: "datacenter1"
}
]
}
}
# Test provider status
log-info "Getting provider status..." "test"
let status = (mw_provider_status)
print ($status | table)
# Test deployment strategy suggestions
log-info "Testing deployment strategy suggestions..." "test"
let requirements = {
regions: ["us-east-1", "eu-west-1"]
high_availability: true
cost_optimization: true
}
let strategy = (mw_suggest_deployment_strategy $requirements)
log-info $"Suggested strategy: ($strategy.strategy)" "test"
log-info $"Primary provider: ($strategy.primary_provider)" "test"
print $"Rationale: ($strategy.rationale | str join ', ')"
# Test query servers (this will show the dynamic dispatch in action)
log-info "Testing server query with dynamic provider dispatch..." "test"
try {
let query_result = (mw_query_servers $mock_settings)
log-info $"Query completed, returned ($query_result | length) results" "test"
} catch {|err|
log-warning $"Query test failed (expected for mock data): ($err.msg)" "test"
}
}
# Test multi-provider capabilities
export def test-multi-provider []: nothing -> nothing {
log-section "Testing Multi-Provider Capabilities" "test"
# Test provider capabilities comparison
let providers = ["aws", "upcloud", "local"]
print "Provider Capabilities Comparison:"
let capabilities_comparison = ($providers | each {|provider_name|
let caps = (get-provider-capabilities-for $provider_name)
{
provider: $provider_name
server_management: ($caps.server_management? | default false)
network_management: ($caps.network_management? | default false)
auto_scaling: ($caps.auto_scaling? | default false)
multi_region: ($caps.multi_region? | default false)
compliance_certs: ($caps.compliance_certifications? | default [] | length)
}
})
print ($capabilities_comparison | table)
# Show which providers support specific features
log-info "Providers with auto-scaling:" "test"
let auto_scaling_providers = ($capabilities_comparison | where auto_scaling == true | get provider)
print ($auto_scaling_providers | str join ", ")
log-info "Providers with multi-region support:" "test"
let multi_region_providers = ($capabilities_comparison | where multi_region == true | get provider)
print ($multi_region_providers | str join ", ")
}
# Run all tests
export def run-all-tests []: nothing -> nothing {
log-section "Starting Provider-Agnostic Architecture Tests" "test"
test-provider-registry
print ""
test-provider-loading
print ""
test-provider-interface
print ""
test-middleware
print ""
test-multi-provider
print ""
log-success "All tests completed!" "test"
}
# Main entry point
def main [] {
run-all-tests
}