diff --git a/scripts/base/frameworks/cluster/main.bro b/scripts/base/frameworks/cluster/main.bro index 42a89d0795..261f3f1026 100644 --- a/scripts/base/frameworks/cluster/main.bro +++ b/scripts/base/frameworks/cluster/main.bro @@ -52,12 +52,21 @@ export { ## Events raised by a manager and handled by proxies. const manager2proxy_events = /EMPTY/ &redef; + ## Events raised by a manager and handled by loggers. + const manager2logger_events = /EMPTY/ &redef; + + ## Events raised by proxies and handled by loggers. + const proxy2logger_events = /EMPTY/ &redef; + ## Events raised by proxies and handled by a manager. const proxy2manager_events = /EMPTY/ &redef; ## Events raised by proxies and handled by workers. const proxy2worker_events = /EMPTY/ &redef; + ## Events raised by workers and handled by loggers. + const worker2logger_events = /EMPTY/ &redef; + ## Events raised by workers and handled by a manager. const worker2manager_events = /(TimeMachine::command|Drop::.*)/ &redef; diff --git a/scripts/base/frameworks/cluster/setup-connections.bro b/scripts/base/frameworks/cluster/setup-connections.bro index 3f0586dcc3..971a55d444 100644 --- a/scripts/base/frameworks/cluster/setup-connections.bro +++ b/scripts/base/frameworks/cluster/setup-connections.bro @@ -25,11 +25,18 @@ event bro_init() &priority=9 if ( me$node_type == LOGGER ) { - if ( (n$node_type == MANAGER || n$node_type == PROXY || - n$node_type == WORKER) && n$logger == node ) + if ( n$node_type == MANAGER && n$logger == node ) Communication::nodes[i] = [$host=n$ip, $zone_id=n$zone_id, $connect=F, - $class=i, $request_logs=T]; + $class=i, $events=manager2logger_events, $request_logs=T]; + if ( n$node_type == PROXY && n$logger == node ) + Communication::nodes[i] = + [$host=n$ip, $zone_id=n$zone_id, $connect=F, + $class=i, $events=proxy2logger_events, $request_logs=T]; + if ( n$node_type == WORKER && n$logger == node ) + Communication::nodes[i] = + [$host=n$ip, $zone_id=n$zone_id, $connect=F, + $class=i, $events=worker2logger_events, $request_logs=T]; } else if ( me$node_type == MANAGER ) { diff --git a/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/logger-1..stdout b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/logger-1..stdout new file mode 100644 index 0000000000..e10770a5cc --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/logger-1..stdout @@ -0,0 +1,5 @@ +Connected to a peer +Connected to a peer +Connected to a peer +Connected to a peer +Connected to a peer diff --git a/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/manager-1..stdout b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/manager-1..stdout new file mode 100644 index 0000000000..e10770a5cc --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/manager-1..stdout @@ -0,0 +1,5 @@ +Connected to a peer +Connected to a peer +Connected to a peer +Connected to a peer +Connected to a peer diff --git a/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/proxy-1..stdout b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/proxy-1..stdout new file mode 100644 index 0000000000..c3a1950daf --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/proxy-1..stdout @@ -0,0 +1,3 @@ +Connected to a peer +Connected to a peer +Connected to a peer diff --git a/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/proxy-2..stdout b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/proxy-2..stdout new file mode 100644 index 0000000000..c3a1950daf --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/proxy-2..stdout @@ -0,0 +1,3 @@ +Connected to a peer +Connected to a peer +Connected to a peer diff --git a/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/worker-1..stdout b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/worker-1..stdout new file mode 100644 index 0000000000..c3a1950daf --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/worker-1..stdout @@ -0,0 +1,3 @@ +Connected to a peer +Connected to a peer +Connected to a peer diff --git a/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/worker-2..stdout b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/worker-2..stdout new file mode 100644 index 0000000000..c3a1950daf --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.cluster.start-it-up-logger/worker-2..stdout @@ -0,0 +1,3 @@ +Connected to a peer +Connected to a peer +Connected to a peer diff --git a/testing/btest/scripts/base/frameworks/cluster/start-it-up-logger.bro b/testing/btest/scripts/base/frameworks/cluster/start-it-up-logger.bro new file mode 100644 index 0000000000..97f3698f36 --- /dev/null +++ b/testing/btest/scripts/base/frameworks/cluster/start-it-up-logger.bro @@ -0,0 +1,76 @@ +# @TEST-SERIALIZE: comm +# +# @TEST-EXEC: btest-bg-run logger-1 CLUSTER_NODE=logger-1 BROPATH=$BROPATH:.. bro %INPUT +# @TEST-EXEC: sleep 1 +# @TEST-EXEC: btest-bg-run manager-1 CLUSTER_NODE=manager-1 BROPATH=$BROPATH:.. bro %INPUT +# @TEST-EXEC: sleep 1 +# @TEST-EXEC: btest-bg-run proxy-1 CLUSTER_NODE=proxy-1 BROPATH=$BROPATH:.. bro %INPUT +# @TEST-EXEC: btest-bg-run proxy-2 CLUSTER_NODE=proxy-2 BROPATH=$BROPATH:.. bro %INPUT +# @TEST-EXEC: sleep 1 +# @TEST-EXEC: btest-bg-run worker-1 CLUSTER_NODE=worker-1 BROPATH=$BROPATH:.. bro %INPUT +# @TEST-EXEC: btest-bg-run worker-2 CLUSTER_NODE=worker-2 BROPATH=$BROPATH:.. bro %INPUT +# @TEST-EXEC: btest-bg-wait 30 +# @TEST-EXEC: btest-diff logger-1/.stdout +# @TEST-EXEC: btest-diff manager-1/.stdout +# @TEST-EXEC: btest-diff proxy-1/.stdout +# @TEST-EXEC: btest-diff proxy-2/.stdout +# @TEST-EXEC: btest-diff worker-1/.stdout +# @TEST-EXEC: btest-diff worker-2/.stdout + +@TEST-START-FILE cluster-layout.bro +redef Cluster::manager_is_logger = F; +redef Cluster::nodes = { + ["logger-1"] = [$node_type=Cluster::LOGGER, $ip=127.0.0.1, $p=37757/tcp], + ["manager-1"] = [$node_type=Cluster::MANAGER, $ip=127.0.0.1, $p=37758/tcp, $logger="logger-1", $workers=set("worker-1")], + ["proxy-1"] = [$node_type=Cluster::PROXY, $ip=127.0.0.1, $p=37759/tcp, $logger="logger-1", $manager="manager-1", $workers=set("worker-1")], + ["proxy-2"] = [$node_type=Cluster::PROXY, $ip=127.0.0.1, $p=37760/tcp, $logger="logger-1", $manager="manager-1", $workers=set("worker-2")], + ["worker-1"] = [$node_type=Cluster::WORKER, $ip=127.0.0.1, $p=37761/tcp, $logger="logger-1", $manager="manager-1", $proxy="proxy-1", $interface="eth0"], + ["worker-2"] = [$node_type=Cluster::WORKER, $ip=127.0.0.1, $p=37762/tcp, $logger="logger-1", $manager="manager-1", $proxy="proxy-2", $interface="eth1"], +}; +@TEST-END-FILE + +global fully_connected: event(); + +global peer_count = 0; + +global fully_connected_nodes = 0; + +event fully_connected() + { + ++fully_connected_nodes; + if ( Cluster::node == "logger-1" ) + { + if ( peer_count == 5 && fully_connected_nodes == 5 ) + terminate_communication(); + } + } + +redef Cluster::worker2logger_events += /fully_connected/; +redef Cluster::proxy2logger_events += /fully_connected/; +redef Cluster::manager2logger_events += /fully_connected/; + +event remote_connection_handshake_done(p: event_peer) + { + print "Connected to a peer"; + ++peer_count; + if ( Cluster::node == "logger-1" ) + { + if ( peer_count == 5 && fully_connected_nodes == 5 ) + terminate_communication(); + } + else if ( Cluster::node == "manager-1" ) + { + if ( peer_count == 5 ) + event fully_connected(); + } + else + { + if ( peer_count == 3 ) + event fully_connected(); + } + } + +event remote_connection_closed(p: event_peer) + { + terminate(); + }