Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

55 lines
1.8 KiB
Plaintext

# This test verifies basic agent-controller communication in the Management
# framework. We launch agent and controller via the supervisor, add an extra
# handler for the notify_agent_hello event that travels agent -> controller, and
# verify that it prints receipt of the event to stdout.
# The following environment variables are known to the controller framework:
# @TEST-PORT: ZEEK_CONTROLLER_PORT
# @TEST-PORT: BROKER_PORT
# @TEST-EXEC: ZEEK_MANAGEMENT_TESTING=1 btest-bg-run zeek zeek -j %INPUT
# @TEST-EXEC: btest-bg-wait 10
# @TEST-EXEC: btest-diff zeek/nodes/controller/stdout
@load policy/frameworks/management/agent
@load policy/frameworks/management/controller
redef Broker::default_port = to_port(getenv("BROKER_PORT"));
redef Management::Controller::name = "controller";
redef Management::Agent::name = "agent";
# Tell the agent where to locate the controller.
redef Management::Agent::controller = [$address="127.0.0.1", $bound_port=to_port(getenv("ZEEK_CONTROLLER_PORT"))];
@if ( Supervisor::is_supervised() )
@load policy/frameworks/management/agent/api
global logged = F;
event zeek_init()
{
# We're using the controller to shut everything down once the
# notify_agent_hello event has arrived. The controller doesn't normally
# talk to the supervisor, so connect to it.
if ( Management::role == Management::CONTROLLER )
Broker::peer(getenv("ZEEK_DEFAULT_LISTEN_ADDRESS"), Broker::default_port, Broker::default_listen_retry);
}
event Management::Agent::API::notify_agent_hello(instance: string, id: string, connecting: bool, api_version: count)
{
if ( Management::role == Management::CONTROLLER )
{
if ( ! logged )
print(fmt("notify_agent_hello %s %s", instance, api_version));
logged = T;
# This takes down the whole process tree.
Broker::publish(SupervisorControl::topic_prefix, SupervisorControl::stop_request);
}
}
@endif