xref: /netbsd-src/external/bsd/jemalloc.old/dist/test/unit/hooks.c (revision 8e33eff89e26cf71871ead62f0d5063e1313c33a)
1*8e33eff8Schristos #include "test/jemalloc_test.h"
2*8e33eff8Schristos 
3*8e33eff8Schristos static bool hook_called = false;
4*8e33eff8Schristos 
5*8e33eff8Schristos static void
6*8e33eff8Schristos hook() {
7*8e33eff8Schristos 	hook_called = true;
8*8e33eff8Schristos }
9*8e33eff8Schristos 
10*8e33eff8Schristos static int
11*8e33eff8Schristos func_to_hook(int arg1, int arg2) {
12*8e33eff8Schristos 	return arg1 + arg2;
13*8e33eff8Schristos }
14*8e33eff8Schristos 
15*8e33eff8Schristos #define func_to_hook JEMALLOC_HOOK(func_to_hook, hooks_libc_hook)
16*8e33eff8Schristos 
17*8e33eff8Schristos TEST_BEGIN(unhooked_call) {
18*8e33eff8Schristos 	hooks_libc_hook = NULL;
19*8e33eff8Schristos 	hook_called = false;
20*8e33eff8Schristos 	assert_d_eq(3, func_to_hook(1, 2), "Hooking changed return value.");
21*8e33eff8Schristos 	assert_false(hook_called, "Nulling out hook didn't take.");
22*8e33eff8Schristos }
23*8e33eff8Schristos TEST_END
24*8e33eff8Schristos 
25*8e33eff8Schristos TEST_BEGIN(hooked_call) {
26*8e33eff8Schristos 	hooks_libc_hook = &hook;
27*8e33eff8Schristos 	hook_called = false;
28*8e33eff8Schristos 	assert_d_eq(3, func_to_hook(1, 2), "Hooking changed return value.");
29*8e33eff8Schristos 	assert_true(hook_called, "Hook should have executed.");
30*8e33eff8Schristos }
31*8e33eff8Schristos TEST_END
32*8e33eff8Schristos 
33*8e33eff8Schristos int
34*8e33eff8Schristos main(void) {
35*8e33eff8Schristos 	return test(
36*8e33eff8Schristos 	    unhooked_call,
37*8e33eff8Schristos 	    hooked_call);
38*8e33eff8Schristos }
39