zeek/testing/btest/core/dict-iteration-expire1.zeek

52 lines
1.2 KiB
Text

# @TEST-EXEC: zeek -b %INPUT
# @TEST-DOC: Regression test #2017; no output check, just shouldn't crash
redef table_expire_interval = 0.1sec;
redef table_incremental_step = 100;
redef table_expire_delay = 0.5sec;
redef exit_only_after_terminate = T;
global tbl: table[string] of vector of count &default = vector() &create_expire=1sec;
const populates_per_second = 100;
const populates_num = 100;
global done = F;
event do_terminate() {
terminate();
}
event cleanup(idx: string) {
delete tbl[idx];
# terminate a bit after all elements will finally have been expired
if ( done && |tbl| == 0 )
schedule 1sec { do_terminate() };
}
event populate(round: count) {
local i = 0;
while (++i < populates_num) {
local val = rand(1000000);
local val_str = cat(val);
# print(fmt("round %s %s val=%s", round, i, val));
tbl[val_str] = vector(val);
# Schedule an explicit delete at most a second away.
local random_cleanup_delay = double_to_interval(rand(100) / 100.0);
schedule random_cleanup_delay { cleanup(val_str) };
}
if ( round <= 200 ) {
print(fmt("round %s size=%s", round, |tbl|));
schedule 1sec/populates_per_second { populate(++round) };
}
else
done = T;
}
event zeek_init() {
event populate(1);
}