228 lines
6.1 KiB
Plaintext
228 lines
6.1 KiB
Plaintext
# Test Script for OCI Implementation
|
|
# Validates the multi-repo architecture with OCI registry support
|
|
# Version: 1.0.0
|
|
|
|
use std log
|
|
|
|
# Test results accumulator
|
|
mut $test_results = []
|
|
|
|
# Test 1: Check if OCI tools are available
|
|
export def "test oci-tools" []: nothing -> bool {
|
|
log info "Test 1: Checking OCI tools availability..."
|
|
|
|
let tools = ["oras" "crane" "skopeo"]
|
|
mut found = false
|
|
|
|
for tool in $tools {
|
|
if (which $tool | is-not-empty) {
|
|
log info $" ✓ Found ($tool)"
|
|
$found = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if not $found {
|
|
log warning " ⚠ No OCI tools found (install oras, crane, or skopeo)"
|
|
log warning " Installation: brew install oras"
|
|
}
|
|
|
|
$found
|
|
}
|
|
|
|
# Test 2: Validate KCL schemas
|
|
export def "test kcl-schemas" []: nothing -> bool {
|
|
log info "Test 2: Validating KCL schemas..."
|
|
|
|
try {
|
|
cd provisioning/kcl
|
|
let result = (kcl run dependencies.k)
|
|
|
|
log info " ✓ KCL schemas compile successfully"
|
|
true
|
|
} catch { |err|
|
|
log error $" ✗ KCL schema compilation failed: ($err.msg)"
|
|
false
|
|
}
|
|
}
|
|
|
|
# Test 3: Check Nushell module syntax
|
|
export def "test nushell-modules" []: nothing -> bool {
|
|
log info "Test 3: Checking Nushell module syntax..."
|
|
|
|
let modules = [
|
|
"provisioning/core/nulib/lib_provisioning/oci/client.nu"
|
|
"provisioning/core/nulib/lib_provisioning/oci/commands.nu"
|
|
"provisioning/core/nulib/lib_provisioning/dependencies/resolver.nu"
|
|
"provisioning/tools/oci-package.nu"
|
|
"provisioning/tools/migrate-to-oci.nu"
|
|
]
|
|
|
|
mut all_valid = true
|
|
|
|
for module in $modules {
|
|
try {
|
|
nu --commands $"use ($module)"
|
|
log info $" ✓ ($module | path basename) - Valid syntax"
|
|
} catch { |err|
|
|
log error $" ✗ ($module | path basename) - Syntax error"
|
|
$all_valid = false
|
|
}
|
|
}
|
|
|
|
$all_valid
|
|
}
|
|
|
|
# Test 4: Validate directory structure
|
|
export def "test directory-structure" []: nothing -> bool {
|
|
log info "Test 4: Validating directory structure..."
|
|
|
|
let required_dirs = [
|
|
"provisioning/core/nulib/lib_provisioning/oci"
|
|
"provisioning/core/nulib/lib_provisioning/dependencies"
|
|
"provisioning/tools"
|
|
"docs/architecture"
|
|
"docs/user"
|
|
]
|
|
|
|
mut all_exist = true
|
|
|
|
for dir in $required_dirs {
|
|
if ($dir | path exists) {
|
|
log info $" ✓ ($dir) exists"
|
|
} else {
|
|
log error $" ✗ ($dir) missing"
|
|
$all_exist = false
|
|
}
|
|
}
|
|
|
|
$all_exist
|
|
}
|
|
|
|
# Test 5: Validate documentation
|
|
export def "test documentation" []: nothing -> bool {
|
|
log info "Test 5: Validating documentation..."
|
|
|
|
let required_docs = [
|
|
"docs/architecture/MULTI_REPO_ARCHITECTURE.md"
|
|
"docs/user/OCI_REGISTRY_GUIDE.md"
|
|
"docs/QUICK_REFERENCE_OCI.md"
|
|
"MULTI_REPO_OCI_IMPLEMENTATION_SUMMARY.md"
|
|
]
|
|
|
|
mut all_exist = true
|
|
|
|
for doc in $required_docs {
|
|
if ($doc | path exists) {
|
|
let doc_name = ($doc | path basename)
|
|
let size = (ls $doc | first | get size)
|
|
let size_info = $"($size) bytes"
|
|
log info $" ✓ ($doc_name) exists ($size_info)"
|
|
} else {
|
|
log error $" ✗ ($doc | path basename) missing"
|
|
$all_exist = false
|
|
}
|
|
}
|
|
|
|
$all_exist
|
|
}
|
|
|
|
# Test 6: Count implementation lines
|
|
export def "test implementation-size" []: nothing -> bool {
|
|
log info "Test 6: Counting implementation lines..."
|
|
|
|
let files = [
|
|
"provisioning/kcl/dependencies.k"
|
|
"provisioning/core/nulib/lib_provisioning/oci/client.nu"
|
|
"provisioning/core/nulib/lib_provisioning/oci/commands.nu"
|
|
"provisioning/core/nulib/lib_provisioning/dependencies/resolver.nu"
|
|
"provisioning/tools/oci-package.nu"
|
|
"provisioning/tools/migrate-to-oci.nu"
|
|
]
|
|
|
|
mut total_lines = 0
|
|
|
|
for file in $files {
|
|
if ($file | path exists) {
|
|
let lines = (open $file | lines | length)
|
|
$total_lines = ($total_lines + $lines)
|
|
log info $" - ($file | path basename): ($lines) lines"
|
|
}
|
|
}
|
|
|
|
log info $" ✓ Total implementation: ($total_lines) lines"
|
|
|
|
($total_lines > 2000) # Should have at least 2000 lines
|
|
}
|
|
|
|
# Test 7: Validate manifest template
|
|
export def "test manifest-template" []: nothing -> bool {
|
|
log info "Test 7: Testing manifest generation..."
|
|
|
|
try {
|
|
# This would require loading the oci-package module
|
|
# For now, just check file existence
|
|
let package_file = "provisioning/tools/oci-package.nu"
|
|
if ($package_file | path exists) {
|
|
log info " ✓ OCI package tool available"
|
|
true
|
|
} else {
|
|
log error " ✗ OCI package tool missing"
|
|
false
|
|
}
|
|
} catch { |err|
|
|
log error $" ✗ Manifest template test failed: ($err.msg)"
|
|
false
|
|
}
|
|
}
|
|
|
|
# Run all tests
|
|
export def main []: nothing -> record {
|
|
log info "="
|
|
log info "OCI Implementation Test Suite"
|
|
log info "="
|
|
log info ""
|
|
|
|
mut results = {
|
|
oci_tools: (test oci-tools)
|
|
kcl_schemas: (test kcl-schemas)
|
|
nushell_modules: (test nushell-modules)
|
|
directory_structure: (test directory-structure)
|
|
documentation: (test documentation)
|
|
implementation_size: (test implementation-size)
|
|
manifest_template: (test manifest-template)
|
|
}
|
|
|
|
log info ""
|
|
log info "="
|
|
log info "Test Summary"
|
|
log info "="
|
|
|
|
let total = ($results | values | length)
|
|
let passed = ($results | values | where $it == true | length)
|
|
let failed = ($total - $passed)
|
|
|
|
log info $"Total tests: ($total)"
|
|
log info $"Passed: ($passed)"
|
|
log info $"Failed: ($failed)"
|
|
log info ""
|
|
|
|
# Show failed tests
|
|
if $failed > 0 {
|
|
log warning "Failed tests:"
|
|
for test in ($results | transpose key value) {
|
|
if not $test.value {
|
|
log warning $" - ($test.key)"
|
|
}
|
|
}
|
|
}
|
|
|
|
if $failed == 0 {
|
|
log info "✓ All tests passed!"
|
|
} else {
|
|
log warning $"⚠ ($failed) test(s) failed"
|
|
}
|
|
|
|
$results
|
|
}
|