Skip to content

Commit

Permalink
Add tests for disabling full text search
Browse files Browse the repository at this point in the history
  • Loading branch information
rslota committed Jan 19, 2017
1 parent 3c24895 commit 509a6b4
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 63 deletions.
2 changes: 1 addition & 1 deletion apps/ejabberd/src/mod_mam.erl
Original file line number Diff line number Diff line change
Expand Up @@ -787,7 +787,7 @@ remove_archive(Host, ArcID, ArcJID=#jid{}) ->
lookup_messages(Host, ArcID, ArcJID, RSM, Borders, Start, End, Now,
WithJID, SearchText, PageSize, LimitPassed, MaxResultLimit, IsSimple) ->
StartT = os:timestamp(),
case not has_full_text_search(Host) andalso SearchText /= undefined of
case SearchText /= undefined andalso not has_full_text_search(Host) of
true -> %% Use of disabled full text search
{error, 'not-supported'};
false ->
Expand Down
2 changes: 1 addition & 1 deletion apps/ejabberd/src/mod_mam_muc.erl
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,7 @@ remove_archive(Host, ArcID, ArcJID = #jid{}) ->
| {error, Reason :: term()}.%Result :: any(),
lookup_messages(Host, ArcID, ArcJID, RSM, Borders, Start, End, Now,
WithJID, SearchText, PageSize, LimitPassed, MaxResultLimit, IsSimple) ->
case not has_full_text_search(Host) andalso SearchText /= undefined of
case SearchText /= undefined andalso not has_full_text_search(Host) of
true -> %% Use of disabled full text search
{error, 'not-supported'};
false ->
Expand Down
32 changes: 16 additions & 16 deletions apps/ejabberd/src/mod_mam_utils.erl
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
-export([send_message/3,
is_jid_in_user_roster/2]).

%-define(MAM_INLINE_UTILS, true).
%-define(MAM_INLINE_UTILS, true).

-ifdef(MAM_INLINE_UTILS).
-compile({inline, [
Expand Down Expand Up @@ -128,7 +128,7 @@ rsm_ns_binary() -> <<"http://jabber.org/protocol/rsm">>.
%% "maybe" means, that the function may return `undefined'.
%% @end
-spec maybe_microseconds(iso8601_datetime_binary()) -> unix_timestamp();
(<<>>) -> undefined.
(<<>>) -> undefined.
maybe_microseconds(<<>>) -> undefined;
maybe_microseconds(ISODateTime) ->
case iso8601_datetime_binary_to_timestamp(ISODateTime) of
Expand All @@ -150,7 +150,7 @@ microseconds_to_now(MicroSeconds) when is_integer(MicroSeconds) ->

%% @doc Returns time in `now()' format.
-spec iso8601_datetime_binary_to_timestamp(iso8601_datetime_binary())
-> erlang:timestamp() | undefined.
-> erlang:timestamp() | undefined.
iso8601_datetime_binary_to_timestamp(DateTime) when is_binary(DateTime) ->
jlib:datetime_binary_to_timestamp(DateTime).

Expand Down Expand Up @@ -184,7 +184,7 @@ generate_message_id() ->
%% The maximum date, that can be encoded is `{{4253, 5, 31}, {22, 20, 37}}'.
-spec encode_compact_uuid(integer(), integer()) -> integer().
encode_compact_uuid(Microseconds, NodeId)
when is_integer(Microseconds), is_integer(NodeId) ->
when is_integer(Microseconds), is_integer(NodeId) ->
(Microseconds bsl 8) + NodeId.


Expand Down Expand Up @@ -550,16 +550,16 @@ form_borders_decode(QueryEl) ->
BeforeID :: 'undefined' | non_neg_integer(),
FromID :: 'undefined' | non_neg_integer(),
ToID :: 'undefined' | non_neg_integer()
) -> 'undefined' | mod_mam:borders().
) -> 'undefined' | mod_mam:borders().
borders(undefined, undefined, undefined, undefined) ->
undefined;
borders(AfterID, BeforeID, FromID, ToID) ->
#mam_borders{
after_id = AfterID,
before_id = BeforeID,
from_id = FromID,
to_id = ToID
}.
after_id = AfterID,
before_id = BeforeID,
from_id = FromID,
to_id = ToID
}.


-spec tag_id(jlib:xmlel(), binary()) -> 'undefined' | integer().
Expand Down Expand Up @@ -711,7 +711,7 @@ normalize_search_text(Text, WordSeparator) ->
%% JID serialization

-spec jid_to_opt_binary(UserJID :: ejabberd:jid(), JID :: ejabberd:jid()
) -> ejabberd:literal_jid().
) -> ejabberd:literal_jid().
jid_to_opt_binary(#jid{lserver=LServer, luser=LUser},
#jid{lserver=LServer, luser=LUser, lresource= <<>>}) ->
<<>>;
Expand All @@ -735,20 +735,20 @@ jid_to_opt_binary(_,


-spec expand_minified_jid(UserJID :: ejabberd:jid(),
OptJID :: ejabberd:literal_jid()) -> ejabberd:literal_jid().
OptJID :: ejabberd:literal_jid()) -> ejabberd:literal_jid().
expand_minified_jid(#jid{lserver=LServer, luser=LUser}, <<>>) ->
<<LUser/binary, $@, LServer/binary>>;
expand_minified_jid(#jid{lserver=LServer, luser=LUser}, <<$/, LResource/binary>>) ->
<<LUser/binary, $@, LServer/binary, $/, LResource/binary>>;
expand_minified_jid(UserJID, Encoded) ->
Part = binary:match(Encoded, [<<$@>>, <<$/>>, <<$:>>]),
expand_minified_jid2(Part, UserJID, Encoded).
expand_minified_jid_2(Part, UserJID, Encoded).

-spec expand_minified_jid_2('nomatch' | {non_neg_integer(), 1},
ejabberd:jid(), Encoded :: ejabberd:luser() | binary()) -> binary().
expand_minified_jid_2(nomatch, #jid{lserver=ThisServer}, LUser) ->
<<LUser/binary, $@, ThisServer/binary>>;
expand_minified_jid2({Pos, 1}, #jid{lserver=ThisServer}, Encoded) ->
expand_minified_jid_2({Pos, 1}, #jid{lserver=ThisServer}, Encoded) ->
case Encoded of
<<LServer:Pos/binary, $:, LUser/binary>> ->
<<LUser/binary, $@, LServer/binary>>;
Expand All @@ -765,8 +765,8 @@ jid_to_opt_binary_test_() ->
check_stringprep(),
UserJID = jid:from_binary(<<"alice@room">>),
[?_assertEqual(JID,
(expand_minified_jid(UserJID,
jid_to_opt_binary(UserJID, jid:from_binary(JID)))))
(expand_minified_jid(UserJID,
jid_to_opt_binary(UserJID, jid:from_binary(JID)))))
|| JID <- test_jids()].

test_jids() ->
Expand Down
89 changes: 44 additions & 45 deletions test/ejabberd_tests/tests/mam_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,8 @@ basic_group_names() ->
muc_light,
policy_violation,
prefs_cases,
impl_specific
impl_specific,
disabled_text_search
].

all() ->
Expand Down Expand Up @@ -275,7 +276,11 @@ basic_groups() ->
{muc_light, [], muc_light_cases()},
{prefs_cases, [parallel], prefs_cases()},
{impl_specific, [], impl_specific()},
{disabled_text_search, [], disabled_text_search_cases()}
{disabled_text_search, [],
[
{mam03, [], disabled_text_search_cases()},
{mam04, [], disabled_text_search_cases()}
]}
].


Expand Down Expand Up @@ -609,71 +614,60 @@ init_modules(odbc_mnesia_cache, muc_all, Config) ->
init_module(host(), mod_mam_cache_user, [muc]),
init_module(host(), mod_mam_muc, [{host, "muc.@HOST@"}, add_archived_element]),
Config;
init_modules(odbc, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm]),
init_module(host(), mod_mam_odbc_prefs, [pm]),
init_module(host(), mod_mam_odbc_user, [pm]),
Config;
init_modules(odbc_simple, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc_simple, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm, simple]),
init_module(host(), mod_mam_odbc_prefs, [pm]),
init_module(host(), mod_mam_odbc_user, [pm]),
Config;
init_modules(riak_timed_yz_buckets, disabled_text_search, Config) ->
init_modules(riak_timed_yz_buckets, C, Config) ->
init_module(host(), mod_mam_riak_timed_arch_yz, [pm, muc]),
init_module(host(), mod_mam_mnesia_prefs, [pm, muc,
{archive_key, mam_archive_key_server_user}]),
init_module(host(), mod_mam, [add_archived_element, {full_text_search, false}]),
init_module(host(), mod_mam_muc, [{host, "muc.@HOST@"}, add_archived_element]),
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_muc,
[{host, "muc.@HOST@"}, add_archived_element] ++ addin_mam_options(C)),
Config;
init_modules(cassandra, disabled_text_search, Config) ->
init_modules(cassandra, C, Config) ->
init_module(host(), mod_mam_cassandra_arch, [pm]),
init_module(host(), mod_mam_cassandra_prefs, [pm]),
init_module(host(), mod_mam, [add_archived_element, {full_text_search, false}]),
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
Config;
init_modules(cassandra, _, Config) ->
init_module(host(), mod_mam_cassandra_arch, [pm]),
init_module(host(), mod_mam_cassandra_prefs, [pm]),
init_module(host(), mod_mam, [add_archived_element]),
Config;
init_modules(odbc_async, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc_async, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm, no_writer]),
init_module(host(), mod_mam_odbc_async_writer, [pm, {flush_interval, 1}]), % 1ms
init_module(host(), mod_mam_odbc_prefs, [pm]),
init_module(host(), mod_mam_odbc_user, [pm]),
Config;
init_modules(riak_timed_yz_buckets, _, Config) ->
init_module(host(), mod_mam_riak_timed_arch_yz, [pm, muc]),
init_module(host(), mod_mam_mnesia_prefs, [pm, muc,
{archive_key, mam_archive_key_server_user}]),
init_module(host(), mod_mam, [add_archived_element]),
init_module(host(), mod_mam_muc, [{host, "muc.@HOST@"}, add_archived_element]),
Config;
init_modules(odbc_async_pool, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc_async_pool, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm, no_writer]),
init_module(host(), mod_mam_odbc_async_pool_writer, [pm, {flush_interval, 1}]), %% 1ms
init_module(host(), mod_mam_odbc_prefs, [pm]),
init_module(host(), mod_mam_odbc_user, [pm]),
Config;
init_modules(odbc_mnesia, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc_mnesia, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm]),
init_module(host(), mod_mam_mnesia_prefs, [pm]),
init_module(host(), mod_mam_odbc_user, [pm]),
Config;
init_modules(odbc_cache, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc_cache, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm]),
init_module(host(), mod_mam_odbc_prefs, [pm]),
init_module(host(), mod_mam_odbc_user, [pm]),
init_module(host(), mod_mam_cache_user, [pm]),
Config;
init_modules(odbc_async_cache, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc_async_cache, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm, no_writer]),
init_module(host(), mod_mam_odbc_async_pool_writer, [pm, {flush_interval, 1}]), %% 1ms
init_module(host(), mod_mam_odbc_prefs, [pm]),
Expand All @@ -682,8 +676,8 @@ init_modules(odbc_async_cache, _, Config) ->
Config;
init_modules(odbc_mnesia_muc_cache, _, _Config) ->
skip;
init_modules(odbc_mnesia_cache, _, Config) ->
init_module(host(), mod_mam, [add_archived_element]),
init_modules(odbc_mnesia_cache, C, Config) ->
init_module(host(), mod_mam, [add_archived_element] ++ addin_mam_options(C)),
init_module(host(), mod_mam_odbc_arch, [pm]),
init_module(host(), mod_mam_mnesia_prefs, [pm]),
init_module(host(), mod_mam_odbc_user, [pm]),
Expand All @@ -698,6 +692,11 @@ end_modules(_, _, Config) ->
[stop_module(host(), M) || M <- mam_modules()],
Config.

addin_mam_options(disabled_text_search) ->
[{full_text_search, false}];
addin_mam_options(_) ->
[].

mam_modules() ->
[mod_mam,
mod_mam_muc,
Expand Down Expand Up @@ -987,21 +986,21 @@ text_search_is_not_available(Config) ->
escalus:assert(is_iq_with_ns, [Namespace], Res),
QueryEl = exml_query:subelement(Res, <<"query">>),
XEl = exml_query:subelement(QueryEl, <<"x">>),
escalus:assert(has_field_with_type, [<<"full-text-search">>, <<"text-single">>], XEl),
ok
Fields = exml_query:paths(XEl, [{element, <<"field">>}]),
HasFullTextSearch = lists:any(fun(Item) ->
exml_query:attr(Item, <<"var">>) == <<"full-text-search">>
end, Fields),

?assert_equal(false, HasFullTextSearch)
end,
escalus_fresh:story(Config, [{alice, 1}], F).

text_search_query_fails_if_disabled(Config) ->
P = ?config(props, Config),
F = fun(Alice, _Bob) ->
%% 'Cat' query
escalus:send(Alice, stanza_text_search_archive_request(P, <<"q1">>, <<"cat">>)),
Res1 = wait_archive_respond(P, Alice),
assert_respond_size(0, Res1),
assert_respond_query_id(P, <<"q1">>, parse_result_iq(P, Res1)),

ok
F = fun(_Alice, Bob) ->
escalus:send(Bob, stanza_text_search_archive_request(P, <<"q1">>, <<"cat">>)),
Res = escalus:wait_for_stanza(Bob),
escalus:assert(is_iq_error, Res)
end,
escalus_fresh:story(Config, [{alice, 1}, {bob, 1}], F).

Expand Down

0 comments on commit 509a6b4

Please sign in to comment.