container-openvpn/test/tests/conf_options/container.sh

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