aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorjuhlig <[email protected]>2020-09-10 16:18:06 +0200
committerLoïc Hoguin <[email protected]>2021-09-07 12:27:34 +0200
commit50f6191bf8646147b303f8a9e1a5a9efa1d6dc5a (patch)
treee56ce37ea3a6db5efd98a0bc9dc960330712d038 /test
parentaf1508c4a729098bc1545358e09878d4946c789d (diff)
downloadranch-50f6191bf8646147b303f8a9e1a5a9efa1d6dc5a.tar.gz
ranch-50f6191bf8646147b303f8a9e1a5a9efa1d6dc5a.tar.bz2
ranch-50f6191bf8646147b303f8a9e1a5a9efa1d6dc5a.zip
Enable connection count alarms
Diffstat (limited to 'test')
-rw-r--r--test/acceptor_SUITE.erl76
1 files changed, 75 insertions, 1 deletions
diff --git a/test/acceptor_SUITE.erl b/test/acceptor_SUITE.erl
index 49625c6..53a1223 100644
--- a/test/acceptor_SUITE.erl
+++ b/test/acceptor_SUITE.erl
@@ -109,7 +109,8 @@ groups() ->
misc_post_listen_callback_error,
misc_set_transport_options,
misc_wait_for_connections,
- misc_multiple_ip_local_socket_opts
+ misc_multiple_ip_local_socket_opts,
+ misc_connection_alarms
]}, {supervisor, [
connection_type_supervisor,
connection_type_supervisor_separate_from_connection,
@@ -576,6 +577,79 @@ do_misc_multiple_ip_local_socket_opts() ->
{error, enoent} = file:read_file_info(SockFile2),
ok.
+misc_connection_alarms(_) ->
+ doc("Ensure that connection alarms work."),
+ Name = name(),
+
+ Self = self(),
+ TransOpts0 = #{num_conns_sups => 1},
+ AlarmCallback = fun (Ref, AlarmName, _, ActiveConns) ->
+ Self ! {connection_alarm, {Ref, AlarmName, length(ActiveConns)}}
+ end,
+ Alarms0 = #{
+ test1 => Alarm1 = #{type => num_connections, treshold => 2, cooldown => 0, callback => AlarmCallback},
+ test2 => Alarm2 = #{type => num_connections, treshold => 3, cooldown => 0, callback => AlarmCallback}
+ },
+ ConnectOpts = [binary, {active, false}, {packet, raw}],
+
+ {ok, _} = ranch:start_listener(Name, ranch_tcp,
+ TransOpts0#{alarms => Alarms0}, notify_and_wait_protocol, #{pid => self()}),
+ Port = ranch:get_port(Name),
+
+ {ok, _} = gen_tcp:connect("localhost", Port, ConnectOpts),
+ {1, [Conn1]} = receive_loop(connected, 100),
+ #{test1 := undefined, test2 := undefined} = do_recv_connection_alarms(Name, 100),
+
+ {ok, _} = gen_tcp:connect("localhost", Port, ConnectOpts),
+ {1, [Conn2]} = receive_loop(connected, 100),
+ #{test1 := 2, test2 := undefined} = do_recv_connection_alarms(Name, 100),
+
+ {ok, _} = gen_tcp:connect("localhost", Port, ConnectOpts),
+ {1, [Conn3]} = receive_loop(connected, 100),
+ #{test1 := 3, test2 := 3} = do_recv_connection_alarms(Name, 100),
+
+ Alarms1 = #{
+ test1 => Alarm1#{cooldown => 100},
+ test2 => Alarm2#{cooldown => 100}
+ },
+ ok = ranch:set_transport_options(Name, TransOpts0#{alarms => Alarms1}),
+ ok = do_flush_connection_alarms(Name),
+ #{test1 := 3, test2 := 3} = do_recv_connection_alarms(Name, 100),
+ ok = do_flush_connection_alarms(Name),
+ #{test1 := 3, test2 := 3} = do_recv_connection_alarms(Name, 100),
+
+ Conn3 ! stop,
+ timer:sleep(100),
+ ok = do_flush_connection_alarms(Name),
+ #{test1 := 2, test2 := undefined} = do_recv_connection_alarms(Name, 100),
+
+ Conn2 ! stop,
+ timer:sleep(100),
+ ok = do_flush_connection_alarms(Name),
+ #{test1 := undefined, test2 := undefined} = do_recv_connection_alarms(Name, 100),
+
+ Conn1 ! stop,
+
+ ok = ranch:stop_listener(Name),
+ ok.
+
+do_recv_connection_alarms(Name, Timeout) ->
+ do_recv_connection_alarms(Name, Timeout, #{test1 => undefined, test2 => undefined}).
+
+do_recv_connection_alarms(Name, Timeout, Acc) ->
+ receive {connection_alarm, {Name, AlarmName, N}} ->
+ do_recv_connection_alarms(Name, Timeout, Acc#{AlarmName => N})
+ after Timeout ->
+ Acc
+ end.
+
+do_flush_connection_alarms(Name) ->
+ receive {connection_alarm, {Name, _, _}} ->
+ do_flush_connection_alarms(Name)
+ after 0 ->
+ ok
+ end.
+
%% ssl.
ssl_accept_error(_) ->