aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2016-05-08 21:03:25 +0900
committerKazuki Yamaguchi <k@rhe.jp>2016-05-08 22:02:50 +0900
commit7be98b6090baf6d67be53977bcd0fc87d83737cb (patch)
treeac4be21689902b31643636161ae1a22ffd0843e4 /test
parent26ec6b88a8e078499835851a0310eba486475b7b (diff)
downloadplum-7be98b6090baf6d67be53977bcd0fc87d83737cb.tar.gz
frame: create subclasses for each frame type
This improves code readability.
Diffstat (limited to 'test')
-rw-r--r--test/plum/client/test_upgrade_client_session.rb8
-rw-r--r--test/plum/connection/test_handle_frame.rb16
-rw-r--r--test/plum/server/test_connection.rb15
-rw-r--r--test/plum/server/test_http_connection.rb6
-rw-r--r--test/plum/stream/test_handle_frame.rb44
-rw-r--r--test/plum/test_connection.rb34
-rw-r--r--test/plum/test_connection_utils.rb6
-rw-r--r--test/plum/test_flow_control.rb70
-rw-r--r--test/plum/test_frame.rb22
-rw-r--r--test/plum/test_frame_factory.rb20
-rw-r--r--test/plum/test_frame_utils.rb29
-rw-r--r--test/plum/test_stream.rb10
-rw-r--r--test/utils/client.rb4
-rw-r--r--test/utils/server.rb2
14 files changed, 132 insertions, 154 deletions
diff --git a/test/plum/client/test_upgrade_client_session.rb b/test/plum/client/test_upgrade_client_session.rb
index 3cc97b4..446462c 100644
--- a/test/plum/client/test_upgrade_client_session.rb
+++ b/test/plum/client/test_upgrade_client_session.rb
@@ -21,11 +21,11 @@ class UpgradeClientSessionTest < Minitest::Test
def test_request
sock = StringSocket.new("HTTP/1.1 101\r\n\r\n")
session = UpgradeClientSession.new(sock, Client::DEFAULT_CONFIG)
- sock.rio.string << Frame.settings().assemble
- sock.rio.string << Frame.settings(:ack).assemble
+ sock.rio.string << Frame::Settings.new.assemble
+ sock.rio.string << Frame::Settings.new(:ack).assemble
res = session.request({ ":method" => "GET", ":path" => "/aa" }, "aa", {})
- sock.rio.string << Frame.headers(3, HPACK::Encoder.new(3).encode(":status" => "200", "content-length" => "3"), end_headers: true).assemble
- sock.rio.string << Frame.data(3, "aaa", end_stream: true).assemble
+ sock.rio.string << Frame::Headers.new(3, HPACK::Encoder.new(3).encode(":status" => "200", "content-length" => "3"), end_headers: true).assemble
+ sock.rio.string << Frame::Data.new(3, "aaa", end_stream: true).assemble
session.succ until res.finished?
assert(res.finished?)
assert_equal("aaa", res.body)
diff --git a/test/plum/connection/test_handle_frame.rb b/test/plum/connection/test_handle_frame.rb
index 704c128..ca4ef18 100644
--- a/test/plum/connection/test_handle_frame.rb
+++ b/test/plum/connection/test_handle_frame.rb
@@ -7,7 +7,7 @@ class ServerConnectionHandleFrameTest < Minitest::Test
def test_server_handle_settings
open_server_connection { |con|
assert_equal(4096, con.remote_settings[:header_table_size])
- con << Frame.new(type: :settings, stream_id: 0, payload: "\x00\x01\x00\x00\x10\x10").assemble
+ con << Frame.craft(type: :settings, stream_id: 0, payload: "\x00\x01\x00\x00\x10\x10").assemble
assert_equal(0x1010, con.remote_settings[:header_table_size])
}
end
@@ -15,10 +15,10 @@ class ServerConnectionHandleFrameTest < Minitest::Test
def test_server_handle_settings
open_server_connection { |con|
assert_no_error {
- con << Frame.new(type: :settings, stream_id: 0, flags: [:ack], payload: "").assemble
+ con << Frame.craft(type: :settings, stream_id: 0, flags: [:ack], payload: "").assemble
}
assert_connection_error(:frame_size_error) {
- con << Frame.new(type: :settings, stream_id: 0, flags: [:ack], payload: "\x00").assemble
+ con << Frame.craft(type: :settings, stream_id: 0, flags: [:ack], payload: "\x00").assemble
}
}
end
@@ -26,7 +26,7 @@ class ServerConnectionHandleFrameTest < Minitest::Test
def test_server_handle_settings_invalid
open_server_connection { |con|
assert_no_error {
- con << Frame.new(type: :settings, stream_id: 0, payload: "\xff\x01\x00\x00\x10\x10").assemble
+ con << Frame.craft(type: :settings, stream_id: 0, payload: "\xff\x01\x00\x00\x10\x10").assemble
}
}
end
@@ -34,7 +34,7 @@ class ServerConnectionHandleFrameTest < Minitest::Test
## PING
def test_server_handle_ping
open_server_connection { |con|
- con << Frame.new(type: :ping, flags: [], stream_id: 0, payload: "AAAAAAAA").assemble
+ con << Frame.craft(type: :ping, flags: [], stream_id: 0, payload: "AAAAAAAA").assemble
last = sent_frames.last
assert_equal(:ping, last.type)
assert_equal([:ack], last.flags)
@@ -45,14 +45,14 @@ class ServerConnectionHandleFrameTest < Minitest::Test
def test_server_handle_ping_error
open_server_connection { |con|
assert_connection_error(:frame_size_error) {
- con << Frame.new(type: :ping, stream_id: 0, payload: "A" * 7).assemble
+ con << Frame.craft(type: :ping, stream_id: 0, payload: "A" * 7).assemble
}
}
end
def test_server_handle_ping_ack
open_server_connection { |con|
- con << Frame.new(type: :ping, flags: [:ack], stream_id: 0, payload: "A" * 8).assemble
+ con << Frame.craft(type: :ping, flags: [:ack], stream_id: 0, payload: "A" * 8).assemble
last = sent_frames.last
refute_equal(:ping, last.type) if last
}
@@ -63,7 +63,7 @@ class ServerConnectionHandleFrameTest < Minitest::Test
open_server_connection { |con|
assert_no_error {
begin
- con << Frame.goaway(1, :stream_closed).assemble
+ con << Frame::Goaway.new(1, :stream_closed).assemble
rescue LocalHTTPError
end
}
diff --git a/test/plum/server/test_connection.rb b/test/plum/server/test_connection.rb
index 87e1893..ccc9dae 100644
--- a/test/plum/server/test_connection.rb
+++ b/test/plum/server/test_connection.rb
@@ -21,7 +21,7 @@ class HTTPSConnectionNegotiationTest < Minitest::Test
con = ServerConnection.new(StringIO.new.method(:write))
con << Connection::CLIENT_CONNECTION_PREFACE
assert_connection_error(:protocol_error) {
- con << Frame.new(type: :window_update, stream_id: 0, payload: "".push_uint32(1)).assemble
+ con << Frame::WindowUpdate.new(0, 1).assemble
}
end
@@ -31,7 +31,7 @@ class HTTPSConnectionNegotiationTest < Minitest::Test
assert_no_error {
con << magic[0...5]
con << magic[5..-1]
- con << Frame.new(type: :settings, stream_id: 0).assemble
+ con << Frame::Settings.new.assemble
}
end
@@ -57,10 +57,9 @@ class HTTPSConnectionNegotiationTest < Minitest::Test
end
}
}
+ rescue Errno::EPIPE
rescue Timeout::Error
flunk "server timeout"
- rescue => e
- flunk e
ensure
tcp_server.close
end
@@ -75,16 +74,14 @@ class HTTPSConnectionNegotiationTest < Minitest::Test
ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx)
ssl.connect
ssl.write Connection::CLIENT_CONNECTION_PREFACE
- ssl.write Frame.settings.assemble
- sleep
- rescue => e
- flunk e
+ ssl.write Frame::Settings.new.assemble
+ rescue Errno::EPIPE
ensure
sock.close
end
}
server_thread.join
- client_thread.kill
+ client_thread.join
flunk "test not run" unless run
end
diff --git a/test/plum/server/test_http_connection.rb b/test/plum/server/test_http_connection.rb
index 1326deb..e03523b 100644
--- a/test/plum/server/test_http_connection.rb
+++ b/test/plum/server/test_http_connection.rb
@@ -9,7 +9,7 @@ class HTTPConnectionNegotiationTest < Minitest::Test
con = HTTPServerConnection.new(io.method(:write))
con << Connection::CLIENT_CONNECTION_PREFACE
assert_connection_error(:protocol_error) {
- con << Frame.new(type: :window_update, stream_id: 0, payload: "".push_uint32(1)).assemble
+ con << Frame::WindowUpdate.new(0, 1).assemble
}
end
@@ -20,7 +20,7 @@ class HTTPConnectionNegotiationTest < Minitest::Test
assert_no_error {
con << magic[0...5]
con << magic[5..-1]
- con << Frame.new(type: :settings, stream_id: 0).assemble
+ con << Frame::Settings.new.assemble
}
end
@@ -41,7 +41,7 @@ class HTTPConnectionNegotiationTest < Minitest::Test
assert(io.string.include?("HTTP/1.1 101 "), "Response is not HTTP/1.1 101: #{io.string}")
assert_no_error {
con << Connection::CLIENT_CONNECTION_PREFACE
- con << Frame.new(type: :settings, stream_id: 0).assemble
+ con << Frame::Settings.new.assemble
}
assert_equal(:half_closed_remote, con.streams[1].state)
assert_equal({ ":method" => "GET", ":path" => "/", ":authority" => "rhe.jp", "user-agent" => "nya"}, heads)
diff --git a/test/plum/stream/test_handle_frame.rb b/test/plum/stream/test_handle_frame.rb
index 2c14c26..6defb82 100644
--- a/test/plum/stream/test_handle_frame.rb
+++ b/test/plum/stream/test_handle_frame.rb
@@ -9,7 +9,7 @@ class StreamHandleFrameTest < Minitest::Test
open_new_stream(state: :open) { |stream|
data = nil
stream.connection.on(:data) { |_, _data| data = _data }
- stream.receive_frame(Frame.new(type: :data, stream_id: stream.id,
+ stream.receive_frame(Frame.craft(type: :data, stream_id: stream.id,
flags: [], payload: payload))
assert_equal(payload, data)
}
@@ -20,7 +20,7 @@ class StreamHandleFrameTest < Minitest::Test
open_new_stream(state: :open) { |stream|
data = nil
stream.connection.on(:data) { |_, _data| data = _data }
- stream.receive_frame(Frame.new(type: :data, stream_id: stream.id,
+ stream.receive_frame(Frame.craft(type: :data, stream_id: stream.id,
flags: [:padded], payload: "".push_uint8(6).push(payload).push("\x00"*6)))
assert_equal(payload, data)
}
@@ -30,7 +30,7 @@ class StreamHandleFrameTest < Minitest::Test
payload = "ABC" * 5
open_new_stream(state: :open) { |stream|
assert_connection_error(:protocol_error) {
- stream.receive_frame(Frame.new(type: :data, stream_id: stream.id,
+ stream.receive_frame(Frame.craft(type: :data, stream_id: stream.id,
flags: [:padded], payload: "".push_uint8(100).push(payload).push("\x00"*6)))
}
}
@@ -39,7 +39,7 @@ class StreamHandleFrameTest < Minitest::Test
def test_stream_handle_data_end_stream
payload = "ABC" * 5
open_new_stream(state: :open) { |stream|
- stream.receive_frame(Frame.new(type: :data, stream_id: stream.id,
+ stream.receive_frame(Frame.craft(type: :data, stream_id: stream.id,
flags: [:end_stream], payload: payload))
assert_equal(:half_closed_remote, stream.state)
}
@@ -49,7 +49,7 @@ class StreamHandleFrameTest < Minitest::Test
payload = "ABC" * 5
open_new_stream(state: :half_closed_remote) { |stream|
assert_stream_error(:stream_closed) {
- stream.receive_frame(Frame.new(type: :data, stream_id: stream.id,
+ stream.receive_frame(Frame.craft(type: :data, stream_id: stream.id,
flags: [:end_stream], payload: payload))
}
}
@@ -62,7 +62,7 @@ class StreamHandleFrameTest < Minitest::Test
stream.connection.on(:headers) { |_, _headers|
headers = _headers
}
- stream.receive_frame(Frame.new(type: :headers,
+ stream.receive_frame(Frame.craft(type: :headers,
stream_id: stream.id,
flags: [:end_headers],
payload: HPACK::Encoder.new(0).encode([[":path", "/"]])))
@@ -78,12 +78,12 @@ class StreamHandleFrameTest < Minitest::Test
stream.connection.on(:headers) { |_, _headers|
headers = _headers
}
- stream.receive_frame(Frame.new(type: :headers,
+ stream.receive_frame(Frame.craft(type: :headers,
stream_id: stream.id,
flags: [:end_stream],
payload: payload[0..4]))
assert_equal(nil, headers) # wait CONTINUATION
- stream.receive_frame(Frame.new(type: :continuation,
+ stream.receive_frame(Frame.craft(type: :continuation,
stream_id: stream.id,
flags: [:end_headers],
payload: payload[5..-1]))
@@ -99,7 +99,7 @@ class StreamHandleFrameTest < Minitest::Test
stream.connection.on(:headers) { |_, _headers|
headers = _headers
}
- stream.receive_frame(Frame.new(type: :headers,
+ stream.receive_frame(Frame.craft(type: :headers,
stream_id: stream.id,
flags: [:end_headers, :padded],
payload: "".push_uint8(payload.bytesize).push(payload).push("\x00"*payload.bytesize)))
@@ -111,7 +111,7 @@ class StreamHandleFrameTest < Minitest::Test
open_new_stream { |stream|
payload = HPACK::Encoder.new(0).encode([[":path", "/"]])
assert_connection_error(:protocol_error) {
- stream.receive_frame(Frame.new(type: :headers,
+ stream.receive_frame(Frame.craft(type: :headers,
stream_id: stream.id,
flags: [:end_headers, :padded],
payload: "".push_uint8(payload.bytesize+1).push(payload).push("\x00"*(payload.bytesize+1))))
@@ -123,7 +123,7 @@ class StreamHandleFrameTest < Minitest::Test
open_new_stream { |stream|
payload = "\x00\x01\x02"
assert_connection_error(:compression_error) {
- stream.receive_frame(Frame.new(type: :headers,
+ stream.receive_frame(Frame.craft(type: :headers,
stream_id: stream.id,
flags: [:end_headers],
payload: payload))
@@ -135,17 +135,17 @@ class StreamHandleFrameTest < Minitest::Test
_payload = HPACK::Encoder.new(0).encode([[":path", "/"]])
open_new_stream(state: :reserved_local) { |stream|
assert_connection_error(:protocol_error) {
- stream.receive_frame(Frame.new(type: :headers, stream_id: stream.id, flags: [:end_headers, :end_stream], payload: _payload))
+ stream.receive_frame(Frame.craft(type: :headers, stream_id: stream.id, flags: [:end_headers, :end_stream], payload: _payload))
}
}
open_new_stream(state: :closed) { |stream|
assert_connection_error(:stream_closed) {
- stream.receive_frame(Frame.new(type: :headers, stream_id: stream.id, flags: [:end_headers, :end_stream], payload: _payload))
+ stream.receive_frame(Frame.craft(type: :headers, stream_id: stream.id, flags: [:end_headers, :end_stream], payload: _payload))
}
}
open_new_stream(state: :half_closed_remote) { |stream|
assert_stream_error(:stream_closed) {
- stream.receive_frame(Frame.new(type: :headers, stream_id: stream.id, flags: [:end_headers, :end_stream], payload: _payload))
+ stream.receive_frame(Frame.craft(type: :headers, stream_id: stream.id, flags: [:end_headers, :end_stream], payload: _payload))
}
}
end
@@ -161,7 +161,7 @@ class StreamHandleFrameTest < Minitest::Test
payload = "".push_uint32((1 << 31) | parent.id)
.push_uint8(50)
.push(header_block)
- stream.receive_frame(Frame.new(type: :headers,
+ stream.receive_frame(Frame.craft(type: :headers,
stream_id: stream.id,
flags: [:end_headers, :priority],
payload: payload))
@@ -180,7 +180,7 @@ class StreamHandleFrameTest < Minitest::Test
payload = "".push_uint32((1 << 31) | parent.id)
.push_uint8(50)
- stream.receive_frame(Frame.new(type: :priority,
+ stream.receive_frame(Frame.craft(type: :priority,
stream_id: stream.id,
payload: payload))
assert_equal(true, stream.exclusive)
@@ -193,7 +193,7 @@ class StreamHandleFrameTest < Minitest::Test
open_server_connection { |con|
stream = open_new_stream(con)
payload = "".push_uint32((0 << 31) | stream.id).push_uint8(6)
- stream.receive_frame(Frame.new(type: :priority,
+ stream.receive_frame(Frame.craft(type: :priority,
stream_id: stream.id,
payload: payload))
last = sent_frames.last
@@ -210,7 +210,7 @@ class StreamHandleFrameTest < Minitest::Test
stream2 = open_new_stream(con, parent: parent)
payload = "".push_uint32((1 << 31) | parent.id).push_uint8(6)
- stream0.receive_frame(Frame.new(type: :priority,
+ stream0.receive_frame(Frame.craft(type: :priority,
stream_id: stream0.id,
payload: payload))
assert_equal(parent, stream0.parent)
@@ -222,7 +222,7 @@ class StreamHandleFrameTest < Minitest::Test
def test_stream_handle_frame_size_error
open_new_stream { |stream|
assert_stream_error(:frame_size_error) {
- stream.receive_frame(Frame.new(type: :priority,
+ stream.receive_frame(Frame.craft(type: :priority,
stream_id: stream.id,
payload: "\x00"))
}
@@ -232,7 +232,7 @@ class StreamHandleFrameTest < Minitest::Test
## RST_STREAM
def test_stream_handle_rst_stream
open_new_stream(state: :reserved_local) { |stream|
- stream.receive_frame(Frame.new(type: :rst_stream,
+ stream.receive_frame(Frame.craft(type: :rst_stream,
stream_id: stream.id,
payload: "\x00\x00\x00\x00"))
assert_equal(:closed, stream.state)
@@ -242,7 +242,7 @@ class StreamHandleFrameTest < Minitest::Test
def test_stream_handle_rst_stream_idle
open_new_stream(state: :idle) { |stream|
assert_connection_error(:protocol_error) {
- stream.receive_frame(Frame.new(type: :rst_stream,
+ stream.receive_frame(Frame.craft(type: :rst_stream,
stream_id: stream.id,
payload: "\x00\x00\x00\x00"))
}
@@ -252,7 +252,7 @@ class StreamHandleFrameTest < Minitest::Test
def test_stream_handle_rst_stream_frame_size
open_new_stream(state: :reserved_local) { |stream|
assert_connection_error(:frame_size_error) {
- stream.receive_frame(Frame.new(type: :rst_stream,
+ stream.receive_frame(Frame.craft(type: :rst_stream,
stream_id: stream.id,
payload: "\x00\x00\x00"))
}
diff --git a/test/plum/test_connection.rb b/test/plum/test_connection.rb
index fad70b4..a28672b 100644
--- a/test/plum/test_connection.rb
+++ b/test/plum/test_connection.rb
@@ -4,7 +4,7 @@ using Plum::BinaryString
class ConnectionTest < Minitest::Test
def test_server_must_raise_frame_size_error_when_exeeeded_max_size
- _settings = "".push_uint16(Frame::SETTINGS_TYPE[:max_frame_size]).push_uint32(2**14)
+ _settings = "".push_uint16(Frame::Settings::SETTINGS_TYPE[:max_frame_size]).push_uint32(2**14)
limit = 2 ** 14
new_con = -> (&blk) {
@@ -15,23 +15,23 @@ class ConnectionTest < Minitest::Test
new_con.call { |con|
assert_no_error {
- con << Frame.new(type: :settings, stream_id: 0, payload: _settings * (limit / 6)).assemble
+ con << Frame.craft(type: :settings, stream_id: 0, payload: _settings * (limit / 6)).assemble
}
}
new_con.call { |con|
assert_connection_error(:frame_size_error) {
- con << Frame.new(type: :settings, stream_id: 0, payload: _settings * (limit / 6 + 1)).assemble
+ con << Frame.craft(type: :settings, stream_id: 0, payload: _settings * (limit / 6 + 1)).assemble
}
}
new_con.call { |con|
assert_connection_error(:frame_size_error) {
- con << Frame.new(type: :headers, stream_id: 3, payload: "\x00" * (limit + 1)).assemble
+ con << Frame.craft(type: :headers, stream_id: 3, payload: "\x00" * (limit + 1)).assemble
}
}
new_con.call { |con|
assert_stream_error(:frame_size_error) {
- con << Frame.new(type: :headers, stream_id: 3, flags: [:end_headers], payload: "").assemble
- con << Frame.new(type: :data, stream_id: 3, payload: "\x00" * (limit + 1)).assemble
+ con << Frame.craft(type: :headers, stream_id: 3, flags: [:end_headers], payload: "").assemble
+ con << Frame.craft(type: :data, stream_id: 3, payload: "\x00" * (limit + 1)).assemble
}
}
end
@@ -40,7 +40,7 @@ class ConnectionTest < Minitest::Test
[:data, :headers, :priority, :rst_stream, :push_promise, :continuation].each do |type|
con = open_server_connection
assert_connection_error(:protocol_error) {
- con << Frame.new(type: type, stream_id: 0).assemble
+ con << Frame.craft(type: type, stream_id: 0).assemble
}
end
end
@@ -56,39 +56,39 @@ class ConnectionTest < Minitest::Test
def test_server_raise_cprotocol_error_client_start_even_stream_id
con = open_server_connection
assert_connection_error(:protocol_error) {
- con << Frame.new(type: :headers, flags: [:end_headers], stream_id: 2).assemble
+ con << Frame.craft(type: :headers, flags: [:end_headers], stream_id: 2).assemble
}
end
def test_server_raise_cprotocol_error_client_start_small_stream_id
con = open_server_connection
- con << Frame.new(type: :headers, flags: [:end_headers], stream_id: 51).assemble
+ con << Frame.craft(type: :headers, flags: [:end_headers], stream_id: 51).assemble
assert_connection_error(:protocol_error) {
- con << Frame.new(type: :headers, flags: [:end_headers], stream_id: 31).assemble
+ con << Frame.craft(type: :headers, flags: [:end_headers], stream_id: 31).assemble
}
end
def test_server_raise_cprotocol_error_invalid_continuation_state
prepare = -> &blk {
con = open_server_connection
- con << Frame.new(type: :headers, flags: [:end_headers], stream_id: 1).assemble
- con << Frame.new(type: :headers, flags: [:end_stream], stream_id: 3).assemble
+ con << Frame.craft(type: :headers, flags: [:end_headers], stream_id: 1).assemble
+ con << Frame.craft(type: :headers, flags: [:end_stream], stream_id: 3).assemble
blk.call(con)
}
prepare.call { |con|
assert_connection_error(:protocol_error) {
- con << Frame.new(type: :data, stream_id: 1, payload: "hello").assemble
+ con << Frame.craft(type: :data, stream_id: 1, payload: "hello").assemble
}
}
prepare.call { |con|
assert_connection_error(:protocol_error) {
- con << Frame.new(type: :data, stream_id: 3, payload: "hello").assemble
+ con << Frame.craft(type: :data, stream_id: 3, payload: "hello").assemble
}
}
prepare.call { |con|
assert_equal(:waiting_continuation, con.state)
- con << Frame.new(type: :continuation, flags: [:end_headers], stream_id: 3, payload: "").assemble
+ con << Frame.craft(type: :continuation, flags: [:end_headers], stream_id: 3, payload: "").assemble
assert_equal(:open, con.state)
}
end
@@ -96,7 +96,7 @@ class ConnectionTest < Minitest::Test
def test_connection_local_error
open_server_connection { |con|
assert_raises(LocalConnectionError) {
- con << Frame.goaway(0, :frame_size_error).assemble
+ con << Frame::Goaway.new(0, :frame_size_error).assemble
}
}
end
@@ -105,7 +105,7 @@ class ConnectionTest < Minitest::Test
io = StringIO.new
con = Connection.new(io.method(:write))
fs = parse_frames(io) {
- con.__send__(:send_immediately, Frame.new(type: :data, stream_id: 1, payload: "a"*16385))
+ con.__send__(:send_immediately, Frame.craft(type: :data, stream_id: 1, payload: "a"*16385))
}
assert_equal(2, fs.size)
assert_equal(16384, fs.first.length)
diff --git a/test/plum/test_connection_utils.rb b/test/plum/test_connection_utils.rb
index 1147dd3..785c74c 100644
--- a/test/plum/test_connection_utils.rb
+++ b/test/plum/test_connection_utils.rb
@@ -16,7 +16,7 @@ class ServerConnectionUtilsTest < Minitest::Test
def test_server_goaway
open_server_connection { |con|
- con << Frame.headers(3, "", end_stream: true, end_headers: true).assemble
+ con << Frame::Headers.new(3, "", end_stream: true, end_headers: true).assemble
con.goaway(:stream_closed)
last = sent_frames.last
@@ -29,9 +29,9 @@ class ServerConnectionUtilsTest < Minitest::Test
def test_push_enabled
open_server_connection { |con|
- con << Frame.settings(enable_push: 0).assemble
+ con << Frame::Settings.new(enable_push: 0).assemble
assert_equal(false, con.push_enabled?)
- con << Frame.settings(enable_push: 1).assemble
+ con << Frame::Settings.new(enable_push: 1).assemble
assert_equal(true, con.push_enabled?)
}
end
diff --git a/test/plum/test_flow_control.rb b/test/plum/test_flow_control.rb
index 316361c..38958b7 100644
--- a/test/plum/test_flow_control.rb
+++ b/test/plum/test_flow_control.rb
@@ -32,9 +32,7 @@ class FlowControlTest < Minitest::Test
def test_flow_control_window_update_zero
open_new_stream { |stream|
assert_stream_error(:protocol_error) {
- stream.receive_frame Frame.new(type: :window_update,
- stream_id: stream.id,
- payload: "".push_uint32(0))
+ stream.receive_frame Frame::WindowUpdate.new(stream.id, 0)
}
}
end
@@ -42,9 +40,9 @@ class FlowControlTest < Minitest::Test
def test_flow_control_window_update_frame_size
open_new_stream { |stream|
assert_connection_error(:frame_size_error) {
- stream.receive_frame Frame.new(type: :window_update,
- stream_id: stream.id,
- payload: "".push_uint16(0))
+ stream.receive_frame Frame.craft(type: :window_update,
+ stream_id: stream.id,
+ payload: "".push_uint16(0))
}
}
end
@@ -52,18 +50,11 @@ class FlowControlTest < Minitest::Test
def test_flow_control_dont_send_data_exceeding_send_window
open_new_stream { |stream|
con = stream.connection
- con << Frame.new(type: :settings,
- stream_id: 0,
- payload: "".push_uint16(Frame::SETTINGS_TYPE[:initial_window_size])
- .push_uint32(4*2+1)).assemble
+ con << Frame::Settings.new(initial_window_size: 4 * 2 + 1).assemble
# only extend stream window size
- con << Frame.new(type: :window_update,
- stream_id: stream.id,
- payload: "".push_uint32(100)).assemble
+ con << Frame::WindowUpdate.new(stream.id, 100).assemble
10.times { |i|
- stream.send Frame.new(type: :data,
- stream_id: stream.id,
- payload: "".push_uint32(i))
+ stream.send Frame::Data.new(stream.id, "".push_uint32(i))
}
last = sent_frames.last
@@ -74,23 +65,14 @@ class FlowControlTest < Minitest::Test
def test_flow_control_dont_send_data_upto_updated_send_window
open_new_stream { |stream|
con = stream.connection
- con << Frame.new(type: :settings,
- stream_id: 0,
- payload: "".push_uint16(Frame::SETTINGS_TYPE[:initial_window_size])
- .push_uint32(4*2+1)).assemble
+ con << Frame::Settings.new(initial_window_size: 4 * 2 + 1).assemble
10.times { |i|
- stream.send Frame.new(type: :data,
- stream_id: stream.id,
- payload: "".push_uint32(i))
+ stream.send Frame::Data.new(stream.id, "".push_uint32(i))
}
# only extend stream window size
- con << Frame.new(type: :window_update,
- stream_id: stream.id,
- payload: "".push_uint32(100)).assemble
+ con << Frame::WindowUpdate.new(stream.id, 100).assemble
# and extend connection window size
- con << Frame.new(type: :window_update,
- stream_id: 0,
- payload: "".push_uint32(4*2+1)).assemble
+ con << Frame::WindowUpdate.new(0, 4 * 2 + 1).assemble
last = sent_frames.last
assert_equal(3, last.payload.uint32)
@@ -100,24 +82,14 @@ class FlowControlTest < Minitest::Test
def test_flow_control_update_send_initial_window_size
open_new_stream { |stream|
con = stream.connection
- con << Frame.new(type: :settings,
- stream_id: 0,
- payload: "".push_uint16(Frame::SETTINGS_TYPE[:initial_window_size])
- .push_uint32(4*2+1)).assemble
+ con << Frame::Settings.new(initial_window_size: 4 * 2 + 1).assemble
10.times { |i|
- stream.send Frame.new(type: :data,
- stream_id: stream.id,
- payload: "".push_uint32(i))
+ stream.send Frame::Data.new(stream.id, "".push_uint32(i))
}
# only extend stream window size
- con << Frame.new(type: :window_update,
- stream_id: stream.id,
- payload: "".push_uint32(100)).assemble
+ con << Frame::WindowUpdate.new(stream.id, 100).assemble
# and update initial window size
- con << Frame.new(type: :settings,
- stream_id: 0,
- payload: "".push_uint16(Frame::SETTINGS_TYPE[:initial_window_size])
- .push_uint32(4*4+1)).assemble
+ con << Frame::Settings.new(initial_window_size: 4 * 4 + 1).assemble
last = sent_frames.reverse.find { |f| f.type == :data }
assert_equal(3, last.payload.uint32)
@@ -135,17 +107,17 @@ class FlowControlTest < Minitest::Test
prepare.call { |con, stream|
con.window_update(500) # extend only connection
- con << Frame.headers(stream.id, "", end_headers: true).assemble
+ con << Frame::Headers.new(stream.id, "", end_headers: true).assemble
assert_stream_error(:flow_control_error) {
- con << Frame.data(stream.id, "\x00" * 30, end_stream: true).assemble
+ con << Frame::Data.new(stream.id, "\x00" * 30, end_stream: true).assemble
}
}
prepare.call { |con, stream|
stream.window_update(500) # extend only stream
- con << Frame.headers(stream.id, "", end_headers: true).assemble
+ con << Frame::Headers.new(stream.id, "", end_headers: true).assemble
assert_connection_error(:flow_control_error) {
- con << Frame.data(stream.id, "\x00" * 30, end_stream: true).assemble
+ con << Frame::Data.new(stream.id, "\x00" * 30, end_stream: true).assemble
}
}
end
@@ -155,8 +127,8 @@ class FlowControlTest < Minitest::Test
con = stream.connection
con.settings(initial_window_size: 24)
stream.window_update(1)
- con << Frame.headers(stream.id, "", end_headers: true).assemble
- con << Frame.data(stream.id, "\x00" * 20, end_stream: true).assemble
+ con << Frame::Headers.new(stream.id, "", end_headers: true).assemble
+ con << Frame::Data.new(stream.id, "\x00" * 20, end_stream: true).assemble
assert_equal(4, con.recv_remaining_window)
assert_equal(5, stream.recv_remaining_window)
con.settings(initial_window_size: 60)
diff --git a/test/plum/test_frame.rb b/test/plum/test_frame.rb
index 4795627..40cde01 100644
--- a/test/plum/test_frame.rb
+++ b/test/plum/test_frame.rb
@@ -34,17 +34,17 @@ class FrameTest < Minitest::Test
# Frame#assemble
def test_assemble
- frame = Plum::Frame.new(type: :push_promise, flags: [:end_headers, :padded], stream_id: 0x678, payload: "payl")
+ frame = Plum::Frame.craft(type: :push_promise, flags: [:end_headers, :padded], stream_id: 0x678, payload: "payl")
bin = "\x00\x00\x04" << "\x05" << "\x0c" << "\x00\x00\x06\x78" << "payl"
assert_equal(bin, frame.assemble)
end
- # Frame#generate
- def test_new
- frame = Plum::Frame.new(type: :data,
- stream_id: 12345,
- flags: [:end_stream, :padded],
- payload: "ぺいろーど".encode(Encoding::UTF_8))
+ # Frame.craft
+ def test_new_raw
+ frame = Plum::Frame.craft(type: :data,
+ stream_id: 12345,
+ flags: [:end_stream, :padded],
+ payload: "ぺいろーど".encode(Encoding::UTF_8))
assert_equal("ぺいろーど", frame.payload)
assert_equal("ぺいろーど".bytesize, frame.length)
assert_equal(:data, frame.type) # DATA
@@ -53,10 +53,10 @@ class FrameTest < Minitest::Test
end
def test_inspect
- frame = Plum::Frame.new(type: :data,
- stream_id: 12345,
- flags: [:end_stream, :padded],
- payload: "ぺいろーど")
+ frame = Plum::Frame.craft(type: :data,
+ stream_id: 12345,
+ flags: [:end_stream, :padded],
+ payload: "ぺいろーど")
frame.inspect
end
end
diff --git a/test/plum/test_frame_factory.rb b/test/plum/test_frame_factory.rb
index 109fb95..a4253ba 100644
--- a/test/plum/test_frame_factory.rb
+++ b/test/plum/test_frame_factory.rb
@@ -3,7 +3,7 @@ require "test_helper"
using Plum::BinaryString
class FrameFactoryTest < Minitest::Test
def test_rst_stream
- frame = Frame.rst_stream(123, :stream_closed)
+ frame = Frame::RstStream.new(123, :stream_closed)
assert_frame(frame,
type: :rst_stream,
stream_id: 123)
@@ -11,7 +11,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_goaway
- frame = Frame.goaway(0x55, :stream_closed, "debug")
+ frame = Frame::Goaway.new(0x55, :stream_closed, "debug")
assert_frame(frame,
type: :goaway,
stream_id: 0,
@@ -19,7 +19,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_settings
- frame = Frame.settings(header_table_size: 0x1010)
+ frame = Frame::Settings.new(header_table_size: 0x1010)
assert_frame(frame,
type: :settings,
stream_id: 0,
@@ -28,7 +28,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_settings_ack
- frame = Frame.settings(:ack)
+ frame = Frame::Settings.new(:ack)
assert_frame(frame,
type: :settings,
stream_id: 0,
@@ -37,7 +37,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_ping
- frame = Frame.ping("12345678")
+ frame = Frame::Ping.new("12345678")
assert_frame(frame,
type: :ping,
stream_id: 0,
@@ -46,7 +46,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_ping_ack
- frame = Frame.ping(:ack, "12345678")
+ frame = Frame::Ping.new(:ack, "12345678")
assert_frame(frame,
type: :ping,
stream_id: 0,
@@ -55,7 +55,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_continuation
- frame = Frame.continuation(123, "abc", end_headers: true)
+ frame = Frame::Continuation.new(123, "abc", end_headers: true)
assert_frame(frame,
type: :continuation,
stream_id: 123,
@@ -64,7 +64,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_data
- frame = Frame.data(123, "abc".force_encoding("UTF-8"))
+ frame = Frame::Data.new(123, "abc".force_encoding("UTF-8"))
assert_frame(frame,
type: :data,
stream_id: 123,
@@ -74,7 +74,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_headers
- frame = Frame.headers(123, "abc", end_stream: true)
+ frame = Frame::Headers.new(123, "abc", end_stream: true)
assert_frame(frame,
type: :headers,
stream_id: 123,
@@ -83,7 +83,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_push_promise
- frame = Frame.push_promise(345, 2, "abc", end_headers: true)
+ frame = Frame::PushPromise.new(345, 2, "abc", end_headers: true)
assert_frame(frame,
type: :push_promise,
stream_id: 345,
diff --git a/test/plum/test_frame_utils.rb b/test/plum/test_frame_utils.rb
index 7ad869f..3851f6a 100644
--- a/test/plum/test_frame_utils.rb
+++ b/test/plum/test_frame_utils.rb
@@ -2,19 +2,14 @@ require "test_helper"
class FrameUtilsTest < Minitest::Test
def test_frame_enough_short
- frame = Frame.new(type: :data, stream_id: 1, payload: "123")
+ frame = Frame::Data.new(1, "123")
ret = frame.to_enum(:split, 3).to_a
assert_equal(1, ret.size)
assert_equal("123", ret.first.payload)
end
- def test_frame_unknown
- frame = Frame.new(type: :settings, stream_id: 1, payload: "123")
- assert_raises(NotImplementedError) { frame.split(2) }
- end
-
def test_frame_data
- frame = Frame.new(type: :data, flags: [:end_stream], stream_id: 1, payload: "12345")
+ frame = Frame::Data.new(1, "12345", end_stream: true)
ret = frame.to_enum(:split, 2).to_a
assert_equal(3, ret.size)
assert_equal("12", ret.first.payload)
@@ -23,8 +18,8 @@ class FrameUtilsTest < Minitest::Test
assert_equal([:end_stream], ret.last.flags)
end
- def test_frame_headers
- frame = Frame.new(type: :headers, flags: [:priority, :end_stream, :end_headers], stream_id: 1, payload: "1234567")
+ def test_headers_split
+ frame = Frame.craft(type: :headers, flags: [:priority, :end_stream, :end_headers], stream_id: 1, payload: "1234567")
ret = frame.to_enum(:split, 3).to_a
assert_equal(3, ret.size)
assert_equal("123", ret[0].payload)
@@ -35,9 +30,23 @@ class FrameUtilsTest < Minitest::Test
assert_equal([:end_headers], ret[2].flags)
end
+ def test_push_promise_split
+ frame = Frame::PushPromise.new(1, 2, "1234567", end_headers: true)
+ ret = frame.to_enum(:split, 3).to_a
+ assert_equal(4, ret.size)
+ assert_equal("\x00\x00\x00", ret[0].payload)
+ assert_equal([], ret[0].flags)
+ assert_equal("\x0212", ret[1].payload)
+ assert_equal([], ret[1].flags)
+ assert_equal("345", ret[2].payload)
+ assert_equal([], ret[2].flags)
+ assert_equal("67", ret[3].payload)
+ assert_equal([:end_headers], ret[3].flags)
+ end
+
def test_frame_parse_settings
# :header_table_size => 0x1010, :enable_push => 0x00, :header_table_size => 0x1011 (overwrite)
- frame = Frame.new(type: :settings, flags: [], stream_id: 0, payload: "\x00\x01\x00\x00\x10\x10\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x10\x11")
+ frame = Frame.parse!("\x00\x00\x12\x04\x00\x00\x00\x00\x00" "\x00\x01\x00\x00\x10\x10\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x10\x11")
ret = frame.parse_settings
assert_equal(0x1011, ret[:header_table_size])
assert_equal(0x0000, ret[:enable_push])
diff --git a/test/plum/test_stream.rb b/test/plum/test_stream.rb
index fc1e94b..db681e7 100644
--- a/test/plum/test_stream.rb
+++ b/test/plum/test_stream.rb
@@ -6,7 +6,7 @@ class StreamTest < Minitest::Test
def test_stream_illegal_frame_type
open_new_stream { |stream|
assert_connection_error(:protocol_error) {
- stream.receive_frame(Frame.new(type: :goaway, stream_id: stream.id, payload: "\x00\x00\x00\x00"))
+ stream.receive_frame(Frame::Goaway.new(0, :no_error))
}
}
end
@@ -14,7 +14,7 @@ class StreamTest < Minitest::Test
def test_stream_unknown_frame_type
open_new_stream { |stream|
assert_no_error {
- stream.receive_frame(Frame.new(type_value: 0x0f, stream_id: stream.id, payload: "\x00\x00\x00\x00"))
+ stream.receive_frame(Frame::Unknown.new(0x0f, flags_value: 0, stream_id: stream.id, payload: "\x00\x00\x00\x00"))
}
}
end
@@ -28,7 +28,7 @@ class StreamTest < Minitest::Test
}
assert_stream_error(:frame_size_error) {
- con << Frame.headers(1, "", end_headers: true).assemble
+ con << Frame::Headers.new(1, "", end_headers: true).assemble
}
last = sent_frames.last
@@ -43,8 +43,8 @@ class StreamTest < Minitest::Test
stream = type = nil
con.on(:rst_stream) { |s, t| stream = s; type = t }
- con << Frame.headers(1, "", end_headers: true).assemble
- con << Frame.rst_stream(1, :frame_size_error).assemble
+ con << Frame::Headers.new(1, "", end_headers: true).assemble
+ con << Frame::RstStream.new(1, :frame_size_error).assemble
assert_equal(1, stream.id)
assert_equal(:frame_size_error, type)
diff --git a/test/utils/client.rb b/test/utils/client.rb
index be8d78d..f8937e2 100644
--- a/test/utils/client.rb
+++ b/test/utils/client.rb
@@ -4,8 +4,8 @@ module ServerUtils
def open_client_connection(scheme = :https)
io = StringIO.new
@_ccon = ClientConnection.new(io.method(:write))
- @_ccon << Frame.new(type: :settings, stream_id: 0, flags: [:ack]).assemble
- @_ccon << Frame.new(type: :settings, stream_id: 0).assemble
+ @_ccon << Frame::Settings.new(:ack).assemble
+ @_ccon << Frame::Settings.new.assemble
if block_given?
yield @_ccon
else
diff --git a/test/utils/server.rb b/test/utils/server.rb
index 5f1baa7..001a3fe 100644
--- a/test/utils/server.rb
+++ b/test/utils/server.rb
@@ -5,7 +5,7 @@ module ServerUtils
@_io = StringIO.new
@_con = (scheme == :https ? ServerConnection : HTTPServerConnection).new(@_io.method(:write))
@_con << Connection::CLIENT_CONNECTION_PREFACE
- @_con << Frame.new(type: :settings, stream_id: 0).assemble
+ @_con << Frame::Settings.new.assemble
if block_given?
yield @_con
else