Skip to content

Commit 3c31054

Browse files
committed
integration test
1 parent bdd3eea commit 3c31054

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
require "datadog/di/spec_helper"
2+
require 'datadog/di'
3+
require 'webrick'
4+
5+
RSpec.describe Datadog::DI::ProbeNotifierWorker do
6+
let(:worker) do
7+
described_class.new(settings, transport, logger)
8+
end
9+
10+
let(:transport) do
11+
Datadog::DI::Transport.new(agent_settings)
12+
end
13+
14+
let(:settings) do
15+
Datadog::Core::Configuration::Settings.new.tap do |settings|
16+
settings.remote.enabled = true
17+
settings.dynamic_instrumentation.enabled = true
18+
settings.dynamic_instrumentation.internal.development = true
19+
settings.dynamic_instrumentation.internal.propagate_all_exceptions = true
20+
end
21+
end
22+
23+
let(:agent_settings) do
24+
instance_double_agent_settings.tap do |agent_settings|
25+
allow(agent_settings).to receive(:hostname).and_return('localhost')
26+
allow(agent_settings).to receive(:port).and_return(test_port)
27+
allow(agent_settings).to receive(:timeout_seconds).and_return(1)
28+
allow(agent_settings).to receive(:ssl).and_return(false)
29+
end
30+
end
31+
32+
let(:test_port) { 48485 }
33+
34+
di_logger_double
35+
36+
let(:installed_payload) do
37+
{ddsource: 'dd_debugger',
38+
debugger: {
39+
diagnostics: {
40+
parentId: nil,
41+
probeId: String,
42+
probeVersion: 0,
43+
runtimeId: 'test runtime id',
44+
status: 'INSTALLED',
45+
}
46+
},
47+
message: 'test message',
48+
service: 'rspec',
49+
timestamp: 1234567890,}.freeze
50+
end
51+
52+
let(:diagnostics_payloads) { [] }
53+
let(:input_payloads) { [] }
54+
55+
let(:server) do
56+
WEBrick::HTTPServer.new(
57+
Port: test_port,
58+
).tap do |server|
59+
@received_snapshot_count = 0
60+
@received_snapshot_bytes = 0
61+
62+
server.mount_proc('/debugger/v1/diagnostics') do |req, res|
63+
# This request is a multipart form post
64+
expect(req.content_type).to match(%r,^multipart/form-data;,)
65+
diagnostics_payloads << req.body
66+
end
67+
68+
server.mount_proc('/debugger/v1/input') do |req, res|
69+
payload = JSON.parse(req.body)
70+
input_payloads << payload
71+
end
72+
end
73+
end
74+
75+
around do |example|
76+
@server_thread = Thread.new do
77+
server.start
78+
end
79+
loop do
80+
break if server.status == :Running || !@server_thread.alive?
81+
sleep 0.5
82+
end
83+
expect(@server_thread).to be_alive
84+
example.run
85+
@server_thread.kill
86+
loop do
87+
break unless @server_thread.alive?
88+
sleep 0.5
89+
end
90+
end
91+
92+
after do
93+
worker.stop
94+
end
95+
96+
context 'probe status' do
97+
it 'sends expected payload' do
98+
worker.add_status(installed_payload)
99+
worker.flush
100+
expect(worker.send(:thread)).to be_alive
101+
102+
expect(diagnostics_payloads.length).to be 1
103+
expect(diagnostics_payloads.first.gsub("\r\n", "\n").strip).to match(%r~\
104+
----[-\w]+
105+
Content-Disposition: form-data; name="event"; filename="event.json"
106+
Content-Length: 226
107+
Content-Type: application/json
108+
Content-Transfer-Encoding: binary
109+
110+
\[{"ddsource":"dd_debugger","debugger":{"diagnostics":{"parentId":null,"probeId":"String","probeVersion":0,"runtimeId":"test runtime id","status":"INSTALLED"}},"message":"test message","service":"rspec","timestamp":1234567890}\]
111+
----[-\w]+\
112+
~)
113+
end
114+
end
115+
end

0 commit comments

Comments
 (0)