zeek/testing/btest/cluster/generic/publish-unspecified.zeek
Arne Welzel fdf783df65 cluster/Backend: Handle unspecified table/set
Same as what we do in Broker. Use the expected type if publishing
a table() or set() parameter.

This fixes issues when switching sumstats to Cluster::publish()
2024-12-12 17:54:42 +01:00

90 lines
2.5 KiB
Text

# @TEST-DOC: Startup a manager running the ZeroMQ proxy thread, a worker connects and the manager sends a finish event to terminate the worker.
#
# @TEST-REQUIRES: have-zeromq
#
# @TEST-GROUP: cluster-zeromq
#
# @TEST-PORT: XPUB_PORT
# @TEST-PORT: XSUB_PORT
# @TEST-PORT: LOG_PULL_PORT
#
# @TEST-EXEC: cp $FILES/zeromq/cluster-layout-simple.zeek cluster-layout.zeek
# @TEST-EXEC: cp $FILES/zeromq/test-bootstrap.zeek zeromq-test-bootstrap.zeek
#
# @TEST-EXEC: zeek --parse-only 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 worker "ZEEKPATH=$ZEEKPATH:.. && CLUSTER_NODE=worker-1 zeek -b ../worker.zeek >out"
#
# @TEST-EXEC: btest-bg-wait 30
# @TEST-EXEC: btest-diff ./manager/out
# @TEST-EXEC: btest-diff ./worker/out
# @TEST-START-FILE common.zeek
@load ./zeromq-test-bootstrap
type ResultTable: table[string] of count;
type ResultSet : set[count];
global ping_table: event(msg: string, t: ResultTable) &is_used;
global pong_table: event(msg: string, t: ResultTable) &is_used;
global ping_set: event(msg: string, s: ResultSet) &is_used;
global pong_set: event(msg: string, s: ResultSet) &is_used;
global finish: event() &is_used;
# @TEST-END-FILE
# @TEST-START-FILE manager.zeek
@load ./common.zeek
# If a node comes up that isn't us, send it a finish event.
event Cluster::node_up(name: string, id: string)
{
print "node_up", name;
Cluster::publish(Cluster::nodeid_topic(id), ping_table, "hello", table());
Cluster::publish(Cluster::nodeid_topic(id), ping_set, "hello", set());
}
event pong_table(msg: string, t: ResultTable)
{
print "pong_table", msg, type_name(t), cat(t);
}
event pong_set(msg: string, t: ResultSet)
{
print "pong_set", msg, type_name(t), cat(t);
Cluster::publish(Cluster::worker_topic, finish);
}
# If the worker vanishes, finish the test.
event Cluster::node_down(name: string, id: string)
{
print "node_down", name;
terminate();
}
# @TEST-END-FILE
# @TEST-START-FILE worker.zeek
@load ./common.zeek
event ping_table(msg: string, t: ResultTable) &is_used
{
print "ping_table", msg, type_name(t), cat(t);
local e = Cluster::make_event(pong_table, msg, table());
Cluster::publish(Cluster::manager_topic, e);
}
event ping_set(msg: string, t: ResultSet) &is_used
{
print "ping_set", msg, type_name(t), cat(t);
local e = Cluster::make_event(pong_set, msg, set());
Cluster::publish(Cluster::manager_topic, e);
}
event finish()
{
terminate();
}
# @TEST-END-FILE