diff --git a/openvpn-install.sh b/openvpn-install.sh index 6b98872..f31428b 100755 --- a/openvpn-install.sh +++ b/openvpn-install.sh @@ -1854,8 +1854,7 @@ cmd_interactive() { if isOpenVPNInstalled; then manageMenu else - installQuestions - installOpenVPN + cmd_install --interactive fi } diff --git a/test/Dockerfile.server b/test/Dockerfile.server index 2886b18..1f2ee10 100644 --- a/test/Dockerfile.server +++ b/test/Dockerfile.server @@ -68,8 +68,9 @@ RUN chmod +x /opt/openvpn-install.sh # Copy test scripts COPY test/server-entrypoint.sh /entrypoint.sh COPY test/validate-output.sh /opt/test/validate-output.sh +COPY test/interactive-install-routing.sh /opt/test/interactive-install-routing.sh COPY test/local-network-detection.sh /opt/test/local-network-detection.sh -RUN chmod +x /entrypoint.sh /opt/test/validate-output.sh /opt/test/local-network-detection.sh +RUN chmod +x /entrypoint.sh /opt/test/validate-output.sh /opt/test/interactive-install-routing.sh /opt/test/local-network-detection.sh # Create systemd service for the test script # PassEnvironment passes Docker env vars (-e) from PID 1 to the service diff --git a/test/interactive-install-routing.sh b/test/interactive-install-routing.sh new file mode 100755 index 0000000..d848ac3 --- /dev/null +++ b/test/interactive-install-routing.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# shellcheck disable=SC1091,SC2034 +# SC1091: The installer path is provided by the test environment. +# SC2034: Configuration globals are consumed by sourced installer functions. +set -euo pipefail + +INSTALLER=${1:-/opt/openvpn-install.sh} + +export FORCE_COLOR=0 LOG_FILE="" NON_INTERACTIVE_INSTALL=n OUTPUT_FORMAT=table +# shellcheck source=../openvpn-install.sh +source "$INSTALLER" + +fail() { + echo "FAIL: $1" >&2 + exit 1 +} + +# Exercise command orchestration without touching the host system. +isOpenVPNInstalled() { + return 1 +} + +installQuestions() { + CLIENT_IPV4=y + CLIENT_IPV6=n + VPN_SUBNET_IPV4=10.8.0.0 + ROUTE_INTERNET=y +} + +validate_configuration() { + CONFIG_VALIDATED=y +} + +installOpenVPN() { + [[ ${CONFIG_VALIDATED:-n} == y ]] || fail "interactive configuration was not validated" + [[ ${VPN_GATEWAY_IPV4:-} == 10.8.0.1 ]] || fail "IPv4 gateway was not prepared before installation" + [[ ${IPV6_SUPPORT:-} == n ]] || fail "legacy IPv6 support value was not prepared before installation" + INSTALL_CALLED=y +} + +cmd_interactive + +[[ ${INSTALL_CALLED:-n} == y ]] || fail "interactive installation was not started" + +echo "PASS: Interactive command uses the canonical installation flow" diff --git a/test/server-entrypoint.sh b/test/server-entrypoint.sh index 25aa0a9..49d0ad7 100755 --- a/test/server-entrypoint.sh +++ b/test/server-entrypoint.sh @@ -3,6 +3,7 @@ set -e echo "=== OpenVPN Server Container ===" +/opt/test/interactive-install-routing.sh /opt/openvpn-install.sh /opt/test/local-network-detection.sh /opt/openvpn-install.sh # Create TUN device if it doesn't exist