diff --git a/.ci_scripts/run_cppcheck.sh b/.ci_scripts/run_cppcheck.sh new file mode 100755 index 0000000000000000000000000000000000000000..fa0d3122f1a326fd0111236f8c1a7b7145c6729e --- /dev/null +++ b/.ci_scripts/run_cppcheck.sh @@ -0,0 +1,18 @@ +EXITCODE=0 + +# Pattern matching on all source files +for file in $(find $GITHUB_WORKSPACE/include $GITHUB_WORKSPACE/src $GITHUB_WORKSPACE/test -name *.h -o -name *.c) +do + if [[ "$file" != *"/hashmap.c" ]] + then + # Run cppcheck on each file + cppcheck --error-exitcode=1 "$file" + # If the exit code is not 0, set EXITCODE to 1 + if [[ $? -ne 0 ]] + then + EXITCODE=1 + fi + fi +done + +exit $EXITCODE diff --git a/.ci_scripts/run_tests.sh b/.ci_scripts/run_tests.sh new file mode 100755 index 0000000000000000000000000000000000000000..8404a1a027d11ae17b9d114e43bf92ac2b66f566 --- /dev/null +++ b/.ci_scripts/run_tests.sh @@ -0,0 +1,20 @@ +EXITCODE=0 +VALGRIND_SUPP="$GITHUB_WORKSPACE/.ci_scripts/valgrind.supp" + +for file in $GITHUB_WORKSPACE/bin/test/* +do + if [[ $# -eq 1 && $1 == valgrind ]] + then + valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --suppressions="$VALGRIND_SUPP" --error-exitcode=1 "$file" + else + "$file" + fi + + # If the exit code is not 0, set EXITCODE to 1 + if [[ $? -ne 0 ]] + then + EXITCODE=1 + fi +done + +exit $EXITCODE diff --git a/.ci_scripts/valgrind.supp b/.ci_scripts/valgrind.supp new file mode 100644 index 0000000000000000000000000000000000000000..58737389074fd2a9549e627f0d0aa9236260b6a6 --- /dev/null +++ b/.ci_scripts/valgrind.supp @@ -0,0 +1,137 @@ +{ + suppr_1 + Memcheck:Param + socketcall.sendto(msg) + fun:sendto + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd + fun:test_exec_nft_cmd + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests + fun:main +} + +{ + suppr_2 + Memcheck:Param + sendmsg(msg.msg_iov[0]) + fun:sendmsg + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd + fun:test_exec_nft_cmd + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests + fun:main +} + +{ + suppr_3 + Memcheck:Param + sendmsg(msg.msg_iov[0]) + fun:sendmsg + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd_verbose + fun:test_exec_nft_cmd_verbose + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests + fun:main +} + +{ + suppr_4 + Memcheck:Param + socketcall.sendto(msg) + fun:sendto + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd_verbose + fun:delete_nft_rule + fun:test_delete_nft_rule + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests + fun:main +} + +{ + suppr_5 + Memcheck:Param + socketcall.sendto(msg) + fun:sendto + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd_verbose + fun:delete_nft_rule + fun:test_delete_nft_rule + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests +} + +{ + suppr_6 + Memcheck:Param + socketcall.sendto(msg) + fun:sendto + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd_verbose + fun:delete_nft_rule + fun:test_delete_nft_rule + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests + fun:main +} + +{ + suppr_7 + Memcheck:Param + socketcall.sendto(msg) + fun:sendto + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd_verbose + fun:delete_nft_rule + fun:test_delete_nft_rule + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests + fun:main +} + +{ + suppr_8 + Memcheck:Param + socketcall.sendto(msg) + fun:sendto + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + obj:/usr/lib/x86_64-linux-gnu/libnftables.so.1.1.0 + fun:nft_run_cmd_from_buffer + fun:exec_nft_cmd_verbose + fun:delete_nft_rule + fun:test_delete_nft_rule + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + obj:/usr/lib/x86_64-linux-gnu/libcunit.so.1.0.1 + fun:CU_run_all_tests +} diff --git a/.github/workflows/unit-tests.yaml b/.github/workflows/unit-tests.yaml index e377e7550c6f067b9c71c7251891f9bed7e03307..271081cb36049582bcc2f45ba096bbb914a10da4 100644 --- a/.github/workflows/unit-tests.yaml +++ b/.github/workflows/unit-tests.yaml @@ -12,16 +12,16 @@ jobs: uses: actions/checkout@v3 - name: Install required packages - run: sudo $GITHUB_WORKSPACE/.ci_scripts/full-test/install_packages.sh + run: sudo $GITHUB_WORKSPACE/.ci_scripts/install_packages.sh - name: Build project with CMake run: $GITHUB_WORKSPACE/build.sh -d $GITHUB_WORKSPACE - name: Run CUnit tests - run: $GITHUB_WORKSPACE/.ci_scripts/full-test/run_tests.sh + run: $GITHUB_WORKSPACE/.ci_scripts/run_tests.sh - name: Run Valgrind on CUnit tests - run: $GITHUB_WORKSPACE/.ci_scripts/full-test/run_tests.sh valgrind + run: $GITHUB_WORKSPACE/.ci_scripts/run_tests.sh valgrind - name: Run cppcheck on source files - run: $GITHUB_WORKSPACE/.ci_scripts/full-test/run_cppcheck.sh + run: $GITHUB_WORKSPACE/.ci_scripts/run_cppcheck.sh