]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
fix macOS build for plugin unit test
authorColin Vidal <colin@isc.org>
Wed, 30 Jul 2025 07:54:05 +0000 (09:54 +0200)
committerColin Vidal <colin@isc.org>
Wed, 30 Jul 2025 07:58:47 +0000 (09:58 +0200)
MR !10753 breaks macOS build for plugin unit test as its linker doesn't
supports `--wrap` option, which is used in in order to mock the function
`isc_file_exits()`.

To work around the problem, a mocked `isc_file_exits()` is implemented
inside the plugin test as a static function before inlining the file
using it, which effectively links to this version rather than the isclib
one.

tests/ns/meson.build
tests/ns/plugin_test.c

index ca0270ca376129d0b6a2a1051e887d03f327d92d..7d4e2e30fafb8b3653f737884c3c6d7a72e7886d 100644 (file)
@@ -14,12 +14,6 @@ foreach unit : [
     'plugin',
     'query',
 ]
-    linkargs = ''
-    if unit == 'plugin'
-        linkargs = [
-            '-Wl,--wrap=isc_file_exists',
-        ]
-    endif
     test_bin = executable(
         unit,
         files(f'@unit@_test.c', 'netmgr_wrap.c'),
@@ -37,7 +31,6 @@ foreach unit : [
             cmocka_dep,
             nghttp2_dep,
         ],
-        link_args: linkargs,
     )
 
     test(
index 1de3e7c989e2e5a8c4d0095ab3b79e19ce3b4193..3a23d43476880883b611acb0501bd07af144108c 100644 (file)
 
 #include <dns/lib.h>
 
-#include "../ns/hooks.c"
-
-bool
-__wrap_isc_file_exists(const char *pathname);
-
-bool
-__wrap_isc_file_exists(const char *pathname) {
+/*
+ * Mocking isc_file_exists() as it's used inside the tested
+ * ns_plugin_expandpath() function defined in lib/ns/hooks.c
+ */
+static bool
+isc_file_exists(const char *pathname) {
        UNUSED(pathname);
        return mock();
 }
 
+#include "../ns/hooks.c"
+
 #include <tests/ns.h>
 
 /*%
@@ -75,7 +76,7 @@ run_full_path_test(const ns_plugin_expandpath_test_params_t *test,
        REQUIRE(test->result != ISC_R_SUCCESS || test->output != NULL);
 
        if (test->result == ISC_R_SUCCESS) {
-               will_return(__wrap_isc_file_exists, test->exists);
+               will_return(isc_file_exists, test->exists);
        }
 
        /*