zeek/testing/btest/language/hook_calls.zeek
2025-04-17 16:30:23 +02:00

88 lines
1.5 KiB
Text

# @TEST-EXEC: zeek -b valid.zeek >valid.out
# @TEST-EXEC: btest-diff valid.out
# @TEST-EXEC-FAIL: zeek -b invalid.zeek > invalid.out 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff invalid.out
# hook functions must be called using the "hook" keyword as an operator...
# @TEST-START-FILE valid.zeek
hook myhook(i: count)
{
print "myhook()", i;
if ( i == 0 ) break;
}
hook myhook(i: count) &priority=-1
{
print "other myhook()", i;
}
function indirect(): hook(i: count)
{
print "indirect()";
return myhook;
}
function really_indirect(): function(): hook(i: count)
{
print "really_indirect()";
return indirect;
}
global t: table[count] of hook(i: count) = {
[0] = myhook,
};
event zeek_init()
{
hook myhook(3);
print hook myhook(3);
print hook myhook(0);
print "-----------";
hook indirect()(3);
print hook indirect()(3);
print "-----------";
hook really_indirect()()(3);
print hook really_indirect()()(3);
print "-----------";
local h = t[0];
hook h(3);
print hook h(3);
if ( hook h(3) )
print "yes";
if ( ! hook h(0) )
print "double yes";
print "-----------";
hook t[0](3);
print hook t[0](3);
}
# @TEST-END-FILE
# @TEST-START-FILE invalid.zeek
hook myhook(i: count)
{
print "myhook()", i;
if ( i == 0 ) break;
}
function foo()
{
print "foo()";
}
event zeek_init()
{
myhook(3);
print myhook(3);
print myhook(0);
hook 2+2;
print hook 2+2;
local h = myhook;
h(3);
if ( h(3) )
print "hmm";
print "done";
hook foo();
}
# @TEST-END-FILE