zeek/testing/btest/spicy/hook-priority.zeek
Evan Typanski 0c79849a0f Test .evt file &priority
This was not documented nor tested, so this tests the behavior.
Documentation should be added later.
2024-10-14 08:51:58 -04:00

71 lines
1.7 KiB
Text

# @TEST-REQUIRES: have-spicy
# @TEST-EXEC: spicyz -d -o foo.hlto foo.spicy foo.evt
# @TEST-EXEC: zeek -Cr ${TRACES}/http/post.trace Zeek::Spicy foo.hlto %INPUT >>output 2>&1
# @TEST-EXEC: btest-diff output
#
# @TEST-DOC: This test validates that hooks from EVT files are invoked after hooks in the Spicy grammar.
redef Spicy::enable_print = T;
event zeek_init()
{
Analyzer::register_for_port(Analyzer::ANALYZER_FOO, 80/tcp);
}
event foo_last(x: foo::X)
{
print "Zeek: lowest prio", x;
}
event foo(x: foo::X)
{
print "Zeek: default prio", x;
}
event foo_first(x: foo::X)
{
print "Zeek: highest prio", x;
}
# @TEST-START-FILE foo.spicy
module foo;
public type X = unit {
x: bytes &size=1;
on %done priority=-5000 {
self.x = b"lowest";
print "Spicy: lowest prio";
}
# Default Spicy hook priority is 0.
on %done {
self.x = b"default";
print "Spicy: default prio";
}
on %done priority=5000 {
self.x = b"highest";
print "Spicy: highest prio";
}
};
# @TEST-END-FILE
# @TEST-START-FILE foo.evt
# @TEST-START-FILE foo.evt
protocol analyzer Foo over TCP:
parse originator with foo::X;
# Default EVT hook priority is -1000, but this hook will only execute after the
# Spicy hooks since it needs to go through Zeek's event loop (we might schedule
# immediately, but execution happens later). We can observe what state it saw
# by examining the data though which above Spicy hooks mutate; we expect to see
# data from the default priority handler since we should run right after it.
on foo::X -> event foo(self);
on foo::X -> event foo_first(self) &priority=-500;
on foo::X -> event foo_last(self) &priority=-1500;
export foo::X;
# @TEST-END-FILE