test/stripe/stripe_client_test.rb in stripe-5.8.0 vs test/stripe/stripe_client_test.rb in stripe-5.9.0
- old
+ new
@@ -1142,9 +1142,79 @@
trace_payload = JSON.parse(trace_metrics_header)
assert(trace_payload["last_request_metrics"]["request_id"] == "req_123")
assert(!trace_payload["last_request_metrics"]["request_duration_ms"].nil?)
end
end
+
+ context "instrumentation" do
+ teardown do
+ Stripe::Instrumentation.unsubscribe(:request, :test)
+ end
+
+ should "notify a subscriber of a successful HTTP request" do
+ events = []
+ Stripe::Instrumentation.subscribe(:request, :test) { |event| events << event }
+
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
+ .to_return(body: JSON.generate(object: "charge"))
+ Stripe::Charge.list
+
+ assert_equal(1, events.size)
+ event = events.first
+ assert_equal(:get, event.method)
+ assert_equal("/v1/charges", event.path)
+ assert_equal(200, event.http_status)
+ assert(event.duration.positive?)
+ assert_equal(0, event.num_retries)
+ end
+
+ should "notify a subscriber of a StripeError" do
+ events = []
+ Stripe::Instrumentation.subscribe(:request, :test) { |event| events << event }
+
+ error = {
+ code: "code",
+ message: "message",
+ param: "param",
+ type: "type",
+ }
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
+ .to_return(
+ body: JSON.generate(error: error),
+ status: 500
+ )
+ assert_raises(Stripe::APIError) do
+ Stripe::Charge.list
+ end
+
+ assert_equal(1, events.size)
+ event = events.first
+ assert_equal(:get, event.method)
+ assert_equal("/v1/charges", event.path)
+ assert_equal(500, event.http_status)
+ assert(event.duration.positive?)
+ assert_equal(0, event.num_retries)
+ end
+
+ should "notify a subscriber of a network error" do
+ events = []
+ Stripe::Instrumentation.subscribe(:request, :test) { |event| events << event }
+
+ stub_request(:get, "#{Stripe.api_base}/v1/charges")
+ .to_raise(Net::OpenTimeout)
+ assert_raises(Stripe::APIConnectionError) do
+ Stripe::Charge.list
+ end
+
+ assert_equal(1, events.size)
+ event = events.first
+ assert_equal(:get, event.method)
+ assert_equal("/v1/charges", event.path)
+ assert_nil(event.http_status)
+ assert(event.duration.positive?)
+ assert_equal(0, event.num_retries)
+ end
+ end
end
class SystemProfilerTest < Test::Unit::TestCase
context "#uname" do
should "run without failure" do