yahns 1.14.1 → 1.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +5 -5
  2. data/.document +2 -0
  3. data/.gitignore +0 -1
  4. data/.olddoc.yml +3 -2
  5. data/Documentation/GNUmakefile +1 -1
  6. data/Documentation/design_notes.txt +6 -3
  7. data/Documentation/yahns-rackup.pod +7 -3
  8. data/Documentation/yahns.pod +1 -1
  9. data/Documentation/yahns_config.pod +10 -10
  10. data/GIT-VERSION-FILE +1 -1
  11. data/GIT-VERSION-GEN +3 -3
  12. data/HACKING +13 -13
  13. data/NEWS +982 -829
  14. data/README +11 -12
  15. data/Rakefile +121 -5
  16. data/examples/https_proxy_pass.conf.rb +36 -0
  17. data/examples/logrotate.conf +1 -1
  18. data/examples/proxy_pass.ru +11 -0
  19. data/extras/autoindex.rb +20 -4
  20. data/extras/exec_cgi.rb +38 -24
  21. data/extras/proxy_pass.rb +7 -6
  22. data/extras/try_gzip_static.rb +4 -1
  23. data/lib/yahns/acceptor.rb +3 -3
  24. data/lib/yahns/chunk_body.rb +2 -1
  25. data/lib/yahns/config.rb +10 -5
  26. data/lib/yahns/daemon.rb +0 -1
  27. data/lib/yahns/http_client.rb +28 -18
  28. data/lib/yahns/http_response.rb +3 -4
  29. data/lib/yahns/openssl_client.rb +33 -11
  30. data/lib/yahns/proxy_http_response.rb +3 -1
  31. data/lib/yahns/proxy_pass.rb +68 -10
  32. data/lib/yahns/queue_epoll.rb +4 -0
  33. data/lib/yahns/queue_kqueue.rb +0 -6
  34. data/lib/yahns/queue_quitter_pipe.rb +4 -1
  35. data/lib/yahns/rackup_handler.rb +3 -7
  36. data/lib/yahns/server.rb +47 -27
  37. data/lib/yahns/server_mp.rb +3 -4
  38. data/lib/yahns/sigevent_efd.rb +0 -1
  39. data/lib/yahns/sigevent_pipe.rb +13 -6
  40. data/lib/yahns/socket_helper.rb +1 -1
  41. data/lib/yahns/stream_input.rb +3 -2
  42. data/lib/yahns/tee_input.rb +1 -3
  43. data/lib/yahns/version.rb +1 -1
  44. data/lib/yahns/wbuf.rb +10 -3
  45. data/lib/yahns/worker.rb +8 -0
  46. data/lib/yahns.rb +12 -7
  47. data/man/yahns-rackup.1 +17 -17
  48. data/man/yahns.1 +11 -15
  49. data/man/yahns_config.5 +31 -31
  50. data/test/helper.rb +6 -2
  51. data/test/server_helper.rb +20 -5
  52. data/test/test_bin.rb +33 -30
  53. data/test/test_config.rb +2 -2
  54. data/test/test_extras_exec_cgi.rb +24 -1
  55. data/test/test_extras_try_gzip_static.rb +1 -1
  56. data/test/test_mt_accept.rb +0 -2
  57. data/test/test_proxy_pass.rb +1 -2
  58. data/test/test_proxy_pass_no_buffering.rb +1 -1
  59. data/test/test_rack_env.rb +58 -0
  60. data/test/test_serve_static.rb +0 -1
  61. data/test/test_server.rb +1 -4
  62. data/test/test_ssl.rb +2 -0
  63. data/test/test_unix_socket.rb +1 -3
  64. data/test/test_wbuf.rb +1 -1
  65. data/yahns.gemspec +8 -5
  66. metadata +12 -9
