@@ -47,8 +47,8 @@ suite() ->
47
47
48
48
init_per_suite (Config ) ->
49
49
HostType = host_type (),
50
- instrument_helper :start ([{c2s_element_in , #{ host_type => HostType } },
51
- {c2s_element_out , #{ host_type => HostType } },
50
+ instrument_helper :start ([{xmpp_element_in , labels () },
51
+ {xmpp_element_out , labels () },
52
52
{sm_message_bounced , #{host_type => HostType }}]),
53
53
Config1 = dynamic_modules :save_modules (HostType , Config ),
54
54
dynamic_modules :ensure_stopped (HostType , [mod_offline ]),
@@ -106,8 +106,8 @@ message_story(Alice, Bob) ->
106
106
escalus_client :send (Alice , Msg ),
107
107
MsgToBob = escalus_client :wait_for_stanza (Bob ),
108
108
escalus :assert (is_chat_message , MsgToBob ),
109
- assert_event (in , Alice , #{stanza_count => 1 , message_count => 1 , element => Msg } ),
110
- assert_event (out , Bob , #{stanza_count => 1 , message_count => 1 , element => MsgToBob } ).
109
+ assert_event (in , Alice , #{stanza_count => 1 , message_count => 1 }, Msg ),
110
+ assert_event (out , Bob , #{stanza_count => 1 , message_count => 1 }, MsgToBob ).
111
111
112
112
message_error (Config ) ->
113
113
escalus :fresh_story (Config , [{alice , 1 }], fun message_error_story /1 ).
@@ -118,9 +118,9 @@ message_error_story(Alice) ->
118
118
escalus_client :send (Alice , Msg ),
119
119
Error = escalus_client :wait_for_stanza (Alice ),
120
120
escalus :assert (is_error , [<<" cancel" >>, <<" service-unavailable" >>], Error ),
121
- assert_event (in , Alice , #{stanza_count => 1 , message_count => 1 , element => Msg } ),
122
- assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , message_error_count => 1 ,
123
- element => Error } ).
121
+ assert_event (in , Alice , #{stanza_count => 1 , message_count => 1 }, Msg ),
122
+ assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , message_error_count => 1 } ,
123
+ Error ).
124
124
125
125
presence (Config ) ->
126
126
escalus :fresh_story (Config , [{alice , 1 }, {bob , 1 }], fun presence_story /2 ).
@@ -130,8 +130,8 @@ presence_story(Alice, Bob) ->
130
130
escalus :send (Alice , Presence ),
131
131
PresenceToBob = escalus :wait_for_stanza (Bob ),
132
132
escalus :assert (is_presence , PresenceToBob ),
133
- assert_event (in , Alice , #{stanza_count => 1 , presence_count => 1 , element => Presence } ),
134
- assert_event (out , Bob , #{stanza_count => 1 , presence_count => 1 , element => PresenceToBob } ).
133
+ assert_event (in , Alice , #{stanza_count => 1 , presence_count => 1 }, Presence ),
134
+ assert_event (out , Bob , #{stanza_count => 1 , presence_count => 1 }, PresenceToBob ).
135
135
136
136
presence_error (Config ) ->
137
137
escalus :fresh_story (Config , [{alice , 1 }], fun presence_error_story /1 ).
@@ -141,9 +141,9 @@ presence_error_story(Alice) ->
141
141
escalus :send (Alice , Presence ),
142
142
Error = escalus_client :wait_for_stanza (Alice ),
143
143
escalus :assert (is_error , [<<" modify" >>, <<" bad-request" >>], Error ),
144
- assert_event (in , Alice , #{stanza_count => 1 , presence_count => 1 , element => Presence } ),
145
- assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , presence_error_count => 1 ,
146
- element => Error } ).
144
+ assert_event (in , Alice , #{stanza_count => 1 , presence_count => 1 }, Presence ),
145
+ assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , presence_error_count => 1 } ,
146
+ Error ).
147
147
148
148
iq (Config ) ->
149
149
escalus :fresh_story (Config , [{alice , 1 }], fun iq_story /1 ).
@@ -153,8 +153,8 @@ iq_story(Alice) ->
153
153
escalus_client :send (Alice , Request ),
154
154
Response = escalus_client :wait_for_stanza (Alice ),
155
155
escalus :assert (is_iq_result , [Request ], Response ),
156
- assert_event (in , Alice , #{stanza_count => 1 , iq_count => 1 , element => Request } ),
157
- assert_event (out , Alice , #{stanza_count => 1 , iq_count => 1 , element => Response } ).
156
+ assert_event (in , Alice , #{stanza_count => 1 , iq_count => 1 }, Request ),
157
+ assert_event (out , Alice , #{stanza_count => 1 , iq_count => 1 }, Response ).
158
158
159
159
iq_error (Config ) ->
160
160
escalus :fresh_story (Config , [{alice , 1 }], fun iq_error_story /1 ).
@@ -164,9 +164,8 @@ iq_error_story(Alice) ->
164
164
escalus :send (Alice , Request ),
165
165
Error = escalus_client :wait_for_stanza (Alice ),
166
166
escalus :assert (is_error , [<<" cancel" >>, <<" service-unavailable" >>], Error ),
167
- assert_event (in , Alice , #{stanza_count => 1 , iq_count => 1 , element => Request }),
168
- assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , iq_error_count => 1 ,
169
- element => Error }).
167
+ assert_event (in , Alice , #{stanza_count => 1 , iq_count => 1 }, Request ),
168
+ assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , iq_error_count => 1 }, Error ).
170
169
171
170
message_bounced (Config ) ->
172
171
escalus :fresh_story_with_config (Config , [{alice , 1 }, {bob , 1 }], fun message_bounced_story /3 ).
@@ -176,39 +175,42 @@ message_bounced_story(Config, Alice, Bob) ->
176
175
escalus_client :send (Alice , escalus_stanza :chat_to (Bob , <<" Hi!" >>)),
177
176
Error = escalus_client :wait_for_stanza (Alice ),
178
177
escalus :assert (is_error , [<<" cancel" >>, <<" service-unavailable" >>], Error ),
179
- assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , message_error_count => 1 ,
180
- element => Error } ),
178
+ assert_event (out , Alice , #{stanza_count => 1 , error_count => 1 , message_error_count => 1 } ,
179
+ Error ),
181
180
assert_message_bounced_event (Alice , Bob ).
182
181
183
182
% % C2S instrumentation events
184
183
185
184
has_child (SubElName , El ) ->
186
185
exml_query :subelement (El , SubElName ) =/= undefined .
187
186
188
- assert_event (Dir , ClientOrJid , Measurements ) ->
187
+ % % Assert exactly one XML stanza event with specific measurements and a JID
188
+ assert_event (Dir , ClientOrJid , Measurements , Element = # xmlel {}) ->
189
+ assert_event (Dir , ClientOrJid , Measurements , fun (El ) -> El =:= Element end );
190
+ assert_event (Dir , ClientOrJid , Measurements , CheckElFun ) when is_function (CheckElFun , 1 )->
189
191
Jid = jid :from_binary (escalus_utils :get_jid (ClientOrJid )),
190
- instrument_helper :assert_one (
191
- event_name (Dir ), #{host_type => host_type ()},
192
- fun (M ) -> M =:= Measurements #{jid => Jid , count => 1 } end ).
193
-
192
+ Filter = fun (M = #{element := El }) ->
193
+ maps :remove (element , M ) =:= Measurements #{jid => Jid , count => 1 ,
194
+ host_type => host_type (),
195
+ byte_size => exml :xml_size (El )}
196
+ andalso CheckElFun (El )
197
+ end ,
198
+ instrument_helper :assert_one (event_name (Dir ), labels (), Filter ).
199
+
200
+ % % Assert one or more generic XML stanza events without a JID
194
201
assert_events (Dir , CheckElFun ) ->
195
- instrument_helper :assert (
196
- event_name (Dir ), #{host_type => host_type ()},
197
- fun (M = #{element := El }) ->
198
- maps :remove (element , M ) =:= #{jid => undefined , count => 1 } andalso CheckElFun (El )
199
- end ).
200
-
201
- assert_event (Dir , ClientOrJid , Measurements , CheckElFun ) ->
202
- Jid = jid :from_binary (escalus_utils :get_jid (ClientOrJid )),
203
- instrument_helper :assert_one (
204
- event_name (Dir ), #{host_type => host_type ()},
205
- fun (M = #{element := El }) ->
206
- maps :remove (element , M ) =:= Measurements #{jid => Jid , count => 1 }
207
- andalso CheckElFun (El )
208
- end ).
209
-
210
- event_name (out ) -> c2s_element_out ;
211
- event_name (in ) -> c2s_element_in .
202
+ Filter = fun (M = #{element := El }) ->
203
+ maps :remove (element , M ) =:= #{jid => undefined , count => 1 ,
204
+ host_type => host_type (),
205
+ byte_size => exml :xml_size (El )}
206
+ andalso CheckElFun (El )
207
+ end ,
208
+ instrument_helper :assert (event_name (Dir ), labels (), Filter ).
209
+
210
+ event_name (out ) -> xmpp_element_out ;
211
+ event_name (in ) -> xmpp_element_in .
212
+
213
+ labels () -> #{connection_type => c2s }.
212
214
213
215
% % SM instrumentation events
214
216
0 commit comments