mongrel 1.1.2-java
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of mongrel might be problematic. Click here for more details.
- data.tar.gz.sig +1 -0
- data/CHANGELOG +12 -0
- data/COPYING +55 -0
- data/LICENSE +55 -0
- data/Manifest +69 -0
- data/README +74 -0
- data/TODO +5 -0
- data/bin/mongrel_rails +283 -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 +14 -0
- data/ext/http11/extconf.rb +6 -0
- data/ext/http11/http11.c +402 -0
- data/ext/http11/http11_parser.c +1221 -0
- data/ext/http11/http11_parser.h +49 -0
- data/ext/http11/http11_parser.java.rl +170 -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 +572 -0
- data/lib/http11.jar +0 -0
- data/lib/mongrel.rb +355 -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 +388 -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 +163 -0
- data/lib/mongrel/init.rb +10 -0
- data/lib/mongrel/mime_types.yml +616 -0
- data/lib/mongrel/rails.rb +185 -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/mongrel.gemspec +263 -0
- data/setup.rb +1585 -0
- data/test/mime.yaml +3 -0
- data/test/mongrel.conf +1 -0
- data/test/test_cgi_wrapper.rb +26 -0
- data/test/test_command.rb +86 -0
- data/test/test_conditional.rb +107 -0
- data/test/test_configurator.rb +87 -0
- data/test/test_debug.rb +25 -0
- data/test/test_handlers.rb +103 -0
- data/test/test_http11.rb +156 -0
- data/test/test_redirect_handler.rb +44 -0
- data/test/test_request_progress.rb +99 -0
- data/test/test_response.rb +127 -0
- data/test/test_stats.rb +35 -0
- data/test/test_uriclassifier.rb +261 -0
- data/test/test_ws.rb +115 -0
- data/test/testhelp.rb +66 -0
- data/tools/trickletest.rb +45 -0
- metadata +186 -0
- metadata.gz.sig +4 -0
data/test/mime.yaml
ADDED
data/test/mongrel.conf
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
uri "/fromconf", :handler => Mongrel::Error404Handler.new("test")
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
require 'test/testhelp'
|
3
|
+
|
4
|
+
class MockHttpRequest
|
5
|
+
attr_reader :body
|
6
|
+
|
7
|
+
def params
|
8
|
+
return { 'REQUEST_METHOD' => 'GET'}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class CGIWrapperTest < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def test_set_cookies_output_cookies
|
15
|
+
request = MockHttpRequest.new
|
16
|
+
response = nil # not needed for this test
|
17
|
+
output_headers = {}
|
18
|
+
|
19
|
+
cgi = Mongrel::CGIWrapper.new(request, response)
|
20
|
+
session = CGI::Session.new(cgi, 'database_manager' => CGI::Session::MemoryStore)
|
21
|
+
cgi.send_cookies(output_headers)
|
22
|
+
|
23
|
+
assert(output_headers.has_key?("Set-Cookie"))
|
24
|
+
assert_equal("_session_id="+session.session_id+"; path=", output_headers["Set-Cookie"])
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,86 @@
|
|
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/testhelp'
|
8
|
+
|
9
|
+
class TestCommand < GemPlugin::Plugin "/commands"
|
10
|
+
include Mongrel::Command::Base
|
11
|
+
|
12
|
+
def configure
|
13
|
+
options [
|
14
|
+
["-e", "--environment ENV", "Rails environment to run as", :@environment, ENV['RAILS_ENV'] || "development"],
|
15
|
+
['', '--user USER', "User to run as", :@user, nil],
|
16
|
+
["-d", "--daemonize", "Whether to run in the background or not", :@daemon, false],
|
17
|
+
["-x", "--test", "Used to let the test run failures", :@test, false],
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate
|
22
|
+
valid_dir? ".", "Can't validate current directory."
|
23
|
+
valid_exists? "Rakefile", "Rakefile not there, test is invalid."
|
24
|
+
if @test
|
25
|
+
valid_exist? "BADFILE", "Yeah, badfile"
|
26
|
+
valid_file? "BADFILE", "Not even a file"
|
27
|
+
valid_dir? "BADDIR", "No dir here"
|
28
|
+
valid? false, "Total failure"
|
29
|
+
end
|
30
|
+
|
31
|
+
return @valid
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
def run
|
36
|
+
$test_command_ran = true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class CommandTest < Test::Unit::TestCase
|
41
|
+
|
42
|
+
def setup
|
43
|
+
$test_command_ran = false
|
44
|
+
end
|
45
|
+
|
46
|
+
def teardown
|
47
|
+
end
|
48
|
+
|
49
|
+
def run_cmd(args)
|
50
|
+
Mongrel::Command::Registry.instance.run args
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_run_command
|
54
|
+
redirect_test_io do
|
55
|
+
run_cmd ["testcommand"]
|
56
|
+
assert $test_command_ran, "command didn't run"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_command_error
|
61
|
+
redirect_test_io do
|
62
|
+
run_cmd ["crapcommand"]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_command_listing
|
67
|
+
redirect_test_io do
|
68
|
+
run_cmd ["help"]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_options
|
73
|
+
redirect_test_io do
|
74
|
+
run_cmd ["testcommand","-h"]
|
75
|
+
run_cmd ["testcommand","--help"]
|
76
|
+
run_cmd ["testcommand","-e","test","-d","--user"]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_version
|
81
|
+
redirect_test_io do
|
82
|
+
run_cmd ["testcommand", "--version"]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,107 @@
|
|
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/testhelp'
|
8
|
+
|
9
|
+
include Mongrel
|
10
|
+
|
11
|
+
class ConditionalResponseTest < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
@server = HttpServer.new('127.0.0.1', 3501)
|
14
|
+
@server.register('/', Mongrel::DirHandler.new('.'))
|
15
|
+
@server.run
|
16
|
+
|
17
|
+
@http = Net::HTTP.new(@server.host, @server.port)
|
18
|
+
|
19
|
+
# get the ETag and Last-Modified headers
|
20
|
+
@path = '/README'
|
21
|
+
res = @http.start { |http| http.get(@path) }
|
22
|
+
assert_not_nil @etag = res['ETag']
|
23
|
+
assert_not_nil @last_modified = res['Last-Modified']
|
24
|
+
assert_not_nil @content_length = res['Content-Length']
|
25
|
+
end
|
26
|
+
|
27
|
+
def teardown
|
28
|
+
@server.stop(true)
|
29
|
+
end
|
30
|
+
|
31
|
+
# status should be 304 Not Modified when If-None-Match is the matching ETag
|
32
|
+
def test_not_modified_via_if_none_match
|
33
|
+
assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag
|
34
|
+
end
|
35
|
+
|
36
|
+
# status should be 304 Not Modified when If-Modified-Since is the matching Last-Modified date
|
37
|
+
def test_not_modified_via_if_modified_since
|
38
|
+
assert_status_for_get_and_head Net::HTTPNotModified, 'If-Modified-Since' => @last_modified
|
39
|
+
end
|
40
|
+
|
41
|
+
# status should be 304 Not Modified when If-None-Match is the matching ETag
|
42
|
+
# and If-Modified-Since is the matching Last-Modified date
|
43
|
+
def test_not_modified_via_if_none_match_and_if_modified_since
|
44
|
+
assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag, 'If-Modified-Since' => @last_modified
|
45
|
+
end
|
46
|
+
|
47
|
+
# status should be 200 OK when If-None-Match is invalid
|
48
|
+
def test_invalid_if_none_match
|
49
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => 'invalid'
|
50
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => 'invalid', 'If-Modified-Since' => @last_modified
|
51
|
+
end
|
52
|
+
|
53
|
+
# status should be 200 OK when If-Modified-Since is invalid
|
54
|
+
def test_invalid_if_modified_since
|
55
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-Modified-Since' => 'invalid'
|
56
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Modified-Since' => 'invalid'
|
57
|
+
end
|
58
|
+
|
59
|
+
# status should be 304 Not Modified when If-Modified-Since is greater than the Last-Modified header, but less than the system time
|
60
|
+
def test_if_modified_since_greater_than_last_modified
|
61
|
+
sleep 2
|
62
|
+
last_modified_plus_1 = (Time.httpdate(@last_modified) + 1).httpdate
|
63
|
+
assert_status_for_get_and_head Net::HTTPNotModified, 'If-Modified-Since' => last_modified_plus_1
|
64
|
+
assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag, 'If-Modified-Since' => last_modified_plus_1
|
65
|
+
end
|
66
|
+
|
67
|
+
# status should be 200 OK when If-Modified-Since is less than the Last-Modified header
|
68
|
+
def test_if_modified_since_less_than_last_modified
|
69
|
+
last_modified_minus_1 = (Time.httpdate(@last_modified) - 1).httpdate
|
70
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-Modified-Since' => last_modified_minus_1
|
71
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Modified-Since' => last_modified_minus_1
|
72
|
+
end
|
73
|
+
|
74
|
+
# status should be 200 OK when If-Modified-Since is a date in the future
|
75
|
+
def test_future_if_modified_since
|
76
|
+
the_future = Time.at(2**31-1).httpdate
|
77
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-Modified-Since' => the_future
|
78
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Modified-Since' => the_future
|
79
|
+
end
|
80
|
+
|
81
|
+
# status should be 200 OK when If-None-Match is a wildcard
|
82
|
+
def test_wildcard_match
|
83
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => '*'
|
84
|
+
assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => '*', 'If-Modified-Since' => @last_modified
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
# assert the response status is correct for GET and HEAD
|
90
|
+
def assert_status_for_get_and_head(response_class, headers = {})
|
91
|
+
%w{ get head }.each do |method|
|
92
|
+
res = @http.send(method, @path, headers)
|
93
|
+
assert_kind_of response_class, res
|
94
|
+
assert_equal @etag, res['ETag']
|
95
|
+
case response_class.to_s
|
96
|
+
when 'Net::HTTPNotModified' then
|
97
|
+
assert_nil res['Last-Modified']
|
98
|
+
assert_nil res['Content-Length']
|
99
|
+
when 'Net::HTTPOK' then
|
100
|
+
assert_equal @last_modified, res['Last-Modified']
|
101
|
+
assert_equal @content_length, res['Content-Length']
|
102
|
+
else
|
103
|
+
fail "Incorrect response class: #{response_class}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,87 @@
|
|
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/testhelp'
|
8
|
+
|
9
|
+
$test_plugin_fired = 0
|
10
|
+
|
11
|
+
class TestPlugin < GemPlugin::Plugin "/handlers"
|
12
|
+
include Mongrel::HttpHandlerPlugin
|
13
|
+
|
14
|
+
def process(request, response)
|
15
|
+
$test_plugin_fired += 1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
class Sentinel < GemPlugin::Plugin "/handlers"
|
21
|
+
include Mongrel::HttpHandlerPlugin
|
22
|
+
|
23
|
+
def process(request, response)
|
24
|
+
raise "This Sentinel plugin shouldn't run."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
class ConfiguratorTest < Test::Unit::TestCase
|
30
|
+
|
31
|
+
def test_base_handler_config
|
32
|
+
@config = nil
|
33
|
+
|
34
|
+
redirect_test_io do
|
35
|
+
@config = Mongrel::Configurator.new :host => "localhost" do
|
36
|
+
listener :port => 4501 do
|
37
|
+
# 2 in front should run, but the sentinel shouldn't since dirhandler processes the request
|
38
|
+
uri "/", :handler => plugin("/handlers/testplugin")
|
39
|
+
uri "/", :handler => plugin("/handlers/testplugin")
|
40
|
+
uri "/", :handler => Mongrel::DirHandler.new(".")
|
41
|
+
uri "/", :handler => plugin("/handlers/testplugin")
|
42
|
+
|
43
|
+
uri "/test", :handler => plugin("/handlers/testplugin")
|
44
|
+
uri "/test", :handler => plugin("/handlers/testplugin")
|
45
|
+
uri "/test", :handler => Mongrel::DirHandler.new(".")
|
46
|
+
uri "/test", :handler => plugin("/handlers/testplugin")
|
47
|
+
|
48
|
+
debug "/"
|
49
|
+
setup_signals
|
50
|
+
|
51
|
+
run_config(File.dirname(__FILE__) + "/../test/mongrel.conf")
|
52
|
+
load_mime_map(File.dirname(__FILE__) + "/../test/mime.yaml")
|
53
|
+
|
54
|
+
run
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# pp @config.listeners.values.first.classifier.routes
|
60
|
+
|
61
|
+
@config.listeners.each do |host,listener|
|
62
|
+
assert listener.classifier.uris.length == 3, "Wrong number of registered URIs"
|
63
|
+
assert listener.classifier.uris.include?("/"), "/ not registered"
|
64
|
+
assert listener.classifier.uris.include?("/test"), "/test not registered"
|
65
|
+
end
|
66
|
+
|
67
|
+
res = Net::HTTP.get(URI.parse('http://localhost:4501/test'))
|
68
|
+
assert res != nil, "Didn't get a response"
|
69
|
+
assert $test_plugin_fired == 3, "Test filter plugin didn't run 3 times."
|
70
|
+
|
71
|
+
redirect_test_io do
|
72
|
+
res = Net::HTTP.get(URI.parse('http://localhost:4501/'))
|
73
|
+
|
74
|
+
assert res != nil, "Didn't get a response"
|
75
|
+
assert $test_plugin_fired == 6, "Test filter plugin didn't run 6 times."
|
76
|
+
end
|
77
|
+
|
78
|
+
redirect_test_io do
|
79
|
+
@config.stop(false, true)
|
80
|
+
end
|
81
|
+
|
82
|
+
assert_raise Errno::EBADF, Errno::ECONNREFUSED do
|
83
|
+
res = Net::HTTP.get(URI.parse("http://localhost:4501/"))
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
data/test/test_debug.rb
ADDED
@@ -0,0 +1,25 @@
|
|
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/testhelp'
|
8
|
+
require 'mongrel/debug'
|
9
|
+
|
10
|
+
class MongrelDbgTest < Test::Unit::TestCase
|
11
|
+
|
12
|
+
def test_tracing_to_log
|
13
|
+
FileUtils.rm_rf "log/mongrel_debug"
|
14
|
+
|
15
|
+
MongrelDbg::configure
|
16
|
+
out = StringIO.new
|
17
|
+
|
18
|
+
MongrelDbg::begin_trace(:rails)
|
19
|
+
MongrelDbg::trace(:rails, "Good stuff")
|
20
|
+
MongrelDbg::end_trace(:rails)
|
21
|
+
|
22
|
+
assert File.exist?("log/mongrel_debug"), "Didn't make logging directory"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,103 @@
|
|
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/testhelp'
|
8
|
+
|
9
|
+
class SimpleHandler < Mongrel::HttpHandler
|
10
|
+
def process(request, response)
|
11
|
+
response.start do |head,out|
|
12
|
+
head["Content-Type"] = "text/html"
|
13
|
+
results = "<html><body>Your request:<br /><pre>#{request.params.to_yaml}</pre><a href=\"/files\">View the files.</a></body></html>"
|
14
|
+
out << results
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class DumbHandler < Mongrel::HttpHandler
|
20
|
+
def process(request, response)
|
21
|
+
response.start do |head,out|
|
22
|
+
head["Content-Type"] = "text/html"
|
23
|
+
out.write("test")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def check_status(results, expecting)
|
29
|
+
results.each do |res|
|
30
|
+
assert(res.kind_of?(expecting), "Didn't get #{expecting}, got: #{res.class}")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class HandlersTest < Test::Unit::TestCase
|
35
|
+
|
36
|
+
def setup
|
37
|
+
stats = Mongrel::StatisticsFilter.new(:sample_rate => 1)
|
38
|
+
|
39
|
+
@config = Mongrel::Configurator.new :host => '127.0.0.1', :port => 9998 do
|
40
|
+
listener do
|
41
|
+
uri "/", :handler => SimpleHandler.new
|
42
|
+
uri "/", :handler => stats
|
43
|
+
uri "/404", :handler => Mongrel::Error404Handler.new("Not found")
|
44
|
+
uri "/dumb", :handler => Mongrel::DeflateFilter.new
|
45
|
+
uri "/dumb", :handler => DumbHandler.new, :in_front => true
|
46
|
+
uri "/files", :handler => Mongrel::DirHandler.new("doc")
|
47
|
+
uri "/files_nodir", :handler => Mongrel::DirHandler.new("doc", listing_allowed=false, index_html="none")
|
48
|
+
uri "/status", :handler => Mongrel::StatusHandler.new(:stats_filter => stats)
|
49
|
+
uri "/relative", :handler => Mongrel::DirHandler.new(nil, listing_allowed=false, index_html="none")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
@config.run
|
53
|
+
end
|
54
|
+
|
55
|
+
def teardown
|
56
|
+
@config.stop(false, true)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_more_web_server
|
60
|
+
res = hit([ "http://localhost:9998/test",
|
61
|
+
"http://localhost:9998/dumb",
|
62
|
+
"http://localhost:9998/404",
|
63
|
+
"http://localhost:9998/files/rdoc/index.html",
|
64
|
+
"http://localhost:9998/files/rdoc/nothere.html",
|
65
|
+
"http://localhost:9998/files/rdoc/",
|
66
|
+
"http://localhost:9998/files_nodir/rdoc/",
|
67
|
+
"http://localhost:9998/status",
|
68
|
+
])
|
69
|
+
|
70
|
+
# XXX This can't possibly have good coverage.
|
71
|
+
check_status res, String
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_deflate
|
75
|
+
Net::HTTP.start("localhost", 9998) do |h|
|
76
|
+
# test that no accept-encoding returns a non-deflated response
|
77
|
+
req = h.get("/dumb")
|
78
|
+
assert(
|
79
|
+
!req['Content-Encoding'] ||
|
80
|
+
!req['Content-Encoding'].include?('deflate'))
|
81
|
+
assert_equal "test", req.body
|
82
|
+
|
83
|
+
req = h.get("/dumb", {"Accept-Encoding" => "deflate"})
|
84
|
+
# -MAX_WBITS stops zlib from looking for a zlib header
|
85
|
+
inflater = Zlib::Inflate.new(-Zlib::MAX_WBITS)
|
86
|
+
assert req['Content-Encoding'].include?('deflate')
|
87
|
+
assert_equal "test", inflater.inflate(req.body)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# TODO: find out why this fails on win32 but nowhere else
|
92
|
+
#def test_posting_fails_dirhandler
|
93
|
+
# req = Net::HTTP::Post.new("http://localhost:9998/files/rdoc/")
|
94
|
+
# req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';')
|
95
|
+
# res = hit [["http://localhost:9998/files/rdoc/",req]]
|
96
|
+
# check_status res, Net::HTTPNotFound
|
97
|
+
#end
|
98
|
+
|
99
|
+
def test_unregister
|
100
|
+
@config.listeners["127.0.0.1:9998"].unregister("/")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|