@@ -424,7 +424,8 @@ muc_light_cases() ->
424
424
muc_light_include_groupchat_messages_by_default ,
425
425
muc_light_chat_markers_are_archived_if_enabled ,
426
426
muc_light_chat_markers_are_not_archived_if_disabled ,
427
- muc_light_failed_to_decode_message_in_database
427
+ muc_light_failed_to_decode_message_in_database ,
428
+ muc_light_sql_query_failed
428
429
].
429
430
430
431
muc_rsm_cases () ->
@@ -487,7 +488,8 @@ prefs_cases() ->
487
488
488
489
impl_specific () ->
489
490
[check_user_exist ,
490
- pm_failed_to_decode_message_in_database ].
491
+ pm_failed_to_decode_message_in_database ,
492
+ pm_sql_query_failed ].
491
493
492
494
suite () ->
493
495
require_rpc_nodes ([mim ]) ++ escalus :suite ().
@@ -706,12 +708,34 @@ end_state(_, _, Config) ->
706
708
init_per_testcase (CaseName , Config ) ->
707
709
case maybe_skip (CaseName , Config ) of
708
710
ok ->
711
+ maybe_setup_meck (CaseName ),
709
712
dynamic_modules :ensure_modules (host_type (), required_modules (CaseName , Config )),
710
713
lists :foldl (fun (StepF , ConfigIn ) -> StepF (CaseName , ConfigIn ) end , Config , init_steps ());
711
714
{skip , Msg } ->
712
715
{skip , Msg }
713
716
end .
714
717
718
+ maybe_setup_meck (muc_light_sql_query_failed ) ->
719
+ ok = rpc (mim (), meck , new , [mongoose_rdbms , [no_link , passthrough ]]),
720
+ ok = rpc (mim (), meck , expect ,
721
+ [mongoose_rdbms , execute_successfully ,
722
+ fun (_HostType , mam_muc_message_lookup_a_equ_limit , _Parameters ) ->
723
+ error (#{what => simulated_error });
724
+ (HostType , Name , Parameters ) ->
725
+ meck :passthrough ([HostType , Name , Parameters ])
726
+ end ]);
727
+ maybe_setup_meck (pm_sql_query_failed ) ->
728
+ ok = rpc (mim (), meck , new , [mongoose_rdbms , [no_link , passthrough ]]),
729
+ ok = rpc (mim (), meck , expect ,
730
+ [mongoose_rdbms , execute_successfully ,
731
+ fun (_HostType , mam_message_lookup_a_equ_limit , _Parameters ) ->
732
+ error (#{what => simulated_error });
733
+ (HostType , Name , Parameters ) ->
734
+ meck :passthrough ([HostType , Name , Parameters ])
735
+ end ]);
736
+ maybe_setup_meck (_ ) ->
737
+ ok .
738
+
715
739
init_steps () ->
716
740
[fun init_users /2 , fun init_archive /2 , fun start_room /2 , fun init_metrics /2 ,
717
741
fun escalus :init_per_testcase /2 ].
@@ -733,6 +757,11 @@ maybe_skip(C, Config) when C =:= muc_light_failed_to_decode_message_in_database;
733
757
C =:= pm_failed_to_decode_message_in_database ->
734
758
skip_if (? config (configuration , Config ) =:= elasticsearch ,
735
759
" elasticsearch does not support encodings" );
760
+ maybe_skip (C , Config ) when C =:= muc_light_sql_query_failed ;
761
+ C =:= pm_sql_query_failed ->
762
+ skip_if (? config (configuration , Config ) =:= elasticsearch orelse
763
+ ? config (configuration , Config ) =:= cassandra ,
764
+ " Not an SQL database" );
736
765
maybe_skip (C , Config ) when C =:= muc_light_include_groupchat_filter ;
737
766
C =:= muc_light_no_pm_stored_include_groupchat_filter ;
738
767
C =:= muc_light_include_groupchat_messages_by_default ->
@@ -840,6 +869,10 @@ init_metrics(muc_archive_request, Config) ->
840
869
init_metrics (_CaseName , Config ) ->
841
870
Config .
842
871
872
+ end_per_testcase (CaseName , Config ) when CaseName =:= pm_sql_query_failed ;
873
+ CaseName =:= muc_light_sql_query_failed ->
874
+ teardown_meck (),
875
+ escalus :end_per_testcase (CaseName , Config );
843
876
end_per_testcase (CaseName = muc_validate_mam_id , Config ) ->
844
877
unmock_mongoose_mam_id (mim ()),
845
878
escalus :end_per_testcase (CaseName , Config );
@@ -857,6 +890,9 @@ all_cases_with_room() ->
857
890
muc_cases_with_room () ++ muc_fetch_specific_msgs_cases () ++ muc_configurable_archiveid_cases () ++
858
891
muc_stanzaid_cases () ++ muc_retract_cases () ++ muc_metadata_cases () ++ muc_text_search_cases ().
859
892
893
+ teardown_meck () ->
894
+ rpc (mim (), meck , unload , []).
895
+
860
896
% % Module configuration per testcase
861
897
862
898
required_modules (CaseName , Config ) when CaseName =:= muc_light_service_discovery_stored_in_pm ;
@@ -1846,6 +1882,19 @@ muc_light_failed_to_decode_message_in_database(Config) ->
1846
1882
assert_failed_to_decode_message (ArcMsg )
1847
1883
end ).
1848
1884
1885
+ muc_light_sql_query_failed (Config ) ->
1886
+ escalus :story (Config , [{alice , 1 }], fun (Alice ) ->
1887
+ Room = muc_helper :fresh_room_name (),
1888
+ given_muc_light_room (Room , Alice , []),
1889
+ M1 = when_muc_light_message_is_sent (Alice , Room ,
1890
+ <<" Msg 1" >>, <<" Id1" >>),
1891
+ then_muc_light_message_is_received_by ([Alice ], M1 ),
1892
+ mam_helper :wait_for_room_archive_size (muc_light_host (), Room , 2 ),
1893
+ when_archive_query_is_sent (Alice , muc_light_helper :room_bin_jid (Room ), Config ),
1894
+ Error = escalus :wait_for_stanza (Alice ),
1895
+ escalus :assert (is_error , [<<" wait" >>, <<" internal-server-error" >>], Error )
1896
+ end ).
1897
+
1849
1898
pm_failed_to_decode_message_in_database (Config ) ->
1850
1899
escalus :fresh_story (Config , [{alice , 1 }, {bob , 1 }], fun (Alice , Bob ) ->
1851
1900
escalus :send (Alice , escalus_stanza :chat_to (Bob , <<" Hi" >>)),
@@ -1858,6 +1907,15 @@ pm_failed_to_decode_message_in_database(Config) ->
1858
1907
assert_failed_to_decode_message (ArcMsg )
1859
1908
end ).
1860
1909
1910
+ pm_sql_query_failed (Config ) ->
1911
+ escalus :fresh_story (Config , [{alice , 1 }, {bob , 1 }], fun (Alice , Bob ) ->
1912
+ escalus :send (Alice , escalus_stanza :chat_to (Bob , <<" OH, HAI!" >>)),
1913
+ mam_helper :wait_for_archive_size (Alice , 1 ),
1914
+ when_archive_query_is_sent (Alice , undefined , Config ),
1915
+ Error = escalus :wait_for_stanza (Alice ),
1916
+ escalus :assert (is_error , [<<" wait" >>, <<" internal-server-error" >>], Error )
1917
+ end ).
1918
+
1861
1919
retrieve_form_fields (ConfigIn ) ->
1862
1920
escalus_fresh :story (ConfigIn , [{alice , 1 }], fun (Alice ) ->
1863
1921
P = ? config (props , ConfigIn ),
0 commit comments