@@ -16,12 +16,24 @@ defmodule RealtimeWeb.RealtimeChannel.MessageDispatcherTest do
16
16
describe "fastlane_metadata/5" do
17
17
test "info level" do
18
18
assert MessageDispatcher . fastlane_metadata ( self ( ) , Serializer , "realtime:topic" , :info , "tenant_id" ) ==
19
- { :rc_fastlane , self ( ) , Serializer , "realtime:topic" , { :log , "tenant_id" } , MapSet . new ( ) }
19
+ { :rc_fastlane , self ( ) , Serializer , "realtime:topic" , :info , "tenant_id" , MapSet . new ( ) }
20
20
end
21
21
22
22
test "non-info level" do
23
23
assert MessageDispatcher . fastlane_metadata ( self ( ) , Serializer , "realtime:topic" , :warning , "tenant_id" ) ==
24
- { :rc_fastlane , self ( ) , Serializer , "realtime:topic" , MapSet . new ( ) }
24
+ { :rc_fastlane , self ( ) , Serializer , "realtime:topic" , :warning , "tenant_id" , MapSet . new ( ) }
25
+ end
26
+
27
+ test "replayed message ids" do
28
+ assert MessageDispatcher . fastlane_metadata (
29
+ self ( ) ,
30
+ Serializer ,
31
+ "realtime:topic" ,
32
+ :warning ,
33
+ "tenant_id" ,
34
+ MapSet . new ( [ 1 ] )
35
+ ) ==
36
+ { :rc_fastlane , self ( ) , Serializer , "realtime:topic" , :warning , "tenant_id" , MapSet . new ( [ 1 ] ) }
25
37
end
26
38
end
27
39
@@ -50,8 +62,8 @@ defmodule RealtimeWeb.RealtimeChannel.MessageDispatcherTest do
50
62
from_pid = :erlang . list_to_pid ( ~c' <0.2.1>' )
51
63
52
64
subscribers = [
53
- { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , { :log , "tenant123" } , MapSet . new ( ) } } ,
54
- { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , MapSet . new ( ) } }
65
+ { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :info , "tenant123" , MapSet . new ( ) } } ,
66
+ { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :warning , "tenant123" , MapSet . new ( ) } }
55
67
]
56
68
57
69
msg = % Broadcast { topic: "some:other:topic" , event: "event" , payload: % { data: "test" } }
@@ -74,6 +86,48 @@ defmodule RealtimeWeb.RealtimeChannel.MessageDispatcherTest do
74
86
refute_receive _any
75
87
end
76
88
89
+ test "dispatches 'presence_diff' messages to fastlane subscribers" do
90
+ parent = self ( )
91
+
92
+ subscriber_pid =
93
+ spawn ( fn ->
94
+ loop = fn loop ->
95
+ receive do
96
+ msg ->
97
+ send ( parent , { :subscriber , msg } )
98
+ loop . ( loop )
99
+ end
100
+ end
101
+
102
+ loop . ( loop )
103
+ end )
104
+
105
+ from_pid = :erlang . list_to_pid ( ~c' <0.2.1>' )
106
+
107
+ subscribers = [
108
+ { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :info , "tenant456" , MapSet . new ( ) } } ,
109
+ { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :warning , "tenant456" , MapSet . new ( ) } }
110
+ ]
111
+
112
+ msg = % Broadcast { topic: "some:other:topic" , event: "presence_diff" , payload: % { data: "test" } }
113
+
114
+ log =
115
+ capture_log ( fn ->
116
+ assert MessageDispatcher . dispatch ( subscribers , from_pid , msg ) == :ok
117
+ end )
118
+
119
+ assert log =~ "Received message on realtime:topic with payload: #{ inspect ( msg , pretty: true ) } "
120
+
121
+ assert_receive { :encoded , % Broadcast { event: "presence_diff" , payload: % { data: "test" } , topic: "realtime:topic" } }
122
+ assert_receive { :encoded , % Broadcast { event: "presence_diff" , payload: % { data: "test" } , topic: "realtime:topic" } }
123
+
124
+ assert Agent . get ( TestSerializer , & & 1 ) == 1
125
+
126
+ assert Realtime.GenCounter . get ( Realtime.Tenants . presence_events_per_second_key ( "tenant456" ) ) == 2
127
+
128
+ refute_receive _any
129
+ end
130
+
77
131
test "does not dispatch messages to fastlane subscribers if they already replayed it" do
78
132
parent = self ( )
79
133
@@ -95,8 +149,9 @@ defmodule RealtimeWeb.RealtimeChannel.MessageDispatcherTest do
95
149
96
150
subscribers = [
97
151
{ subscriber_pid ,
98
- { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , { :log , "tenant123" } , replaeyd_message_ids } } ,
99
- { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , replaeyd_message_ids } }
152
+ { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :info , "tenant123" , replaeyd_message_ids } } ,
153
+ { subscriber_pid ,
154
+ { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :warning , "tenant123" , replaeyd_message_ids } }
100
155
]
101
156
102
157
msg = % Broadcast {
@@ -131,8 +186,8 @@ defmodule RealtimeWeb.RealtimeChannel.MessageDispatcherTest do
131
186
from_pid = :erlang . list_to_pid ( ~c' <0.2.1>' )
132
187
133
188
subscribers = [
134
- { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , { :log , "tenant123" } , MapSet . new ( ) } } ,
135
- { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , MapSet . new ( ) } }
189
+ { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :info , "tenant123" , MapSet . new ( ) } } ,
190
+ { subscriber_pid , { :rc_fastlane , self ( ) , TestSerializer , "realtime:topic" , :warning , "tenant123" , MapSet . new ( ) } }
136
191
]
137
192
138
193
msg = % Broadcast { topic: "some:other:topic" , event: "event" , payload: "not a map" }
0 commit comments