Skip to content

Commit 9e0fb6f

Browse files
committed
add
1 parent 4abbe7d commit 9e0fb6f

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
# frozen_string_literal: true
2+
3+
require "helper"
4+
5+
require "fluent/plugin/out_otlp"
6+
require "fluent/test/driver/output"
7+
8+
require "webrick"
9+
10+
class Fluent::Plugin::OtlpOutputTest < Test::Unit::TestCase
11+
DEFAULT_LOGGER = ::WEBrick::Log.new($stdout, ::WEBrick::BasicLog::FATAL)
12+
13+
def config
14+
<<~CONFIG
15+
<http>
16+
endpoint "http://127.0.0.1:4318"
17+
</http>
18+
CONFIG
19+
end
20+
21+
def server_config
22+
config = { BindAddress: "127.0.0.1", Port: "4318" }
23+
# Suppress webrick logs
24+
config[:Logger] = DEFAULT_LOGGER
25+
config[:AccessLog] = []
26+
config
27+
end
28+
29+
def run_http_server
30+
server = ::WEBrick::HTTPServer.new(server_config)
31+
server.mount_proc("/v1/metrics") do |req, res|
32+
@server_request = req
33+
@server_request_body = req.body
34+
res.status = 200
35+
end
36+
server.mount_proc("/v1/traces") do |req, res|
37+
@server_request = req
38+
@server_request_body = req.body
39+
res.status = 200
40+
end
41+
server.mount_proc("/v1/logs") do |req, res|
42+
@server_request = req
43+
@server_request_body = req.body
44+
res.status = 200
45+
end
46+
server.start
47+
ensure
48+
begin
49+
server.shutdown
50+
rescue StandardError
51+
nil
52+
end
53+
end
54+
55+
def setup
56+
Fluent::Test.setup
57+
58+
@server_request = nil
59+
@server_request_body = nil
60+
@http_server_thread ||= Thread.new do
61+
run_http_server
62+
end
63+
end
64+
65+
def teardown
66+
@server_request = nil
67+
@server_request_body = nil
68+
end
69+
70+
def create_driver(conf = config)
71+
Fluent::Test::Driver::Output.new(Fluent::Plugin::OtlpOutput).configure(conf)
72+
end
73+
74+
def test_configure
75+
d = create_driver
76+
assert_equal "http://127.0.0.1:4318", d.instance.http_config.endpoint
77+
end
78+
79+
def test_send_logs
80+
event = { "type" => "otlp_logs", "message" => TestData::JSON::LOGS }
81+
82+
d = create_driver
83+
d.run(default_tag: "otlp.test") do
84+
d.feed(event)
85+
end
86+
87+
assert_equal("/v1/logs", @server_request.path)
88+
assert_equal("POST", @server_request.request_method)
89+
assert_equal(["application/x-protobuf"], @server_request.header["content-type"])
90+
assert_equal(TestData::ProtocolBuffers::LOGS, @server_request_body)
91+
end
92+
93+
def test_send_metrics
94+
event = { "type" => "otlp_metrics", "message" => TestData::JSON::METRICS }
95+
96+
d = create_driver
97+
d.run(default_tag: "otlp.test") do
98+
d.feed(event)
99+
end
100+
101+
assert_equal("/v1/metrics", @server_request.path)
102+
assert_equal("POST", @server_request.request_method)
103+
assert_equal(["application/x-protobuf"], @server_request.header["content-type"])
104+
assert_equal(TestData::ProtocolBuffers::METRICS, @server_request_body)
105+
end
106+
107+
def test_send_traces
108+
event = { "type" => "otlp_traces", "message" => TestData::JSON::TRACES }
109+
110+
d = create_driver
111+
d.run(default_tag: "otlp.test") do
112+
d.feed(event)
113+
end
114+
115+
assert_equal("/v1/traces", @server_request.path)
116+
assert_equal("POST", @server_request.request_method)
117+
assert_equal(["application/x-protobuf"], @server_request.header["content-type"])
118+
assert_equal(TestData::ProtocolBuffers::TRACES, @server_request_body)
119+
end
120+
121+
def test_send_compressed_message
122+
event = { "type" => "otlp_logs", "message" => TestData::JSON::LOGS }
123+
124+
d = create_driver(config + "compress gzip")
125+
d.run(default_tag: "otlp.test") do
126+
d.feed(event)
127+
end
128+
129+
assert_equal("/v1/logs", @server_request.path)
130+
assert_equal("POST", @server_request.request_method)
131+
assert_equal(["application/x-protobuf"], @server_request.header["content-type"])
132+
assert_equal(["gzip"], @server_request.header["content-encoding"])
133+
assert_equal(TestData::ProtocolBuffers::LOGS, decompress(@server_request_body).force_encoding(Encoding::ASCII_8BIT))
134+
end
135+
136+
def decompress(data)
137+
Zlib::GzipReader.new(StringIO.new(data)).read
138+
end
139+
end

0 commit comments

Comments
 (0)