mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-12-06 00:00:28 -05:00
adding test for integration of datadog on top of faraday backed by httpx
This commit is contained in:
parent
5b59011a89
commit
016ed04f61
@ -2,6 +2,11 @@
|
||||
|
||||
module DatadogHelpers
|
||||
DATADOG_VERSION = defined?(DDTrace) ? DDTrace::VERSION : Datadog::VERSION
|
||||
ERROR_TAG = if Gem::Version.new(DATADOG_VERSION::STRING) >= Gem::Version.new("1.8.0")
|
||||
"error.message"
|
||||
else
|
||||
"error.msg"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@ -19,21 +24,10 @@ module DatadogHelpers
|
||||
assert span.get_tag("http.method") == verb
|
||||
assert span.get_tag("http.url") == uri.path
|
||||
|
||||
error_tag = if Gem::Version.new(DATADOG_VERSION::STRING) >= Gem::Version.new("1.8.0")
|
||||
"error.message"
|
||||
else
|
||||
"error.msg"
|
||||
end
|
||||
|
||||
if status && status >= 400
|
||||
assert span.get_tag("http.status_code") == status.to_s
|
||||
assert span.get_tag("error.type") == error # "Error #{status}"
|
||||
# assert !span.get_tag(error_tag).nil?
|
||||
assert span.status == 1
|
||||
verify_http_error_span(span, status, error)
|
||||
elsif error
|
||||
assert span.get_tag("error.type") == "HTTPX::NativeResolveError"
|
||||
assert !span.get_tag(error_tag).nil?
|
||||
assert span.status == 1
|
||||
verify_error_span(span)
|
||||
else
|
||||
assert span.status.zero?
|
||||
assert span.get_tag("http.status_code") == status.to_s
|
||||
@ -42,6 +36,19 @@ module DatadogHelpers
|
||||
end
|
||||
end
|
||||
|
||||
def verify_http_error_span(span, status, error)
|
||||
assert span.get_tag("http.status_code") == status.to_s
|
||||
assert span.get_tag("error.type") == error
|
||||
assert !span.get_tag(ERROR_TAG).nil?
|
||||
assert span.status == 1
|
||||
end
|
||||
|
||||
def verify_error_span(span)
|
||||
assert span.get_tag("error.type") == "HTTPX::NativeResolveError"
|
||||
assert !span.get_tag(ERROR_TAG).nil?
|
||||
assert span.status == 1
|
||||
end
|
||||
|
||||
def verify_no_distributed_headers(request_headers)
|
||||
assert !request_headers.key?("x-datadog-parent-id")
|
||||
assert !request_headers.key?("x-datadog-trace-id")
|
||||
|
||||
@ -208,6 +208,7 @@ class DatadogTest < Minitest::Test
|
||||
def teardown
|
||||
super
|
||||
Datadog.registry[:httpx].reset_configuration!
|
||||
Datadog.configuration.tracing[:httpx].enabled = false
|
||||
end
|
||||
|
||||
def datadog_service_name
|
||||
|
||||
188
integration_tests/faraday_datadog_test.rb
Normal file
188
integration_tests/faraday_datadog_test.rb
Normal file
@ -0,0 +1,188 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
begin
|
||||
# upcoming 2.0
|
||||
require "datadog"
|
||||
rescue LoadError
|
||||
require "ddtrace"
|
||||
end
|
||||
|
||||
require "test_helper"
|
||||
require "support/http_helpers"
|
||||
require "httpx/adapters/faraday"
|
||||
require_relative "datadog_helpers"
|
||||
|
||||
DATADOG_VERSION = defined?(DDTrace) ? DDTrace::VERSION : Datadog::VERSION
|
||||
|
||||
class FaradayDatadogTest < Minitest::Test
|
||||
include HTTPHelpers
|
||||
include DatadogHelpers
|
||||
include FaradayHelpers
|
||||
|
||||
def test_faraday_datadog_successful_get_request
|
||||
set_datadog
|
||||
uri = URI(build_uri("/status/200"))
|
||||
|
||||
response = faraday_connection.get(uri)
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
verify_instrumented_request(response.status, verb: "GET", uri: uri)
|
||||
verify_distributed_headers(request_headers(response))
|
||||
end
|
||||
|
||||
def test_faraday_datadog_successful_post_request
|
||||
set_datadog
|
||||
uri = URI(build_uri("/status/200"))
|
||||
|
||||
response = faraday_connection.post(uri, "bla")
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
verify_instrumented_request(response.status, verb: "POST", uri: uri)
|
||||
verify_distributed_headers(request_headers(response))
|
||||
end
|
||||
|
||||
def test_faraday_datadog_server_error_request
|
||||
set_datadog
|
||||
uri = URI(build_uri("/status/500"))
|
||||
|
||||
ex = assert_raises(Faraday::ServerError) { faraday_connection.get(uri) }
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
verify_instrumented_request(ex.response[:status], verb: "GET", uri: uri, error: "Error 500")
|
||||
|
||||
verify_distributed_headers(request_headers(ex.response))
|
||||
end
|
||||
|
||||
def test_faraday_datadog_client_error_request
|
||||
set_datadog
|
||||
uri = URI(build_uri("/status/404"))
|
||||
|
||||
ex = assert_raises(Faraday::ResourceNotFound) { faraday_connection.get(uri) }
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
verify_instrumented_request(ex.response[:status], verb: "GET", uri: uri, error: "Error 404")
|
||||
verify_distributed_headers(request_headers(ex.response))
|
||||
end
|
||||
|
||||
def test_faraday_datadog_some_other_error
|
||||
set_datadog
|
||||
uri = URI("http://unexisting/")
|
||||
|
||||
assert_raises(HTTPX::NativeResolveError) { faraday_connection.get(uri) }
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
verify_instrumented_request(nil, verb: "GET", uri: uri, error: "HTTPX::NativeResolveError")
|
||||
end
|
||||
|
||||
def test_faraday_datadog_host_config
|
||||
uri = URI(build_uri("/status/200"))
|
||||
set_datadog(describe: /#{uri.host}/) do |http|
|
||||
http.service_name = "httpbin"
|
||||
http.split_by_domain = false
|
||||
end
|
||||
|
||||
response = faraday_connection.get(uri)
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
verify_instrumented_request(response.status, service: "httpbin", verb: "GET", uri: uri)
|
||||
verify_distributed_headers(request_headers(response))
|
||||
end
|
||||
|
||||
def test_faraday_datadog_split_by_domain
|
||||
uri = URI(build_uri("/status/200"))
|
||||
set_datadog do |http|
|
||||
http.split_by_domain = true
|
||||
end
|
||||
|
||||
response = faraday_connection.get(uri)
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
verify_instrumented_request(response.status, service: uri.host, verb: "GET", uri: uri)
|
||||
verify_distributed_headers(request_headers(response))
|
||||
end
|
||||
|
||||
def test_faraday_datadog_distributed_headers_disabled
|
||||
set_datadog(distributed_tracing: false)
|
||||
uri = URI(build_uri("/status/200"))
|
||||
|
||||
sampling_priority = 10
|
||||
response = trace_with_sampling_priority(sampling_priority) do
|
||||
faraday_connection.get(uri)
|
||||
end
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
span = fetch_spans.last
|
||||
verify_instrumented_request(response.status, span: span, verb: "GET", uri: uri)
|
||||
verify_no_distributed_headers(request_headers(response))
|
||||
verify_analytics_headers(span)
|
||||
end
|
||||
|
||||
def test_faraday_datadog_distributed_headers_sampling_priority
|
||||
set_datadog
|
||||
uri = URI(build_uri("/status/200"))
|
||||
|
||||
sampling_priority = 10
|
||||
response = trace_with_sampling_priority(sampling_priority) do
|
||||
faraday_connection.get(uri)
|
||||
end
|
||||
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
span = fetch_spans.last
|
||||
verify_instrumented_request(response.status, span: span, verb: "GET", uri: uri)
|
||||
verify_distributed_headers(request_headers(response), span: span, sampling_priority: sampling_priority)
|
||||
verify_analytics_headers(span)
|
||||
end
|
||||
|
||||
def test_faraday_datadog_analytics_enabled
|
||||
set_datadog(analytics_enabled: true)
|
||||
uri = URI(build_uri("/status/200"))
|
||||
|
||||
response = faraday_connection.get(uri)
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
span = fetch_spans.last
|
||||
verify_instrumented_request(response.status, span: span, verb: "GET", uri: uri)
|
||||
verify_analytics_headers(span, sample_rate: 1.0)
|
||||
end
|
||||
|
||||
def test_faraday_datadog_analytics_sample_rate
|
||||
set_datadog(analytics_enabled: true, analytics_sample_rate: 0.5)
|
||||
uri = URI(build_uri("/status/200"))
|
||||
|
||||
response = faraday_connection.get(uri)
|
||||
verify_status(response, 200)
|
||||
|
||||
assert !fetch_spans.empty?, "expected to have spans"
|
||||
span = fetch_spans.last
|
||||
verify_instrumented_request(response.status, span: span, verb: "GET", uri: uri)
|
||||
verify_analytics_headers(span, sample_rate: 0.5)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def setup
|
||||
super
|
||||
Datadog.registry[:faraday].reset_configuration!
|
||||
end
|
||||
|
||||
def teardown
|
||||
super
|
||||
Datadog.registry[:faraday].reset_configuration!
|
||||
end
|
||||
|
||||
def datadog_service_name
|
||||
:faraday
|
||||
end
|
||||
|
||||
def origin(orig = httpbin)
|
||||
"http://#{orig}"
|
||||
end
|
||||
end
|
||||
@ -36,6 +36,17 @@ module FaradayHelpers
|
||||
end.transform_keys(&:downcase)
|
||||
end
|
||||
|
||||
def verify_http_error_span(span, status, error)
|
||||
assert span.get_tag("http.status_code") == status.to_s
|
||||
|
||||
if status >= 500 || Gem::Version.new(DatadogHelpers::DATADOG_VERSION::STRING) >= Gem::Version.new("2.0.0")
|
||||
assert span.get_tag("error.type") == error
|
||||
assert span.status == 1
|
||||
else
|
||||
assert span.status.zero?
|
||||
end
|
||||
end
|
||||
|
||||
def teardown
|
||||
super
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user