Roberto Ostinelli 5 лет назад
Родитель
Сommit
490e898006
7 измененных файлов с 121 добавлено и 86 удалено
  1. 15 15
      src/syn.erl
  2. 2 2
      src/syn.hrl
  3. 3 3
      src/syn_backbone.erl
  4. 20 14
      src/syn_groups.erl
  5. 23 23
      src/syn_registry.erl
  6. 41 11
      test/syn_groups_SUITE.erl
  7. 17 18
      test/syn_registry_SUITE.erl

+ 15 - 15
src/syn.erl

@@ -52,23 +52,23 @@ stop() ->
     ok = application:stop(syn).
 
 %% ----- \/ registry -------------------------------------------------
--spec register(Name :: term(), Pid :: pid()) -> ok | {error, Reason :: term()}.
+-spec register(Name :: any(), Pid :: pid()) -> ok | {error, Reason :: any()}.
 register(Name, Pid) ->
     syn_registry:register(Name, Pid).
 
--spec register(Name :: term(), Pid :: pid(), Meta :: term()) -> ok | {error, Reason :: term()}.
+-spec register(Name :: any(), Pid :: pid(), Meta :: any()) -> ok | {error, Reason :: any()}.
 register(Name, Pid, Meta) ->
     syn_registry:register(Name, Pid, Meta).
 
--spec unregister(Name :: term()) -> ok | {error, Reason :: term()}.
+-spec unregister(Name :: any()) -> ok | {error, Reason :: any()}.
 unregister(Name) ->
     syn_registry:unregister(Name).
 
--spec whereis(Name :: term()) -> pid() | undefined.
+-spec whereis(Name :: any()) -> pid() | undefined.
 whereis(Name) ->
     syn_registry:whereis(Name).
 
--spec whereis(Name :: term(), with_meta) -> {pid(), Meta :: term()} | undefined.
+-spec whereis(Name :: any(), with_meta) -> {pid(), Meta :: any()} | undefined.
 whereis(Name, with_meta) ->
     syn_registry:whereis(Name, with_meta).
 
@@ -81,25 +81,25 @@ registry_count(Node) ->
     syn_registry:count(Node).
 
 %% ----- \/ gen_server via module interface --------------------------
--spec register_name(Name :: term(), Pid :: pid()) -> yes | no.
+-spec register_name(Name :: any(), Pid :: pid()) -> yes | no.
 register_name(Name, Pid) ->
     case syn_registry:register(Name, Pid) of
         ok -> yes;
         _ -> no
     end.
 
--spec unregister_name(Name :: term()) -> term().
+-spec unregister_name(Name :: any()) -> any().
 unregister_name(Name) ->
     case syn_registry:unregister(Name) of
         ok -> Name;
         _ -> nil
     end.
 
--spec whereis_name(Name :: term()) -> pid() | undefined.
+-spec whereis_name(Name :: any()) -> pid() | undefined.
 whereis_name(Name) ->
     syn_registry:whereis(Name).
 
--spec send(Name :: term(), Message :: term()) -> pid().
+-spec send(Name :: any(), Message :: any()) -> pid().
 send(Name, Message) ->
     case whereis_name(Name) of
         undefined ->
@@ -110,26 +110,26 @@ send(Name, Message) ->
     end.
 
 %% ----- \/ groups ---------------------------------------------------
--spec join(GroupName :: term(), Pid :: pid()) -> ok.
+-spec join(GroupName :: any(), Pid :: pid()) -> ok.
 join(GroupName, Pid) ->
     syn_groups:join(GroupName, Pid).
 
--spec join(GroupName :: term(), Pid :: pid(), Meta :: term()) -> ok.
+-spec join(GroupName :: any(), Pid :: pid(), Meta :: any()) -> ok.
 join(GroupName, Pid, Meta) ->
     syn_groups:join(GroupName, Pid, Meta).
 
--spec leave(GroupName :: term(), Pid :: pid()) -> ok | {error, Reason :: term()}.
+-spec leave(GroupName :: any(), Pid :: pid()) -> ok | {error, Reason :: any()}.
 leave(GroupName, Pid) ->
     syn_groups:leave(GroupName, Pid).
 
