diff options
Diffstat (limited to 'lib/kernel/test/pg_SUITE.erl')
-rw-r--r-- | lib/kernel/test/pg_SUITE.erl | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/lib/kernel/test/pg_SUITE.erl b/lib/kernel/test/pg_SUITE.erl index d563209267..f10e89d774 100644 --- a/lib/kernel/test/pg_SUITE.erl +++ b/lib/kernel/test/pg_SUITE.erl @@ -59,7 +59,8 @@ group_leave/1, monitor_nonempty_scope/0, monitor_nonempty_scope/1, monitor_scope/0, monitor_scope/1, - monitor/1 + monitor/1, + protocol_upgrade/1 ]). -include_lib("common_test/include/ct.hrl"). @@ -87,7 +88,8 @@ all() -> groups() -> [ - {basic, [parallel], [errors, pg, leave_exit_race, single, overlay_missing]}, + {basic, [parallel], [errors, pg, leave_exit_race, single, overlay_missing, + protocol_upgrade]}, {performance, [], [thundering_herd]}, {cluster, [parallel], [process_owner_check, two, initial, netsplit, trisplit, foursplit, exchange, nolocal, double, scope_restart, missing_scope_join, empty_group_by_remote_leave, @@ -755,9 +757,32 @@ second_monitor(Msgs) -> second_monitor([Msg | Msgs]) end. +protocol_upgrade(Config) when is_list(Config) -> + Scope = ?FUNCTION_NAME, + Group = ?FUNCTION_NAME, + {Peer, Node} = spawn_node(Scope, Config), + PgPid = rpc:call(Node, erlang, whereis, [Scope]), + + RemotePid = erlang:spawn(Node, forever()), + ok = rpc:call(Node, pg, join, [Scope, Group, RemotePid]), + + %% OTP 26: + %% Just do a white-box test and verify that pg accepts + %% a "future" discover message and replies with a sync. + PgPid ! {discover, self(), "Protocol version (ignore me)"}, + {'$gen_cast', {sync, PgPid, [{Group, [RemotePid]}]}} = receive_any(), + + %% stop the peer + peer:stop(Peer), + ok. + + %%-------------------------------------------------------------------- %% Test Helpers - start/stop additional Erlang nodes +receive_any() -> + receive M -> M end. + %% flushes GS (GenServer) queue, ensuring that all prior %% messages have been processed sync(GS) -> |