Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions config/settings.yml.example
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@
#:foreman_ssl_cert: ssl/certs/fqdn.pem
#:foreman_ssl_key: ssl/private_keys/fqdn.pem

# Timeout in seconds for HTTP requests from smart-proxy to Foreman (e.g. POST /register).
# Defaults to Ruby's Net::HTTP read timeout (60s) when unset. Consider raising this
# above your client's timeout to avoid cutting connections the client is still waiting on.
# subscription-manager's default server_timeout is 180s, so a value above that is recommended.
#:foreman_request_timeout: 60

# host and ports configuration
# an array of interfaces to bind ports to (possible values: *, localhost, 0.0.0.0)
#:bind_host: ['*']
Expand Down
3 changes: 3 additions & 0 deletions lib/proxy/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ def http_init
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
if Proxy::SETTINGS.foreman_request_timeout.to_i > 0
http.read_timeout = Proxy::SETTINGS.foreman_request_timeout.to_i
end

if http.use_ssl?
ca_file = Proxy::SETTINGS.foreman_ssl_ca || Proxy::SETTINGS.ssl_ca_file
Expand Down
12 changes: 12 additions & 0 deletions test/request_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,18 @@ def test_post
assert_equal("body", result.body)
end

def test_read_timeout_applied_when_foreman_request_timeout_configured
Proxy::SETTINGS.stubs(:foreman_request_timeout).returns(120)
request = Proxy::HttpRequest::ForemanRequest.new
assert_equal 120, request.http.read_timeout
end

def test_read_timeout_uses_default_when_foreman_request_timeout_not_configured
default_timeout = Net::HTTP.new('example.com').read_timeout
request = Proxy::HttpRequest::ForemanRequest.new
assert_equal default_timeout, request.http.read_timeout
end

def test_post_with_nested_params
stub_request(:post, @foreman_url + '/register?activation_keys%5B%5D=ac_AlmaLinux8&location_id=2&organization_id=1&repo_data%5B%5D%5Brepo%5D=repo1&repo_data%5B%5D%5Brepo_gpg_key_url%5D=key1&repo_data%5B%5D%5Brepo%5D=repo2&repo_data%5B%5D%5Brepo_gpg_key_url%5D=key2&update_packages=false')
.to_return(status: 200, body: "body", headers: {h1: "header"})
Expand Down
Loading