Files
IPTables-Management/tests/test_common.sh
ahdoawhfo 26fbcf3584 Mark runnable scripts executable in git
The repo was committed from WSL with core.filemode=false, so the exec
bit was never recorded. After actions/checkout the entry script comes
down as 100644 and tests/test_cli.sh fails with Permission denied.

Set mode 100755 on every script that is invoked directly (entry,
installer, test suite, mock binaries). Sourced helpers under lib/
keep 100644 per convention.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 13:58:42 +08:00

69 lines
4.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
# shellcheck source=tests/lib/assert.sh
source "${ROOT_DIR}/tests/lib/assert.sh"
# shellcheck source=lib/common.sh
source "${ROOT_DIR}/lib/common.sh"
status_of() {
set +e
"$@" >/dev/null 2>&1
local rc=$?
set -e
printf '%s\n' "${rc}"
}
prompt_tmp=$(mktemp)
trap 'rm -f "${prompt_tmp}"' EXIT
export IPF_TEST_INPUTS=$'first\nsecond\n'
prompt_input 'first prompt' '' >"${prompt_tmp}"
assert_eq 'first' "$(cat "${prompt_tmp}")" 'prompt_input should consume the first queued test input'
prompt_input 'second prompt' '' >"${prompt_tmp}"
assert_eq 'second' "$(cat "${prompt_tmp}")" 'prompt_input should consume subsequent queued test inputs'
assert_eq '' "${IPF_TEST_INPUTS}" 'prompt_input should drain queued test inputs in the current shell'
unset IPF_TEST_INPUTS
assert_eq '4' "$(display_width '协议')" 'display_width should count CJK characters as double width'
assert_eq '8' "$(display_width 'IPv4规则')" 'display_width should handle ASCII and CJK mixed text'
assert_status 0 "$(status_of validate_ipv4 '0.0.0.0')" 'validate_ipv4 should accept 0.0.0.0'
assert_status 0 "$(status_of validate_ipv4 '192.168.1.1')" 'validate_ipv4 should accept private address'
assert_status 0 "$(status_of validate_ipv4 '255.255.255.255')" 'validate_ipv4 should accept broadcast'
assert_status 1 "$(status_of validate_ipv4 '256.1.1.1')" 'validate_ipv4 should reject overflow octet'
assert_status 1 "$(status_of validate_ipv4 '1.2.3')" 'validate_ipv4 should reject short address'
assert_status 1 "$(status_of validate_ipv4 'abc')" 'validate_ipv4 should reject text'
assert_status 1 "$(status_of validate_ipv4 '')" 'validate_ipv4 should reject empty string'
assert_status 0 "$(status_of validate_ipv6 '::1')" 'validate_ipv6 should accept loopback'
assert_status 0 "$(status_of validate_ipv6 '2001:db8::1')" 'validate_ipv6 should accept compressed address'
assert_status 0 "$(status_of validate_ipv6 'fe80::1%eth0')" 'validate_ipv6 should accept scoped address'
assert_status 0 "$(status_of validate_ipv6 '::ffff:192.0.2.128')" 'validate_ipv6 should accept embedded ipv4 tail'
assert_status 1 "$(status_of validate_ipv6 ':::1')" 'validate_ipv6 should reject malformed address'
assert_status 1 "$(status_of validate_ipv6 '2001::1::1')" 'validate_ipv6 should reject multiple compression markers'
assert_status 1 "$(status_of validate_ipv6 '12345::1')" 'validate_ipv6 should reject oversized hextet'
assert_status 1 "$(status_of validate_ipv6 '2001:db8::1::')" 'validate_ipv6 should reject trailing double compression'
assert_status 1 "$(status_of validate_ipv6 '1.2.3.4')" 'validate_ipv6 should reject ipv4 literal'
assert_status 1 "$(status_of validate_ipv6 '')" 'validate_ipv6 should reject empty string'
assert_status 0 "$(status_of validate_port '1')" 'validate_port should accept lower bound'
assert_status 0 "$(status_of validate_port '65535')" 'validate_port should accept upper bound'
assert_status 1 "$(status_of validate_port '0')" 'validate_port should reject zero'
assert_status 1 "$(status_of validate_port '65536')" 'validate_port should reject overflow'
assert_status 1 "$(status_of validate_port '-1')" 'validate_port should reject negative'
assert_status 1 "$(status_of validate_port 'abc')" 'validate_port should reject text'
assert_status 0 "$(status_of validate_proto 'tcp')" 'validate_proto should accept tcp'
assert_status 0 "$(status_of validate_proto 'udp')" 'validate_proto should accept udp'
assert_status 0 "$(status_of validate_proto 'both')" 'validate_proto should accept both'
assert_status 1 "$(status_of validate_proto 'icmp')" 'validate_proto should reject unsupported protocol'
assert_status 0 "$(status_of validate_ipver '4')" 'validate_ipver should accept 4'
assert_status 0 "$(status_of validate_ipver '6')" 'validate_ipver should accept 6'
assert_status 0 "$(status_of validate_ipver 'both')" 'validate_ipver should accept both'
assert_status 1 "$(status_of validate_ipver '5')" 'validate_ipver should reject unsupported family'
pass 'test_common.sh'