HoneyryderChuck e1ccae25f9 added a global store for domains not supporting 100-continue
it's a pretty naive implementation, as it grows unbounded, and isn't
thread safe, mostly due to negligent cost of fake fetch.
2021-01-12 23:53:18 +00:00

88 lines
3.3 KiB
Ruby

# frozen_string_literal: true
module Requests
module Plugins
module Expect
def test_plugin_expect_100_form_params
uri = build_uri("/post")
response = HTTPX.plugin(:expect).post(uri, form: { "foo" => "bar" })
verify_status(response, 200)
body = json_body(response)
verify_header(body["headers"], "Content-Type", "application/x-www-form-urlencoded")
verify_header(body["headers"], "Expect", "100-continue")
verify_uploaded(body, "form", "foo" => "bar")
end
def test_plugin_expect_100_with_delay_form_params
# run this only for http/1.1 mode, as this is a local test server
return unless origin.start_with?("http://")
server = Expect100Server.new
th = Thread.new { server.start }
begin
http = HTTPX.plugin(:expect)
uri = build_uri("/delay?delay=4", server.origin)
response = http.post(uri, body: "helloworld")
verify_status(response, 200)
body = response.body.to_s
assert body == "echo: helloworld"
verify_header(response.instance_variable_get(:@request).headers, "expect", "100-continue")
next_request = http.build_request(:post, build_uri("/", server.origin), body: "helloworld")
verify_header(next_request.headers, "expect", "100-continue")
ensure
server.shutdown
th.join
end
end
def test_plugin_expect_100_form_params_under_threshold
uri = build_uri("/post")
session = HTTPX.plugin(:expect, expect_threshold_size: 4)
response = session.post(uri, body: "a" * 3)
verify_status(response, 200)
body = json_body(response)
verify_no_header(body["headers"], "Expect")
response = session.post(uri, body: "a" * 5)
verify_status(response, 200)
body = json_body(response)
verify_header(body["headers"], "Expect", "100-continue")
end
def test_plugin_expect_100_send_body_after_delay
# run this only for http/1.1 mode, as this is a local test server
return unless origin.start_with?("http://")
server = Expect100Server.new
th = Thread.new { server.start }
begin
http = HTTPX.plugin(:expect)
uri = build_uri("/no-expect", server.origin)
response = http.post(uri, body: "helloworld")
verify_status(response, 200)
body = response.body.to_s
assert body == "echo: helloworld"
verify_no_header(response.instance_variable_get(:@request).headers, "expect")
next_request = http.build_request(:post, build_uri("/", server.origin), body: "helloworld")
verify_no_header(next_request.headers, "expect")
ensure
server.shutdown
th.join
end
end
def test_plugin_expect_100_form_params_417
uri = build_uri("/status/417")
response = HTTPX.plugin(:expect).post(uri, form: { "foo" => "bar" })
# we can't really test that the request would be successful without it, however we can
# test whether the header has been removed from the request.
verify_status(response, 417)
verify_no_header(response.instance_variable_get(:@request).headers, "expect")
end
end
end
end