mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00

* alphabet * another * associated * avoiding * base * because * constructors * defining * deterministic * directly * endlessly * entity * function * indefinitely * initial * interpreter * into * modifying * negotiate * nonexistent * observations * occasional * omission * orphaned * overridden * passing * primitive * produces * reassembly * repository * restore * shouldn't * something * statement * the * therefore * transferred * uninitialized * unsuccessful Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
68 lines
1.4 KiB
Text
68 lines
1.4 KiB
Text
# @TEST-EXEC: btest-bg-run zeek zeek -b %INPUT
|
|
# @TEST-EXEC: btest-bg-wait 10
|
|
# @TEST-EXEC: btest-diff zeek/.stdout
|
|
|
|
# The 'when' implementation historically performed an AST-traversal to locate
|
|
# any index-expressions like `x[9]` and evaluated them so that it could
|
|
# register the associated value as something for which it needs to receive
|
|
# "modification" notifications.
|
|
#
|
|
# Evaluating arbitrary expressions during an AST-traversal like that ignores
|
|
# the typical order-of-evaluation/short-circuiting you'd expect if the
|
|
# condition was evaluated normally, from its root expression. This test is
|
|
# checking that evaluation of 'when' conditions behaves according to those
|
|
# usual expectations.
|
|
|
|
redef exit_only_after_terminate = T;
|
|
|
|
type r: record {
|
|
a: count;
|
|
};
|
|
|
|
global x: table[count] of count;
|
|
global y: table[count] of r;
|
|
|
|
const event_interval = 0.05sec;
|
|
|
|
function foo()
|
|
{
|
|
when ( 9 in y && y[9]$a == 3 )
|
|
{
|
|
print "triggered when condition against 'y'";
|
|
terminate();
|
|
}
|
|
}
|
|
|
|
function bar()
|
|
{
|
|
when ( 9 in x && x[9] > 3 )
|
|
print "triggered when condition against 'x'";
|
|
}
|
|
|
|
global ev_count = 0;
|
|
event myevent()
|
|
{
|
|
++ev_count;
|
|
print "running myevent", ev_count;
|
|
local init_at = 3;
|
|
|
|
if ( ev_count == init_at )
|
|
{
|
|
x[9] = 2;
|
|
y[9] = r($a = 0);
|
|
}
|
|
else if ( ev_count > init_at )
|
|
{
|
|
++x[9];
|
|
++y[9]$a;
|
|
}
|
|
|
|
schedule event_interval { myevent() };
|
|
}
|
|
|
|
event zeek_init()
|
|
{
|
|
foo();
|
|
bar();
|
|
schedule event_interval { myevent() };
|
|
}
|