port test/unit/test_ccc.rb to Perl 5
[unicorn.git] / t / preread_input.ru
blob5f68fe98bf261e79cde2f1769710541510837e97
1 #\-E none
2 # frozen_string_literal: false
3 require 'digest/md5'
4 require 'unicorn/preread_input'
5 use Unicorn::PrereadInput
6 nr = 0
7 run lambda { |env|
8   $stderr.write "app dispatch: #{nr += 1}\n"
9   input = env["rack.input"]
10   dig = Digest::MD5.new
11   if buf = input.read(16384)
12     begin
13       dig.update(buf)
14     end while input.read(16384, buf)
15     buf.clear # remove this call if Ruby ever gets escape analysis
16   end
17   if env['HTTP_TRAILER'] =~ /\bContent-MD5\b/i
18     cmd5_b64 = env['HTTP_CONTENT_MD5'] or return [500, {}, ['No Content-MD5']]
19     cmd5_bin = cmd5_b64.unpack('m')[0]
20     return [500, {}, [ cmd5_b64 ] ] if cmd5_bin != dig.digest
21   end
22   [ 200, {}, [ dig.hexdigest ] ]