Skip to content

Commit

Permalink
Add tests for checking maximium element size
Browse files Browse the repository at this point in the history
  • Loading branch information
chrzaszcz committed Dec 21, 2023
1 parent 85bcf14 commit 3d65e6c
Showing 1 changed file with 44 additions and 5 deletions.
49 changes: 44 additions & 5 deletions test/exml_stream_tests.erl
Original file line number Diff line number Diff line change
Expand Up @@ -183,11 +183,50 @@ stream_restarts_with_xml_declaration_test() ->
#xmlel{name = <<"other">>}],
Elements).

stream_max_child_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_child_size, 15}]),
{ok, Parser1, _} = exml_stream:parse(Parser0, <<"<stream><root>">>),
{ok, Parser2, _} = exml_stream:parse(Parser1, <<"<a></a>">>),
?assertEqual({error, "child element too big"}, exml_stream:parse(Parser2, <<"<b>456</b>">>)).
stream_max_opening_tag_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_element_size, 10}]),
?assertMatch({ok, _Parser1, [#xmlstreamstart{},
#xmlel{}]}, exml_stream:parse(Parser0, <<"<stream89><a></a>">>)),
{ok, Parser2} = exml_stream:new_parser([{max_element_size, 9}]),
?assertEqual({error, "opening tag too big"}, exml_stream:parse(Parser2, <<"<stream89><a></a>">>)).

stream_max_element_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_element_size, 10}]),
{ok, Parser1, Elements0} = exml_stream:parse(Parser0, <<"<stream><a>123</a><b>123</b>">>),
?assertMatch([#xmlstreamstart{}, #xmlel{}, #xmlel{}], Elements0),
?assertEqual({error, "element too big"}, exml_stream:parse(Parser1, <<"<c>1234</c>">>)).

stream_max_incomplete_element_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_element_size, 10}]),
{ok, Parser1, Elements0} = exml_stream:parse(Parser0, <<"<stream><a>123</a><b>123</b>">>),
?assertMatch([#xmlstreamstart{}, #xmlel{}, #xmlel{}], Elements0),
%% Element <c> has 10 characters, but it's incomplete, so it would be too big
?assertEqual({error, "element too big"}, exml_stream:parse(Parser1, <<"<c>1234</c">>)).

stream_max_nested_element_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_element_size, 10}]),
{ok, Parser1, Elements0} = exml_stream:parse(Parser0, <<"<stream><a></a>">>),
?assertMatch([#xmlstreamstart{}, #xmlel{}], Elements0),
?assertEqual({error, "element too big"}, exml_stream:parse(Parser1, <<"<c><d/></c>">>)).

stream_max_chunked_element_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_element_size, 10}]),
{ok, Parser1, Elements0} = exml_stream:parse(Parser0, <<"<stream><a><b/>">>),
?assertMatch([#xmlstreamstart{}], Elements0),
?assertEqual({error, "element too big"}, exml_stream:parse(Parser1, <<" ">>)).

stream_max_root_element_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_element_size, 10}, {infinite_stream, true}]),
{ok, Parser1, Elements0} = exml_stream:parse(Parser0, <<"<a>123</a><b>123</b>">>),
?assertMatch([#xmlel{}, #xmlel{}], Elements0),
?assertEqual({error, "element too big"}, exml_stream:parse(Parser1, <<"<c>1234</c>">>)).

stream_max_incomplete_root_element_size_test() ->
{ok, Parser0} = exml_stream:new_parser([{max_element_size, 10}, {infinite_stream, true}]),
{ok, Parser1, Elements0} = exml_stream:parse(Parser0, <<"<a>123</a><b>123</b>">>),
?assertMatch([#xmlel{}, #xmlel{}], Elements0),
%% Element <c> has 10 characters, but it will have at least one more character
?assertEqual({error, "element too big"}, exml_stream:parse(Parser1, <<"<c>1234</c">>)).

infinite_stream_partial_chunk_test() ->
{ok, Parser0} = exml_stream:new_parser([{infinite_stream, true}, {autoreset, true}]),
Expand Down

0 comments on commit 3d65e6c

Please sign in to comment.