@@ -704,6 +704,41 @@ notrack_nft remove
704704assert_rc " notrack_nft remove succeeds when file and table both absent" 0 $?
705705__nft_rc=0
706706
707+ # ── nft binary absent: notrack_nft is a no-op ──
708+ # Without firewall4/nftables installed, the package should not error;
709+ # `command -v nft` returns non-zero and notrack_nft returns 0 immediately.
710+ rm -rf " $TESTDIR /usr/share"
711+ __saved_nft_def=" $( typeset -f nft 2> /dev/null || declare -f nft) "
712+ unset -f nft
713+ mkdir -p " $TESTDIR /empty-path"
714+ __saved_path=" $PATH "
715+ PATH=" $TESTDIR /empty-path"
716+
717+ notrack_nft update " 53"
718+ assert_rc " notrack_nft update is a no-op when nft binary is absent" 0 $?
719+
720+ [ ! -f " $NOTRACK_TEST_FILE " ]
721+ assert_rc " notrack_nft did not write snippet when nft is absent" 0 $?
722+
723+ PATH=" $__saved_path "
724+ eval " $__saved_nft_def "
725+
726+ # ── mkdir failure path returns non-zero ──
727+ # Place a regular file at the would-be parent dir so mkdir -p must fail.
728+ # Defensive logic should return 1 instead of falling through to a broken
729+ # redirection.
730+ rm -rf " $TESTDIR /usr/share"
731+ mkdir -p " $( dirname " $( dirname " $NOTRACK_TEST_FILE " ) " ) "
732+ : > " $( dirname " $NOTRACK_TEST_FILE " ) "
733+
734+ notrack_nft update " 53" 2> /dev/null
735+ assert_rc " notrack_nft update returns 1 when parent dir cannot be created" 1 $?
736+
737+ [ ! -f " $NOTRACK_TEST_FILE " ]
738+ assert_rc " notrack_nft did not write snippet on mkdir failure" 0 $?
739+
740+ rm -f " $( dirname " $NOTRACK_TEST_FILE " ) "
741+
707742# ##############################################################################
708743# SHELL SCRIPT SYNTAX #
709744# ##############################################################################
0 commit comments