Skip to content

Commit 1f6a7c5

Browse files
authored
DEBUG-3700 UDS HTTP server helper for test suite (#4636)
1 parent deadb14 commit 1f6a7c5

File tree

3 files changed

+28
-47
lines changed

3 files changed

+28
-47
lines changed

spec/datadog/core/crashtracking/component_spec.rb

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
require 'webrick'
55
require 'fiddle'
66

7-
# https://github.com/rubocop/rubocop-rspec/issues/2078
8-
# rubocop:disable RSpec/ScatteredLet
9-
107
RSpec.describe Datadog::Core::Crashtracking::Component, skip: !LibdatadogHelpers.supported? do
118
let(:logger) { Logger.new($stdout) }
129

@@ -226,25 +223,9 @@
226223
end
227224

228225
context 'via unix domain socket' do
229-
let(:temporary_directory) { Dir.mktmpdir }
230-
let(:socket_path) { "#{temporary_directory}/rspec_unix_domain_socket" }
231-
let(:unix_domain_socket) { UNIXServer.new(socket_path) } # Closing the socket is handled by webrick
232-
define_http_server do |http_server|
233-
http_server.listeners << unix_domain_socket
226+
define_http_server_uds do |http_server|
234227
http_server.mount_proc('/', &server_proc)
235228
end
236-
let(:http_server_options) do
237-
{
238-
DoNotListen: true,
239-
}
240-
end
241-
let(:agent_base_url) { "unix://#{socket_path}" }
242-
243-
after do
244-
FileUtils.remove_entry(temporary_directory)
245-
rescue Errno::ENOENT => _e
246-
# Do nothing, it's ok
247-
end
248229

249230
it 'reports crashes via uds when app crashes with fiddle' do
250231
fork_expectations = proc do |status:, stdout:, stderr:|
@@ -253,7 +234,7 @@
253234
end
254235

255236
expect_in_fork(fork_expectations: fork_expectations) do
256-
crash_tracker = build_crashtracker(agent_base_url: agent_base_url)
237+
crash_tracker = build_crashtracker(agent_base_url: uds_agent_base_url)
257238
crash_tracker.start
258239

259240
Fiddle.free(42)
@@ -317,5 +298,3 @@ def tear_down!
317298
described_class._native_stop
318299
end
319300
end
320-
321-
# rubocop:enable RSpec/ScatteredLet

spec/datadog/profiling/http_transport_spec.rb

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
require "socket"
88
require "webrick"
99

10-
# https://github.com/rubocop/rubocop-rspec/issues/2078
11-
# rubocop:disable RSpec/ScatteredLet
12-
1310
# Design note for this class's specs: from the Ruby code side, we're treating the `_native_` methods as an API
1411
# between the Ruby code and the native methods, and thus in this class we have a bunch of tests to make sure the
1512
# native methods are invoked correctly.
@@ -391,26 +388,11 @@
391388
end
392389

393390
context "via unix domain socket" do
394-
let(:temporary_directory) { Dir.mktmpdir }
395-
let(:socket_path) { "#{temporary_directory}/rspec_unix_domain_socket" }
396-
let(:unix_domain_socket) { UNIXServer.new(socket_path) } # Closing the socket is handled by webrick
397-
define_http_server do |http_server|
398-
http_server.listeners << unix_domain_socket
391+
define_http_server_uds do |http_server|
399392
http_server.mount_proc('/', &server_proc)
400393
end
401-
let(:http_server_options) do
402-
{
403-
DoNotListen: true,
404-
}
405-
end
406394
let(:adapter) { Datadog::Core::Transport::Ext::UnixSocket::ADAPTER }
407-
let(:uds_path) { socket_path }
408-
409-
after do
410-
FileUtils.remove_entry(temporary_directory)
411-
rescue Errno::ENOENT => _e
412-
# Do nothing, it's ok
413-
end
395+
let(:uds_path) { uds_socket_path }
414396

415397
include_examples "correctly reports profiling data"
416398
end
@@ -526,5 +508,3 @@
526508
end
527509
end
528510
end
529-
530-
# rubocop:enable RSpec/ScatteredLet

spec/support/http_server_helpers.rb

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
module HttpServerHelpers
44
module ClassMethods
5-
def define_http_server(&block)
5+
def define_http_server(base_http_server_options = {}, &block)
66
# If you wish to override any of the following let blocks, be sure
77
# you do so AFTER calling +http_server+.
88

@@ -32,7 +32,7 @@ def define_http_server(&block)
3232
AccessLog: http_server_access_log,
3333
Port: 0,
3434
StartCallback: -> { http_server_init_signal.push(1) }
35-
}.merge(http_server_options)
35+
}.update(base_http_server_options).update(http_server_options)
3636
WEBrick::HTTPServer.new(options).tap do |http_server|
3737
instance_exec(http_server, &block)
3838
end
@@ -58,6 +58,28 @@ def http_server(&block)
5858
@server_thread.join
5959
end
6060
end
61+
62+
def define_http_server_uds(&block)
63+
let(:uds_temporary_directory) { Dir.mktmpdir }
64+
let(:uds_socket_path) { "#{uds_temporary_directory}/rspec_unix_domain_socket" }
65+
let(:uds_socket) { UNIXServer.new(uds_socket_path) } # Closing the socket is handled by webrick
66+
67+
define_http_server(DoNotListen: true) do |http_server|
68+
http_server.listeners << uds_socket
69+
instance_exec(http_server, &block)
70+
end
71+
72+
let(:uds_agent_base_url) { "unix://#{uds_socket_path}" }
73+
74+
after do
75+
FileUtils.rm_f(uds_socket_path)
76+
begin
77+
FileUtils.remove_entry(uds_temporary_directory)
78+
rescue Errno::ENOENT => _e
79+
# Do nothing, it's ok
80+
end
81+
end
82+
end
6183
end
6284

6385
def self.included(base)

0 commit comments

Comments
 (0)