Files
IPTables-Management/tests/test_storage.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

49 lines
1.8 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"
TMP_DIR=$(mktemp -d)
trap 'rm -rf "${TMP_DIR}"' EXIT
export IPF_STORAGE_DIR="${TMP_DIR}/storage"
export IPF_STORAGE_DB="${IPF_STORAGE_DIR}/rules.db"
export IPF_LOCK_FILE="${IPF_STORAGE_DIR}/.lock"
# shellcheck source=lib/storage.sh
source "${ROOT_DIR}/lib/storage.sh"
storage_init
[[ -f ${IPF_STORAGE_DB} ]] || fail 'storage_init should create rules db'
line1='uuid=a1|proto=tcp|lport=80|tip=127.0.0.1|tport=8080|ipver=4|desc=one|created=2026-04-17T00:00:00+0800'
line2='uuid=b2|proto=udp|lport=53|tip=127.0.0.1|tport=5353|ipver=4|desc=two|created=2026-04-17T00:00:01+0800'
line3='uuid=c3|proto=both|lport=22|tip=127.0.0.1,::1|tport=22|ipver=both|desc=three|created=2026-04-17T00:00:02+0800'
storage_add "${line1}"
storage_add "${line2}"
storage_add "${line3}"
assert_eq '3' "$(storage_count)" 'storage_count should reflect inserted lines'
mapfile -t listed < <(storage_list)
assert_eq "${line1}" "${listed[0]}" 'storage_list should preserve insertion order'
assert_eq "${line2}" "${listed[1]}" 'storage_list should preserve second line'
assert_eq "${line3}" "${listed[2]}" 'storage_list should preserve third line'
assert_eq "${line2}" "$(storage_get 'b2')" 'storage_get should find existing uuid'
if storage_get 'missing' >/dev/null 2>&1; then
fail 'storage_get should fail for missing uuid'
fi
storage_delete 'b2'
assert_eq '2' "$(storage_count)" 'storage_delete should remove one line'
if storage_delete 'b2' >/dev/null 2>&1; then
fail 'storage_delete should fail for missing uuid'
fi
assert_eq '2' "$(storage_count)" 'storage_delete failure should keep file unchanged'
assert_eq '22' "$(storage_parse "${line3}" tport)" 'storage_parse should extract requested field'
pass 'test_storage.sh'