Skip to content

Commit

Permalink
patch Core::Telemetry::Http::Adapters::Net to avoid WebMock automatic…
Browse files Browse the repository at this point in the history
…ally
  • Loading branch information
anmarchenko committed Jul 24, 2024
1 parent 6c65eb0 commit 4e78d3d
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 13 deletions.
6 changes: 6 additions & 0 deletions lib/datadog/ci/configuration/components.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

require "datadog/core/environment/identity"
require "datadog/core/telemetry/ext"
require "datadog/core/telemetry/http/adapters/net"

require_relative "../ext/settings"
require_relative "../git/tree_uploader"
Expand All @@ -14,6 +15,7 @@
require_relative "../test_visibility/serializers/factories/test_level"
require_relative "../test_visibility/serializers/factories/test_suite_level"
require_relative "../test_visibility/transport"
require_relative "../transport/adapters/telemetry_webmock_safe_adapter"
require_relative "../transport/api/builder"
require_relative "../transport/remote_settings_api"
require_relative "../utils/identity"
Expand Down Expand Up @@ -262,8 +264,12 @@ def configure_telemetry(settings)
# patch gem's identity to report datadog-ci library version instead of datadog gem version
Core::Environment::Identity.include(CI::Utils::Identity)

# patch gem's telemetry transport layer to use Net::HTTP instead of WebMock's Net::HTTP
Core::Telemetry::Http::Adapters::Net.include(CI::Transport::Adapters::TelemetryWebmockSafeAdapter)

# REMOVE BEFORE SUBMITTING FOR REVIEW
# settings.telemetry.agentless_enabled = true
# settings.telemetry.shutdown_timeout_seconds = 60
end

def timecop?
Expand Down
11 changes: 2 additions & 9 deletions lib/datadog/ci/transport/adapters/net.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
require "datadog/core/transport/response"
require "datadog/core/transport/ext"

require_relative "net_http_client"
require_relative "../gzip"
require_relative "../../ext/transport"

Expand All @@ -26,7 +27,7 @@ def initialize(hostname:, port:, ssl:, timeout_seconds:)
end

def open(&block)
req = net_http_client.new(hostname, port)
req = NetHttpClient.original_net_http.new(hostname, port)

req.use_ssl = ssl
req.open_timeout = req.read_timeout = timeout
Expand Down Expand Up @@ -123,14 +124,6 @@ def inspect
"#{super}, http_response:#{http_response}"
end
end

private

def net_http_client
return ::Net::HTTP unless defined?(WebMock::HttpLibAdapters::NetHttpAdapter::OriginalNetHTTP)

WebMock::HttpLibAdapters::NetHttpAdapter::OriginalNetHTTP
end
end
end
end
Expand Down
17 changes: 17 additions & 0 deletions lib/datadog/ci/transport/adapters/net_http_client.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# frozen_string_literal: true

module Datadog
module CI
module Transport
module Adapters
module NetHttpClient
def self.original_net_http
return ::Net::HTTP unless defined?(WebMock::HttpLibAdapters::NetHttpAdapter::OriginalNetHTTP)

WebMock::HttpLibAdapters::NetHttpAdapter::OriginalNetHTTP
end
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# frozen_string_literal: true

require_relative "net_http_client"

module Datadog
module CI
module Transport
module Adapters
module TelemetryWebmockSafeAdapter
def self.included(base)
base.prepend(InstanceMethods)
end

module InstanceMethods
def open(&block)
req = NetHttpClient.original_net_http.new(@hostname, @port)

req.use_ssl = @ssl
req.open_timeout = req.read_timeout = @timeout

req.start(&block)
end
end
end
end
end
end
end
4 changes: 0 additions & 4 deletions sig/datadog/ci/transport/adapters/net.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,6 @@ module Datadog

def inspect: () -> ::String
end

private

def net_http_client: () -> singleton(::Net::HTTP)
end
end
end
Expand Down
11 changes: 11 additions & 0 deletions sig/datadog/ci/transport/adapters/net_http_client.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module Datadog
module CI
module Transport
module Adapters
module NetHttpClient
def self.original_net_http: () -> singleton(Net::HTTP)
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module Datadog
module CI
module Transport
module Adapters
module TelemetryWebmockSafeAdapter
def self.included: (untyped base) -> untyped

module InstanceMethods : Datadog::Core::Telemetry::Http::Adapters::Net
def open: () { (?) -> untyped } -> untyped
end
end
end
end
end
end

0 comments on commit 4e78d3d

Please sign in to comment.