mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 22:58:20 +00:00

The invalidset and invalidtext tests loaded an input file via table and event reads, in parallel. On FreeBSD this triggers an occasional reordering of messages coming out of the reader thread vs the input managers. This commit makes the table and event reads sequential, avoiding the race.
72 lines
1.7 KiB
Text
72 lines
1.7 KiB
Text
# @TEST-EXEC: btest-bg-run zeek zeek -b %INPUT
|
|
# @TEST-EXEC: btest-bg-wait 30
|
|
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-sort btest-diff out
|
|
# @TEST-EXEC: sed 1d .stderr > .stderrwithoutfirstline
|
|
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderrwithoutfirstline
|
|
|
|
@TEST-START-FILE input.log
|
|
#separator \x09
|
|
#fields i c
|
|
#types int count
|
|
l
|
|
5
|
|
@TEST-END-FILE
|
|
|
|
redef exit_only_after_terminate = T;
|
|
redef InputAscii::fail_on_invalid_lines = T;
|
|
|
|
global outfile: file;
|
|
|
|
module A;
|
|
|
|
type Idx: record {
|
|
i: string;
|
|
};
|
|
|
|
type Val: record {
|
|
c: count;
|
|
};
|
|
|
|
global endcount: count = 0;
|
|
|
|
global servers: table[string] of Val = table();
|
|
|
|
event handle_our_errors(desc: Input::TableDescription, msg: string, level: Reporter::Level)
|
|
{
|
|
print outfile, "TableErrorEvent", msg, level;
|
|
}
|
|
|
|
event handle_our_errors_event(desc: Input::EventDescription, msg: string, level: Reporter::Level)
|
|
{
|
|
print outfile, "EventErrorEvent", msg, level;
|
|
}
|
|
|
|
event line(description: Input::EventDescription, tpe: Input::Event, v: Val)
|
|
{
|
|
print outfile, "Event", v;
|
|
}
|
|
|
|
event zeek_init()
|
|
{
|
|
outfile = open("../out");
|
|
# first read in the old stuff into the table...
|
|
Input::add_table([$source="../input.log", $name="ssh", $error_ev=handle_our_errors, $idx=Idx, $val=Val, $destination=servers]);
|
|
}
|
|
|
|
event Input::end_of_data(name: string, source:string)
|
|
{
|
|
++endcount;
|
|
|
|
# ... and when we're done, move to reading via events.
|
|
# This makes the reads sequential, avoding races in the output.
|
|
if ( endcount == 1 )
|
|
{
|
|
Input::add_event([$source="../input.log", $name="sshevent", $error_ev=handle_our_errors_event, $fields=Val, $want_record=T, $ev=line]);
|
|
}
|
|
|
|
if ( endcount == 2 )
|
|
{
|
|
print outfile, servers;
|
|
terminate();
|
|
}
|
|
}
|