Commit bc83f558 authored by Vitaly Lipatov's avatar Vitaly Lipatov

cli: report ipset query failures

parent 005dc432
...@@ -4,23 +4,25 @@ setname="eterban_1" ...@@ -4,23 +4,25 @@ setname="eterban_1"
setname_ipv6="eterban_1_ipv6" setname_ipv6="eterban_1_ipv6"
count_set() { count_set() {
ipset list "$1" 2>/dev/null | awk '/^Number of entries:/ { print $4; found=1 } END { if (!found) print 0 }' output=$(ipset list "$1") || return 1
printf '%s\n' "$output" | awk '/^Number of entries:/ { print $4; found=1 } END { if (!found) print 0 }'
} }
command="$1" command="$1"
[ -n "$command" ] && shift [ -n "$command" ] && shift
if [ "$command" = "count" ] ; then if [ "$command" = "count" ] ; then
count_v4=$(count_set "$setname") || exit 1
count_v6=$(count_set "$setname_ipv6") || exit 1
echo "Count of banned:" echo "Count of banned:"
echo "$setname: $(count_set "$setname")" echo "$setname: $count_v4"
echo "$setname_ipv6: $(count_set "$setname_ipv6")" echo "$setname_ipv6: $count_v6"
exit exit
fi fi
if [ "$command" = "list" ] ; then if [ "$command" = "list" ] ; then
ipset list $setname ipset list "$setname" && ipset list "$setname_ipv6"
ipset list $setname_ipv6 exit $?
exit
fi fi
if [ "$command" = "unban" ] ; then if [ "$command" = "unban" ] ; then
......
...@@ -26,6 +26,9 @@ cat >"$bin_dir/ipset" <<'EOF' ...@@ -26,6 +26,9 @@ cat >"$bin_dir/ipset" <<'EOF'
printf 'ipset %s\n' "$*" >>"$ETERBAN_TEST_RECORD" printf 'ipset %s\n' "$*" >>"$ETERBAN_TEST_RECORD"
case "$1" in case "$1" in
list) list)
case " ${ETERBAN_TEST_LIST_FAILURES:-} " in
*" $2 "*) exit 1 ;;
esac
printf 'Name: %s\nNumber of entries: %s\n192.0.2.1\n' "$2" "${ETERBAN_TEST_COUNT:-2}" printf 'Name: %s\nNumber of entries: %s\n192.0.2.1\n' "$2" "${ETERBAN_TEST_COUNT:-2}"
;; ;;
test) test)
...@@ -67,6 +70,7 @@ run_cli() { ...@@ -67,6 +70,7 @@ run_cli() {
: >"$test_tmp/stderr" : >"$test_tmp/stderr"
if ETERBAN_TEST_RECORD="$record" ETERBAN_TEST_STATUS="${ETERBAN_TEST_STATUS:-0}" \ if ETERBAN_TEST_RECORD="$record" ETERBAN_TEST_STATUS="${ETERBAN_TEST_STATUS:-0}" \
ETERBAN_TEST_MATCHES="${ETERBAN_TEST_MATCHES:-}" ETERBAN_TEST_COUNT="${ETERBAN_TEST_COUNT:-2}" \ ETERBAN_TEST_MATCHES="${ETERBAN_TEST_MATCHES:-}" ETERBAN_TEST_COUNT="${ETERBAN_TEST_COUNT:-2}" \
ETERBAN_TEST_LIST_FAILURES="${ETERBAN_TEST_LIST_FAILURES:-}" \
sh "$test_tmp/eterban" "$@" >"$test_tmp/stdout" 2>"$test_tmp/stderr"; then sh "$test_tmp/eterban" "$@" >"$test_tmp/stdout" 2>"$test_tmp/stderr"; then
cli_status=0 cli_status=0
else else
...@@ -85,6 +89,14 @@ assert_status "$cli_status" 0 ...@@ -85,6 +89,14 @@ assert_status "$cli_status" 0
assert_file 'ipset list eterban_1 assert_file 'ipset list eterban_1
ipset list eterban_1_ipv6' "$record" ipset list eterban_1_ipv6' "$record"
ETERBAN_TEST_STATUS=0 ETERBAN_TEST_MATCHES='' ETERBAN_TEST_LIST_FAILURES='eterban_1' run_cli count
assert_status "$cli_status" 1
[ ! -s "$test_tmp/stdout" ] || fail 'count emitted a false result after an ipset failure'
ETERBAN_TEST_STATUS=0 ETERBAN_TEST_MATCHES='' ETERBAN_TEST_LIST_FAILURES='eterban_1' run_cli list
assert_status "$cli_status" 1
assert_file 'ipset list eterban_1' "$record"
ETERBAN_TEST_STATUS=0 ETERBAN_TEST_MATCHES='eterban_1' run_cli check 192.0.2.1 ETERBAN_TEST_STATUS=0 ETERBAN_TEST_MATCHES='eterban_1' run_cli check 192.0.2.1
assert_status "$cli_status" 0 assert_status "$cli_status" 0
assert_file '192.0.2.1 is BANNED (in eterban_1)' "$test_tmp/stdout" assert_file '192.0.2.1 is BANNED (in eterban_1)' "$test_tmp/stdout"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment