%% %% Licensed to the Apache Software Foundation (ASF) under one %% or more contributor license agreements. See the NOTICE file %% distributed with this work for additional information %% regarding copyright ownership. The ASF licenses this file %% to you under the Apache License, Version 2.0 (the %% "License"); you may not use this file except in compliance %% with the License. You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, %% software distributed under the License is distributed on an %% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY %% KIND, either express or implied. See the License for the %% specific language governing permissions and limitations %% under the License. %% -module(test_thrift_membuffer_transport). -include_lib("eunit/include/eunit.hrl"). new() -> thrift_membuffer_transport:new(). new(Data) -> thrift_membuffer_transport:new(Data). new_test_() -> [ {"new empty membuffer", ?_assertMatch( {ok, {_, _, {t_membuffer, []}}}, new() )}, {"new membuffer with <<>>", ?_assertMatch( {ok, {_, _, {t_membuffer, [<<>>]}}}, new(<<>>) )}, {"new membuffer with []", ?_assertMatch( {ok, {_, _, {t_membuffer, []}}}, new([]) )}, {"new membuffer with <<\"hallo world\">>", ?_assertMatch( {ok, {_, _, {t_membuffer, [<<"hallo world">>]}}}, new(<<"hallo world">>) )}, {"new membuffer with \"hallo world\"", ?_assertMatch( {ok, {_, _, {t_membuffer, "hallo world"}}}, new("hallo world") )} ]. read(Membuffer, Bytes) -> thrift_membuffer_transport:read(Membuffer, Bytes). read_test_() -> [ {"read zero bytes from an empty membuffer", ?_assertMatch( {_, {ok, <<>>}}, read({t_membuffer, []}, 0) )}, {"read 1 byte from an empty membuffer", ?_assertMatch( {_, {ok, <<>>}}, read({t_membuffer, []}, 1) )}, {"read zero bytes from nonempty membuffer", ?_assertMatch( {{t_membuffer, <<"hallo world">>}, {ok, <<>>}}, read({t_membuffer, [["hallo", " "], "world"]}, 0) )}, {"read 1 byte from nonempty membuffer", ?_assertMatch( {{t_membuffer, <<"allo world">>}, {ok, <<"h">>}}, read({t_membuffer, [["hallo", " "], "world"]}, 1) )}, {"read a zillion bytes from nonempty buffer", ?_assertMatch( {{t_membuffer, <<>>}, {ok, <<"hallo world">>}}, read({t_membuffer, [["hallo", " "], "world"]}, 65536) )} ]. read_exact(Membuffer, Bytes) -> thrift_membuffer_transport:read_exact(Membuffer, Bytes). read_exact_test_() -> [ {"read exactly zero bytes from an empty membuffer", ?_assertMatch( {_, {ok, <<>>}}, read_exact({t_membuffer, []}, 0) )}, {"read exactly 1 byte from an empty membuffer", ?_assertMatch( {_, {error, eof}}, read_exact({t_membuffer, []}, 1) )}, {"read exactly zero bytes from nonempty membuffer", ?_assertMatch( {{t_membuffer, <<"hallo world">>}, {ok, <<>>}}, read_exact({t_membuffer, [["hallo", " "], "world"]}, 0) )}, {"read exactly 1 byte from nonempty membuffer", ?_assertMatch( {{t_membuffer, <<"allo world">>}, {ok, <<"h">>}}, read_exact({t_membuffer, [["hallo", " "], "world"]}, 1) )}, {"read exactly a zillion bytes from nonempty buffer", ?_assertMatch( {{t_membuffer, [["hallo", " "], "world"]}, {error, eof}}, read_exact({t_membuffer, [["hallo", " "], "world"]}, 65536) )} ]. write(Membuffer, Data) -> thrift_membuffer_transport:write(Membuffer, Data). write_test_() -> [ {"write empty list to empty membuffer", ?_assertMatch( {{t_membuffer, [[], []]}, ok}, write({t_membuffer, []}, []) )}, {"write empty list to nonempty membuffer", ?_assertMatch( {{t_membuffer, ["hallo world", []]}, ok}, write({t_membuffer, "hallo world"}, []) )}, {"write empty binary to empty membuffer", ?_assertMatch( {{t_membuffer, [[], <<>>]}, ok}, write({t_membuffer, []}, <<>>) )}, {"write empty binary to nonempty membuffer", ?_assertMatch( {{t_membuffer, ["hallo world", <<>>]}, ok}, write({t_membuffer, "hallo world"}, <<>>) )}, {"write a list to empty membuffer", ?_assertMatch( {{t_membuffer, [[], "hallo world"]}, ok}, write({t_membuffer, []}, "hallo world") )}, {"write a list to nonempty membuffer", ?_assertMatch( {{t_membuffer, [["hallo", " "], "world"]}, ok}, write({t_membuffer, ["hallo", " "]}, "world") )}, {"write a binary to empty membuffer", ?_assertMatch( {{t_membuffer, [[], <<"hallo world">>]}, ok}, write({t_membuffer, []}, <<"hallo world">>) )}, {"write a binary to nonempty membuffer", ?_assertMatch( {{t_membuffer, [["hallo", " "], <<"world">>]}, ok}, write({t_membuffer, ["hallo", " "]}, <<"world">>) )} ]. flush(Transport) -> thrift_membuffer_transport:flush(Transport). flush_test_() -> [ {"flush empty membuffer", ?_assertMatch( {{t_membuffer, []}, ok}, flush({t_membuffer, []}) )}, {"flush nonempty membuffer", ?_assertMatch( {{t_membuffer, [<<"hallo world">>]}, ok}, flush({t_membuffer, [<<"hallo world">>]}) )} ]. close(Transport) -> thrift_membuffer_transport:close(Transport). close_test_() -> {"close membuffer", ?_assertMatch( {{t_membuffer, _}, ok}, close({t_membuffer, []}) )}.