--spec get_members(GroupName :: term()) -> [pid()].
+-spec get_members(GroupName :: any()) -> [pid()].
 get_members(GroupName) ->
     syn_groups:get_members(GroupName).
 
--spec get_members(GroupName :: term(), with_meta) -> [{pid(), Meta :: term()}].
+-spec get_members(GroupName :: any(), with_meta) -> [{pid(), Meta :: any()}].
 get_members(GroupName, with_meta) ->
     syn_groups:get_members(GroupName, with_meta).
 
--spec member(GroupName :: term(), Pid :: pid()) -> boolean().
+-spec member(GroupName :: any(), Pid :: pid()) -> boolean().
 member(GroupName, Pid) ->
     syn_groups:member(GroupName, Pid).

+ 2 - 2
src/syn.hrl

@@ -41,8 +41,8 @@
 
 %% types
 -type syn_registry_tuple() :: {
-    Name :: term(),
+    Name :: any(),
     Pid :: pid(),
-    Meta :: term()
+    Meta :: any()
 }.
 -export_type([syn_registry_tuple/0]).

+ 3 - 3
src/syn_backbone.erl

@@ -35,7 +35,7 @@
 %% ===================================================================
 %% API
 %% ===================================================================
--spec init() -> ok | {error, Reason :: term()}.
+-spec init() -> ok | {error, Reason :: any()}.
 init() ->
     case create_registry_table() of
         {atomic, ok} ->
@@ -56,7 +56,7 @@ deinit() ->
 %% ===================================================================
 %% Internal
 %% ===================================================================
--spec create_registry_table() -> {atomic, ok} | {aborted, Reason :: term()}.
+-spec create_registry_table() -> {atomic, ok} | {aborted, Reason :: any()}.
 create_registry_table() ->
     mnesia:create_table(syn_registry_table, [
         {type, set},
@@ -65,7 +65,7 @@ create_registry_table() ->
         {storage_properties, [{ets, [{read_concurrency, true}, {write_concurrency, true}]}]}
     ]).
 
