emqx/apps/emqx_redis/test/emqx_redis_command_SUITE.erl

77 lines
2.4 KiB
Erlang

%%--------------------------------------------------------------------
%% Copyright (c) 2020-2023 EMQ Technologies Co., Ltd. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%--------------------------------------------------------------------
-module(emqx_redis_command_SUITE).
-compile(nowarn_export_all).
-compile(export_all).
-include_lib("eunit/include/eunit.hrl").
all() ->
emqx_common_test_helpers:all(?MODULE).
t_split_ok(_Config) ->
?assertEqual(
{ok, [<<"ab">>, <<"cd">>, <<"ef">>]},
emqx_redis_command:split(<<" \"ab\" 'cd' ef ">>)
),
?assertEqual(
{ok, [<<"ab">>, <<"cd">>, <<"ef">>]},
emqx_redis_command:split(<<" ab\tcd ef">>)
),
?assertEqual(
{ok, [<<"abc'd">>, <<"ef">>]},
emqx_redis_command:split(<<"ab\"c'd\" ef">>)
),
?assertEqual(
{ok, [<<"abc\"d">>, <<"ef">>]},
emqx_redis_command:split(<<"ab'c\"d' ef">>)
),
?assertEqual(
{ok, [<<"IJK">>, <<"\\x49\\x4a\\x4B">>]},
emqx_redis_command:split(<<"\"\\x49\\x4a\\x4B\" \\x49\\x4a\\x4B">>)
),
?assertEqual(
{ok, [<<"x\t\n\r\b\v">>]},
emqx_redis_command:split(<<"\"\\x\\t\\n\\r\\b\\a\"">>)
),
?assertEqual(
{ok, [<<"abc\'d">>, <<"ef">>]},
emqx_redis_command:split(<<"'abc\\'d' ef">>)
),
?assertEqual(
{ok, [<<>>, <<>>]},
emqx_redis_command:split(<<" '' \"\" ">>)
).
t_split_error(_Config) ->
?assertEqual(
{error, trailing_after_quote},
emqx_redis_command:split(<<"\"a\"b">>)
),
?assertEqual(
{error, unterminated_quote},
emqx_redis_command:split(<<"\"ab">>)
),
?assertEqual(
{error, trailing_after_single_quote},
emqx_redis_command:split(<<"'a'b'c">>)
),
?assertEqual(
{error, unterminated_single_quote},
emqx_redis_command:split(<<"'ab">>)
).