anchor.diff:      {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).
  
positive.code: %% Config0 = Config1 = [tuple()]
  %% Reason = any()
  %% -------------------------------------------------------------------
  init_per_group(two_nodes_process_registration, 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) ->
      %% start slave
      {ok, SlaveNode1} = syn_test_suite_helper:start_slave(syn_slave_1),
      {ok, SlaveNode2} = syn_test_suite_helper:start_slave(syn_slave_2),
  
negative.code:             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
          ]}
      ].
  %% -------------------------------------------------------------------
  