69 lines
4.0 KiB
Bash
69 lines
4.0 KiB
Bash
#!/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'
|