Current section
Files
Jump to
Current section
Files
examples/exploriak/deps/riak_pb/test/encoding_test.erl
-module(encoding_test).
-compile([export_all]).
-include_lib("eunit/include/eunit.hrl").
-include("riak_pb_kv_codec.hrl").
pb_test_() ->
[{"content encode decode",
?_test(begin
MetaData = dict:from_list(
[{?MD_CTYPE, "ctype"},
{?MD_CHARSET, "charset"},
{?MD_ENCODING, "encoding"},
{?MD_VTAG, "vtag"},
{?MD_LINKS, [{{<<"b1">>, <<"k1">>}, <<"v1">>},
{{<<"b2">>, <<"k2">>}, <<"v2">>}
]},
{?MD_LASTMOD, {1, 2, 3}},
{?MD_USERMETA, [{<<"X-Riak-Meta-MyMetaData1">>, <<"here it is">>},
{<<"X-Riak-Meta-MoreMd">>, <<"have some more">>},
{<<"X-Riak-Meta-EvenMoreMd">>, term_to_binary({a,b,c,d,e,f})}
]},
{?MD_INDEX, [{<<"index_bin">>, <<"foo">>}]},
{?MD_DELETED, true}
]),
Value = <<"test value">>,
{MetaData2, Value2} = riak_pb_kv_codec:decode_content(
riak_kv_pb:decode_rpbcontent(
iolist_to_binary(riak_kv_pb:encode_rpbcontent(
riak_pb_kv_codec:encode_content({MetaData, Value}))))),
?assertEqual(lists:sort(dict:to_list(MetaData)), lists:sort(dict:to_list(MetaData2))),
?assertEqual(Value, Value2)
end)},
{"deleted header encode decode",
?_test(begin
InputMD = [dict:from_list([{?MD_DELETED, DelVal}]) ||
DelVal <- [true, "true", false, <<"rubbish">>]],
Value = <<"test value">>,
{OutputMD, _} = lists:unzip(
[riak_pb_kv_codec:decode_content(
riak_kv_pb:decode_rpbcontent(
iolist_to_binary(riak_kv_pb:encode_rpbcontent(
riak_pb_kv_codec:encode_content({MD, Value}))))) ||
MD <- InputMD]),
MdSame1 = (lists:sort(dict:to_list(lists:nth(1, OutputMD))) =:=
lists:sort(dict:to_list(lists:nth(2, OutputMD)))),
MdSame2 = (lists:sort(dict:to_list(lists:nth(3, OutputMD))) =:=
lists:sort(dict:to_list(lists:nth(4, OutputMD)))),
?assertEqual(true, MdSame1),
?assertEqual(true, MdSame2)
end)},
{"indexes encode decode",
?_test(begin
InputMD = dict:from_list([{?MD_INDEX, [{"index_bin", "foo"},
{"index_int", 10}]}]),
ExpectedMD = [{?MD_INDEX, [{<<"index_bin">>, <<"foo">>},
{<<"index_int">>, <<"10">>}]}],
Value = <<"test value">>,
{OutputMD, _} = riak_pb_kv_codec:decode_content(
riak_kv_pb:decode_rpbcontent(
iolist_to_binary(riak_kv_pb:encode_rpbcontent(
riak_pb_kv_codec:encode_content({InputMD, Value}))))),
?assertEqual(ExpectedMD, dict:to_list(OutputMD))
end)},
{"empty content encode decode",
?_test(begin
MetaData = dict:new(),
Value = <<"test value">>,
{MetaData2, Value2} = riak_pb_kv_codec:decode_content(
riak_kv_pb:decode_rpbcontent(
iolist_to_binary(riak_kv_pb:encode_rpbcontent(
riak_pb_kv_codec:encode_content({MetaData, Value}))))),
?assertEqual([], dict:to_list(MetaData2)),
?assertEqual(Value, Value2)
end)},
{"empty repeated metas are removed/ignored",
?_test(begin
MetaData = dict:from_list([{?MD_LINKS, []}, {?MD_USERMETA, []}, {?MD_INDEX, []}]),
Value = <<"test value">>,
{MetaData2, Value2} = riak_pb_kv_codec:decode_content(
riak_kv_pb:decode_rpbcontent(
iolist_to_binary(riak_kv_pb:encode_rpbcontent(
riak_pb_kv_codec:encode_content({MetaData, Value}))))),
?assertEqual([], dict:to_list(MetaData2)),
?assertEqual(Value, Value2)
end)},
{"msg code encode decode",
?_test(begin
msg_code_encode_decode(0)
end)}
].
msg_code_encode_decode(256) -> ok;
msg_code_encode_decode(N) ->
case riak_pb_codec:msg_type(N) of
undefined ->
ignore;
MsgType ->
?assertEqual(N, riak_pb_codec:msg_code(MsgType))
end,
msg_code_encode_decode(N+1).