--spec create_groups_table() -> {atomic, ok} | {aborted, Reason :: term()}.
+-spec create_groups_table() -> {atomic, ok} | {aborted, Reason :: any()}.
 create_groups_table() ->
     mnesia:create_table(syn_groups_table, [
         {type, bag},

+ 20 - 14
src/syn_groups.erl

@@ -53,7 +53,7 @@ start_link() ->
     Options = [],
     gen_server:start_link({local, ?MODULE}, ?MODULE, [], Options).
 
--spec join(GroupName :: term(), Pid :: pid()) -> ok.
+-spec join(GroupName :: any(), Pid :: pid()) -> ok.
 join(GroupName, Pid) ->
     join(GroupName, Pid, undefined).
 
@@ -62,7 +62,7 @@ join(GroupName, Pid, Meta) when is_pid(Pid) ->
     Node = node(Pid),
     gen_server:call({?MODULE, Node}, {join_on_node, GroupName, Pid, Meta}).
 
--spec leave(GroupName :: term(), Pid :: pid()) -> ok | {error, Reason :: term()}.
+-spec leave(GroupName :: any(), Pid :: pid()) -> ok | {error, Reason :: any()}.
 leave(GroupName, Pid) ->
     case find_process_entry_by_name_and_pid(GroupName, Pid) of
         undefined ->
@@ -84,18 +84,18 @@ get_members(GroupName, with_meta) ->
     Pids = [{Entry#syn_groups_table.pid, Entry#syn_groups_table.meta} || Entry <- Entries],
     lists:sort(Pids).
 
--spec member(Pid :: pid(), GroupName :: term()) -> boolean().
+-spec member(Pid :: pid(), GroupName :: any()) -> boolean().
 member(Pid, GroupName) ->
     case find_process_entry_by_name_and_pid(GroupName, Pid) of
         undefined -> false;
         _ -> true
     end.
 
--spec sync_join(GroupName :: term(), Pid :: pid(), Meta :: term()) -> ok.
+-spec sync_join(GroupName :: any(), Pid :: pid(), Meta :: any()) -> ok.
 sync_join(GroupName, Pid, Meta) ->
     gen_server:cast(?MODULE, {sync_join, GroupName, Pid, Meta}).
 
--spec sync_leave(GroupName :: term(), Pid :: pid()) -> ok.
+-spec sync_leave(GroupName :: any(), Pid :: pid()) -> ok.
 sync_leave(GroupName, Pid) ->
     gen_server:cast(?MODULE, {sync_leave, GroupName, Pid}).
 
@@ -135,11 +135,17 @@ init([]) ->
     {stop, Reason :: any(), #state{}}.
 
 handle_call({join_on_node, GroupName, Pid, Meta}, _From, State) ->
-    join_on_node(GroupName, Pid, Meta),
-    %% multicast
-    rpc:eval_everywhere(nodes(), ?MODULE, sync_join, [GroupName, Pid, Meta]),
-    %% return
-    {reply, ok, State};
+    %% check if pid is alive
+    case is_process_alive(Pid) of
+        true ->
+            join_on_node(GroupName, Pid, Meta),
+            %% multicast
+            rpc:eval_everywhere(nodes(), ?MODULE, sync_join, [GroupName, Pid, Meta]),
+            %% return
+            {reply, ok, State};
+        _ ->
+            {reply, {error, not_alive}, State}
+    end;
 
 handle_call({leave_on_node, GroupName, Pid}, _From, State) ->
     case leave_on_node(GroupName, Pid) of
@@ -244,7 +250,7 @@ join_on_node(GroupName, Pid, Meta) ->
     %% add to table
     add_to_local_table(GroupName, Pid, Meta, MonitorRef).
 
--spec leave_on_node(GroupName :: any(), Pid :: pid()) -> ok | {error, Reason :: term()}.
+-spec leave_on_node(GroupName :: any(), Pid :: pid()) -> ok | {error, Reason :: any()}.
 leave_on_node(GroupName, Pid) ->
     case find_process_entry_by_name_and_pid(GroupName, Pid) of
         undefined ->
@@ -276,7 +282,7 @@ add_to_local_table(GroupName, Pid, Meta, MonitorRef) ->
         monitor_ref = MonitorRef
     }).
 
--spec remove_from_local_table(GroupName :: term(), Pid :: pid()) -> ok | {error, Reason :: term()}.
+-spec remove_from_local_table(GroupName :: any(), Pid :: pid()) -> ok | {error, Reason :: any()}.
 remove_from_local_table(GroupName, Pid) ->
     case find_process_entry_by_name_and_pid(GroupName, Pid) of
         undefined ->
@@ -294,7 +300,7 @@ remove_from_local_table(Entry) ->
 find_processes_entry_by_pid(Pid) when is_pid(Pid) ->
     mnesia:dirty_index_read(syn_groups_table, Pid, #syn_groups_table.pid).
 
--spec find_process_entry_by_name_and_pid(GroupName :: term(), Pid :: pid()) -> Entry :: #syn_groups_table{} | undefined.
+-spec find_process_entry_by_name_and_pid(GroupName :: any(), Pid :: pid()) -> Entry :: #syn_groups_table{} | undefined.
 find_process_entry_by_name_and_pid(GroupName, Pid) ->
     %% build match specs
     MatchHead = #syn_groups_table{name = GroupName, pid = Pid, _ = '_'},
@@ -306,7 +312,7 @@ find_process_entry_by_name_and_pid(GroupName, Pid) ->
         [] -> undefined
     end.
 
--spec log_process_exit(Name :: term(), Pid :: pid(), Reason :: term()) -> ok.
+-spec log_process_exit(Name :: any(), Pid :: pid(), Reason :: any()) -> ok.
 log_process_exit(GroupName, Pid, Reason) ->
     case Reason of
         normal -> ok;

+ 23 - 23
src/syn_registry.erl

@@ -28,9 +28,9 @@
 
 %% API
 -export([start_link/0]).
--export([whereis/1, whereis/2]).
 -export([register/2, register/3]).
 -export([unregister/1]).
+-export([whereis/1, whereis/2]).
 -export([count/0, count/1]).
 
 %% sync API
@@ -55,30 +55,16 @@ start_link() ->
     Options = [],
     gen_server:start_link({local, ?MODULE}, ?MODULE, [], Options).
 
--spec whereis(Name :: term()) -> pid() | undefined.
-whereis(Name) ->
-    case find_process_entry_by_name(Name) of
-        undefined -> undefined;
-        Entry -> Entry#syn_registry_table.pid
-    end.
-
--spec whereis(Name :: term(), with_meta) -> {pid(), Meta :: term()} | undefined.
-whereis(Name, with_meta) ->
-    case find_process_entry_by_name(Name) of
-        undefined -> undefined;
-        Entry -> {Entry#syn_registry_table.pid, Entry#syn_registry_table.meta}
-    end.
-
--spec register(Name :: term(), Pid :: pid()) -> ok | {error, Reason :: term()}.
+-spec register(Name :: any(), Pid :: pid()) -> ok | {error, Reason :: any()}.
 register(Name, Pid) ->
     register(Name, Pid, undefined).
 
--spec register(Name :: term(), Pid :: pid(), Meta :: term()) -> ok | {error, Reason :: term()}.
+-spec register(Name :: any(), Pid :: pid(), Meta :: any()) -> ok | {error, Reason :: any()}.
 register(Name, Pid, Meta) when is_pid(Pid) ->
     Node = node(Pid),
     gen_server:call({?MODULE, Node}, {register_on_node, Name, Pid, Meta}).
 
--spec unregister(Name :: term()) -> ok | {error, Reason :: term()}.
+-spec unregister(Name :: any()) -> ok | {error, Reason :: any()}.
 unregister(Name) ->
     % get process' node
     case find_process_entry_by_name(Name) of
@@ -89,6 +75,20 @@ unregister(Name) ->
             gen_server:call({?MODULE, Node}, {unregister_on_node, Name})
     end.
 
+-spec whereis(Name :: any()) -> pid() | undefined.
+whereis(Name) ->
+    case find_process_entry_by_name(Name) of
+        undefined -> undefined;
+        Entry -> Entry#syn_registry_table.pid
+    end.
+
+-spec whereis(Name :: any(), with_meta) -> {pid(), Meta :: any()} | undefined.
+whereis(Name, with_meta) ->
+    case find_process_entry_by_name(Name) of
+        undefined -> undefined;
+        Entry -> {Entry#syn_registry_table.pid, Entry#syn_registry_table.meta}
+    end.
+
 -spec count() -> non_neg_integer().
 count() ->
     mnesia:table_info(syn_registry_table, size).
@@ -103,11 +103,11 @@ count(Node) ->
     Processes = mnesia:dirty_select(syn_registry_table, [{MatchHead, [Guard], [Result]}]),
     length(Processes).
 
--spec sync_register(Name :: term(), Pid :: pid(), Meta :: term()) -> ok.
+-spec sync_register(Name :: any(), Pid :: pid(), Meta :: any()) -> ok.
 sync_register(Name, Pid, Meta) ->
     gen_server:cast(?MODULE, {sync_register, Name, Pid, Meta}).
 
--spec sync_unregister(Name :: term()) -> ok.
+-spec sync_unregister(Name :: any()) -> ok.
 sync_unregister(Name) ->
     gen_server:cast(?MODULE, {sync_unregister, Name}).
 
@@ -310,7 +310,7 @@ register_on_node(Name, Pid, Meta) ->
     %% add to table
     add_to_local_table(Name, Pid, Meta, MonitorRef).
 
--spec unregister_on_node(Name :: any()) -> ok.
+-spec unregister_on_node(Name :: any()) -> ok | {error, Reason :: any()}.
 unregister_on_node(Name) ->
     case find_process_entry_by_name(Name) of
         undefined ->
@@ -341,14 +341,14 @@ remove_from_local_table(Name) ->
 find_processes_entry_by_pid(Pid) when is_pid(Pid) ->
     mnesia:dirty_index_read(syn_registry_table, Pid, #syn_registry_table.pid).
 
--spec find_process_entry_by_name(Name :: term()) -> Entry :: #syn_registry_table{} | undefined.
+-spec find_process_entry_by_name(Name :: any()) -> Entry :: #syn_registry_table{} | undefined.
 find_process_entry_by_name(Name) ->
     case mnesia:dirty_read(syn_registry_table, Name) of
         [Entry] -> Entry;
         _ -> undefined
     end.
 
--spec log_process_exit(Name :: term(), Pid :: pid(), Reason :: term()) -> ok.
+-spec log_process_exit(Name :: any(), Pid :: pid(), Reason :: any()) -> ok.
 log_process_exit(Name, Pid, Reason) ->
     case Reason of
         normal -> ok;

+ 41 - 11
test/syn_groups_SUITE.erl

@@ -34,7 +34,8 @@
 %% tests
 -export([
     single_node_join_and_monitor/1,
-    single_node_join_and_leave/1
+    single_node_join_and_leave/1,
+    single_node_join_errors/1
 ]).
 
 %% include
@@ -50,7 +51,7 @@
 %% GroupsAndTestCases = [{group,GroupName} | TestCase]
 %% GroupName = atom()
 %% TestCase = atom()
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 all() ->
     [
@@ -73,7 +74,8 @@ groups() ->
     [
         {single_node_groups, [shuffle], [
             single_node_join_and_monitor,
-            single_node_join_and_leave
+            single_node_join_and_leave,
+            single_node_join_errors
         ]}
     ].
 %% -------------------------------------------------------------------
@@ -81,7 +83,7 @@ groups() ->
 %%				Config1 | {skip,Reason} |
 %%              {skip_and_save,Reason,Config1}
 %% Config0 = Config1 = [tuple()]
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 init_per_suite(Config) ->
     Config.
@@ -99,7 +101,7 @@ end_per_suite(_Config) ->
 %%              {skip_and_save,Reason,Config1}
 %% GroupName = atom()
 %% Config0 = Config1 = [tuple()]
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 init_per_group(two_nodes_process_registration, Config) ->
     %% start slave
@@ -142,7 +144,7 @@ end_per_group(_GroupName, _Config) ->
 %%				Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
 %% TestCase = atom()
 %% Config0 = Config1 = [tuple()]
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 init_per_testcase(_TestCase, Config) ->
     Config.
@@ -152,7 +154,7 @@ init_per_testcase(_TestCase, Config) ->
 %%				void() | {save_config,Config1} | {fail,Reason}
 %% TestCase = atom()
 %% Config0 = Config1 = [tuple()]
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 end_per_testcase(_, _Config) ->
     syn_test_suite_helper:clean_after_test().
@@ -167,26 +169,30 @@ single_node_join_and_monitor(_Config) ->
     %% start processes
     Pid = syn_test_suite_helper:start_process(),
     PidWithMeta = syn_test_suite_helper:start_process(),
+    PidOther = syn_test_suite_helper:start_process(),
     %% retrieve
     [] = syn:get_members(GroupName),
     [] = syn:get_members(GroupName, with_meta),
     false = syn:member(Pid, GroupName),
     false = syn:member(PidWithMeta, GroupName),
+    false = syn:member(PidOther, GroupName),
     %% join
     ok = syn:join(GroupName, Pid),
     ok = syn:join(GroupName, PidWithMeta, {with, meta}),
+    ok = syn:join("other-group", PidOther),
     %% retrieve
     true = syn:member(Pid, GroupName),
     true = syn:member(PidWithMeta, GroupName),
+    false = syn:member(PidOther, GroupName),
     true = lists:sort([Pid, PidWithMeta]) =:= lists:sort(syn:get_members(GroupName)),
     true = lists:sort([{Pid, undefined}, {PidWithMeta, {with, meta}}]) =:= lists:sort(syn:get_members(GroupName, with_meta)),
     %% re-join
     ok = syn:join(GroupName, PidWithMeta, {with2, meta2}),
-    ct:pal("HERE ~p",[lists:sort(syn:get_members(GroupName, with_meta))]),
     true = lists:sort([{Pid, undefined}, {PidWithMeta, {with2, meta2}}]) =:= lists:sort(syn:get_members(GroupName, with_meta)),
     %% kill process
     syn_test_suite_helper:kill_process(Pid),
     syn_test_suite_helper:kill_process(PidWithMeta),
+    syn_test_suite_helper:kill_process(PidOther),
     timer:sleep(100),
     %% retrieve
     [] = syn:get_members(GroupName),
@@ -218,10 +224,34 @@ single_node_join_and_leave(_Config) ->
     ok = syn:leave(GroupName, Pid),
     ok = syn:leave(GroupName, PidWithMeta),
     timer:sleep(100),
-    {error, not_in_group} = syn:leave(GroupName, Pid),
-    {error, not_in_group} = syn:leave(GroupName, PidWithMeta),
     %% retrieve
     [] = syn:get_members(GroupName),
     [] = syn:get_members(GroupName, with_meta),
     false = syn:member(Pid, GroupName),
-    false = syn:member(PidWithMeta, GroupName).
+    false = syn:member(PidWithMeta, GroupName),
+    %% kill processes
+    syn_test_suite_helper:kill_process(Pid),
+    syn_test_suite_helper:kill_process(PidWithMeta).
+
+single_node_join_errors(_Config) ->
+    GroupName = "my group",
+    %% start
+    ok = syn:start(),
+    %% start processes
+    Pid = syn_test_suite_helper:start_process(),
+    Pid2 = syn_test_suite_helper:start_process(),
+    %% join
+    ok = syn:join(GroupName, Pid),
+    ok = syn:join(GroupName, Pid2),
+    true = syn:member(Pid, GroupName),
+    true = syn:member(Pid2, GroupName),
+    %% leave
+    ok = syn:leave(GroupName, Pid),
+    {error, not_in_group} = syn:leave(GroupName, Pid),
+    %% kill
+    syn_test_suite_helper:kill_process(Pid2),
+    timer:sleep(200),
+    {error, not_in_group} = syn:leave(GroupName, Pid2),
+    {error, not_alive} = syn:join(GroupName, Pid2),
+    %% kill processes
+    syn_test_suite_helper:kill_process(Pid).

+ 17 - 18
test/syn_registry_SUITE.erl

@@ -67,7 +67,7 @@
 %% GroupsAndTestCases = [{group,GroupName} | TestCase]
 %% GroupName = atom()
 %% TestCase = atom()
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 all() ->
     [
@@ -112,7 +112,7 @@ groups() ->
 %%				Config1 | {skip,Reason} |
 %%              {skip_and_save,Reason,Config1}
 %% Config0 = Config1 = [tuple()]
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 init_per_suite(Config) ->
     Config.
@@ -130,7 +130,7 @@ end_per_suite(_Config) ->
 %%              {skip_and_save,Reason,Config1}
 %% GroupName = atom()
 %% Config0 = Config1 = [tuple()]
-%% Reason = term()
+%% Reason = any()
 %% -------------------------------------------------------------------
 init_per_group(two_nodes_process_registration, Config) ->
     %% start slave
@@ -167,24 +167,23 @@ end_per_group(three_nodes_process_registration, Config) ->
     timer:sleep(1000);
 end_per_group(_GroupName, _Config) ->
     ok.
-
-% ----------------------------------------------------------------------------------------------------------
-% Function: init_per_testcase(TestCase, Config0) ->
-%				Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
-% TestCase = atom()
-% Config0 = Config1 = [tuple()]
-% Reason = term()
-% ----------------------------------------------------------------------------------------------------------
+%% -------------------------------------------------------------------
+%% Function: init_per_testcase(TestCase, Config0) ->
+%%				Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%% TestCase = atom()
+%% Config0 = Config1 = [tuple()]
+%% Reason = any()
+%% -------------------------------------------------------------------
 init_per_testcase(_TestCase, Config) ->
     Config.
 
-% ----------------------------------------------------------------------------------------------------------
-% Function: end_per_testcase(TestCase, Config0) ->
-%				void() | {save_config,Config1} | {fail,Reason}
-% TestCase = atom()
-% Config0 = Config1 = [tuple()]
-% Reason = term()
-% ----------------------------------------------------------------------------------------------------------
+%% -------------------------------------------------------------------
+%% Function: end_per_testcase(TestCase, Config0) ->
+%%				void() | {save_config,Config1} | {fail,Reason}
+%% TestCase = atom()
+%% Config0 = Config1 = [tuple()]
+%% Reason = any()
+%% -------------------------------------------------------------------
 end_per_testcase(_, _Config) ->
     syn_test_suite_helper:clean_after_test().