mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
177 lines
3.9 KiB
Text
177 lines
3.9 KiB
Text
# @TEST-DOC: Testing round-robin of Log::write() across two loggers.
|
|
#
|
|
# @TEST-REQUIRES: have-zeromq
|
|
#
|
|
# @TEST-PORT: XPUB_PORT
|
|
# @TEST-PORT: XSUB_PORT
|
|
# @TEST-PORT: LOG_PULL_PORT_1
|
|
# @TEST-PORT: LOG_PULL_PORT_2
|
|
#
|
|
# @TEST-EXEC: chmod +x ./check-log.sh
|
|
#
|
|
# @TEST-EXEC: cp $FILES/zeromq/cluster-layout-two-loggers.zeek cluster-layout.zeek
|
|
# @TEST-EXEC: cp $FILES/zeromq/test-bootstrap.zeek zeromq-test-bootstrap.zeek
|
|
#
|
|
# @TEST-EXEC: zeek -b --parse-only common.zeek manager.zeek worker.zeek
|
|
#
|
|
# @TEST-EXEC: btest-bg-run manager "ZEEKPATH=$ZEEKPATH:.. && CLUSTER_NODE=manager zeek -b ../manager.zeek >out"
|
|
# @TEST-EXEC: btest-bg-run logger-1 "ZEEKPATH=$ZEEKPATH:.. && CLUSTER_NODE=logger-1 zeek -b ../common.zeek >out"
|
|
# @TEST-EXEC: btest-bg-run logger-2 "ZEEKPATH=$ZEEKPATH:.. && CLUSTER_NODE=logger-2 zeek -b ../common.zeek >out"
|
|
# @TEST-EXEC: btest-bg-run worker-1 "ZEEKPATH=$ZEEKPATH:.. && CLUSTER_NODE=worker-1 zeek -b ../worker.zeek >out"
|
|
# @TEST-EXEC: btest-bg-run worker-2 "ZEEKPATH=$ZEEKPATH:.. && CLUSTER_NODE=worker-2 zeek -b ../worker.zeek >out"
|
|
#
|
|
# @TEST-EXEC: btest-bg-wait 30
|
|
#
|
|
# @TEST-EXEC: test $(grep -c worker-1 logger-1/rr2.log) -gt 10
|
|
# @TEST-EXEC: test $(grep -c worker-2 logger-1/rr2.log) -gt 10
|
|
# @TEST-EXEC: test $(grep -c worker-1 logger-2/rr2.log) -gt 10
|
|
# @TEST-EXEC: test $(grep -c worker-2 logger-2/rr2.log) -gt 10
|
|
|
|
# @TEST-EXEC: zeek-cut < logger-1/rr2.log > rr2.log
|
|
# @TEST-EXEC: zeek-cut < logger-2/rr2.log >> rr2.log
|
|
# @TEST-EXEC: sort -n rr2.log > rr2.log.sorted
|
|
# @TEST-EXEC: btest-diff rr2.log.sorted
|
|
|
|
# @TEST-START-FILE common.zeek
|
|
@load ./zeromq-test-bootstrap.zeek
|
|
|
|
redef Log::default_rotation_interval = 0sec;
|
|
redef Log::flush_interval = 0.03sec;
|
|
redef Log::write_buffer_size = 7;
|
|
|
|
module LogRR;
|
|
|
|
export {
|
|
redef enum Log::ID += { LOG1, LOG2 };
|
|
type Info: record {
|
|
c: count &log;
|
|
from: string &log &default=Cluster::node;
|
|
};
|
|
|
|
global go: event();
|
|
global finish: event();
|
|
}
|
|
|
|
event zeek_init()
|
|
{
|
|
Log::create_stream(LOG1, [$columns=Info, $path="rr1"]);
|
|
Log::create_stream(LOG2, [$columns=Info, $path="rr2"]);
|
|
}
|
|
|
|
event finish()
|
|
{
|
|
terminate();
|
|
}
|
|
# @TEST-END-FILE
|
|
|
|
# @TEST-START-FILE manager.zeek
|
|
@load ./common.zeek
|
|
|
|
event check_ready()
|
|
{
|
|
if ( ! piped_exec("../check-log.sh", "") )
|
|
{
|
|
Reporter::error("check-log.sh failed");
|
|
terminate();
|
|
}
|
|
|
|
if ( file_size("DONE") >= 0 )
|
|
{
|
|
Cluster::publish(Cluster::worker_topic, LogRR::go);
|
|
return;
|
|
}
|
|
|
|
schedule 0.1sec { check_ready() };
|
|
}
|
|
|
|
event zeek_init()
|
|
{
|
|
event check_ready();
|
|
}
|
|
|
|
|
|
global nodes_down: set[string];
|
|
|
|
event Cluster::node_down(name: string, id: string)
|
|
{
|
|
print current_time(), "node_down", name;
|
|
add nodes_down[name];
|
|
|
|
if ( |nodes_down| == 2 ) # workers down
|
|
Cluster::publish(Cluster::logger_topic, LogRR::finish);
|
|
|
|
if ( |nodes_down| == 4 ) # both loggers down
|
|
terminate();
|
|
}
|
|
# @TEST-END-FILE
|
|
|
|
|
|
# @TEST-START-FILE worker.zeek
|
|
@load ./common.zeek
|
|
|
|
global do_write2 = F;
|
|
|
|
event write_log1(c: count)
|
|
{
|
|
if ( do_write2 )
|
|
{
|
|
Log::write(LogRR::LOG1, [$c=10000000]);
|
|
return;
|
|
}
|
|
|
|
Log::write(LogRR::LOG1, [$c=c]);
|
|
Log::flush(LogRR::LOG1);
|
|
schedule 0.05sec { write_log1(++c) };
|
|
}
|
|
|
|
event write_log2(c: count)
|
|
{
|
|
if ( c == 100 )
|
|
{
|
|
terminate();
|
|
return;
|
|
}
|
|
|
|
Log::write(LogRR::LOG2, [$c=c]);
|
|
schedule 0.012sec { write_log2(++c) };
|
|
}
|
|
|
|
event LogRR::go()
|
|
{
|
|
do_write2 = T;
|
|
event write_log2(0);
|
|
}
|
|
|
|
event zeek_init()
|
|
{
|
|
event write_log1(0);
|
|
}
|
|
|
|
# @TEST-END-FILE
|
|
|
|
# @TEST-START-FILE check-log.sh
|
|
#!/usr/bin/env bash
|
|
#
|
|
# This script regularly checks for the loggers rr1.log file until
|
|
# both workers appear. Once this happens, creates a READY file
|
|
# which will result in workers getting the "go" and sending writes
|
|
# to rr2.log
|
|
set -eux
|
|
|
|
LOGGERS="logger-1 logger-2"
|
|
WORKERS="worker-1 worker-2"
|
|
|
|
for logger in $LOGGERS; do
|
|
for worker in $WORKERS; do
|
|
date +%s
|
|
echo check $logger $worker
|
|
if ! grep -q "${worker}" ../${logger}/rr1.log; then
|
|
exit 0
|
|
fi
|
|
done
|
|
done
|
|
|
|
echo "DONE"
|
|
echo "DONE" > DONE
|
|
exit 0
|
|
# @TEST-END-FILE
|