mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 10:48:51 +00:00
a559f8d903
Client: Erlang Patch: Alisdair Sullivan This closes #288
360 lines
8.8 KiB
Erlang
360 lines
8.8 KiB
Erlang
%%
|
|
%% 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, <<>>}},
|
|
[]
|
|
})
|
|
)}.
|
|
|