@@ -0,0 +1,58 @@
1
+ # Copyright (C) 2017 all contributors <yahns-public@yhbt.net>
2
+ # License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
3
+ # frozen_string_literal: true
4
+ require_relative 'server_helper'
5
+ require 'rack'
6
+
7
+ class TestRackEnv < Testcase
8
+ ENV["N"].to_i > 1 and parallelize_me!
9
+ include ServerHelper
10
+ alias setup server_helper_setup
11
+ alias teardown server_helper_teardown
12
+
13
+ def test_rack_env_logger
14
+ err, cfg, host, port = @err, Yahns::Config.new, @srv.addr[3], @srv.addr[1]
15
+ cfg.instance_eval do
16
+ stderr_path err.path
17
+ GTL.synchronize do
18
+ app = Rack::Builder.new do
19
+ use Rack::Lint # ensure Lint passes
20
+ run(lambda do |env|
21
+ logger = env['rack.logger']
22
+ %w(SERVER_NAME SERVER_PORT rack.url_scheme).each do |k|
23
+ logger.info("#{k}=#{env[k].inspect}")
24
+ end
25
+ [ 200, [ %w(Content-Length 3), %w(Content Type text/plain)],
26
+ [ "OK\n" ] ]
27
+ end)
28
+ end
29
+ app(:rack, app.to_app) { listen "#{host}:#{port}" }
30
+ end
31
+ end
32
+ pid = mkserver(cfg)
33
+ Net::HTTP.start(host, port) do |http|
34
+ res = http.request(Net::HTTP::Get.new("/"))
35
+ assert_equal 200, res.code.to_i
36
+ assert_equal "OK\n", res.body
37
+ txt = File.read(err.path)
38
+ assert_match %r{\srack\.url_scheme=#{Regexp.escape('http'.inspect)}\s}s,
39
+ txt
40
+ assert_match %r{\sSERVER_NAME=#{Regexp.escape(host.inspect)}\s}s, txt
41
+ assert_match %r{\sSERVER_PORT=#{Regexp.escape(port.to_s.inspect)}\s}s, txt
42
+ end
43
+ err.truncate 0
44
+ err.rewind
45
+ c = TCPSocket.new(host, port)
46
+ c.write("GET / HTTP/1.0\r\nHost: example.com\r\n\r\n")
47
+ assert_match %r{\r\nOK\n\z}s, c.read
48
+ txt = File.read(err.path)
49
+ assert_match %r{\srack\.url_scheme=#{Regexp.escape('http'.inspect)}\s}s,
50
+ txt
51
+ assert_match %r{\sSERVER_NAME=#{Regexp.escape('example.com'.inspect)}\s}s,
52
+ txt
53
+ assert_match %r{\sSERVER_PORT=#{Regexp.escape('80'.inspect)}\s}s, txt
54
+ ensure
55
+ c.close if c
56
+ quit_wait(pid)
57
+ end
58
+ end
@@ -38,7 +38,6 @@ class TestServeStatic < Testcase
38
38
 
39
39
  # ensure sendfile works on Unix sockets
40
40
  s = UNIXSocket.new(sock)
41
- s.close_on_exec = true
42
41
  s.write "GET /COPYING\r\n\r\n"
43
42
  assert_equal gplv3, Timeout.timeout(30) { s.read }
44
43
  s.close
data/test/test_server.rb CHANGED
@@ -182,7 +182,6 @@ class TestServer < Testcase
182
182
  tmpdir = yahns_mktmpdir
183
183
  sock = "#{tmpdir}/sock"
184
184
  unix_srv = UNIXServer.new(sock)
185
- unix_srv.close_on_exec = true
186
185
  msgs = %w(ZZ zz)
187
186
  err = @err
188
187
  cfg = Yahns::Config.new
@@ -225,7 +224,7 @@ class TestServer < Testcase
225
224
  assert_equal 1, eggs.size
226
225
  assert_equal 1, eggs.first[1].instance_variable_get(:@worker_threads)
227
226
 
228
- pid = fork do
227
+ pid = xfork do
229
228
  bpipe[1].close
230
229
  ENV["YAHNS_FD"] = unix_srv.fileno.to_s
231
230
  unix_srv.autoclose = false
@@ -234,7 +233,6 @@ class TestServer < Testcase
234
233
  bpipe[0].close
235
234
  a = UNIXSocket.new(sock)
236
235
  b = UNIXSocket.new(sock)
237
- b.close_on_exec = a.close_on_exec = true
238
236
  a.write("GET /sleep HTTP/1.0\r\n\r\n")
239
237
  r = IO.select([a], nil, nil, 4)
240
238
  assert r, "nothing ready"
@@ -681,7 +679,6 @@ class TestServer < Testcase
681
679
  assert_equal "INFO HIHI\n", re.read
682
680
 
683
681
  c = UNIXSocket.new(sock)
684
- c.close_on_exec = true
685
682
  c.write "GET /\r\n\r\n"
686
683
  assert_equal c, c.wait(30)
687
684
  assert_equal "OK", c.read
data/test/test_ssl.rb CHANGED
@@ -41,6 +41,7 @@ AQjjxMXhwULlmuR/K+WwlaZPiLIBYalLAZQ7ZbOPeVkJ8ePao0eLAgEC
41
41
  def ssl_client(host, port)
42
42
  ctx = OpenSSL::SSL::SSLContext.new
43
43
  ctx.ciphers = "ADH"
44
+ ctx.security_level = 0
44
45
  s = TCPSocket.new(host, port)
45
46
  ssl = OpenSSL::SSL::SSLSocket.new(s, ctx)
46
47
  ssl.connect
@@ -51,6 +52,7 @@ AQjjxMXhwULlmuR/K+WwlaZPiLIBYalLAZQ7ZbOPeVkJ8ePao0eLAgEC
51
52
  def srv_ctx
52
53
  ctx = OpenSSL::SSL::SSLContext.new
53
54
  ctx.ciphers = "ADH"
55
+ ctx.security_level = 0
54
56
  ctx.tmp_dh_callback = proc { TEST_KEY_DH1024 }
55
57
  ctx
56
58
  end
@@ -12,9 +12,7 @@ class TestUnixSocket < Testcase
12
12
  def unix_socket(path)
13
13
  Timeout.timeout(30) do
14
14
  begin
15
- c = UNIXSocket.new(path)
16
- c.close_on_exec = true
17
- return c
15
+ return UNIXSocket.new(path)
18
16
  rescue Errno::ENOENT
19
17
  sleep 0.01
20
18
  retry
data/test/test_wbuf.rb CHANGED
@@ -19,7 +19,7 @@ class TestWbuf < Testcase
19
19
  end
20
20
 
21
21
  def socketpair
22
- KgioUS.pair.each { |io| io.close_on_exec = true }
22
+ KgioUS.pair
23
23
  end
24
24
 
25
25
  def test_wbuf
data/yahns.gemspec CHANGED
@@ -1,5 +1,5 @@
1
- # Copyright (C) 2013-2016 all contributors <yahns-public@yhbt.net>
2
- # License: GPL-3.0+ (https://www.gnu.org/licenses/gpl-3.0.txt)
1
+ # Copyright (C) all contributors <yahns-public@yhbt.net>
2
+ # License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
3
3
  Gem::Specification.new do |s|
4
4
  manifest = File.read('.gem-manifest').split(/\n/)
5
5
  s.name = %q{yahns}
@@ -7,12 +7,15 @@ Gem::Specification.new do |s|
7
7
  s.authors = ["yahns hackers"]
8
8
  s.summary = "sleepy, multi-threaded, non-blocking application server"
9
9
  s.description = File.read("README").split(/\n\n/)[1].strip
10
- s.email = %q{yahns@yhbt.net}
10
+ s.email = %q{yahns-public@yhbt.net}
11
11
  s.executables = manifest.grep(%r{\Abin/}).map { |s| s.sub(%r{\Abin/}, "") }
12
12
  s.files = manifest
13
+
14
+ s.required_ruby_version = '>= 2.0'
15
+
13
16
  s.add_dependency(%q<kgio>, '~> 2.9')
14
17
  s.add_dependency(%q<sleepy_penguin>, '~> 3.2')
15
- s.add_dependency(%q<unicorn>, '>= 4.6.3', '< 6.0')
18
+ s.add_dependency(%q<unicorn>, '>= 4.6.3', '< 7.0')
16
19
  # s.add_dependency(%q<kgio-sendfile>, '~> 1.2') # optional
17
20
 
18
21
  # minitest is standard in Ruby 2.0, 4.3 is packaged with Ruby 2.0.0,
@@ -25,6 +28,6 @@ Gem::Specification.new do |s|
25
28
  # for Rack::Utils::HeaderHash#each
26
29
  s.add_development_dependency(%q<rack>, '>= 1.1')
27
30
 
28
- s.homepage = 'https://yhbt.net/yahns/README'
31
+ s.homepage = 'https://yhbt.net/yahns.git/about/'
29
32
  s.licenses = "GPL-3.0+"
30
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yahns
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.1
4
+ version: 1.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yahns hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-14 00:00:00.000000000 Z
11
+ date: 2021-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kgio
@@ -47,7 +47,7 @@ dependencies:
47
47
  version: 4.6.3
48
48
  - - "<"
49
49
  - !ruby/object:Gem::Version
50
- version: '6.0'
50
+ version: '7.0'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
@@ -57,7 +57,7 @@ dependencies:
57
57
  version: 4.6.3
58
58
  - - "<"
59
59
  - !ruby/object:Gem::Version
60
- version: '6.0'
60
+ version: '7.0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: minitest
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -99,13 +99,14 @@ description: |-
99
99
  yahns currently hosts Rack/HTTP applications, but may eventually support
100
100
  other application types. Unlike some existing servers, yahns is
101
101
  extremely sensitive to fatal bugs in the applications it hosts.
102
- email: yahns@yhbt.net
102
+ email: yahns-public@yhbt.net
103
103
  executables:
104
104
  - yahns
105
105
  - yahns-rackup
106
106
  extensions: []
107
107
  extra_rdoc_files: []
108
108
  files:
109
+ - ".document"
109
110
  - ".gitattributes"
110
111
  - ".gitignore"
111
112
  - ".olddoc.yml"
@@ -127,9 +128,11 @@ files:
127
128
  - bin/yahns
128
129
  - bin/yahns-rackup
129
130
  - examples/README
131
+ - examples/https_proxy_pass.conf.rb
130
132
  - examples/init.sh
131
133
  - examples/logger_mp_safe.rb
132
134
  - examples/logrotate.conf
135
+ - examples/proxy_pass.ru
133
136
  - examples/yahns.socket
134
137
  - examples/yahns@.service
135
138
  - examples/yahns_multi.conf.rb
@@ -211,6 +214,7 @@ files:
211
214
  - test/test_proxy_pass.rb
212
215
  - test/test_proxy_pass_no_buffering.rb
213
216
  - test/test_rack.rb
217
+ - test/test_rack_env.rb
214
218
  - test/test_rack_hijack.rb
215
219
  - test/test_reopen_logs.rb
216
220
  - test/test_response.rb
@@ -222,7 +226,7 @@ files:
222
226
  - test/test_unix_socket.rb
223
227
  - test/test_wbuf.rb
224
228
  - yahns.gemspec
225
- homepage: https://yhbt.net/yahns/README
229
+ homepage: https://yhbt.net/yahns.git/about/
226
230
  licenses:
227
231
  - GPL-3.0+
228
232
  metadata: {}
@@ -234,15 +238,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
234
238
  requirements:
235
239
  - - ">="
236
240
  - !ruby/object:Gem::Version
237
- version: '0'
241
+ version: '2.0'
238
242
  required_rubygems_version: !ruby/object:Gem::Requirement
239
243
  requirements:
240
244
  - - ">="
241
245
  - !ruby/object:Gem::Version
242
246
  version: '0'
243
247
  requirements: []
244
- rubyforge_project:
245
- rubygems_version: 2.6.8
248
+ rubygems_version: 3.0.2
246
249
  signing_key:
247
250
  specification_version: 4
248
251
  summary: sleepy, multi-threaded, non-blocking application server