Packages
bandit
0.3.2
1.12.1
1.12.0
1.11.1
1.11.0
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
retired
1.9.0
1.8.0
1.7.0
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.2
1.4.1
1.4.0
1.3.0
1.2.3
1.2.2
1.2.1
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-pre.18
1.0.0-pre.17
1.0.0-pre.16
1.0.0-pre.15
1.0.0-pre.14
1.0.0-pre.13
1.0.0-pre.12
1.0.0-pre.11
1.0.0-pre.10
1.0.0-pre.9
1.0.0-pre.8
1.0.0-pre.7
1.0.0-pre.6
1.0.0-pre.5
1.0.0-pre.4
1.0.0-pre.3
1.0.0-pre.2
1.0.0-pre.1
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.2.3
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
A pure-Elixir HTTP server built for Plug & WebSock apps
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
test/bandit/http2/frame_serialization_test.exs
defmodule HTTP2FrameSerializationTest do
use ExUnit.Case, async: true
alias Bandit.HTTP2.Frame
describe "DATA frames" do
test "serializes frames" do
frame = %Frame.Data{
stream_id: 123,
end_stream: false,
data: <<1, 2, 3>>
}
assert Frame.serialize(frame) == [<<0, 0, 3, 0, 0, 0, 0, 0, 123>>, <<1, 2, 3>>]
end
test "serializes frames with end_stream set" do
frame = %Frame.Data{
stream_id: 123,
end_stream: true,
data: <<1, 2, 3>>
}
assert Frame.serialize(frame) == [<<0, 0, 3, 0, 1, 0, 0, 0, 123>>, <<1, 2, 3>>]
end
end
describe "HEADERS frames" do
test "serializes frames" do
frame = %Frame.Headers{
stream_id: 123,
end_stream: false,
end_headers: false,
fragment: <<1, 2, 3>>
}
assert Frame.serialize(frame) == [<<0, 0, 3, 1, 0, 0, 0, 0, 123>>, <<1, 2, 3>>]
end
test "serializes frames with end_headers set" do
frame = %Frame.Headers{
stream_id: 123,
end_stream: false,
end_headers: true,
fragment: <<1, 2, 3>>
}
assert Frame.serialize(frame) == [<<0, 0, 3, 1, 4, 0, 0, 0, 123>>, <<1, 2, 3>>]
end
test "serializes frames with end_stream set" do
frame = %Frame.Headers{
stream_id: 123,
end_stream: true,
end_headers: false,
fragment: <<1, 2, 3>>
}
assert Frame.serialize(frame) == [<<0, 0, 3, 1, 1, 0, 0, 0, 123>>, <<1, 2, 3>>]
end
test "serializes frames with both end_headers and end_stream set" do
frame = %Frame.Headers{
stream_id: 123,
end_stream: true,
end_headers: true,
fragment: <<1, 2, 3>>
}
assert Frame.serialize(frame) == [<<0, 0, 3, 1, 5, 0, 0, 0, 123>>, <<1, 2, 3>>]
end
end
describe "RST_STREAM frames" do
test "serializes frames" do
frame = %Frame.RstStream{
stream_id: 123,
error_code: 456
}
assert Frame.serialize(frame) == [<<0, 0, 4, 3, 0, 0, 0, 0, 123>>, <<456::32>>]
end
end
describe "SETTINGS frames" do
test "serializes non-ack frames when there are no contained settings" do
frame = %Frame.Settings{ack: false, settings: %{}}
assert Frame.serialize(frame) == [<<0, 0, 0, 4, 0, 0, 0, 0, 0>>, <<>>]
end
test "serializes non-ack frames when there are contained settings" do
frame = %Frame.Settings{ack: false, settings: %{1 => 2, 100 => 200}}
assert Frame.serialize(frame) ==
[<<0, 0, 12, 4, 0, 0, 0, 0, 0>>, <<0, 1, 0, 0, 0, 2, 0, 100, 0, 0, 0, 200>>]
end
test "serializes ack frames" do
frame = %Frame.Settings{ack: true, settings: %{}}
assert Frame.serialize(frame) == [<<0, 0, 0, 4, 1, 0, 0, 0, 0>>, <<>>]
end
end
describe "PING frames" do
test "serializes non-ack frames" do
frame = %Frame.Ping{ack: false, payload: <<1, 2, 3, 4, 5, 6, 7, 8>>}
assert Frame.serialize(frame) == [<<0, 0, 8, 6, 0, 0, 0, 0, 0>>, <<1, 2, 3, 4, 5, 6, 7, 8>>]
end
test "serializes ack frames" do
frame = %Frame.Ping{ack: true, payload: <<1, 2, 3, 4, 5, 6, 7, 8>>}
assert Frame.serialize(frame) == [<<0, 0, 8, 6, 1, 0, 0, 0, 0>>, <<1, 2, 3, 4, 5, 6, 7, 8>>]
end
end
describe "GOAWAY frames" do
test "serializes frames without debug data" do
frame = %Frame.Goaway{last_stream_id: 1, error_code: 2}
assert Frame.serialize(frame) == [<<0, 0, 8, 7, 0, 0, 0, 0, 0>>, <<0, 0, 0, 1, 0, 0, 0, 2>>]
end
test "serializes frames with debug data" do
frame = %Frame.Goaway{last_stream_id: 1, error_code: 2, debug_data: <<3, 4>>}
assert Frame.serialize(frame) ==
[<<0, 0, 10, 7, 0, 0, 0, 0, 0>>, <<0, 0, 0, 1, 0, 0, 0, 2, 3, 4>>]
end
end
end