Skip to content

Commit

Permalink
Merge branch 'rel-1.12.4_verne' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
ioolkos committed Nov 8, 2021
2 parents 01a9922 + 8dda8f0 commit 1a4d60d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 10 deletions.
4 changes: 2 additions & 2 deletions src/clique_error.erl
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@ format(_Cmd, {error, {invalid_flags, Flags}}) ->
status(io_lib:format("Invalid Flags: ~p", [Flags]));
format(_Cmd, {error, {invalid_flag_value, {Name, Val}}}) ->
status(io_lib:format("Invalid value: ~p for flag: ~p", [Val, Name]));
format(_Cmd, {error, {invalid_kv_arg, Arg}}) ->
status(io_lib:format("Empty value in argument: ~p", [Arg]));
format(_Cmd, {error, {invalid_flag_combination, Msg}}) ->
status(io_lib:format("Error: ~ts", [Msg]));
format(_Cmd, {error, {invalid_value, Val}}) ->
status(io_lib:format("Invalid value: ~p", [Val]));
format(_Cmd, {error, {too_many_equal_signs, Arg}}) ->
status(io_lib:format("Too many equal signs in argument: ~p", [Arg]));
format(_Cmd, {error, {invalid_config_keys, Invalid}}) ->
status(io_lib:format("Invalid config keys: ~ts", [Invalid]));
format(_Cmd, {error, {invalid_config, {error, [_H|_T]=Msgs}}}) ->
Expand Down
44 changes: 36 additions & 8 deletions src/clique_parser.erl
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,19 @@ parse_kv_args(Args) ->
parse_kv_args([], Acc) ->
Acc;
parse_kv_args([Arg | Args], Acc) ->
case string:tokens(Arg, "=") of
[Key, Val] ->
parse_kv_args(Args, [{Key, Val} | Acc]);
[Key] ->
{error, {invalid_kv_arg, Key}};
IdxEqual = string:chr(Arg, $=),
IdxEnd = string:len(Arg),
case IdxEqual of
0 ->
{error, {invalid_kv_arg, Arg}};
1 ->
{error, {invalid_kv_arg, Arg}};
IdxEnd ->
{error, {invalid_kv_arg, Arg}};
_ ->
{error, {too_many_equal_signs, Arg}}
Key = string:substr(Arg, 1, IdxEqual - 1),
Val = string:substr(Arg, IdxEqual + 1),
parse_kv_args(Args, [{Key, Val} | Acc])
end.


Expand Down Expand Up @@ -369,11 +375,33 @@ parse_valid_args_and_flag_test() ->
?assertEqual(Args, [{"key", "value"}]),
?assertEqual(Flags, [{$n, Node}]).

parse_valid_arg_value_with_equal_sign_test() ->
Spec = spec(),
ArgsAndFlags = ["url=example.com?q=dada"],
{Spec, Args, Flags} = parse({Spec, ArgsAndFlags}),
?assertEqual(Args, [{"url", "example.com?q=dada"}]),
?assertEqual(Flags, []).

parse_valid_arg_value_with_trailing_equal_sign_test() ->
Spec = spec(),
ArgsAndFlags = ["client-id=anon-Base64v=="],
{Spec, Args, Flags} = parse({Spec, ArgsAndFlags}),
?assertEqual(Args, [{"client-id", "anon-Base64v=="}]),
?assertEqual(Flags, []).

%% All arguments must be of type k=v
parse_invalid_kv_arg_test() ->
Spec = spec(),
Args = ["ayo"],
?assertMatch({error, _}, parse({Spec, Args})).
%% Argument with equal sign and no value
ArgsNoVal = ["ayo="],
?assertMatch({error, {invalid_kv_arg, _}}, parse({Spec, ArgsNoVal})),
%% Argument with equal sign and no key
ArgsNoKey = ["=ayo"],
?assertMatch({error, {invalid_kv_arg, _}}, parse({Spec, ArgsNoKey})),
%% Argument without equal sign and no value
ArgsNoEqualAndNoVal = ["ayo"],
?assertMatch({error, {invalid_kv_arg, _}}, parse({Spec, ArgsNoEqualAndNoVal})).


%% This succeeds, because we aren't validating the flag, just parsing
%% Note: Short flags get parsed into tuples with their character as first elem
Expand Down

0 comments on commit 1a4d60d

Please sign in to comment.