provisioning-catalog/providers/aws/tests/unit/test_utils.nu

214 lines
7.2 KiB
Text
Raw Permalink Normal View History

#!/usr/bin/env nu
# Unit tests for AWS utility functions
use std assert
def test-result [
name: string
result: bool
] {
if $result {
print $"✓ ($name)"
} else {
print $"✗ ($name)"
}
$result
}
# Test: Validate instance ID format
def test-validate-instance-id [] {
let valid_id = "i-1234567890abcdef0"
let invalid_id = "invalid-id"
let test1 = (test-result "parse_instance_id: valid format" ($valid_id | str contains "i-" and ($valid_id | str length) > 2))
let test2 = (test-result "parse_instance_id: invalid format" (($invalid_id | str contains "i-") == false))
$test1 and $test2
}
# Test: Extract IP address from string
def test-extract-ip [] {
let with_ip = "Instance 10.0.1.100 running"
let without_ip = "No IP address"
let test1 = (test-result "extract_ip_address: IPv4 present" ($with_ip | str contains "10.0.1.100"))
let test2 = (test-result "extract_ip_address: IPv4 absent" (($without_ip | str contains ".") == false))
$test1 and $test2
}
# Test: Validate IPv4 format
def test-validate-ipv4 [] {
let valid = "10.0.1.100"
let invalid = "256.256.256.256"
let test1 = (test-result "validate_ipv4: valid address" ((($valid | split row ".") | length) == 4))
let test2 = (test-result "validate_ipv4: invalid address" ((($invalid | split row ".") | length) == 4))
$test1 and $test2
}
# Test: Validate instance type format
def test-validate-instance-type [] {
let valid_types = ["t3.micro" "t3.small" "m5.large" "c5.xlarge"]
let invalid_type = "invalid_type"
let test1 = (test-result "validate_instance_type: t3.micro" (($valid_types | contains ["t3.micro"])))
let test2 = (test-result "validate_instance_type: invalid" (($valid_types | contains [$invalid_type]) == false))
$test1 and $test2
}
# Test: Validate availability zone format
def test-validate-availability-zone [] {
let valid_zones = ["us-east-1a" "us-east-1b" "us-west-2a" "eu-west-1a"]
let invalid_zone = "invalid-zone"
let test1 = (test-result "validate_zone: us-east-1a" (($valid_zones | contains ["us-east-1a"])))
let test2 = (test-result "validate_zone: invalid" (($valid_zones | contains [$invalid_zone]) == false))
$test1 and $test2
}
# Test: Validate volume ID format
def test-validate-volume-id [] {
let valid_vol = "vol-12345678"
let invalid_vol = "invalid-vol"
let test1 = (test-result "parse_volume_id: valid format" ($valid_vol | str contains "vol-" and ($valid_vol | str length) > 4))
let test2 = (test-result "parse_volume_id: invalid format" (($invalid_vol | str contains "vol-") == false))
$test1 and $test2
}
# Test: Validate volume state
def test-validate-volume-state [] {
let valid_states = ["creating" "available" "in-use" "deleting" "deleted" "error"]
let invalid_state = "pending"
let test1 = (test-result "validate_volume_state: available" (($valid_states | contains ["available"])))
let test2 = (test-result "validate_volume_state: in-use" (($valid_states | contains ["in-use"])))
let test3 = (test-result "validate_volume_state: invalid" (($valid_states | contains [$invalid_state]) == false))
$test1 and $test2 and $test3
}
# Test: Validate CIDR block format
def test-validate-cidr-block [] {
let valid_cidr = "10.0.0.0/16"
let invalid_cidr = "10.0.0.1"
let test1 = (test-result "validate_cidr_block: valid 10.0.0.0/16" ($valid_cidr | str contains "/"))
let test2 = (test-result "validate_cidr_block: invalid format" (($invalid_cidr | str contains "/") == false))
$test1 and $test2
}
# Test: Validate volume type
def test-validate-volume-type [] {
let valid_types = ["gp2" "gp3" "io1" "io2" "st1" "sc1" "standard"]
let invalid_type = "invalid-type"
let test1 = (test-result "validate_volume_type: gp3" (($valid_types | contains ["gp3"])))
let test2 = (test-result "validate_volume_type: io1" (($valid_types | contains ["io1"])))
let test3 = (test-result "validate_volume_type: invalid" (($valid_types | contains [$invalid_type]) == false))
$test1 and $test2 and $test3
}
# Test: Parse timestamp format
def test-parse-timestamp [] {
let valid_timestamp = "2025-01-07T10:00:00.000Z"
let invalid_timestamp = "not-a-timestamp"
let test1 = (test-result "timestamp_parsing: valid ISO 8601" ($valid_timestamp | str contains "T" and $valid_timestamp | str contains "Z"))
let test2 = (test-result "timestamp_parsing: invalid format" (($invalid_timestamp | str contains "T") == false))
$test1 and $test2
}
# Test: Validate server state
def test-validate-server-state [] {
let valid_states = ["pending" "running" "shutting-down" "terminated" "stopping" "stopped"]
let invalid_state = "hibernating"
let test1 = (test-result "validate_server_state: running" (($valid_states | contains ["running"])))
let test2 = (test-result "validate_server_state: stopped" (($valid_states | contains ["stopped"])))
let test3 = (test-result "validate_server_state: invalid" (($valid_states | contains [$invalid_state]) == false))
$test1 and $test2 and $test3
}
# Test: Parse security group ID
def test-parse-security-group-id [] {
let valid_sg = "sg-12345678"
let invalid_sg = "invalid-sg"
let test1 = (test-result "parse_security_group_id: valid format" ($valid_sg | str contains "sg-" and ($valid_sg | str length) > 3))
let test2 = (test-result "parse_security_group_id: invalid format" (($invalid_sg | str contains "sg-") == false))
$test1 and $test2
}
# Test: Validate memory amount
def test-validate-memory-amount [] {
let valid_mems = ["512 MB" "1 GB" "2 GB" "4 GB" "8 GB" "16 GB"]
let invalid_mem = "0 GB"
let test1 = (test-result "validate_memory_amount: 1 GB" (($valid_mems | contains ["1 GB"])))
let test2 = (test-result "validate_memory_amount: 4 GB" (($valid_mems | contains ["4 GB"])))
let test3 = (test-result "validate_memory_amount: 0 GB invalid" (($valid_mems | contains [$invalid_mem]) == false))
$test1 and $test2 and $test3
}
# Test: Validate vCPU count
def test-validate-vcpu-count [] {
let valid_cpus = [1, 2, 4, 8, 16, 32]
let invalid_cpu = 0
let test1 = (test-result "validate_cpu_count: 1 vCPU" (($valid_cpus | contains [1])))
let test2 = (test-result "validate_cpu_count: 4 vCPU" (($valid_cpus | contains [4])))
let test3 = (test-result "validate_cpu_count: 0 vCPU invalid" (($valid_cpus | contains [$invalid_cpu]) == false))
$test1 and $test2 and $test3
}
# Main test execution
def main [] {
print "=== AWS Unit Tests ==="
print ""
let results = [
(test-validate-instance-id),
(test-extract-ip),
(test-validate-ipv4),
(test-validate-instance-type),
(test-validate-availability-zone),
(test-validate-volume-id),
(test-validate-volume-state),
(test-validate-cidr-block),
(test-validate-volume-type),
(test-parse-timestamp),
(test-validate-server-state),
(test-parse-security-group-id),
(test-validate-memory-amount),
(test-validate-vcpu-count)
]
let passed = ($results | where {|it| $it == true} | length)
let failed = ($results | where {|it| $it == false} | length)
print ""
print $"Test Results: ($passed) passed, ($failed) failed"
{
passed: $passed,
failed: $failed,
total: ($passed + $failed)
}
}
main