mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Avoid race conditions in broker.ssl-mismatch test
This commit is contained in:
parent
d957f883df
commit
d3ad3c618a
4 changed files with 51 additions and 8 deletions
|
@ -582,6 +582,22 @@ void Manager::Peer(const string& addr, uint16_t port, double retry)
|
||||||
iosource_mgr->Register(this, false);
|
iosource_mgr->Register(this, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Manager::PeerNoRetry(const string& addr, uint16_t port)
|
||||||
|
{
|
||||||
|
if ( bstate->endpoint.is_shutdown() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
DBG_LOG(DBG_BROKER, "Starting to peer with %s:%" PRIu16 " (no retry)", addr.c_str(), port);
|
||||||
|
|
||||||
|
bstate->endpoint.peer_nosync(addr, port, broker::timeout::seconds{0});
|
||||||
|
|
||||||
|
auto counts_as_iosource = get_option("Broker::peer_counts_as_iosource")->AsBool();
|
||||||
|
|
||||||
|
if ( counts_as_iosource )
|
||||||
|
// Register as a "does-count" source now.
|
||||||
|
iosource_mgr->Register(this, false);
|
||||||
|
}
|
||||||
|
|
||||||
void Manager::Unpeer(const string& addr, uint16_t port)
|
void Manager::Unpeer(const string& addr, uint16_t port)
|
||||||
{
|
{
|
||||||
if ( bstate->endpoint.is_shutdown() )
|
if ( bstate->endpoint.is_shutdown() )
|
||||||
|
|
|
@ -143,6 +143,13 @@ public:
|
||||||
*/
|
*/
|
||||||
void Peer(const std::string& addr, uint16_t port, double retry = 10.0);
|
void Peer(const std::string& addr, uint16_t port, double retry = 10.0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiate a peering with a remote endpoint but tries only once.
|
||||||
|
* @param addr an address to connect to, e.g. "localhost" or "127.0.0.1".
|
||||||
|
* @param port the TCP port on which the remote side is listening.
|
||||||
|
*/
|
||||||
|
void PeerNoRetry(const std::string& addr, uint16_t port);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a remote peering.
|
* Remove a remote peering.
|
||||||
* @param addr the address used in bro_broker::Manager::Peer().
|
* @param addr the address used in bro_broker::Manager::Peer().
|
||||||
|
|
|
@ -104,6 +104,20 @@ function Broker::__peer%(a: string, p: port, retry: interval%): bool
|
||||||
return zeek::val_mgr->True();
|
return zeek::val_mgr->True();
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
function Broker::__peer_no_retry%(a: string, p: port%): bool
|
||||||
|
%{
|
||||||
|
zeek::Broker::Manager::ScriptScopeGuard ssg;
|
||||||
|
|
||||||
|
if ( ! p->IsTCP() )
|
||||||
|
{
|
||||||
|
zeek::emit_builtin_error("remote connection port must use tcp");
|
||||||
|
return zeek::val_mgr->False();
|
||||||
|
}
|
||||||
|
|
||||||
|
broker_mgr->PeerNoRetry(a->CheckString(), p->Port());
|
||||||
|
return zeek::val_mgr->True();
|
||||||
|
%}
|
||||||
|
|
||||||
function Broker::__unpeer%(a: string, p: port%): bool
|
function Broker::__unpeer%(a: string, p: port%): bool
|
||||||
%{
|
%{
|
||||||
zeek::Broker::Manager::ScriptScopeGuard ssg;
|
zeek::Broker::Manager::ScriptScopeGuard ssg;
|
||||||
|
|
|
@ -3,12 +3,13 @@
|
||||||
# @TEST-PORT: BROKER_PORT
|
# @TEST-PORT: BROKER_PORT
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run listen "zeek -b %INPUT connect=F Broker::disable_ssl=T"
|
# @TEST-EXEC: btest-bg-run listen "zeek -b %INPUT connect=F Broker::disable_ssl=T"
|
||||||
|
# @TEST-EXEC: $SCRIPTS/wait-for-file listen/listen_ready 20 || (btest-bg-wait -k 1 && false)
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run good_connect "zeek -b %INPUT connect=T Broker::disable_ssl=T"
|
# @TEST-EXEC: btest-bg-run good_connect "zeek -b %INPUT connect=T Broker::disable_ssl=T"
|
||||||
# @TEST-EXEC: $SCRIPTS/wait-for-file good_connect/listen_ready 20 || (btest-bg-wait -k 1 && false)
|
# @TEST-EXEC: $SCRIPTS/wait-for-file good_connect/connected 20 || (btest-bg-wait -k 1 && false)
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run bad_connect "zeek -b %INPUT connect=T Broker::disable_ssl=F"
|
# @TEST-EXEC: btest-bg-run bad_connect "zeek -b %INPUT connect=T Broker::disable_ssl=F"
|
||||||
# @TEST-EXEC: $SCRIPTS/wait-for-file bad_connect/done 20 || (btest-bg-wait -k 1 && false)
|
# @TEST-EXEC: $SCRIPTS/wait-for-file bad_connect/failed 20 || (btest-bg-wait -k 1 && false)
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run last_connect "zeek -b %INPUT connect=T Broker::disable_ssl=T"
|
# @TEST-EXEC: btest-bg-run last_connect "zeek -b %INPUT connect=T Broker::disable_ssl=T"
|
||||||
#
|
#
|
||||||
|
@ -18,12 +19,13 @@
|
||||||
# And again, now reversing the SSL mismatch between client/server...
|
# And again, now reversing the SSL mismatch between client/server...
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run listen_rev "zeek -b %INPUT connect=F Broker::disable_ssl=F"
|
# @TEST-EXEC: btest-bg-run listen_rev "zeek -b %INPUT connect=F Broker::disable_ssl=F"
|
||||||
|
# @TEST-EXEC: $SCRIPTS/wait-for-file listen_rev/listen_ready 20 || (btest-bg-wait -k 1 && false)
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run good_connect_rev "zeek -b %INPUT connect=T Broker::disable_ssl=F"
|
# @TEST-EXEC: btest-bg-run good_connect_rev "zeek -b %INPUT connect=T Broker::disable_ssl=F"
|
||||||
# @TEST-EXEC: $SCRIPTS/wait-for-file good_connect_rev/listen_ready 20 || (btest-bg-wait -k 1 && false)
|
# @TEST-EXEC: $SCRIPTS/wait-for-file good_connect_rev/connected 20 || (btest-bg-wait -k 1 && false)
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run bad_connect_rev "zeek -b %INPUT connect=T Broker::disable_ssl=T"
|
# @TEST-EXEC: btest-bg-run bad_connect_rev "zeek -b %INPUT connect=T Broker::disable_ssl=T"
|
||||||
# @TEST-EXEC: $SCRIPTS/wait-for-file bad_connect_rev/done 20 || (btest-bg-wait -k 1 && false)
|
# @TEST-EXEC: $SCRIPTS/wait-for-file bad_connect_rev/failed 20 || (btest-bg-wait -k 1 && false)
|
||||||
#
|
#
|
||||||
# @TEST-EXEC: btest-bg-run last_connect_rev "zeek -b %INPUT connect=T Broker::disable_ssl=F"
|
# @TEST-EXEC: btest-bg-run last_connect_rev "zeek -b %INPUT connect=T Broker::disable_ssl=F"
|
||||||
#
|
#
|
||||||
|
@ -35,10 +37,14 @@ global num_connections = 0;
|
||||||
|
|
||||||
event zeek_init()
|
event zeek_init()
|
||||||
{
|
{
|
||||||
|
local p = to_port(getenv("BROKER_PORT"));
|
||||||
if ( connect )
|
if ( connect )
|
||||||
Broker::peer("127.0.0.1", to_port(getenv("BROKER_PORT")));
|
Broker::__peer_no_retry("127.0.0.1", p);
|
||||||
else
|
else
|
||||||
Broker::listen("127.0.0.1", to_port(getenv("BROKER_PORT")));
|
{
|
||||||
|
local actual = Broker::listen("127.0.0.1", p);
|
||||||
|
system("touch listen_ready");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string)
|
event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string)
|
||||||
|
@ -48,7 +54,7 @@ event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string)
|
||||||
|
|
||||||
if ( connect )
|
if ( connect )
|
||||||
{
|
{
|
||||||
system("touch listen_ready");
|
system("touch connected");
|
||||||
terminate();
|
terminate();
|
||||||
}
|
}
|
||||||
else if ( num_connections == 2 )
|
else if ( num_connections == 2 )
|
||||||
|
@ -67,7 +73,7 @@ event Broker::error(code: Broker::ErrorCode, msg: string) &priority=-10
|
||||||
local f = open("broker.error");
|
local f = open("broker.error");
|
||||||
print f, code;
|
print f, code;
|
||||||
close(f);
|
close(f);
|
||||||
system("touch done");
|
system("touch failed");
|
||||||
terminate();
|
terminate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue