Commit bc83f558 authored by Vitaly Lipatov's avatar Vitaly Lipatov

cli: report ipset query failures

parent 005dc432
......@@ -4,23 +4,25 @@ setname="eterban_1"
setname_ipv6="eterban_1_ipv6"
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"
[ -n "$command" ] && shift
if [ "$command" = "count" ] ; then
count_v4=$(count_set "$setname") || exit 1
count_v6=$(count_set "$setname_ipv6") || exit 1
echo "Count of banned:"
echo "$setname: $(count_set "$setname")"
echo "$setname_ipv6: $(count_set "$setname_ipv6")"
echo "$setname: $count_v4"
echo "$setname_ipv6: $count_v6"
exit
fi
if [ "$command" = "list" ] ; then
ipset list $setname
ipset list $setname_ipv6
exit
ipset list "$setname" && ipset list "$setname_ipv6"
exit $?
fi
if [ "$command" = "unban" ] ; then
......
......@@ -26,6 +26,9 @@ cat >"$bin_dir/ipset" <<'EOF'
printf 'ipset %s\n' "$*" >>"$ETERBAN_TEST_RECORD"
case "$1" in
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}"
;;
test)
......@@ -67,6 +70,7 @@ run_cli() {
: >"$test_tmp/stderr"
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_LIST_FAILURES="${ETERBAN_TEST_LIST_FAILURES:-}" \
sh "$test_tmp/eterban" "$@" >"$test_tmp/stdout" 2>"$test_tmp/stderr"; then
cli_status=0
else
......@@ -85,6 +89,14 @@ assert_status "$cli_status" 0
assert_file 'ipset list eterban_1
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
assert_status "$cli_status" 0
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