aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2015-08-05 21:49:34 +0900
committerKazuki Yamaguchi <k@rhe.jp>2015-08-05 21:49:34 +0900
commit6443b550a2ad175e1f8e0a6199d14ded7c58239b (patch)
treec4c0722b0582dc63a9922718add6b7d3529b60c0 /test
parentbdff11203a31559f0b22751681011b207adb2175 (diff)
downloadplum-6443b550a2ad175e1f8e0a6199d14ded7c58239b.tar.gz
test: reorganize directory structure
Diffstat (limited to 'test')
-rw-r--r--test/plum/hpack/test_context.rb (renamed from test/hpack_context_test.rb)0
-rw-r--r--test/plum/hpack/test_decoder.rb (renamed from test/hpack_decoder_test.rb)0
-rw-r--r--test/plum/hpack/test_encoder.rb (renamed from test/hpack_encoder_test.rb)0
-rw-r--r--test/plum/hpack/test_huffman.rb (renamed from test/hpack_huffman_test.rb)0
-rw-r--r--test/plum/server_connection/test_handle.rb49
-rw-r--r--test/plum/server_connection/test_negotiation.rb36
-rw-r--r--test/plum/test_error.rb (renamed from test/error_test.rb)0
-rw-r--r--test/plum/test_frame.rb (renamed from test/frame_test.rb)0
-rw-r--r--test/plum/test_frame_helper.rb (renamed from test/frame_helper_test.rb)0
-rw-r--r--test/plum/test_server_connection.rb66
-rw-r--r--test/plum/test_stream.rb (renamed from test/stream_test.rb)2
-rw-r--r--test/server_connection_test.rb150
-rw-r--r--test/server_state_test.rb7
-rw-r--r--test/test_helper.rb12
-rw-r--r--test/utils/assertions.rb34
-rw-r--r--test/utils/server.rb (renamed from test/utils.rb)42
16 files changed, 200 insertions, 198 deletions
diff --git a/test/hpack_context_test.rb b/test/plum/hpack/test_context.rb
index cb92361..cb92361 100644
--- a/test/hpack_context_test.rb
+++ b/test/plum/hpack/test_context.rb
diff --git a/test/hpack_decoder_test.rb b/test/plum/hpack/test_decoder.rb
index d8f5d10..d8f5d10 100644
--- a/test/hpack_decoder_test.rb
+++ b/test/plum/hpack/test_decoder.rb
diff --git a/test/hpack_encoder_test.rb b/test/plum/hpack/test_encoder.rb
index 9c64942..9c64942 100644
--- a/test/hpack_encoder_test.rb
+++ b/test/plum/hpack/test_encoder.rb
diff --git a/test/hpack_huffman_test.rb b/test/plum/hpack/test_huffman.rb
index 5fbda63..5fbda63 100644
--- a/test/hpack_huffman_test.rb
+++ b/test/plum/hpack/test_huffman.rb
diff --git a/test/plum/server_connection/test_handle.rb b/test/plum/server_connection/test_handle.rb
new file mode 100644
index 0000000..8832a63
--- /dev/null
+++ b/test/plum/server_connection/test_handle.rb
@@ -0,0 +1,49 @@
+require "test_helper"
+
+using Plum::BinaryString
+
+class ServerConnectionHandleTest < Minitest::Test
+ ## SETTINGS
+ 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
+ assert_equal(0x1010, con.remote_settings[:header_table_size])
+ }
+ end
+
+ def test_server_handle_settings_invalid
+ open_server_connection {|con|
+ refute_raises {
+ con << Frame.new(type: :settings, stream_id: 0, payload: "\xff\x01\x00\x00\x10\x10").assemble
+ }
+ }
+ end
+
+ ## PING
+ def test_server_handle_ping
+ open_server_connection {|con|
+ con << Frame.new(type: :ping, flags: [], stream_id: 0, payload: "AAAAAAAA").assemble
+ last = sent_frames.last
+ assert_equal(:ping, last.type)
+ assert_equal([:ack], last.flags)
+ assert_equal("AAAAAAAA", last.payload)
+ }
+ end
+
+ 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
+ }
+ }
+ 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
+ last = sent_frames.last
+ refute_equal(:ping, last.type) if last
+ }
+ end
+end
diff --git a/test/plum/server_connection/test_negotiation.rb b/test/plum/server_connection/test_negotiation.rb
new file mode 100644
index 0000000..fc9287e
--- /dev/null
+++ b/test/plum/server_connection/test_negotiation.rb
@@ -0,0 +1,36 @@
+require "test_helper"
+
+using Plum::BinaryString
+
+class ServerConnectionNegotiationTest < Minitest::Test
+ def test_server_must_raise_cprotocol_error_invalid_magic_short
+ con = ServerConnection.new(nil)
+ assert_connection_error(:protocol_error) {
+ con << "HELLO"
+ }
+ end
+
+ def test_server_must_raise_cprotocol_error_invalid_magic_long
+ con = ServerConnection.new(nil)
+ assert_connection_error(:protocol_error) {
+ con << ("HELLO" * 100) # over 24
+ }
+ end
+
+ def test_server_must_raise_cprotocol_error_non_settings_after_magic
+ con = ServerConnection.new(nil)
+ con << ServerConnection::CLIENT_CONNECTION_PREFACE
+ assert_connection_error(:protocol_error) {
+ con << Frame.new(type: :window_update, stream_id: 0, payload: "".push_uint32(1)).assemble
+ }
+ end
+
+ def test_server_accept_fragmented_magic
+ io = StringIO.new
+ magic = ServerConnection::CLIENT_CONNECTION_PREFACE
+ con = ServerConnection.new(io)
+ con << magic[0...5]
+ con << magic[5..-1]
+ con << Frame.new(type: :settings, stream_id: 0).assemble
+ end
+end
diff --git a/test/error_test.rb b/test/plum/test_error.rb
index 167538a..167538a 100644
--- a/test/error_test.rb
+++ b/test/plum/test_error.rb
diff --git a/test/frame_test.rb b/test/plum/test_frame.rb
index ecb2b88..ecb2b88 100644
--- a/test/frame_test.rb
+++ b/test/plum/test_frame.rb
diff --git a/test/frame_helper_test.rb b/test/plum/test_frame_helper.rb
index 3a463ab..3a463ab 100644
--- a/test/frame_helper_test.rb
+++ b/test/plum/test_frame_helper.rb
diff --git a/test/plum/test_server_connection.rb b/test/plum/test_server_connection.rb
new file mode 100644
index 0000000..032275a
--- /dev/null
+++ b/test/plum/test_server_connection.rb
@@ -0,0 +1,66 @@
+require "test_helper"
+
+using Plum::BinaryString
+
+class ServerConnectionTest < Minitest::Test
+ def test_server_must_raise_cframe_size_error_when_exeeeded_max_size
+ _settings = "".push_uint16(Frame::SETTINGS_TYPE[:max_frame_size]).push_uint32(2**14)
+ con = open_server_connection
+ con.settings(max_frame_size: 2**14)
+ refute_raises {
+ con << Frame.new(type: :settings, stream_id: 0, payload: _settings*(2**14/6)).assemble
+ }
+ assert_connection_error(:frame_size_error) {
+ con << Frame.new(type: :settings, stream_id: 0, payload: _settings*((2**14)/6+1)).assemble
+ }
+ end
+
+ def test_server_raise_cprotocol_error_illegal_control_stream
+ [: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
+ }
+ end
+ end
+
+ 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
+ }
+ 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
+ assert_connection_error(:protocol_error) {
+ con << Frame.new(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
+ blk.call(con)
+ }
+
+ prepare.call {|con|
+ assert_connection_error(:protocol_error) {
+ con << Frame.new(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
+ }
+ }
+ prepare.call {|con|
+ assert_equal(:waiting_continuation, con.state)
+ con << Frame.new(type: :continuation, flags: [:end_headers], stream_id: 3, payload: "hello").assemble
+ assert_equal(:open, con.state)
+ }
+ end
+end
diff --git a/test/stream_test.rb b/test/plum/test_stream.rb
index 48c0f46..9e0cebc 100644
--- a/test/stream_test.rb
+++ b/test/plum/test_stream.rb
@@ -3,8 +3,6 @@ require "test_helper"
using Plum::BinaryString
class StreamTest < Minitest::Test
- include ServerTestUtils
-
def test_stream_reserve
open_new_stream {|stream|
stream.reserve
diff --git a/test/server_connection_test.rb b/test/server_connection_test.rb
deleted file mode 100644
index 1b72080..0000000
--- a/test/server_connection_test.rb
+++ /dev/null
@@ -1,150 +0,0 @@
-require "test_helper"
-
-using Plum::BinaryString
-
-class ServerConnectionTest < Minitest::Test
- include ServerTestUtils
-
- def test_server_must_raise_cprotocol_error_invalid_magic_short
- con = ServerConnection.new(nil)
- assert_connection_error(:protocol_error) {
- con << "HELLO"
- }
- end
-
- def test_server_must_raise_cprotocol_error_invalid_magic_long
- con = ServerConnection.new(nil)
- assert_connection_error(:protocol_error) {
- con << ("HELLO" * 100) # over 24
- }
- end
-
- def test_server_must_raise_cprotocol_error_non_settings_after_magic
- con = ServerConnection.new(nil)
- con << ServerConnection::CLIENT_CONNECTION_PREFACE
- assert_connection_error(:protocol_error) {
- con << Frame.new(type: :window_update, stream_id: 0, payload: "".push_uint32(1)).assemble
- }
- end
-
- def test_server_must_raise_cframe_size_error_when_exeeeded_max_size
- _settings = "".push_uint16(Frame::SETTINGS_TYPE[:max_frame_size]).push_uint32(2**14)
- con = open_server_connection
- con.settings(max_frame_size: 2**14)
- refute_raises {
- con << Frame.new(type: :settings, stream_id: 0, payload: _settings*(2**14/6)).assemble
- }
- assert_connection_error(:frame_size_error) {
- con << Frame.new(type: :settings, stream_id: 0, payload: _settings*((2**14)/6+1)).assemble
- }
- end
-
- def test_server_accept_fragmented_magic
- io = StringIO.new
- magic = ServerConnection::CLIENT_CONNECTION_PREFACE
- con = ServerConnection.new(io)
- con << magic[0...5]
- con << magic[5..-1]
- con << Frame.new(type: :settings, stream_id: 0).assemble
- end
-
- def test_server_accept_client_preface_and_return_ack
- io = StringIO.new
- con = ServerConnection.new(io)
- con << ServerConnection::CLIENT_CONNECTION_PREFACE
- con << Frame.new(type: :settings, stream_id: 0).assemble
- assert_equal(:open, con.state)
-
- last = sent_frames(con).last
- assert_equal(:settings, last.type)
- assert_includes(last.flags, :ack)
- end
-
- def test_server_accept_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
- assert_equal(0x1010, con.remote_settings[:header_table_size])
- }
- open_server_connection {|con|
- refute_raises {
- con << Frame.new(type: :settings, stream_id: 0, payload: "\xff\x01\x00\x00\x10\x10").assemble
- }
- }
- end
-
- def test_server_raise_cprotocol_error_illegal_control_stream
- [: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
- }
- end
- end
-
- 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
- }
- 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
- assert_connection_error(:protocol_error) {
- con << Frame.new(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
- blk.call(con)
- }
-
- prepare.call {|con|
- assert_connection_error(:protocol_error) {
- con << Frame.new(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
- }
- }
- prepare.call {|con|
- assert_equal(:waiting_continuation, con.state)
- con << Frame.new(type: :continuation, flags: [:end_headers], stream_id: 3, payload: "hello").assemble
- assert_equal(:open, con.state)
- }
- end
-
- def test_server_ping
- prepare = -> &blk {
- con = open_server_connection
- con << Frame.new(type: :headers, flags: [:end_headers], stream_id: 1).assemble
- blk.call(con)
- }
-
- prepare.call {|con|
- con << Frame.new(type: :ping, flags: [], stream_id: 0, payload: "AAAAAAAA").assemble
- last = sent_frames.last
- assert_equal(:ping, last.type)
- assert_equal([:ack], last.flags)
- assert_equal("AAAAAAAA", last.payload)
- }
- prepare.call {|con|
- assert_connection_error(:frame_size_error) {
- con << Frame.new(type: :ping, stream_id: 0, payload: "A" * 7).assemble
- }
- }
- prepare.call {|con|
- con << Frame.new(type: :ping, flags: [:ack], stream_id: 0, payload: "A" * 8).assemble
- last = sent_frames.last
- refute_equal(:ping, last.type) if last
- }
- end
-end
diff --git a/test/server_state_test.rb b/test/server_state_test.rb
deleted file mode 100644
index fb7d948..0000000
--- a/test/server_state_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require "test_helper"
-
-using Plum::BinaryString
-
-class ServerStateTest < Minitest::Test
- include ServerTestUtils
-end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index de01442..fb5aa91 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -1,3 +1,5 @@
+LISTEN_PORT = ENV["PLUM_LISTEN_PORT"] || 40444
+
unless ENV["SKIP_COVERAGE"]
begin
require "simplecov"
@@ -13,13 +15,13 @@ unless ENV["SKIP_COVERAGE"]
end
end
-require "plum"
-require "timeout"
require "minitest"
require "minitest/unit"
require "minitest/autorun"
require "minitest/pride"
-require "utils"
-
+require "plum"
include Plum
-LISTEN_PORT = ENV["PLUM_LISTEN_PORT"] || 40444
+
+Dir.glob(File.expand_path("../utils/*.rb", __FILE__)).each do |file|
+ require file
+end
diff --git a/test/utils/assertions.rb b/test/utils/assertions.rb
new file mode 100644
index 0000000..7c4b094
--- /dev/null
+++ b/test/utils/assertions.rb
@@ -0,0 +1,34 @@
+module CustomAssertions
+ def assert_http_error(klass, type, &blk)
+ begin
+ blk.call
+ rescue klass => e
+ assert_equal(type, e.http2_error_type)
+ else
+ flunk "#{klass.name} type: #{type} expected but nothing was raised."
+ end
+ end
+
+ def assert_connection_error(type, &blk)
+ assert_http_error(Plum::ConnectionError, type, &blk)
+ end
+
+ def assert_stream_error(type, &blk)
+ assert_http_error(Plum::StreamError, type, &blk)
+ end
+
+ def refute_raises(&blk)
+ begin
+ blk.call
+ rescue
+ a = $!
+ else
+ a = nil
+ end
+ assert(!a, "No exceptions expected but raised: #{a}:\n#{a && a.backtrace.join("\n")}")
+ end
+end
+
+class Minitest::Test
+ include CustomAssertions
+end
diff --git a/test/utils.rb b/test/utils/server.rb
index cf0e0e5..246afe9 100644
--- a/test/utils.rb
+++ b/test/utils/server.rb
@@ -1,36 +1,6 @@
-module Minitest::Assertions
- def assert_http_error(klass, type, &blk)
- begin
- blk.call
- rescue klass => e
- assert_equal(type, e.http2_error_type)
- else
- flunk "#{klass.name} type: #{type} expected but nothing was raised."
- end
- end
-
- def assert_connection_error(type, &blk)
- assert_http_error(Plum::ConnectionError, type, &blk)
- end
-
- def assert_stream_error(type, &blk)
- assert_http_error(Plum::StreamError, type, &blk)
- end
+require "timeout"
- def refute_raises(&blk)
- begin
- blk.call
- rescue
- a = $!
- else
- a = nil
- end
- assert(!a, "No exceptions expected but raised: #{a}:\n#{a && a.backtrace.join("\n")}")
- end
-end
-
-module ServerTestUtils
- private
+module ServerUtils
def open_server_connection
io = StringIO.new
@_con = ServerConnection.new(io)
@@ -66,8 +36,8 @@ module ServerTestUtils
def start_server(&blk)
ctx = OpenSSL::SSL::SSLContext.new
ctx.alpn_select_cb = -> protocols { "h2" }
- ctx.cert = OpenSSL::X509::Certificate.new File.read(File.expand_path("../server.crt", __FILE__))
- ctx.key = OpenSSL::PKey::RSA.new File.read(File.expand_path("../server.key", __FILE__))
+ ctx.cert = OpenSSL::X509::Certificate.new File.read(File.expand_path("../../server.crt", __FILE__))
+ ctx.key = OpenSSL::PKey::RSA.new File.read(File.expand_path("../../server.key", __FILE__))
tcp_server = TCPServer.new("127.0.0.1", LISTEN_PORT)
ssl_server = OpenSSL::SSL::SSLServer.new(tcp_server, ctx)
@@ -111,3 +81,7 @@ module ServerTestUtils
ssl.close
end
end
+
+class Minitest::Test
+ include ServerUtils
+end