blob: c659fdca7de4de9fb8d85932ceea6d70e71160f7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#!/usr/bin/env bats
# Unit tests for installer/lib/config.sh
setup() {
# shellcheck disable=SC1091
source "${BATS_TEST_DIRNAME}/../../installer/lib/common.sh"
# shellcheck disable=SC1091
source "${BATS_TEST_DIRNAME}/../../installer/lib/config.sh"
}
@test "parse_args stores --config-file path" {
parse_args --config-file /tmp/foo.conf
[ "$CONFIG_FILE" = "/tmp/foo.conf" ]
}
@test "parse_args rejects --config-file with no argument" {
run parse_args --config-file
[ "$status" -eq 1 ]
[[ "$output" == *"requires a path"* ]]
}
@test "parse_args rejects --config-file when value looks like a flag" {
run parse_args --config-file --help
[ "$status" -eq 1 ]
[[ "$output" == *"requires a path"* ]]
}
@test "parse_args --color enables color vars" {
[ -z "$RED" ]
parse_args --color
[ -n "$RED" ]
}
@test "parse_args --help shows usage and exits 0" {
run parse_args --help
[ "$status" -eq 0 ]
[[ "$output" == *"Usage:"* ]]
[[ "$output" == *"--config-file"* ]]
}
@test "parse_args rejects unknown option" {
run parse_args --not-a-real-flag
[ "$status" -eq 1 ]
[[ "$output" == *"Unknown option"* ]]
}
@test "load_config errors on missing file" {
run load_config /nonexistent/path/archangel.conf
[ "$status" -eq 1 ]
[[ "$output" == *"Config file not found"* ]]
}
@test "load_config parses a minimal config and sets UNATTENDED" {
local tmp
tmp=$(mktemp)
cat >"$tmp" <<'EOF'
HOSTNAME=testhost
TIMEZONE=UTC
DISKS=/dev/sda,/dev/sdb
ROOT_PASSWORD=secret
EOF
load_config "$tmp"
[ "$HOSTNAME" = "testhost" ]
[ "$TIMEZONE" = "UTC" ]
[ "$ROOT_PASSWORD" = "secret" ]
[ "${SELECTED_DISKS[0]}" = "/dev/sda" ]
[ "${SELECTED_DISKS[1]}" = "/dev/sdb" ]
[ "$UNATTENDED" = "true" ]
rm -f "$tmp"
}
@test "load_config parses a single-disk config into 1-element array" {
local tmp
tmp=$(mktemp)
echo "DISKS=/dev/nvme0n1" >"$tmp"
load_config "$tmp"
[ "${#SELECTED_DISKS[@]}" -eq 1 ]
[ "${SELECTED_DISKS[0]}" = "/dev/nvme0n1" ]
rm -f "$tmp"
}
@test "validate_config fails and lists every missing required field" {
HOSTNAME=""
TIMEZONE=""
SELECTED_DISKS=()
ROOT_PASSWORD=""
run validate_config
[ "$status" -eq 1 ]
[[ "$output" == *"HOSTNAME not set"* ]]
[[ "$output" == *"TIMEZONE not set"* ]]
[[ "$output" == *"No disks selected"* ]]
[[ "$output" == *"ROOT_PASSWORD not set"* ]]
[[ "$output" == *"4 error"* ]]
}
@test "validate_config rejects an invalid timezone" {
HOSTNAME="h"
TIMEZONE="Not/A_Real_Zone_xyz"
SELECTED_DISKS=()
ROOT_PASSWORD="x"
run validate_config
[ "$status" -eq 1 ]
[[ "$output" == *"Invalid timezone"* ]]
}
@test "check_config is a no-op when CONFIG_FILE is unset" {
CONFIG_FILE=""
run check_config
[ "$status" -eq 0 ]
[ -z "$output" ]
}
|