stripe-ruby/test/stripe/stripe_configuration_test.rb
Brandur 3e26570fcd
On config change, only clear connection managers for changed config (#971)
Follows up #968.

As a relic from when we had global configuration, anytime any config
value is changed on any client, we still clear all connection managers
everywhere on every thread, even though this is not necessary. This
means that we lose all open connections, etc.

Here, we make changes so that if a configuration is changed, we only
clear the configuration managers pertaining to that one particular
configuration, thus conserving resources globally.

Co-authored-by: Brandur <brandur@brandur.org>
2021-04-02 13:13:26 -07:00

160 lines
5.3 KiB
Ruby

# frozen_string_literal: true
require ::File.expand_path("../test_helper", __dir__)
module Stripe
class StripeConfigurationTest < Test::Unit::TestCase
context ".setup" do
should "initialize a new configuration with defaults" do
config = Stripe::StripeConfiguration.setup
assert_equal Stripe::DEFAULT_CA_BUNDLE_PATH, config.ca_bundle_path
assert_equal true, config.enable_telemetry
assert_equal true, config.verify_ssl_certs
assert_equal 2, config.max_network_retry_delay
assert_equal 0.5, config.initial_network_retry_delay
assert_equal 0, config.max_network_retries
assert_equal 30, config.open_timeout
assert_equal 80, config.read_timeout
assert_equal 30, config.write_timeout
assert_equal "https://api.stripe.com", config.api_base
assert_equal "https://connect.stripe.com", config.connect_base
assert_equal "https://files.stripe.com", config.uploads_base
assert_equal nil, config.api_version
end
should "allow for overrides when a block is passed" do
config = Stripe::StripeConfiguration.setup do |c|
c.open_timeout = 100
c.read_timeout = 100
c.write_timeout = 100 if WRITE_TIMEOUT_SUPPORTED
end
assert_equal 100, config.open_timeout
assert_equal 100, config.read_timeout
assert_equal 100, config.write_timeout if WRITE_TIMEOUT_SUPPORTED
end
end
context "#reverse_duplicate_merge" do
should "return a duplicate object with overrides" do
config = Stripe::StripeConfiguration.setup do |c|
c.open_timeout = 100
end
duped_config = config.reverse_duplicate_merge(read_timeout: 500, api_version: "2018-08-02")
assert_equal config.open_timeout, duped_config.open_timeout
assert_equal 500, duped_config.read_timeout
end
end
context "#max_network_retries=" do
should "coerce the option into an integer" do
config = Stripe::StripeConfiguration.setup
config.max_network_retries = "10"
assert_equal 10, config.max_network_retries
end
end
context "#max_network_retry_delay=" do
should "coerce the option into an integer" do
config = Stripe::StripeConfiguration.setup
config.max_network_retry_delay = "10"
assert_equal 10, config.max_network_retry_delay
end
end
context "#initial_network_retry_delay=" do
should "coerce the option into an integer" do
config = Stripe::StripeConfiguration.setup
config.initial_network_retry_delay = "10"
assert_equal 10, config.initial_network_retry_delay
end
end
context "#log_level=" do
should "be backwards compatible with old values" do
config = Stripe::StripeConfiguration.setup
config.log_level = "debug"
assert_equal Stripe::LEVEL_DEBUG, config.log_level
config.log_level = "info"
assert_equal Stripe::LEVEL_INFO, config.log_level
end
should "raise an error if the value isn't valid" do
config = Stripe::StripeConfiguration.setup
assert_raises ArgumentError do
config.log_level = "Foo"
end
end
end
context "options that require all connection managers to be cleared" do
should "clear when setting allow ca_bundle_path" do
config = Stripe::StripeConfiguration.setup
StripeClient.expects(:clear_all_connection_managers).with(config: config)
config.ca_bundle_path = "/path/to/ca/bundle"
end
should "clear when setting open timeout" do
config = Stripe::StripeConfiguration.setup
StripeClient.expects(:clear_all_connection_managers).with(config: config)
config.open_timeout = 10
end
should "clear when setting read timeout" do
config = Stripe::StripeConfiguration.setup
StripeClient.expects(:clear_all_connection_managers).with(config: config)
config.read_timeout = 10
end
should "clear when setting uploads_base" do
config = Stripe::StripeConfiguration.setup
StripeClient.expects(:clear_all_connection_managers).with(config: config)
config.uploads_base = "https://other.stripe.com"
end
should "clear when setting api_base to be configured" do
config = Stripe::StripeConfiguration.setup
StripeClient.expects(:clear_all_connection_managers).with(config: config)
config.api_base = "https://other.stripe.com"
end
should "clear when setting connect_base" do
config = Stripe::StripeConfiguration.setup
StripeClient.expects(:clear_all_connection_managers).with(config: config)
config.connect_base = "https://other.stripe.com"
end
should "clear when setting verify_ssl_certs" do
config = Stripe::StripeConfiguration.setup
StripeClient.expects(:clear_all_connection_managers).with(config: config)
config.verify_ssl_certs = false
end
end
context "#key" do
should "generate the same key when values are identicial" do
assert_equal StripeConfiguration.setup.key, StripeConfiguration.setup.key
custom_config = StripeConfiguration.setup { |c| c.open_timeout = 1000 }
refute_equal StripeConfiguration.setup.key, custom_config.key
end
end
end
end