Current section

Files

Jump to
chatterbox src h2_settings.erl
Raw

src/h2_settings.erl

-module(h2_settings).
-include("http2.hrl").
-export([
diff/2,
to_proplist/1
]).
-spec diff(settings(), settings()) -> settings_proplist().
diff(OldSettings, NewSettings) ->
OldPl = to_proplist(OldSettings),
NewPl = to_proplist(NewSettings),
diff_(OldPl, NewPl, []).
diff_([],[],Acc) ->
lists:reverse(Acc);
diff_([OldH|OldT],[OldH|NewT],Acc) ->
diff_(OldT, NewT, Acc);
diff_([_OldH|OldT],[NewH|NewT],Acc) ->
diff_(OldT, NewT, [NewH|Acc]).
-spec to_proplist(settings()) -> settings_proplist().
to_proplist(Settings) ->
[
{?SETTINGS_HEADER_TABLE_SIZE, Settings#settings.header_table_size },
{?SETTINGS_ENABLE_PUSH, Settings#settings.enable_push },
{?SETTINGS_MAX_CONCURRENT_STREAMS, Settings#settings.max_concurrent_streams},
{?SETTINGS_INITIAL_WINDOW_SIZE, Settings#settings.initial_window_size },
{?SETTINGS_MAX_FRAME_SIZE, Settings#settings.max_frame_size },
{?SETTINGS_MAX_HEADER_LIST_SIZE, Settings#settings.max_header_list_size }
].
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
diff_test() ->
Old = #settings{},
New = #settings{
max_frame_size=2048
},
Diff = diff(Old, New),
?assertEqual([{?SETTINGS_MAX_FRAME_SIZE, 2048}], Diff),
ok.
diff_order_test() ->
Old = #settings{},
New = #settings{
max_frame_size = 2048,
max_concurrent_streams = 2
},
Diff = diff(Old, New),
?assertEqual(
[{?SETTINGS_MAX_CONCURRENT_STREAMS, 2},
{?SETTINGS_MAX_FRAME_SIZE, 2048}],
Diff
),
?assertNotEqual(
[
{?SETTINGS_MAX_FRAME_SIZE, 2048},
{?SETTINGS_MAX_CONCURRENT_STREAMS, 2}
],
Diff
),
ok.
-endif.