Skip to content

Commit

Permalink
Improve error handling in offline
Browse files Browse the repository at this point in the history
  • Loading branch information
Kamil Waz committed Nov 17, 2022
1 parent eec76fe commit d3952d6
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 17 deletions.
2 changes: 2 additions & 0 deletions big_tests/tests/common_helper.erl
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ get_bjid(UserSpec) ->
Server = proplists:get_value(server, UserSpec),
<<User/binary,"@",Server/binary>>.

unprep(Bin) when is_binary(Bin) ->
list_to_binary(string:titlecase(binary_to_list(Bin))).
21 changes: 15 additions & 6 deletions big_tests/tests/graphql_offline_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

-compile([export_all, nowarn_export_all]).

-import(common_helper, [unprep/1]).
-import(distributed_helper, [mim/0, require_rpc_nodes/1]).
-import(domain_helper, [host_type/0, domain/0]).
-import(graphql_helper, [execute_command/4, get_ok_value/2, get_err_code/1, user_to_bin/1,
Expand Down Expand Up @@ -129,9 +130,13 @@ admin_delete_expired_messages2_test(Config) ->
fun admin_delete_expired_messages2_test/3).

admin_delete_expired_messages2_test(Config, JidMike, JidKate) ->
admin_delete_expired_messages2(Config, JidMike, JidKate, domain()),
admin_delete_expired_messages2(Config, JidMike, JidKate, unprep(domain())).

admin_delete_expired_messages2(Config, JidMike, JidKate, Domain) ->
generate_message(JidMike, JidKate, 2, 1),
generate_message(JidMike, JidKate, 5, -1), % not expired yet
Result = delete_expired_messages(domain(), Config),
Result = delete_expired_messages(Domain, Config),
ParsedResult = get_ok_value([data, offline, deleteExpiredMessages], Result),
?assertEqual(<<"Removed 1 messages">>, ParsedResult).

Expand All @@ -140,10 +145,14 @@ admin_delete_old_messages2_test(Config) ->
fun admin_delete_old_messages2_test/3).

admin_delete_old_messages2_test(Config, JidMike, JidKate) ->
admin_delete_old_messages2(Config, JidMike, JidKate, domain()),
admin_delete_old_messages2(Config, JidMike, JidKate, unprep(domain())).

admin_delete_old_messages2(Config, JidMike, JidKate, Domain) ->
generate_message(JidMike, JidKate, 2, 1), % not old enough
generate_message(JidMike, JidKate, 5, -1),
generate_message(JidMike, JidKate, 7, 5),
Result = delete_old_messages(domain(), 3, Config),
Result = delete_old_messages(Domain, 3, Config),
ParsedResult = get_ok_value([data, offline, deleteOldMessages], Result),
?assertEqual(<<"Removed 2 messages">>, ParsedResult).

Expand All @@ -156,12 +165,12 @@ admin_delete_old_messages_no_domain_test(Config) ->
?assertEqual(<<"domain_not_found">>, get_err_code(Result)).

admin_delete_expired_messages_offline_not_configured_test(Config) ->
Result = delete_expired_messages(domain(), Config),
get_not_loaded(Result).
get_not_loaded(delete_expired_messages(domain(), Config)),
get_not_loaded(delete_expired_messages(unprep(domain()), Config)).

admin_delete_old_messages_offline_not_configured_test(Config) ->
Result = delete_old_messages(domain(), 2, Config),
get_not_loaded(Result).
get_not_loaded(delete_old_messages(domain(), 2, Config)),
get_not_loaded(delete_old_messages(unprep(domain()), 2, Config)).

%% Domain admin test cases

Expand Down
4 changes: 2 additions & 2 deletions priv/graphql/schemas/admin/offline.gql
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ Allow admin to delete offline messages from specified domain
"""
type OfflineAdminMutation @protected @use(modules: ["mod_offline"]){
"Delete offline messages whose date has expired"
deleteExpiredMessages(domain: String!): String @use(arg: "domain")
deleteExpiredMessages(domain: DomainName!): String @use(arg: "domain")
@protected(type: DOMAIN, args: ["domain"])
"Delete messages at least as old as the number of days specified in the parameter"
deleteOldMessages(domain: String!, days: Int!): String
deleteOldMessages(domain: DomainName!, days: Int!): String
@protected(type: DOMAIN, args: ["domain"]) @use(arg: "domain")
}
18 changes: 9 additions & 9 deletions src/offline/mod_offline_api.erl
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,33 @@

-export([delete_expired_messages/1, delete_old_messages/2]).

-spec delete_expired_messages(jid:lserver()) ->
{ok | domain_not_found | server_error, iolist()}.
-type(api_result()) :: {ok, string()} | {domain_not_found | server_error, string()}.

-spec delete_expired_messages(jid:lserver()) -> api_result().
delete_expired_messages(Domain) ->
call_for_loaded_module(Domain, fun remove_expired_messages/2, {Domain}).
call_for_loaded_module(Domain, fun remove_expired_messages/2, [Domain]).

-spec delete_old_messages(jid:lserver(), Days :: integer()) ->
{ok | domain_not_found | server_error, iolist()}.
-spec delete_old_messages(jid:lserver(), Days :: integer()) -> api_result().
delete_old_messages(Domain, Days) ->
call_for_loaded_module(Domain, fun remove_old_messages/2, {Domain, Days}).
call_for_loaded_module(Domain, fun remove_old_messages/3, [Domain, Days]).

call_for_loaded_module(Domain, Function, Args) ->
case mongoose_domain_api:get_domain_host_type(Domain) of
{ok, HostType} ->
Function(Args, HostType);
apply(Function, [HostType | Args]);
{error, not_found} ->
{domain_not_found, "Unknown domain"}
end.

remove_old_messages({Domain, Days}, HostType) ->
remove_old_messages(HostType, Domain, Days) ->
case mod_offline:remove_old_messages(HostType, Domain, Days) of
{ok, C} ->
{ok, io_lib:format("Removed ~p messages", [C])};
{error, Reason} ->
{server_error, io_lib:format("Can't remove old messages: ~n~p", [Reason])}
end.

remove_expired_messages({Domain}, HostType) ->
remove_expired_messages(HostType, Domain) ->
case mod_offline:remove_expired_messages(HostType, Domain) of
{ok, C} ->
{ok, io_lib:format("Removed ~p messages", [C])};
Expand Down

0 comments on commit d3952d6

Please sign in to comment.