test(trie): add more involved route add + delete case

That shows how current local trie implementation breaks because
of lack of refcounting.
This commit is contained in:
Andrew Mayorov 2023-08-15 11:18:22 +04:00
parent dcb63440bc
commit 84e40fb6fe
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
1 changed files with 49 additions and 0 deletions

View File

@ -79,6 +79,55 @@ t_add_delete(_) ->
?R:delete_route(<<"a/+/b">>, node()),
?assertEqual([], ?R:topics()).
t_add_delete_incremental(_) ->
?R:add_route(<<"a/b/c">>),
?R:add_route(<<"a/+/c">>, node()),
?R:add_route(<<"a/+/+">>, node()),
?R:add_route(<<"a/b/#">>, node()),
?R:add_route(<<"#">>, node()),
?assertEqual(
[
#route{topic = <<"#">>, dest = node()},
#route{topic = <<"a/+/+">>, dest = node()},
#route{topic = <<"a/+/c">>, dest = node()},
#route{topic = <<"a/b/#">>, dest = node()},
#route{topic = <<"a/b/c">>, dest = node()}
],
lists:sort(?R:match_routes(<<"a/b/c">>))
),
?R:delete_route(<<"a/+/c">>, node()),
?assertEqual(
[
#route{topic = <<"#">>, dest = node()},
#route{topic = <<"a/+/+">>, dest = node()},
#route{topic = <<"a/b/#">>, dest = node()},
#route{topic = <<"a/b/c">>, dest = node()}
],
lists:sort(?R:match_routes(<<"a/b/c">>))
),
?R:delete_route(<<"a/+/+">>, node()),
?assertEqual(
[
#route{topic = <<"#">>, dest = node()},
#route{topic = <<"a/b/#">>, dest = node()},
#route{topic = <<"a/b/c">>, dest = node()}
],
lists:sort(?R:match_routes(<<"a/b/c">>))
),
?R:delete_route(<<"a/b/#">>, node()),
?assertEqual(
[
#route{topic = <<"#">>, dest = node()},
#route{topic = <<"a/b/c">>, dest = node()}
],
lists:sort(?R:match_routes(<<"a/b/c">>))
),
?R:delete_route(<<"a/b/c">>, node()),
?assertEqual(
[#route{topic = <<"#">>, dest = node()}],
lists:sort(?R:match_routes(<<"a/b/c">>))
).
t_do_add_delete(_) ->
?R:do_add_route(<<"a/b/c">>),
?R:do_add_route(<<"a/b/c">>, node()),