117 lines
2.8 KiB
Bash
117 lines
2.8 KiB
Bash
#!/bin/bash
|
|
|
|
SERV_IP=$(ip -4 -o addr show scope global | awk '{print $4}' | sed -e 's:/.*::' | head -n1)
|
|
SERVER_CONF="/etc/openvpn/openvpn.conf"
|
|
TEST1_OVPN="/etc/openvpn/test1.ovpn"
|
|
|
|
# Function to fail
|
|
abort() { cat <<< "$@" 1>&2; exit 1; }
|
|
|
|
# Check a config (haystack) for a given line (needle) exit with error if not found.
|
|
test_config() {
|
|
|
|
local needle="${2}"
|
|
local file="${1}"
|
|
|
|
busybox grep -q "${needle}" "${file}"
|
|
if [ $? -ne 0 ]; then
|
|
abort "==> Config match not found: ${needle}"
|
|
fi
|
|
}
|
|
|
|
# Check a config (haystack) for absence of given line (needle) exit with error
|
|
# if found.
|
|
test_not_config() {
|
|
|
|
local needle="${2}"
|
|
local file="${1}"
|
|
|
|
busybox grep -vq "${needle}" "${file}"
|
|
if [ $? -ne 0 ]; then
|
|
abort "==> Config match found: ${needle}"
|
|
fi
|
|
}
|
|
|
|
|
|
#
|
|
# Generate openvpn.config file
|
|
#
|
|
read -d '' MULTILINE_EXTRA_SERVER_CONF << EOF
|
|
management localhost 7505
|
|
max-clients 10
|
|
EOF
|
|
|
|
ovpn_genconfig \
|
|
-u udp://$SERV_IP \
|
|
-f 1400 \
|
|
-k '60 300' \
|
|
-e "$MULTILINE_EXTRA_SERVER_CONF" \
|
|
-e 'duplicate-cn' \
|
|
-e 'topology subnet' \
|
|
-p 'route 172.22.22.0 255.255.255.0' \
|
|
|
|
# Run ovpn_genconfig a second time with no arguments to test its repeatability.
|
|
ovpn_genconfig
|
|
|
|
#
|
|
# Simple test cases
|
|
#
|
|
|
|
# 1. verb config
|
|
test_config "${SERVER_CONF}" "^verb\s\+3"
|
|
|
|
# 2. fragment config
|
|
test_config "${SERVER_CONF}" "^fragment\s\+1400"
|
|
|
|
## Tests for extra configs
|
|
# 3. management config
|
|
test_config "${SERVER_CONF}" "^management\s\+localhost\s\+7505"
|
|
|
|
# 4. max-clients config
|
|
test_config "${SERVER_CONF}" "^max-clients\s\+10"
|
|
|
|
# 5. duplicate-cn config
|
|
test_config "${SERVER_CONF}" "^duplicate-cn"
|
|
|
|
# 6. topology config
|
|
test_config "${SERVER_CONF}" "^topology\s\+subnet"
|
|
|
|
## Tests for push config
|
|
# 7. push route
|
|
test_config "${SERVER_CONF}" '^push\s\+"route\s\+172.22.22.0\s\+255.255.255.0"'
|
|
|
|
## Test for default
|
|
# 8. Should see default route if none provided
|
|
test_config "${SERVER_CONF}" "^route\s\+192.168.254.0\s\+255.255.255.0"
|
|
|
|
# 9. Should see a push of 'block-outside-dns' by default
|
|
test_config "${SERVER_CONF}" '^push\s\+"block-outside-dns"'
|
|
|
|
# 10. Should see a push of 'dhcp-option DNS' by default
|
|
test_config "${SERVER_CONF}" '^push\s\+"dhcp-option\s\+DNS\s\+8.8.8.8"'
|
|
test_config "${SERVER_CONF}" '^push\s\+"dhcp-option\s\+DNS\s\+8.8.4.4"'
|
|
|
|
## Test for keepalive
|
|
# 11. keepalive config
|
|
test_config "${SERVER_CONF}" '^keepalive\s\+60\s\+300'
|
|
|
|
|
|
#
|
|
# More elaborate route tests
|
|
#
|
|
|
|
ovpn_genconfig -u udp://$SERV_IP -r "172.33.33.0/24" -r "172.34.34.0/24"
|
|
|
|
test_config "${SERVER_CONF}" "^route\s\+172.33.33.0\s\+255.255.255.0"
|
|
test_config "${SERVER_CONF}" "^route\s\+172.34.34.0\s\+255.255.255.0"
|
|
|
|
|
|
#
|
|
# Block outside DNS test
|
|
#
|
|
|
|
ovpn_genconfig -u udp://$SERV_IP -b
|
|
|
|
test_not_config "${SERVER_CONF}" '^push "block-outside-dns"'
|
|
cat ${SERVER_CONF} >&1
|