Log extensions: series of small fixes and new tests.

The extensions now work with optional types, as well with complex types
(like subrecords). Not returning a record in the ext_func no longer
crashes bro.

The default_ext_func was switched to return void in
cases where no extension revord is defined (was bool).

I also got rid of the offsets in the indices - with the rest of the
implementation, that was not really necessary and made the code more
complex.
This commit is contained in:
Johanna Amann 2016-08-10 13:51:42 -07:00
parent 79e49e1ab5
commit 6e769db23b
12 changed files with 517 additions and 322 deletions

View file

@ -0,0 +1,37 @@
# @TEST-EXEC: bro -b -r $TRACES/wikipedia.trace %INPUT
# @TEST-EXEC: btest-diff conn.log
@load base/protocols/conn
type InnerRecord: record {
a: count;
b: count;
c: count;
};
type InnerLoggedRecord: record {
a: count &log;
b: count;
c: count &log;
d: set[count] &log;
};
type Extension: record {
write_ts: time &log;
stream: string &log;
inner: InnerRecord;
innerLogged: InnerLoggedRecord &log;
system_name: string &log;
};
function add_extension(path: string): Extension
{
return Extension($write_ts = network_time(),
$stream = path,
$system_name = peer_description,
$inner = InnerRecord($a=1,$b=2,$c=3),
$innerLogged = InnerLoggedRecord($a=1,$b=2,$c=3,$d=set(1,2,3,4))
);
}
redef Log::default_ext_func = add_extension;

View file

@ -0,0 +1,17 @@
# @TEST-EXEC: bro -b -r $TRACES/http/get.trace %INPUT
# @TEST-EXEC: btest-diff conn.log
# @TEST-EXEC: btest-diff .stderr
@load base/protocols/conn
type Extension: record {
write_ts: time &log;
stream: string &log;
system_name: string &log;
};
function add_extension(path: string): Extension
{
}
redef Log::default_ext_func = add_extension;

View file

@ -0,0 +1,20 @@
# @TEST-EXEC: bro -b -r $TRACES/wikipedia.trace %INPUT
# @TEST-EXEC: btest-diff conn.log
@load base/protocols/conn
type Extension: record {
write_ts: time &log;
stream: string;
system_name: string &log &optional;
undefined_string: string &log &optional;
};
function add_extension(path: string): Extension
{
return Extension($write_ts = network_time(),
$stream = path,
$system_name = peer_description);
}
redef Log::default_ext_func = add_extension;

View file

@ -0,0 +1,22 @@
# @TEST-EXEC-FAIL: bro -b -r $TRACES/wikipedia.trace %INPUT
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderr
@load base/protocols/conn
type Extension: record {
write_ts: time &log;
stream: string &log;
tab: table[count] of count &log;
system_name: string &log;
};
function add_extension(path: string): Extension
{
return Extension($write_ts = network_time(),
$stream = path,
$system_name = peer_description,
$tab = { [1] = 2, [2] = 3}
);
}
redef Log::default_ext_func = add_extension;