aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2015-11-09 21:58:07 +0900
committerKazuki Yamaguchi <k@rhe.jp>2015-11-09 21:58:07 +0900
commitcb0f800a28dd5b6875bcdf94eff64d5f4ae066cf (patch)
treed39d85ca66557285cae05f8d45759f8b942299f0
parent40e700d3d85b372e64a1eac3c6661e766cf49423 (diff)
downloadplum-cb0f800a28dd5b6875bcdf94eff64d5f4ae066cf.tar.gz
tests: add test cases for UpgradeClientSession
-rw-r--r--test/plum/client/test_upgrade_client_session.rb45
-rw-r--r--test/utils/string_socket.rb12
2 files changed, 57 insertions, 0 deletions
diff --git a/test/plum/client/test_upgrade_client_session.rb b/test/plum/client/test_upgrade_client_session.rb
new file mode 100644
index 0000000..d695142
--- /dev/null
+++ b/test/plum/client/test_upgrade_client_session.rb
@@ -0,0 +1,45 @@
+require "test_helper"
+
+using Plum::BinaryString
+class UpgradeClientSessionTest < Minitest::Test
+ def test_empty?
+ sock = StringSocket.new("HTTP/1.1 101\r\n\r\n")
+ session = UpgradeClientSession.new(sock, Client::DEFAULT_CONFIG)
+ assert(sock.wio.string.start_with?("OPTIONS * HTTP/1.1\r\n"), "sends options request")
+ assert(session.empty?)
+ end
+
+ def test_close
+ sock = StringSocket.new("HTTP/1.1 101\r\n\r\n")
+ session = UpgradeClientSession.new(sock, Client::DEFAULT_CONFIG)
+ res = session.request({}, nil, {})
+ assert(!res.failed?)
+ session.close
+ assert(res.failed?)
+ end
+
+ 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
+ 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).assemble
+ sock.rio.string << Frame.data(3, "aaa", :end_stream).assemble
+ session.succ until res.finished?
+ assert(res.finished?)
+ assert_equal("aaa", res.body)
+ assert_equal({ ":status" => "200", "content-length" => "3" }, res.headers)
+ end
+
+ def test_request_legacy
+ sock = StringSocket.new("HTTP/1.1 200\r\nContent-Length: 0\r\n\r\n")
+ session = UpgradeClientSession.new(sock, Client::DEFAULT_CONFIG)
+ res = session.request({ ":method" => "GET", ":path" => "/aa" }, "aa", {})
+ sock.rio.string << "HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\naaaHTTP/1.1 400\r\nnext-response"
+ session.succ until res.finished?
+ assert(res.finished?)
+ assert_equal("aaa", res.body)
+ assert_equal({ ":status" => "200", "content-length" => "3" }, res.headers)
+ end
+end
diff --git a/test/utils/string_socket.rb b/test/utils/string_socket.rb
new file mode 100644
index 0000000..fb59172
--- /dev/null
+++ b/test/utils/string_socket.rb
@@ -0,0 +1,12 @@
+class StringSocket
+ extend Forwardable
+ def_delegators :@rio, :readpartial
+ def_delegators :@wio, :<<, :write
+
+ attr_reader :rio, :wio
+
+ def initialize(str)
+ @rio = StringIO.new(str)
+ @wio = StringIO.new
+ end
+end