Browse Source

Add two groups join, leave and monitoring test.

Roberto Ostinelli 5 years ago
parent
commit
6026968531
1 changed files with 65 additions and 5 deletions
  1. 65 5
      test/syn_groups_SUITE.erl

+ 65 - 5
test/syn_groups_SUITE.erl

@@ -37,6 +37,9 @@
     single_node_join_and_leave/1,
     single_node_join_errors/1
 ]).
+-export([
+    two_nodes_join_monitor_and_unregister/1
+]).
 
 %% include
 -include_lib("common_test/include/ct.hrl").
@@ -55,7 +58,8 @@
 %% -------------------------------------------------------------------
 all() ->
     [
-        {group, single_node_groups}
+        {group, single_node_groups},
+        {group, two_nodes_groups}
     ].
 
 %% -------------------------------------------------------------------
@@ -76,6 +80,10 @@ groups() ->
             single_node_join_and_monitor,
             single_node_join_and_leave,
             single_node_join_errors
+        ]},
+        {two_nodes_groups, [shuffle], [
+            two_nodes_join_monitor_and_unregister
+%%            two_nodes_local_members
         ]}
     ].
 %% -------------------------------------------------------------------
@@ -103,12 +111,12 @@ end_per_suite(_Config) ->
 %% Config0 = Config1 = [tuple()]
 %% Reason = any()
 %% -------------------------------------------------------------------
-init_per_group(two_nodes_process_registration, Config) ->
+init_per_group(two_nodes_groups, Config) ->
     %% start slave
     {ok, SlaveNode} = syn_test_suite_helper:start_slave(syn_slave),
     %% config
     [{slave_node, SlaveNode} | Config];
-init_per_group(three_nodes_process_registration, Config) ->
+init_per_group(three_nodes_groups, Config) ->
     %% start slave
     {ok, SlaveNode1} = syn_test_suite_helper:start_slave(syn_slave_1),
     {ok, SlaveNode2} = syn_test_suite_helper:start_slave(syn_slave_2),
@@ -123,12 +131,12 @@ init_per_group(_GroupName, Config) ->
 %% GroupName = atom()
 %% Config0 = Config1 = [tuple()]
 %% -------------------------------------------------------------------
-end_per_group(two_nodes_process_registration, Config) ->
+end_per_group(two_nodes_groups, Config) ->
     SlaveNode = proplists:get_value(slave_node, Config),
     syn_test_suite_helper:connect_node(SlaveNode),
     syn_test_suite_helper:stop_slave(syn_slave),
     timer:sleep(1000);
-end_per_group(three_nodes_process_registration, Config) ->
+end_per_group(three_nodes_groups, Config) ->
     SlaveNode1 = proplists:get_value(slave_node_1, Config),
     syn_test_suite_helper:connect_node(SlaveNode1),
     SlaveNode2 = proplists:get_value(slave_node_2, Config),
@@ -255,3 +263,55 @@ single_node_join_errors(_Config) ->
     {error, not_alive} = syn:join(GroupName, Pid2),
     %% kill processes
     syn_test_suite_helper:kill_process(Pid).
+
+two_nodes_join_monitor_and_unregister(Config) ->
+    GroupName = "my group",
+    %% get slave
+    SlaveNode = proplists:get_value(slave_node, Config),
+    %% start
+    ok = syn:start(),
+    ok = rpc:call(SlaveNode, syn, start, []),
+    timer:sleep(100),
+    %% start processes
+    LocalPid = syn_test_suite_helper:start_process(),
+    RemotePid = syn_test_suite_helper:start_process(SlaveNode),
+    RemotePidJoinRemote = syn_test_suite_helper:start_process(SlaveNode),
+    OtherPid = syn_test_suite_helper:start_process(),
+    %% retrieve
+    [] = syn:get_members("group-1"),
+    [] = syn:get_members(GroupName, with_meta),
+    false = syn:member(LocalPid, GroupName),
+    false = syn:member(RemotePid, GroupName),
+    false = syn:member(RemotePidJoinRemote, GroupName),
+    false = syn:member(OtherPid, GroupName),
+    %% join
+    ok = syn:join(GroupName, LocalPid),
+    ok = syn:join(GroupName, RemotePid),
+    ok = rpc:call(SlaveNode, syn, join, [GroupName, RemotePidJoinRemote]),
+    ok = syn:join("other-group", OtherPid),
+    timer:sleep(200),
+    %% retrieve
+    true = syn:member(LocalPid, GroupName),
+    true = syn:member(RemotePid, GroupName),
+    true = syn:member(RemotePidJoinRemote, GroupName),
+    false = syn:member(OtherPid, GroupName),
+    true = rpc:call(SlaveNode, syn, member, [LocalPid, GroupName]),
+    true = rpc:call(SlaveNode, syn, member, [RemotePid, GroupName]),
+    true = rpc:call(SlaveNode, syn, member, [RemotePidJoinRemote, GroupName]),
+    false = rpc:call(SlaveNode, syn, member, [OtherPid, GroupName]),
+    %% leave & kill
+    ok = rpc:call(SlaveNode, syn, leave, [GroupName, LocalPid]),
+    ok = syn:leave(GroupName, RemotePid),
+    syn_test_suite_helper:kill_process(RemotePidJoinRemote),
+    syn_test_suite_helper:kill_process(OtherPid),
+    timer:sleep(200),
+    %% retrieve
+    [] = syn:get_members("group-1"),
+    [] = syn:get_members(GroupName, with_meta),
+    false = syn:member(LocalPid, GroupName),
+    false = syn:member(RemotePid, GroupName),
+    false = syn:member(RemotePidJoinRemote, GroupName),
+    false = syn:member(OtherPid, GroupName),
+    %% kill processes
+    syn_test_suite_helper:kill_process(LocalPid),
+    syn_test_suite_helper:kill_process(RemotePid).