refactor(schema_registry): use one func for both encode and decode check
This commit is contained in:
parent
5df1784b49
commit
fa275bf0a2
|
|
@ -74,24 +74,20 @@ handle_rule_function(schema_encode, [SchemaId, Term | MoreArgs]) ->
|
||||||
iolist_to_binary(IOList);
|
iolist_to_binary(IOList);
|
||||||
handle_rule_function(schema_encode, Args) ->
|
handle_rule_function(schema_encode, Args) ->
|
||||||
error({args_count_error, {schema_encode, Args}});
|
error({args_count_error, {schema_encode, Args}});
|
||||||
handle_rule_function(schema_check_decode, [SchemaId, Data | MoreArgs]) ->
|
handle_rule_function(schema_check, [SchemaId, Data | MoreArgs]) ->
|
||||||
check_decode(SchemaId, Data, MoreArgs);
|
schema_check(SchemaId, Data, MoreArgs);
|
||||||
handle_rule_function(schema_check_encode, [SchemaId, Term | MoreArgs]) ->
|
|
||||||
check_encode(SchemaId, Term, MoreArgs);
|
|
||||||
handle_rule_function(_, _) ->
|
handle_rule_function(_, _) ->
|
||||||
{error, no_match_for_function}.
|
{error, no_match_for_function}.
|
||||||
|
|
||||||
-spec check_decode(schema_name(), encoded_data(), [term()]) -> decoded_data().
|
-spec schema_check(schema_name(), decoded_data() | encoded_data(), [term()]) -> decoded_data().
|
||||||
check_decode(SerdeName, Data, VarArgs) ->
|
schema_check(SerdeName, Data, VarArgs) when is_list(VarArgs), is_binary(Data) ->
|
||||||
with_serde(
|
with_serde(
|
||||||
SerdeName,
|
SerdeName,
|
||||||
fun(Serde) ->
|
fun(Serde) ->
|
||||||
?BOOL(SerdeName, eval_decode(Serde, [Data | VarArgs]))
|
?BOOL(SerdeName, eval_decode(Serde, [Data | VarArgs]))
|
||||||
end
|
end
|
||||||
).
|
);
|
||||||
|
schema_check(SerdeName, Data, VarArgs) when is_list(VarArgs), is_map(Data) ->
|
||||||
-spec check_encode(schema_name(), decoded_data(), [term()]) -> encoded_data().
|
|
||||||
check_encode(SerdeName, Data, VarArgs) when is_list(VarArgs) ->
|
|
||||||
with_serde(
|
with_serde(
|
||||||
SerdeName,
|
SerdeName,
|
||||||
fun(Serde) ->
|
fun(Serde) ->
|
||||||
|
|
|
||||||
|
|
@ -143,24 +143,26 @@ t_avro_invalid_schema(_Config) ->
|
||||||
t_serde_not_found(_Config) ->
|
t_serde_not_found(_Config) ->
|
||||||
%% for coverage
|
%% for coverage
|
||||||
NonexistentSerde = <<"nonexistent">>,
|
NonexistentSerde = <<"nonexistent">>,
|
||||||
|
EncodeData = #{},
|
||||||
|
DecodeData = <<"data">>,
|
||||||
?assertError(
|
?assertError(
|
||||||
{serde_not_found, NonexistentSerde},
|
{serde_not_found, NonexistentSerde},
|
||||||
emqx_schema_registry_serde:encode(NonexistentSerde, data)
|
emqx_schema_registry_serde:encode(NonexistentSerde, EncodeData)
|
||||||
),
|
),
|
||||||
?assertError(
|
?assertError(
|
||||||
{serde_not_found, NonexistentSerde},
|
{serde_not_found, NonexistentSerde},
|
||||||
emqx_schema_registry_serde:decode(NonexistentSerde, data)
|
emqx_schema_registry_serde:decode(NonexistentSerde, DecodeData)
|
||||||
),
|
),
|
||||||
?assertError(
|
?assertError(
|
||||||
{serde_not_found, NonexistentSerde},
|
{serde_not_found, NonexistentSerde},
|
||||||
emqx_schema_registry_serde:handle_rule_function(schema_check_decode, [
|
emqx_schema_registry_serde:handle_rule_function(schema_check, [
|
||||||
NonexistentSerde, data
|
NonexistentSerde, EncodeData
|
||||||
])
|
])
|
||||||
),
|
),
|
||||||
?assertError(
|
?assertError(
|
||||||
{serde_not_found, NonexistentSerde},
|
{serde_not_found, NonexistentSerde},
|
||||||
emqx_schema_registry_serde:handle_rule_function(schema_check_encode, [
|
emqx_schema_registry_serde:handle_rule_function(schema_check, [
|
||||||
NonexistentSerde, data
|
NonexistentSerde, DecodeData
|
||||||
])
|
])
|
||||||
),
|
),
|
||||||
ok.
|
ok.
|
||||||
|
|
@ -232,9 +234,9 @@ t_json_validation(_Config) ->
|
||||||
end,
|
end,
|
||||||
OK = #{<<"foo">> => 1, <<"bar">> => 2},
|
OK = #{<<"foo">> => 1, <<"bar">> => 2},
|
||||||
NotOk = #{<<"bar">> => 2},
|
NotOk = #{<<"bar">> => 2},
|
||||||
?assert(F(schema_check_encode, OK)),
|
?assert(F(schema_check, OK)),
|
||||||
?assert(F(schema_check_decode, <<"{\"foo\": 1, \"bar\": 2}">>)),
|
?assert(F(schema_check, <<"{\"foo\": 1, \"bar\": 2}">>)),
|
||||||
?assertNot(F(schema_check_encode, NotOk)),
|
?assertNot(F(schema_check, NotOk)),
|
||||||
?assertNot(F(schema_check_decode, <<"{\"bar\": 2}">>)),
|
?assertNot(F(schema_check, <<"{\"bar\": 2}">>)),
|
||||||
?assertNot(F(schema_check_decode, <<"{\"foo\": \"notinteger\", \"bar\": 2}">>)),
|
?assertNot(F(schema_check, <<"{\"foo\": \"notinteger\", \"bar\": 2}">>)),
|
||||||
ok.
|
ok.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue