From a6b364cccba37fb0492d817d0972980ad6ab3551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 13 Apr 2015 11:01:07 +0300 Subject: Add more SPDY tests One of the test is incomplete due to a missing window_update building function in cowlib. --- test/spdy_SUITE.erl | 26 ++++++++++++++++++++++++++ test/spdy_server.erl | 3 +++ 2 files changed, 29 insertions(+) diff --git a/test/spdy_SUITE.erl b/test/spdy_SUITE.erl index c1ae1ba..3f2541f 100644 --- a/test/spdy_SUITE.erl +++ b/test/spdy_SUITE.erl @@ -203,3 +203,29 @@ no_sending_frames_after_flag_fin(_) -> end, wait(), [{syn_stream, _, _, _, _, _, _, _, _, _, _, _}] = spdy_server:stop(ServerPid). + +allow_window_update_after_flag_fin(_) -> + doc("WINDOW_UPDATE is allowed when the stream is half-closed. (spdy-protocol-draft3-1 2.3.6)"), + {ok, ServerPid, Port} = spdy_server:start_link(), + {ok, ConnPid} = gun:open("localhost", Port, #{transport=>ssl}), + {ok, spdy} = gun:await_up(ConnPid), + _ = gun:get(ConnPid, "/"), + spdy_server:send(ServerPid, [ + {window_update, 1, 1024} + ]), + wait(), + [{syn_stream, _, _, _, _, _, _, _, _, _, _, _}] = spdy_server:stop(ServerPid). + +reject_data_on_half_closed_stream(_) -> + doc("Data frames sent on a half-closed stream must be rejected " + "with a STREAM_ALREADY_CLOSED stream error. (spdy-protocol-draft3-1 2.3.6)"), + {ok, ServerPid, Port} = spdy_server:start_link(), + {ok, ConnPid} = gun:open("localhost", Port, #{transport=>ssl}), + {ok, spdy} = gun:await_up(ConnPid), + _ = gun:get(ConnPid, "/"), + spdy_server:send(ServerPid, [ + {syn_reply, 1, true, <<"200">>, <<"HTTP/1.1">>, []}, + {data, 1, true, <<"Hello world!">>} + ]), + wait(), + [_, {rst_stream, 1, stream_already_closed}] = spdy_server:stop(ServerPid). diff --git a/test/spdy_server.erl b/test/spdy_server.erl index 10ef067..2847d33 100644 --- a/test/spdy_server.erl +++ b/test/spdy_server.erl @@ -113,6 +113,9 @@ do_send([{syn_stream, StreamID, AssocToStreamID, IsFin, IsUnidirectional, Priori do_send([{syn_reply, StreamID, IsFin, Status, Version, Headers}|Tail], Socket, Zdef) -> ssl:send(Socket, cow_spdy:syn_reply(Zdef, StreamID, IsFin, Status, Version, Headers)), do_send(Tail, Socket, Zdef); +do_send([{window_update, StreamID, DeltaWindowSize}|Tail], Socket, Zdef) -> +%% @todo ssl:send(Socket, cow_spdy:window_update(StreamID, DeltaWindowSize)), + do_send(Tail, Socket, Zdef); do_send([{data, StreamID, IsFin, Data}|Tail], Socket, Zdef) -> ssl:send(Socket, cow_spdy:data(StreamID, IsFin, Data)), do_send(Tail, Socket, Zdef). -- cgit v1.2.3