%% %% 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_framed_transport). -include_lib("eunit/include/eunit.hrl"). new(Transport) -> thrift_framed_transport:new(Transport). new_test_() -> [ {"new framed membuffer", ?_assertMatch( {ok, {t_transport, thrift_framed_transport, {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, []}}, [], [] }}}, new({t_transport, thrift_membuffer_transport, {t_membuffer, []}}) )} ]. read(Frame, Bytes) -> thrift_framed_transport:read(Frame, Bytes). read_test_() -> [ {"read zero bytes from an empty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, {ok, <<>>} }, read( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, 0 ) )}, {"read 1 byte from an empty framed membuffer", ?_assertMatch( {_, {error, eof}}, read( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, 1 ) )}, {"read zero bytes from nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, [], [] }, {ok, <<>>} }, read( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, [], [] }, 0 ) )}, {"read 1 byte from nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<"allo world">>, [] }, {ok, <<"h">>} }, read( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, [], [] }, 1 ) )}, {"read 1 byte from nonempty buffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<"allo world">>, [] }, {ok, <<"h">>} }, read( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<"hallo world">>, [] }, 1 ) )}, {"read a zillion bytes from nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<>>, [] }, {ok, <<"hallo world">>} }, read( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, [], [] }, 65536 ) )} ]. read_exact(Frame, Bytes) -> thrift_framed_transport:read_exact(Frame, Bytes). read_exact_test_() -> [ {"read exactly zero bytes from an empty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<>>, [] }, {ok, <<>>} }, read_exact( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, 0 ) )}, {"read exactly 1 byte from an empty framed membuffer", ?_assertMatch( {_, {error, eof}}, read_exact( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, 1 ) )}, {"read exactly zero bytes from nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, <<>>, [] }, {ok, <<>>} }, read_exact( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, [], [] }, 0 ) )}, {"read exactly 1 byte from nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<"allo world">>, [] }, {ok, <<"h">>} }, read_exact( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, [], [] }, 1 ) )}, {"read exactly 1 byte from nonempty buffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<"allo world">>, [] }, {ok, <<"h">>} }, read_exact( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, <<"hallo world">>, [] }, 1 ) )}, {"read exactly a zillion bytes from nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [[],<<"hallo world">>], [] }, {error, eof} }, read_exact( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<0, 0, 0, 11, "hallo world">> }}, [], [] }, 65536 ) )} ]. write(Framed, Data) -> thrift_framed_transport:write(Framed, Data). write_test_() -> [ {"write empty list to empty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [[], []] }, ok }, write( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, [] ) )}, {"write empty list to nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [["hallo world"], []] }, ok }, write( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], ["hallo world"] }, [] ) )}, {"write empty binary to empty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [[], <<>>] }, ok }, write( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, <<>> ) )}, {"write empty binary to nonempty framed membuffer", ?_assertMatch( { {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [["hallo world"], <<>>] }, ok }, write( {t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], ["hallo world"] }, <<>> ) )} ]. flush(Transport) -> thrift_framed_transport:flush(Transport). flush_test_() -> [ {"flush empty framed membuffer", ?_assertMatch( {{t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, ok }, flush({t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }) )}, {"flush nonempty framed membuffer", ?_assertMatch( {{t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, [<<>>, [<<0, 0, 0, 11>>, <<"hallo world">>]] }}, [], [] }, ok }, flush({t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], <<"hallo world">> }) )} ]. close(Transport) -> thrift_framed_transport:close(Transport). close_test_() -> {"close framed membuffer", ?_assertMatch( {{t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }, ok }, close({t_framed, {t_transport, thrift_membuffer_transport, {t_membuffer, <<>>}}, [], [] }) )}.