zeek/testing/btest/scripts/base/frameworks/intel/expire-item.zeek
Jon Siwek 7967a5b0aa General btest cleanup
- Use `-b` most everywhere, it will save time.

- Start some intel tests upon the input file being fully read instead of
  at an arbitrary time.

- Improve termination condition for some sumstats/cluster tests.

- Filter uninteresting output from some supervisor tests.

- Test for `notice_policy.log` is no longer needed.
2020-08-11 11:26:22 -07:00

87 lines
2.1 KiB
Text

# @TEST-EXEC: btest-bg-run zeekproc zeek -b %INPUT
# @TEST-EXEC: btest-bg-wait 45
# @TEST-EXEC: cat zeekproc/intel.log > output
# @TEST-EXEC: cat zeekproc/.stdout >> output
# @TEST-EXEC: btest-diff output
# @TEST-START-FILE intel.dat
#fields indicator indicator_type meta.source meta.desc meta.url
1.2.3.4 Intel::ADDR source1 this host is bad http://some-data-distributor.com/1
192.168.0.0/16 Intel::SUBNET source1 this network is bad http://some-data-distributor.com/2
# @TEST-END-FILE
@load frameworks/intel/do_expire
redef exit_only_after_terminate = T;
redef Intel::read_files += { "../intel.dat" };
redef enum Intel::Where += { SOMEWHERE };
global runs = 0;
global entries_read = 0;
global start_time: time;
global expire_count = 0;
const intel_expiry = 9sec;
redef Intel::item_expiration = intel_expiry;
redef table_expire_interval = 0.2sec;
event do_it()
{
++runs;
print fmt("-- Run %s --", runs);
print "Seen: 1.2.3.4";
Intel::seen([$host=1.2.3.4, $where=SOMEWHERE]);
if ( runs == 4 )
schedule 1sec { do_it() };
else if ( runs > 4 )
terminate();
}
event Intel::match(s: Intel::Seen, items: set[Intel::Item])
{
print fmt("Match: %s", s$indicator);
}
hook Intel::item_expired(indicator: string, indicator_type: Intel::Type,
metas: set[Intel::MetaData])
{
++expire_count;
if ( expire_count == 2 )
# Check that time of expiry indicates is approximately what's expected
# after having been refreshed.
print fmt("Expired: %s (took longer: %s)", indicator, (network_time() - start_time) > intel_expiry + 2sec);
else
print fmt("Expired: %s", indicator);
event do_it();
}
event refresh()
{
# Reinserting the indicator should reset the expiration
local item = [
$indicator="1.2.3.4",
$indicator_type=Intel::ADDR,
$meta=[
$source="source2",
$desc="this host is still bad",
$url="http://some-data-distributor.com/2"]
];
Intel::insert(item);
event do_it();
}
event Intel::read_entry(desc: Input::EventDescription, tpe: Input::Event, item: Intel::Item)
{
++entries_read;
if ( entries_read == 2 )
{
start_time = network_time();
event do_it();
schedule 3sec { refresh() };
}
}