summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_hc.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_hc.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_hc.rb155
1 files changed, 155 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_hc.rb b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_hc.rb
new file mode 100644
index 0000000..28e32c9
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_hc.rb
@@ -0,0 +1,155 @@
+require 'em_test_helper'
+
+class TestHeaderAndContentProtocol < Test::Unit::TestCase
+
+ class SimpleTest < EM::P::HeaderAndContentProtocol
+ attr_reader :first_header, :my_headers, :request
+
+ def receive_first_header_line hdr
+ @first_header ||= []
+ @first_header << hdr
+ end
+ def receive_headers hdrs
+ @my_headers ||= []
+ @my_headers << hdrs
+ end
+ def receive_request hdrs, content
+ @request ||= []
+ @request << [hdrs, content]
+ end
+ end
+
+ class StopOnUnbind < EM::Connection
+ def unbind
+ EM.add_timer(0.01) { EM.stop }
+ end
+ end
+
+ def setup
+ @port = next_port
+ end
+
+ def test_no_content
+ the_connection = nil
+ EM.run {
+ EM.start_server( "127.0.0.1", @port, SimpleTest ) do |conn|
+ the_connection = conn
+ end
+ setup_timeout
+
+ EM.connect "127.0.0.1", @port, StopOnUnbind do |c|
+ c.send_data [ "aaa\n", "bbb\r\n", "ccc\n", "\n" ].join
+ c.close_connection_after_writing
+ end
+ }
+ assert_equal( ["aaa"], the_connection.first_header )
+ assert_equal( [%w(aaa bbb ccc)], the_connection.my_headers )
+ assert_equal( [[%w(aaa bbb ccc), ""]], the_connection.request )
+ end
+
+ def test_content
+ the_connection = nil
+ content = "A" * 50
+ headers = ["aaa", "bbb", "Content-length: #{content.length}", "ccc"]
+ EM.run {
+ EM.start_server( "127.0.0.1", @port, SimpleTest ) do |conn|
+ the_connection = conn
+ end
+ setup_timeout
+
+ EM.connect "127.0.0.1", @port, StopOnUnbind do |c|
+ headers.each { |h| c.send_data "#{h}\r\n" }
+ c.send_data "\n"
+ c.send_data content
+ c.close_connection_after_writing
+ end
+ }
+ assert_equal( ["aaa"], the_connection.first_header )
+ assert_equal( [headers], the_connection.my_headers )
+ assert_equal( [[headers, content]], the_connection.request )
+ end
+
+ def test_several_requests
+ the_connection = nil
+ content = "A" * 50
+ headers = ["aaa", "bbb", "Content-length: #{content.length}", "ccc"]
+ EM.run {
+ EM.start_server( "127.0.0.1", @port, SimpleTest ) do |conn|
+ the_connection = conn
+ end
+ setup_timeout
+
+ EM.connect( "127.0.0.1", @port, StopOnUnbind ) do |c|
+ 5.times do
+ headers.each { |h| c.send_data "#{h}\r\n" }
+ c.send_data "\n"
+ c.send_data content
+ end
+ c.close_connection_after_writing
+ end
+ }
+ assert_equal( ["aaa"] * 5, the_connection.first_header )
+ assert_equal( [headers] * 5, the_connection.my_headers )
+ assert_equal( [[headers, content]] * 5, the_connection.request )
+ end
+
+
+ # def x_test_multiple_content_length_headers
+ # # This is supposed to throw a RuntimeError but it throws a C++ exception instead.
+ # the_connection = nil
+ # content = "A" * 50
+ # headers = ["aaa", "bbb", ["Content-length: #{content.length}"]*2, "ccc"].flatten
+ # EM.run {
+ # EM.start_server( "127.0.0.1", @port, SimpleTest ) do |conn|
+ # the_connection = conn
+ # end
+ # EM.add_timer(4) {raise "test timed out"}
+ # test_proc = proc {
+ # t = TCPSocket.new "127.0.0.1", @port
+ # headers.each {|h| t.write "#{h}\r\n" }
+ # t.write "\n"
+ # t.write content
+ # t.close
+ # }
+ # EM.defer test_proc, proc {
+ # EM.stop
+ # }
+ # }
+ # end
+
+ def test_interpret_headers
+ the_connection = nil
+ content = "A" * 50
+ headers = [
+ "GET / HTTP/1.0",
+ "Accept: aaa",
+ "User-Agent: bbb",
+ "Host: ccc",
+ "x-tempest-header:ddd"
+ ]
+
+ EM.run {
+ EM.start_server( "127.0.0.1", @port, SimpleTest ) do |conn|
+ the_connection = conn
+ end
+ setup_timeout
+
+ EM.connect( "127.0.0.1", @port, StopOnUnbind ) do |c|
+ headers.each { |h| c.send_data "#{h}\r\n" }
+ c.send_data "\n"
+ c.send_data content
+ c.close_connection_after_writing
+ end
+ }
+
+ hsh = the_connection.headers_2_hash( the_connection.my_headers.shift )
+ expect = {
+ :accept => "aaa",
+ :user_agent => "bbb",
+ :host => "ccc",
+ :x_tempest_header => "ddd"
+ }
+ assert_equal(expect, hsh)
+ end
+
+end