engineyard-mongrel 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +16 -0
- data/CONTRIBUTORS +17 -0
- data/COPYING +55 -0
- data/LICENSE +55 -0
- data/Manifest +71 -0
- data/README +74 -0
- data/bin/mongrel_rails +285 -0
- data/examples/builder.rb +29 -0
- data/examples/camping/README +3 -0
- data/examples/camping/blog.rb +294 -0
- data/examples/camping/tepee.rb +149 -0
- data/examples/httpd.conf +474 -0
- data/examples/mime.yaml +3 -0
- data/examples/mongrel.conf +9 -0
- data/examples/mongrel_simple_ctrl.rb +92 -0
- data/examples/mongrel_simple_service.rb +116 -0
- data/examples/monitrc +57 -0
- data/examples/random_thrash.rb +19 -0
- data/examples/simpletest.rb +52 -0
- data/examples/webrick_compare.rb +20 -0
- data/ext/http11/ext_help.h +15 -0
- data/ext/http11/extconf.rb +6 -0
- data/ext/http11/http11.c +527 -0
- data/ext/http11/http11_parser.c +1243 -0
- data/ext/http11/http11_parser.h +49 -0
- data/ext/http11/http11_parser.java.rl +171 -0
- data/ext/http11/http11_parser.rl +152 -0
- data/ext/http11/http11_parser_common.rl +54 -0
- data/ext/http11_java/Http11Service.java +13 -0
- data/ext/http11_java/org/jruby/mongrel/Http11.java +266 -0
- data/ext/http11_java/org/jruby/mongrel/Http11Parser.java +474 -0
- data/lib/mongrel.rb +360 -0
- data/lib/mongrel/camping.rb +107 -0
- data/lib/mongrel/cgi.rb +181 -0
- data/lib/mongrel/command.rb +222 -0
- data/lib/mongrel/configurator.rb +389 -0
- data/lib/mongrel/const.rb +110 -0
- data/lib/mongrel/debug.rb +203 -0
- data/lib/mongrel/gems.rb +22 -0
- data/lib/mongrel/handlers.rb +468 -0
- data/lib/mongrel/header_out.rb +28 -0
- data/lib/mongrel/http_request.rb +155 -0
- data/lib/mongrel/http_response.rb +166 -0
- data/lib/mongrel/init.rb +10 -0
- data/lib/mongrel/mime_types.yml +616 -0
- data/lib/mongrel/rails.rb +214 -0
- data/lib/mongrel/stats.rb +89 -0
- data/lib/mongrel/tcphack.rb +18 -0
- data/lib/mongrel/uri_classifier.rb +76 -0
- data/mongrel-public_cert.pem +20 -0
- data/setup.rb +1585 -0
- data/test/benchmark/previous.rb +11 -0
- data/test/benchmark/simple.rb +11 -0
- data/test/benchmark/utils.rb +82 -0
- data/test/mime.yaml +3 -0
- data/test/mongrel.conf +1 -0
- data/test/test_helper.rb +79 -0
- data/test/tools/trickletest.rb +45 -0
- data/test/unit/test_cgi_wrapper.rb +26 -0
- data/test/unit/test_command.rb +86 -0
- data/test/unit/test_conditional.rb +107 -0
- data/test/unit/test_configurator.rb +88 -0
- data/test/unit/test_debug.rb +25 -0
- data/test/unit/test_handlers.rb +136 -0
- data/test/unit/test_http_parser.rb +156 -0
- data/test/unit/test_redirect_handler.rb +45 -0
- data/test/unit/test_request_progress.rb +100 -0
- data/test/unit/test_response.rb +127 -0
- data/test/unit/test_stats.rb +35 -0
- data/test/unit/test_uriclassifier.rb +261 -0
- data/test/unit/test_ws.rb +116 -0
- metadata +158 -0
@@ -0,0 +1,116 @@
|
|
1
|
+
# Copyright (c) 2005 Zed A. Shaw
|
2
|
+
# You can redistribute it and/or modify it under the same terms as Ruby.
|
3
|
+
#
|
4
|
+
# Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
|
5
|
+
# for more information.
|
6
|
+
|
7
|
+
require 'test/test_helper'
|
8
|
+
|
9
|
+
include Mongrel
|
10
|
+
|
11
|
+
class TestHandler < Mongrel::HttpHandler
|
12
|
+
attr_reader :ran_test
|
13
|
+
|
14
|
+
def process(request, response)
|
15
|
+
@ran_test = true
|
16
|
+
response.socket.write("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nhello!\n")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
class WebServerTest < Test::Unit::TestCase
|
22
|
+
|
23
|
+
def setup
|
24
|
+
@valid_request = "GET / HTTP/1.1\r\nHost: www.zedshaw.com\r\nContent-Type: text/plain\r\n\r\n"
|
25
|
+
@port = process_based_port
|
26
|
+
|
27
|
+
redirect_test_io do
|
28
|
+
# We set num_processors=1 so that we can test the reaping code
|
29
|
+
@server = HttpServer.new("127.0.0.1", @port, num_processors=1)
|
30
|
+
end
|
31
|
+
|
32
|
+
@tester = TestHandler.new
|
33
|
+
@server.register("/test", @tester)
|
34
|
+
redirect_test_io do
|
35
|
+
@server.run
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def teardown
|
40
|
+
redirect_test_io do
|
41
|
+
@server.stop(true)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_simple_server
|
46
|
+
hit(["http://localhost:#{@port}/test"])
|
47
|
+
assert @tester.ran_test, "Handler didn't really run"
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def do_test(string, chunk, close_after=nil, shutdown_delay=0)
|
52
|
+
# Do not use instance variables here, because it needs to be thread safe
|
53
|
+
socket = TCPSocket.new("127.0.0.1", @port);
|
54
|
+
request = StringIO.new(string)
|
55
|
+
chunks_out = 0
|
56
|
+
|
57
|
+
while data = request.read(chunk)
|
58
|
+
chunks_out += socket.write(data)
|
59
|
+
socket.flush
|
60
|
+
sleep 0.2
|
61
|
+
if close_after and chunks_out > close_after
|
62
|
+
socket.close
|
63
|
+
sleep 1
|
64
|
+
end
|
65
|
+
end
|
66
|
+
sleep(shutdown_delay)
|
67
|
+
socket.write(" ") # Some platforms only raise the exception on attempted write
|
68
|
+
socket.flush
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_trickle_attack
|
72
|
+
do_test(@valid_request, 3)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_close_client
|
76
|
+
assert_raises IOError do
|
77
|
+
do_test(@valid_request, 10, 20)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_bad_client
|
82
|
+
redirect_test_io do
|
83
|
+
do_test("GET /test HTTP/BAD", 3)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_header_is_too_long
|
88
|
+
redirect_test_io do
|
89
|
+
long = "GET /test HTTP/1.1\r\n" + ("X-Big: stuff\r\n" * 15000) + "\r\n"
|
90
|
+
assert_raises Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED, Errno::EINVAL, IOError do
|
91
|
+
do_test(long, long.length/2, 10)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_num_processors_overload
|
97
|
+
redirect_test_io do
|
98
|
+
assert_raises Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED, Errno::EINVAL, IOError do
|
99
|
+
tests = [
|
100
|
+
Thread.new { do_test(@valid_request, 1) },
|
101
|
+
Thread.new { do_test(@valid_request, 10) },
|
102
|
+
]
|
103
|
+
|
104
|
+
tests.each {|t| t.join}
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_file_streamed_request
|
110
|
+
body = "a" * (Mongrel::Const::MAX_BODY * 2)
|
111
|
+
long = "GET /test HTTP/1.1\r\nContent-length: #{body.length}\r\n\r\n" + body
|
112
|
+
do_test(long, Mongrel::Const::CHUNK_SIZE * 2 -400)
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: engineyard-mongrel
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Zed A. Shaw
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-06-16 00:00:00 -07:00
|
13
|
+
default_executable: mongrel_rails
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: gem_plugin
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.2.3
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hoe
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.5.3
|
34
|
+
version:
|
35
|
+
description: A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps.
|
36
|
+
email: tech@engineyard.com
|
37
|
+
executables:
|
38
|
+
- mongrel_rails
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- bin/mongrel_rails
|
45
|
+
- CHANGELOG
|
46
|
+
- CONTRIBUTORS
|
47
|
+
- COPYING
|
48
|
+
- examples/builder.rb
|
49
|
+
- examples/camping/blog.rb
|
50
|
+
- examples/camping/README
|
51
|
+
- examples/camping/tepee.rb
|
52
|
+
- examples/httpd.conf
|
53
|
+
- examples/mime.yaml
|
54
|
+
- examples/mongrel.conf
|
55
|
+
- examples/mongrel_simple_ctrl.rb
|
56
|
+
- examples/mongrel_simple_service.rb
|
57
|
+
- examples/monitrc
|
58
|
+
- examples/random_thrash.rb
|
59
|
+
- examples/simpletest.rb
|
60
|
+
- examples/webrick_compare.rb
|
61
|
+
- ext/http11/ext_help.h
|
62
|
+
- ext/http11/extconf.rb
|
63
|
+
- ext/http11/http11.c
|
64
|
+
- ext/http11/http11_parser.c
|
65
|
+
- ext/http11/http11_parser.h
|
66
|
+
- ext/http11/http11_parser.java.rl
|
67
|
+
- ext/http11/http11_parser.rl
|
68
|
+
- ext/http11/http11_parser_common.rl
|
69
|
+
- ext/http11_java/Http11Service.java
|
70
|
+
- ext/http11_java/org/jruby/mongrel/Http11.java
|
71
|
+
- ext/http11_java/org/jruby/mongrel/Http11Parser.java
|
72
|
+
- lib/mongrel/camping.rb
|
73
|
+
- lib/mongrel/cgi.rb
|
74
|
+
- lib/mongrel/command.rb
|
75
|
+
- lib/mongrel/configurator.rb
|
76
|
+
- lib/mongrel/const.rb
|
77
|
+
- lib/mongrel/debug.rb
|
78
|
+
- lib/mongrel/gems.rb
|
79
|
+
- lib/mongrel/handlers.rb
|
80
|
+
- lib/mongrel/header_out.rb
|
81
|
+
- lib/mongrel/http_request.rb
|
82
|
+
- lib/mongrel/http_response.rb
|
83
|
+
- lib/mongrel/init.rb
|
84
|
+
- lib/mongrel/mime_types.yml
|
85
|
+
- lib/mongrel/rails.rb
|
86
|
+
- lib/mongrel/stats.rb
|
87
|
+
- lib/mongrel/tcphack.rb
|
88
|
+
- lib/mongrel/uri_classifier.rb
|
89
|
+
- lib/mongrel.rb
|
90
|
+
- LICENSE
|
91
|
+
- Manifest
|
92
|
+
- mongrel-public_cert.pem
|
93
|
+
- README
|
94
|
+
- setup.rb
|
95
|
+
- test/benchmark/previous.rb
|
96
|
+
- test/benchmark/simple.rb
|
97
|
+
- test/benchmark/utils.rb
|
98
|
+
- test/mime.yaml
|
99
|
+
- test/mongrel.conf
|
100
|
+
- test/test_helper.rb
|
101
|
+
- test/tools/trickletest.rb
|
102
|
+
- test/unit/test_cgi_wrapper.rb
|
103
|
+
- test/unit/test_command.rb
|
104
|
+
- test/unit/test_conditional.rb
|
105
|
+
- test/unit/test_configurator.rb
|
106
|
+
- test/unit/test_debug.rb
|
107
|
+
- test/unit/test_handlers.rb
|
108
|
+
- test/unit/test_http_parser.rb
|
109
|
+
- test/unit/test_redirect_handler.rb
|
110
|
+
- test/unit/test_request_progress.rb
|
111
|
+
- test/unit/test_response.rb
|
112
|
+
- test/unit/test_stats.rb
|
113
|
+
- test/unit/test_uriclassifier.rb
|
114
|
+
- test/unit/test_ws.rb
|
115
|
+
has_rdoc: true
|
116
|
+
homepage: http://mongrel.rubyforge.org
|
117
|
+
licenses:
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options:
|
120
|
+
- --main
|
121
|
+
- README.txt
|
122
|
+
require_paths:
|
123
|
+
- lib
|
124
|
+
- ext
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: "0"
|
130
|
+
version:
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: "0"
|
136
|
+
version:
|
137
|
+
requirements: []
|
138
|
+
|
139
|
+
rubyforge_project: mongrel
|
140
|
+
rubygems_version: 1.3.5
|
141
|
+
signing_key:
|
142
|
+
specification_version: 2
|
143
|
+
summary: Engine Yard fork of mongrel
|
144
|
+
test_files:
|
145
|
+
- test/unit/test_redirect_handler.rb
|
146
|
+
- test/unit/test_cgi_wrapper.rb
|
147
|
+
- test/unit/test_command.rb
|
148
|
+
- test/unit/test_conditional.rb
|
149
|
+
- test/unit/test_configurator.rb
|
150
|
+
- test/unit/test_debug.rb
|
151
|
+
- test/unit/test_handlers.rb
|
152
|
+
- test/unit/test_http_parser.rb
|
153
|
+
- test/unit/test_request_progress.rb
|
154
|
+
- test/unit/test_response.rb
|
155
|
+
- test/unit/test_stats.rb
|
156
|
+
- test/unit/test_uriclassifier.rb
|
157
|
+
- test/unit/test_ws.rb
|
158
|
+
- test/test_helper.rb
|