214 lines
7.2 KiB
Text
214 lines
7.2 KiB
Text
|
|
#!/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
|