@@ -103,6 +103,9 @@ parallel_cases() ->
103
103
h_ok_after_session_enabled_before_session ,
104
104
h_ok_after_session_enabled_after_session ,
105
105
h_ok_after_a_chat ,
106
+ h_ok_after_presence ,
107
+ h_ok_after_iq ,
108
+ h_ok_after_non_xmpp_stanza ,
106
109
h_non_given_closes_stream_gracefully ,
107
110
resend_unacked_on_reconnection ,
108
111
session_established ,
@@ -401,18 +404,14 @@ basic_ack(Config) ->
401
404
% % - <r/> is sent *before* the session is established
402
405
h_ok_before_session (Config ) ->
403
406
User = connect_fresh (Config , ? config (user , Config ), sm_after_bind ),
404
- escalus_connection :send (User , escalus_stanza :sm_request ()),
405
- escalus :assert (is_sm_ack , [0 ],
406
- escalus_connection :get_stanza (User , stream_mgmt_ack )).
407
+ assert_h (User , 0 ).
407
408
408
409
% % Test that "h" value is valid when:
409
410
% % - SM is enabled *before* the session is established
410
411
% % - <r/> is sent *after* the session is established
411
412
h_ok_after_session_enabled_before_session (Config ) ->
412
413
User = connect_fresh (Config , ? config (user , Config ), sm_before_session ),
413
- escalus_connection :send (User , escalus_stanza :sm_request ()),
414
- escalus :assert (is_sm_ack , [1 ],
415
- escalus_connection :get_stanza (User , stream_mgmt_ack )).
414
+ assert_h (User , 1 ).
416
415
417
416
% % Test that "h" value is valid when:
418
417
% % - SM is enabled *after* the session is established
@@ -422,15 +421,14 @@ h_ok_after_session_enabled_after_session(Config) ->
422
421
escalus_connection :send (User , escalus_stanza :roster_get ()),
423
422
escalus :assert (is_roster_result ,
424
423
escalus_connection :get_stanza (User , roster_result )),
425
- escalus_connection :send (User , escalus_stanza :sm_request ()),
426
- escalus :assert (is_sm_ack , [1 ],
427
- escalus_connection :get_stanza (User , stream_mgmt_ack )).
424
+ assert_h (User , 1 ).
428
425
429
426
% % Test that "h" value is valid after exchanging a few messages.
430
427
h_ok_after_a_chat (ConfigIn ) ->
431
428
Config = escalus_users :update_userspec (ConfigIn , ? config (user , ConfigIn ),
432
429
stream_management , true ),
433
430
escalus :fresh_story (Config , [{? config (user , Config ), 1 }, {bob ,1 }], fun (User , Bob ) ->
431
+ assert_h (User , 1 ),
434
432
escalus :send (User , escalus_stanza :chat_to (Bob , <<" Hi, Bob!" >>)),
435
433
escalus :assert (is_chat_message , [<<" Hi, Bob!" >>],
436
434
escalus :wait_for_stanza (Bob )),
@@ -443,12 +441,47 @@ h_ok_after_a_chat(ConfigIn) ->
443
441
escalus :send (User , escalus_stanza :chat_to (Bob , <<" Pretty !@#$%^$" >>)),
444
442
escalus :assert (is_chat_message , [<<" Pretty !@#$%^$" >>],
445
443
escalus :wait_for_stanza (Bob )),
446
- escalus :send (User , escalus_stanza :sm_request ()),
447
- escalus :assert (is_sm_ack , [3 ], escalus :wait_for_stanza (User )),
444
+ assert_h (User , 3 ),
448
445
% % Ack, so that unacked messages don't go into offline store.
449
446
escalus :send (User , escalus_stanza :sm_ack (3 ))
450
447
end ).
451
448
449
+ h_ok_after_presence (Config ) ->
450
+ User = connect_fresh (Config , ? config (user , Config ), sm_before_session ),
451
+ assert_h (User , 1 ),
452
+ Presence = escalus_stanza :presence (<<" available" >>),
453
+ escalus :send (User , Presence ),
454
+ escalus :assert (is_presence , escalus :wait_for_stanza (User )),
455
+ assert_h (User , 2 ),
456
+ escalus :send (User , Presence ),
457
+ escalus :assert (is_presence , escalus :wait_for_stanza (User )),
458
+ assert_h (User , 3 ).
459
+
460
+ h_ok_after_iq (Config ) ->
461
+ User = connect_fresh (Config , ? config (user , Config ), sm_before_session ),
462
+ assert_h (User , 1 ),
463
+ Iq = escalus_stanza :iq_get (<<" invalid_ns" >>, []),
464
+ escalus_client :send (User , Iq ),
465
+ escalus :assert (is_iq_error , escalus :wait_for_stanza (User )),
466
+ assert_h (User , 2 ),
467
+ escalus_client :send (User , Iq ),
468
+ escalus :assert (is_iq_error , escalus :wait_for_stanza (User )),
469
+ assert_h (User , 3 ).
470
+
471
+ h_ok_after_non_xmpp_stanza (Config ) ->
472
+ User = connect_fresh (Config , ? config (user , Config ), sm_before_session ),
473
+ assert_h (User , 1 ),
474
+ % % SM stanzas are not counted
475
+ assert_h (User , 1 ),
476
+ % % CSI stanzas are not counted
477
+ CsiActive = csi_helper :csi_stanza (<<" active" >>),
478
+ escalus_client :send (User , CsiActive ),
479
+ assert_h (User , 1 ),
480
+ % % any non-xmpp stanza is not counted
481
+ Stanza = # xmlel {name = <<" dummy_stanza" >>},
482
+ escalus_client :send (User , Stanza ),
483
+ assert_h (User , 1 ).
484
+
452
485
h_non_given_closes_stream_gracefully (ConfigIn ) ->
453
486
AStanza = # xmlel {name = <<" a" >>,
454
487
attrs = #{<<" xmlns" >> => <<" urn:xmpp:sm:3" >>}},
@@ -1601,3 +1634,7 @@ maybe_ack_initial_presence(User, ack) ->
1601
1634
ack_initial_presence (User );
1602
1635
maybe_ack_initial_presence (_User , no_ack ) ->
1603
1636
ok .
1637
+
1638
+ assert_h (User , H ) ->
1639
+ escalus :send (User , escalus_stanza :sm_request ()),
1640
+ escalus :assert (is_sm_ack , [H ], escalus :wait_for_stanza (User )).
0 commit comments