Skip to content

Commit 69b157a

Browse files
committed
add
1 parent 4abbe7d commit 69b157a

File tree

1 file changed

+141
-0
lines changed

1 file changed

+141
-0
lines changed

test/fluent/plugin/test_out_otlp.rb

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

0 commit comments

Comments
 (0)