# @TEST-SERIALIZE: brokercomm # @TEST-REQUIRES: grep -q ENABLE_BROKER:BOOL=true $BUILD/CMakeCache.txt # @TEST-EXEC: btest-bg-run recv "bro -b ../common.bro ../recv.bro broker_port=$BROKER_PORT >recv.out" # @TEST-EXEC: btest-bg-run send "bro -b ../common.bro ../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 recv/test.log # @TEST-EXEC: btest-diff send/send.out # @TEST-EXEC: btest-diff send/test.log @TEST-START-FILE common.bro module Test; export { redef enum Log::ID += { LOG }; type Info: record { msg: string &log; nolog: string &default="no"; num: count &log; }; global log_test: event(rec: Test::Info); } event bro_init() &priority=5 { Broker::enable(); Log::create_stream(Test::LOG, [$columns=Test::Info, $ev=log_test]); } @TEST-END-FILE @TEST-START-FILE recv.bro const broker_port: port &redef; redef exit_only_after_terminate = T; event bro_init() { Broker::subscribe_to_logs("bro/log/"); Broker::listen(broker_port, "127.0.0.1"); } event Test::log_test(rec: Test::Info) { print "wrote log", rec; if ( rec$num == 5 ) terminate(); } @TEST-END-FILE @TEST-START-FILE send.bro const broker_port: port &redef; redef exit_only_after_terminate = T; event bro_init() { Broker::enable_remote_logs(Test::LOG); Broker::connect("127.0.0.1", broker_port, 1secs); } global n = 0; event do_write() { if ( n == 6 ) return; else { Log::write(Test::LOG, [$msg = "ping", $num = n]); ++n; event do_write(); } } event Broker::outgoing_connection_established(peer_address: string, peer_port: port, peer_name: string) { print "Broker::outgoing_connection_established", peer_address, peer_port; event do_write(); } event Broker::outgoing_connection_broken(peer_address: string, peer_port: port) { terminate(); } @TEST-END-FILE