# @TEST-SERIALIZE: brokercomm # @TEST-REQUIRES: grep -q ENABLE_BROKER:BOOL=true $BUILD/CMakeCache.txt # @TEST-EXEC: btest-bg-run recv "bro -b ../recv.bro broker_port=$BROKER_PORT >recv.out" # @TEST-EXEC: btest-bg-run send "bro -b ../send.bro broker_port=$BROKER_PORT >send.out" # @TEST-EXEC: btest-bg-wait 20 # @TEST-EXEC: btest-diff recv/recv.out # @TEST-EXEC: btest-diff send/send.out @TEST-START-FILE recv.bro const broker_port: port &redef; redef exit_only_after_terminate = T; global event_handler: event(msg: string, c: count); global auto_event_handler: event(msg: string, c: count); event bro_init() { Broker::enable(); Broker::subscribe_to_events("bro/event/"); Broker::auto_event("bro/event/my_topic", auto_event_handler); Broker::listen(broker_port, "127.0.0.1"); } global event_count = 0; global events_to_recv = 6; event event_handler(msg: string, n: count) { ++event_count; print "got event msg", msg, n; if ( event_count == events_to_recv ) { terminate(); return; } event auto_event_handler(msg, n); local args = Broker::event_args(event_handler, "pong", n); Broker::send_event("bro/event/my_topic", args); } @TEST-END-FILE @TEST-START-FILE send.bro const broker_port: port &redef; redef exit_only_after_terminate = T; global event_handler: event(msg: string, c: count); global auto_event_handler: event(msg: string, c: count); event bro_init() { Broker::enable(); Broker::subscribe_to_events("bro/event/my_topic"); Broker::connect("127.0.0.1", broker_port, 1secs); } global event_count = 0; event Broker::outgoing_connection_established(peer_address: string, peer_port: port, peer_name: string) { print "Broker::outgoing_connection_established", peer_address, peer_port; local args = Broker::event_args(event_handler, "ping", event_count); Broker::send_event("bro/event/hi", args); ++event_count; } event Broker::outgoing_connection_broken(peer_address: string, peer_port: port) { terminate(); } event event_handler(msg: string, n: count) { print "got event msg", msg, n; local args = Broker::event_args(event_handler, "ping", event_count); Broker::send_event("bro/event/hi", args); ++event_count; } event auto_event_handler(msg: string, n: count) { print "got auto event msg", msg, n; } @TEST-END-FILE