Browse Source

Merge pull request #68 from ahovgaard/support-registering-metadata-in-via-tuples

Support registering metadata in via-tuples
Roberto Ostinelli 3 years ago
parent
commit
7fd7e0c139
2 changed files with 64 additions and 3 deletions
  1. 20 3
      src/syn.erl
  2. 44 0
      test/syn_registry_SUITE.erl

+ 20 - 3
src/syn.erl

@@ -429,11 +429,22 @@ register_name({Scope, Name}, Pid) ->
     case register(Scope, Name, Pid) of
         ok -> yes;
         _ -> no
+    end;
+register_name({Scope, Name, Meta}, Pid) ->
+    case register(Scope, Name, Pid, Meta) of
+        ok -> yes;
+        _ -> no
     end.
 
 %% @private
 -spec unregister_name(Name :: term()) -> term().
 unregister_name({Scope, Name}) ->
+    unregister_name(Scope, Name);
+unregister_name({Scope, Name, _Meta}) ->
+    unregister_name(Scope, Name).
+
+-spec unregister_name(Scope :: atom(), Name :: term()) -> term().
+unregister_name(Scope, Name) ->
     case unregister(Scope, Name) of
         ok -> Name;
         _ -> nil
@@ -442,6 +453,12 @@ unregister_name({Scope, Name}) ->
 %% @private
 -spec whereis_name(Name :: term()) -> pid() | undefined.
 whereis_name({Scope, Name}) ->
+    whereis_name(Scope, Name);
+whereis_name({Scope, Name, _Meta}) ->
+    whereis_name(Scope, Name).
+
+-spec whereis_name(Scope :: atom(), Name :: term()) -> pid() | undefined.
+whereis_name(Scope, Name) ->
     case lookup(Scope, Name) of
         {Pid, _Meta} -> Pid;
         undefined -> undefined
@@ -449,10 +466,10 @@ whereis_name({Scope, Name}) ->
 
 %% @private
 -spec send(Name :: term(), Message :: term()) -> pid().
-send({Scope, Name}, Message) ->
-    case whereis_name({Scope, Name}) of
+send(Name, Message) ->
+    case whereis_name(Name) of
         undefined ->
-            {badarg, {{Scope, Name}, Message}};
+            {badarg, {Name, Message}};
         Pid ->
             Pid ! Message,
             Pid

+ 44 - 0
test/syn_registry_SUITE.erl

@@ -34,6 +34,7 @@
 %% tests
 -export([
     one_node_via_register_unregister/1,
+    one_node_via_register_unregister_with_metadata/1,
     one_node_strict_mode/1
 ]).
 -export([
@@ -88,6 +89,7 @@ groups() ->
     [
         {one_node_registry, [shuffle], [
             one_node_via_register_unregister,
+            one_node_via_register_unregister_with_metadata,
             one_node_strict_mode
         ]},
         {three_nodes_registry, [shuffle], [
@@ -219,6 +221,48 @@ one_node_via_register_unregister(_Config) ->
     %% send via syn
     {badarg, {GenServerNameCustom, anything}} = (catch syn:send(GenServerNameCustom, anything)).
 
+one_node_via_register_unregister_with_metadata(_Config) ->
+    %% start syn
+    ok = syn:start(),
+    syn:add_node_to_scopes([scope]),
+
+    %% start gen server via syn
+    GenServerNameCustom = {scope, <<"my proc">>},
+    GenServerNameCustomMeta = {scope, <<"my proc">>, my_metadata},
+    TupleCustom = {via, syn, GenServerNameCustom},
+    TupleCustomMeta = {via, syn, GenServerNameCustomMeta},
+    {ok, PidCustom} = syn_test_gen_server:start_link(TupleCustomMeta),
+
+    %% retrieve
+    {PidCustom, my_metadata} = syn:lookup(scope, <<"my proc">>),
+
+    %% call
+    pong = syn_test_gen_server:ping(TupleCustomMeta),
+    pong = syn_test_gen_server:ping(TupleCustom),
+
+    %% send via syn
+    syn:send(GenServerNameCustomMeta, {self(), send_ping}),
+    syn_test_suite_helper:assert_received_messages([
+        reply_pong
+    ]),
+    syn:send(GenServerNameCustom, {self(), send_ping}),
+    syn_test_suite_helper:assert_received_messages([
+        reply_pong
+    ]),
+
+    %% stop server
+    syn_test_gen_server:stop(TupleCustomMeta),
+
+    %% retrieve
+    syn_test_suite_helper:assert_wait(
+        undefined,
+        fun() -> syn:lookup(scope, <<"my proc">>) end
+    ),
+
+    %% send via syn
+    {badarg, {GenServerNameCustomMeta, anything}} = (catch syn:send(GenServerNameCustomMeta, anything)),
+    {badarg, {GenServerNameCustom, anything}} = (catch syn:send(GenServerNameCustom, anything)).
+
 one_node_strict_mode(_Config) ->
     %% start syn
     ok = syn:start(),