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