I had a deeper look. I tried to convert the test suite to using Rack3
(and rackup). I pushed my changes to branch 'rack3'.
But then I run into the following test failures:
1) Ethon::Easy::Http::Custom#setup when body when multipart when requesting
submits a body
Failure/Error: expect(easy.response_body).to match('"body":".+"')
expected
"{\"CONTENT_LENGTH\":\"5029\",\"CONTENT_TYPE\":\"multipart/form-data;
boundary=----------------------...ackup::Handler::WEBrick::Input:0x00007ff04c22a1c0>\",\"sinatra.route\":\"PURGE
/**\",\"body\":\"\"}" to match "\"body\":\".+\""
# ./spec/ethon/easy/http/custom_spec.rb:83:in `block (6 levels) in <top
(required)>'
2) Ethon::Easy::Http::Custom#setup when body when not multipart when
requesting submits a body
Failure/Error: expect(easy.response_body).to match('"body":"a=1%26b%3D2"')
expected
"{\"CONTENT_LENGTH\":\"11\",\"CONTENT_TYPE\":\"application/x-www-form-urlencoded\",\"GATEWAY_INTERFAC...ackup::Handler::WEBrick::Input:0x00007ff04c0f4cd8>\",\"sinatra.route\":\"PURGE
/**\",\"body\":\"\"}" to match "\"body\":\"a=1%26b%3D2\""
# ./spec/ethon/easy/http/custom_spec.rb:126:in `block (6 levels) in <top
(required)>'
3) Ethon::Easy::Http::Custom#setup when body when string when requesting
sends string
Failure/Error: expect(easy.response_body).to include('"body":"{a: 1}"')
expected
"{\"CONTENT_LENGTH\":\"6\",\"CONTENT_TYPE\":\"application/x-www-form-urlencoded\",\"GATEWAY_INTERFACE...ackup::Handler::WEBrick::Input:0x00007ff04dd58230>\",\"sinatra.route\":\"PURGE
/**\",\"body\":\"\"}" to include "\"body\":\"{a: 1}\""
# ./spec/ethon/easy/http/custom_spec.rb:150:in `block (6 levels) in <top
(required)>'
4) Ethon::Easy::Http::Custom#setup when params and body when requesting body
contains form
Failure/Error: expect(easy.response_body).to include('"body":"a=1"')
expected
"{\"CONTENT_LENGTH\":\"3\",\"CONTENT_TYPE\":\"application/x-www-form-urlencoded\",\"GATEWAY_INTERFACE...ackup::Handler::WEBrick::Input:0x00007ff04c75ed30>\",\"sinatra.route\":\"PURGE
/**\",\"body\":\"\"}" to include "\"body\":\"a=1\""
# ./spec/ethon/easy/http/custom_spec.rb:172:in `block (5 levels) in <top
(required)>'
5) Ethon::Easy::Http::Post#setup when body when multipart when requesting
submits a body
Failure/Error: expect(easy.response_body).to match('"body":".+"')
expected
"{\"CONTENT_LENGTH\":\"8779\",\"CONTENT_TYPE\":\"multipart/form-data;
boundary=----------------------...Rackup::Handler::WEBrick::Input:0x00007ff04dd28170>\",\"sinatra.route\":\"POST
/**\",\"body\":\"\"}" to match "\"body\":\".+\""
# ./spec/ethon/easy/http/post_spec.rb:183:in `block (6 levels) in <top
(required)>'
6) Ethon::Easy::Http::Post#setup when body when not multipart when requesting
submits a body
Failure/Error: expect(easy.response_body).to match('"body":"a=1%26b%3D2"')
expected
"{\"CONTENT_LENGTH\":\"11\",\"CONTENT_TYPE\":\"application/x-www-form-urlencoded\",\"GATEWAY_INTERFAC...Rackup::Handler::WEBrick::Input:0x00007ff04c5c2d78>\",\"sinatra.route\":\"POST
/**\",\"body\":\"\"}" to match "\"body\":\"a=1%26b%3D2\""
# ./spec/ethon/easy/http/post_spec.rb:226:in `block (6 levels) in <top
(required)>'
7) Ethon::Easy::Http::Post#setup when body when string when requesting sends
string
Failure/Error: expect(easy.response_body).to include('"body":"{a: 1}"')
expected
"{\"CONTENT_LENGTH\":\"6\",\"CONTENT_TYPE\":\"application/x-www-form-urlencoded\",\"GATEWAY_INTERFACE...Rackup::Handler::WEBrick::Input:0x00007ff04c22c448>\",\"sinatra.route\":\"POST
/**\",\"body\":\"\"}" to include "\"body\":\"{a: 1}\""
# ./spec/ethon/easy/http/post_spec.rb:250:in `block (6 levels) in <top
(required)>'
8) Ethon::Easy::Http::Post#setup when body when binary with null bytes when
requesting sends binary data
Failure/Error: expect(easy.response_body).to
include('"body":"\\u0001\\u0000\\u0001"')
expected
"{\"CONTENT_LENGTH\":\"3\",\"CONTENT_TYPE\":\"application/x-www-form-urlencoded\",\"GATEWAY_INTERFACE...Rackup::Handler::WEBrick::Input:0x00007ff04c364bd0>\",\"sinatra.route\":\"POST
/**\",\"body\":\"\"}" to include "\"body\":\"\\u0001\\u0000\\u0001\""
# ./spec/ethon/easy/http/post_spec.rb:270:in `block (6 levels) in <top
(required)>'
9) Ethon::Easy::Http::Post#setup when params and body when requesting body
contains form
Failure/Error: expect(easy.response_body).to include('"body":"a=1"')
expected
"{\"CONTENT_LENGTH\":\"3\",\"CONTENT_TYPE\":\"application/x-www-form-urlencoded\",\"GATEWAY_INTERFACE...Rackup::Handler::WEBrick::Input:0x00007ff04c0eabc0>\",\"sinatra.route\":\"POST
/**\",\"body\":\"\"}" to include "\"body\":\"a=1\""
# ./spec/ethon/easy/http/post_spec.rb:312:in `block (5 levels) in <top
(required)>'
Lucas