153 lines
4.3 KiB
Text
153 lines
4.3 KiB
Text
#!/usr/bin/env nu
|
|
|
|
# Server lifecycle integration tests
|
|
|
|
def test-result [name: string, result: bool] {
|
|
if $result {
|
|
print $"✓ ($name)"
|
|
} else {
|
|
print $"✗ ($name)"
|
|
}
|
|
$result
|
|
}
|
|
|
|
def load-mocks [] {
|
|
open tests/mocks/mock_api_responses.json
|
|
}
|
|
|
|
def test-list-servers [] {
|
|
let mocks = (load-mocks)
|
|
let servers = $mocks.servers_list.servers
|
|
|
|
test-result "Lifecycle: List servers returns data" (($servers | length) > 0)
|
|
}
|
|
|
|
def test-server-info-structure [] {
|
|
let mocks = (load-mocks)
|
|
let server = ($mocks.servers_list.servers | get -o 0)
|
|
|
|
let t1 = (test-result "Lifecycle: Server has id" ($server | get -o id | is-not-empty))
|
|
let t2 = (test-result "Lifecycle: Server has name" ($server | get -o name | is-not-empty))
|
|
let t3 = (test-result "Lifecycle: Server has instance_type" ($server | get -o instance_type | is-not-empty))
|
|
let t4 = (test-result "Lifecycle: Server has zone" ($server | get -o zone | is-not-empty))
|
|
|
|
$t1 and $t2 and $t3 and $t4
|
|
}
|
|
|
|
def test-server-creation-response [] {
|
|
let config = {name: "new-server", instance_type: "medium", zone: "us-west-1"}
|
|
|
|
let t1 = (test-result "Lifecycle: Server creation requires name" ($config | get -o name | is-not-empty))
|
|
let t2 = (test-result "Lifecycle: Server creation has type" ($config | get -o instance_type | is-not-empty))
|
|
|
|
$t1 and $t2
|
|
}
|
|
|
|
def test-server-state-transitions [] {
|
|
let mocks = (load-mocks)
|
|
let servers = $mocks.servers_list.servers
|
|
|
|
let running = ($servers | where {|s| $s.status == "running"} | length)
|
|
let stopped = ($servers | where {|s| $s.status == "stopped"} | length)
|
|
|
|
let t1 = (test-result "Lifecycle: Running state exists" ($running > 0))
|
|
let t2 = (test-result "Lifecycle: Stopped state exists" ($stopped > 0))
|
|
|
|
$t1 and $t2
|
|
}
|
|
|
|
def test-instance-type-info [] {
|
|
let mocks = (load-mocks)
|
|
let pricing = $mocks.pricing_data
|
|
|
|
let small = ($pricing | where {|p| $p.instance_type == "small"} | get -o 0)
|
|
|
|
test-result "Lifecycle: Instance type pricing available" ($small | get -o hourly_rate | is-not-empty)
|
|
}
|
|
|
|
def test-zone-info [] {
|
|
let mocks = (load-mocks)
|
|
let server = ($mocks.servers_list.servers | get -o 0)
|
|
|
|
test-result "Lifecycle: Server has zone info" ($server | get -o zone | is-not-empty)
|
|
}
|
|
|
|
def test-volume-attachment [] {
|
|
let mocks = (load-mocks)
|
|
let volumes = $mocks.volumes_list.volumes
|
|
|
|
let in_use = ($volumes | where {|v| $v.status == "in-use"} | length)
|
|
|
|
test-result "Lifecycle: Volumes can be attached" ($in_use > 0)
|
|
}
|
|
|
|
def test-multiple-servers [] {
|
|
let mocks = (load-mocks)
|
|
let servers = $mocks.servers_list.servers
|
|
|
|
test-result "Lifecycle: Multiple servers available" (($servers | length) > 1)
|
|
}
|
|
|
|
def test-server-naming [] {
|
|
let mocks = (load-mocks)
|
|
let servers = $mocks.servers_list.servers
|
|
let names = ($servers | each {|s| $s.name})
|
|
|
|
let unique_names = ($names | uniq | length)
|
|
|
|
test-result "Lifecycle: Servers have unique names" ($unique_names > 0)
|
|
}
|
|
|
|
def test-instance-type-variety [] {
|
|
let mocks = (load-mocks)
|
|
let servers = $mocks.servers_list.servers
|
|
let types = ($servers | each {|s| $s.instance_type})
|
|
|
|
let unique_types = ($types | uniq | length)
|
|
|
|
test-result "Lifecycle: Different instance types available" ($unique_types > 0)
|
|
}
|
|
|
|
def test-zone-variety [] {
|
|
let mocks = (load-mocks)
|
|
let servers = $mocks.servers_list.servers
|
|
let zones = ($servers | each {|s| $s.zone})
|
|
|
|
let unique_zones = ($zones | uniq | length)
|
|
|
|
test-result "Lifecycle: Servers in different zones" ($unique_zones > 0)
|
|
}
|
|
|
|
def main [] {
|
|
print "=== Server Lifecycle Integration Tests ==="
|
|
print ""
|
|
|
|
let results = [
|
|
(test-list-servers),
|
|
(test-server-info-structure),
|
|
(test-server-creation-response),
|
|
(test-server-state-transitions),
|
|
(test-instance-type-info),
|
|
(test-zone-info),
|
|
(test-volume-attachment),
|
|
(test-multiple-servers),
|
|
(test-server-naming),
|
|
(test-instance-type-variety),
|
|
(test-zone-variety),
|
|
(test-list-servers)
|
|
]
|
|
|
|
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
|