Packages
bandit
0.6.9
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/websocket/frame_serialization_test.exs
defmodule WebSocketFrameSerializationTest do
use ExUnit.Case, async: true
alias Bandit.WebSocket.Frame
describe "frame size" do
test "serializes frames up to 125 bytes" do
frame = %Frame.Binary{fin: true, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x2::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames 126 bytes long" do
frame = %Frame.Binary{fin: true, data: String.duplicate("a", 126)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x2::4>>, <<0::1, 126::7, 126::16>>, frame.data]
]
end
test "serializes frames 127 bytes long" do
frame = %Frame.Binary{fin: true, data: String.duplicate("a", 127)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x2::4>>, <<0::1, 126::7, 127::16>>, frame.data]
]
end
test "serializes frames 16_000 bytes long" do
frame = %Frame.Binary{fin: true, data: String.duplicate("a", 16_000)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x2::4>>, <<0::1, 126::7, 16_000::16>>, frame.data]
]
end
test "serializes frames 1_000_000 bytes long" do
frame = %Frame.Binary{fin: true, data: String.duplicate("a", 1_000_000)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x2::4>>, <<0::1, 127::7, 1_000_000::64>>, frame.data]
]
end
end
describe "CONTINUATION frames" do
test "serializes frames with fin bit set" do
frame = %Frame.Continuation{fin: true, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x0::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames with fin bit clear" do
frame = %Frame.Continuation{fin: false, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x0::1, 0x0::3, 0x0::4>>, <<0::1, 125::7>>, frame.data]
]
end
end
describe "TEXT frames" do
test "serializes frames with fin and per-message compressed bits clear" do
frame = %Frame.Text{fin: false, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x0::1, 0x0::3, 0x1::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames with fin bit set" do
frame = %Frame.Text{fin: true, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x1::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames with per-message compressed bit set" do
frame = %Frame.Text{compressed: true, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x0::1, 0x1::1, 0x0::2, 0x1::4>>, <<0::1, 125::7>>, frame.data]
]
end
end
describe "BINARY frames" do
test "serializes frames with fin and per-message compressed bits clear" do
frame = %Frame.Binary{fin: false, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x0::1, 0x0::3, 0x2::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames with fin bit set" do
frame = %Frame.Binary{fin: true, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x2::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames with per-message compressed bit set" do
frame = %Frame.Binary{compressed: true, data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x0::1, 0x1::1, 0x0::2, 0x2::4>>, <<0::1, 125::7>>, frame.data]
]
end
end
describe "CONNECTION_CLOSE frames" do
test "serializes frames with code and message set" do
frame = %Frame.ConnectionClose{code: 1000, reason: String.duplicate("a", 123)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x8::4>>, <<0::1, 125::7>>, [<<1000::16>>, frame.reason]]
]
end
test "serializes frames with code set" do
frame = %Frame.ConnectionClose{code: 1000}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x8::4>>, <<0::1, 2::7>>, [<<1000::16>>, <<>>]]
]
end
test "serializes frames with no code set" do
frame = %Frame.ConnectionClose{}
assert Frame.serialize(frame) == [[<<0x1::1, 0x0::3, 0x8::4>>, <<0::1, 0::7>>, <<>>]]
end
end
describe "PING frames" do
test "serializes frames with data" do
frame = %Frame.Ping{data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0x9::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames without data" do
frame = %Frame.Ping{}
assert Frame.serialize(frame) == [[<<0x1::1, 0x0::3, 0x9::4>>, <<0::1, 0::7>>, <<>>]]
end
end
describe "PONG frames" do
test "serializes frames with data" do
frame = %Frame.Pong{data: String.duplicate("a", 125)}
assert Frame.serialize(frame) == [
[<<0x1::1, 0x0::3, 0xA::4>>, <<0::1, 125::7>>, frame.data]
]
end
test "serializes frames without data" do
frame = %Frame.Pong{}
assert Frame.serialize(frame) == [[<<0x1::1, 0x0::3, 0xA::4>>, <<0::1, 0::7>>, <<>>]]
end
end
end