Skip to content

Commit ed8787e

Browse files
committed
add https test
1 parent b8ccab4 commit ed8787e

File tree

6 files changed

+229
-7
lines changed

6 files changed

+229
-7
lines changed

test/fluent/plugin/test_in_otlp.rb

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,24 +157,66 @@ def test_invalid_content_encoding
157157
assert_equal(400, res.status)
158158
end
159159

160+
sub_test_case 'HTTPS' do
161+
def config
162+
<<~"CONFIG"
163+
tag otlp.test
164+
<http>
165+
bind 127.0.0.1
166+
port 4318
167+
</http>
168+
<transport tls>
169+
ca_path "#{File.expand_path(File.dirname(__FILE__) + "/../resources/certs/ca.crt")}"
170+
cert_path "#{File.expand_path(File.dirname(__FILE__) + "/../resources/certs/server.crt")}"
171+
private_key_path "#{File.expand_path(File.dirname(__FILE__) + "/../resources/certs/server.key")}"
172+
insecure true
173+
</transport>
174+
CONFIG
175+
end
176+
177+
def test_https_receive_json
178+
d = create_driver
179+
res = d.run(expect_records: 1) do
180+
post_https_json("/v1/logs", TestData::JSON::LOGS)
181+
end
182+
183+
expected_events = [["otlp.test", @event_time, { type: "otlp_logs", message: TestData::JSON::LOGS }]]
184+
assert_equal(200, res.status)
185+
assert_equal(expected_events, d.events)
186+
end
187+
end
188+
160189
def compress(data)
161190
gz = Zlib::GzipWriter.new(StringIO.new)
162191
gz << data
163192
gz.close.string
164193
end
165194

166-
def post_json(path, json, headers = {})
195+
def post_https_json(path, json, headers = {})
167196
headers = headers.merge({ "Content-Type" => "application/json" })
168-
post(path, json, headers)
197+
post(path, json, "https://127.0.0.1:4318", headers, https_option)
169198
end
170199

171-
def post_protobuf(path, binary, headers = {})
200+
def post_json(path, json, headers = {}, opts = {})
201+
headers = headers.merge({ "Content-Type" => "application/json" })
202+
post(path, json, headers, opts)
203+
end
204+
205+
def post_protobuf(path, binary, headers = {}, opts = {})
172206
headers = headers.merge({ "Content-Type" => "application/x-protobuf" })
173-
post(path, binary, headers)
207+
post(path, binary, headers, opts)
174208
end
175209

176-
def post(path, body, headers = {})
177-
connection = Excon.new("http://127.0.0.1:4318#{path}", body: body, headers: headers)
210+
def post(path, body, endpoint = "http://127.0.0.1:4318", headers = {}, opts = {})
211+
connection = Excon.new("#{endpoint}#{path}", body: body, headers: headers, **opts)
178212
connection.post
179213
end
214+
215+
def https_option
216+
Excon.defaults[:ssl_verify_peer] = false
217+
{
218+
client_cert: "#{File.expand_path(File.dirname(__FILE__) + "/../resources/certs/ca.crt")}",
219+
client_key: "#{File.expand_path(File.dirname(__FILE__) + "/../resources/certs/ca.key")}"
220+
}
221+
end
180222
end

test/fluent/plugin/test_out_otlp.rb

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
require "fluent/test/driver/output"
77

88
require "webrick"
9+
require "webrick/https"
910

1011
class Fluent::Plugin::OtlpOutputTest < Test::Unit::TestCase
1112
ServerRequest = Struct.new(:request_method, :path, :header, :body)
@@ -64,14 +65,16 @@ def setup
6465

6566
@@server_request = nil
6667
@@server_response_code = 200
67-
@@http_server_thread ||= Thread.new do
68+
@@http_server_thread = Thread.new do
6869
run_http_server
6970
end
7071
end
7172

7273
def teardown
7374
@@server_request = nil
7475
@@server_response_code = 200
76+
@@http_server_thread.kill
77+
@@http_server_thread = nil
7578
end
7679

7780
def create_driver(conf = config)
@@ -200,6 +203,44 @@ def test_write_with_retryable_response
200203
Thread.report_on_exception = old_report_on_exception
201204
end
202205

206+
sub_test_case 'HTTPS' do
207+
def server_config
208+
config = super
209+
config[:Port] = "14318"
210+
# WEBrick supports self-generated self-signed certificate
211+
config[:SSLEnable] = true
212+
config[:SSLCertName] = [["CN", WEBrick::Utils::getservername]]
213+
config
214+
end
215+
216+
def config
217+
<<~"CONFIG"
218+
<http>
219+
endpoint "https://127.0.0.1:14318"
220+
</http>
221+
<transport tls>
222+
cert_path "#{File.expand_path(File.dirname(__FILE__) + "/../resources/certs/ca.crt")}"
223+
private_key_path "#{File.expand_path(File.dirname(__FILE__) + "/../resources/certs/ca.key")}"
224+
insecure true
225+
</transport>
226+
CONFIG
227+
end
228+
229+
def test_https_send_logs
230+
event = { "type" => "otlp_logs", "message" => TestData::JSON::LOGS }
231+
232+
d = create_driver
233+
d.run(default_tag: "otlp.test") do
234+
d.feed(event)
235+
end
236+
237+
assert_equal("/v1/logs", server_request.path)
238+
assert_equal("POST", server_request.request_method)
239+
assert_equal(["application/x-protobuf"], server_request.header["content-type"])
240+
assert_equal(TestData::ProtocolBuffers::LOGS, server_request.body)
241+
end
242+
end
243+
203244
def decompress(data)
204245
Zlib::GzipReader.new(StringIO.new(data)).read
205246
end

test/fluent/resources/certs/ca.crt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFeTCCA2GgAwIBAgIUNSK4P4U/dPHmtBate65U938pw84wDQYJKoZIhvcNAQEL
3+
BQAwTDELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ4wDAYDVQQHDAVUb2t5
4+
bzEOMAwGA1UECgwFTXlPcmcxDTALBgNVBAMMBE15Q0EwHhcNMjUwNDA5MDQzNjA3
5+
WhcNMzUwNDA3MDQzNjA3WjBMMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8x
6+
DjAMBgNVBAcMBVRva3lvMQ4wDAYDVQQKDAVNeU9yZzENMAsGA1UEAwwETXlDQTCC
7+
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANDz18yHbKVwSN90/xYbG3aj
8+
9LomI/fxnrgeN49kz4Wh+Z/0LKycPYzhm4d+tyfySGT1bDyijwsmo3uf6UNia7sl
9+
gUG3tgcsPXW/08+2ve8zX7RqnPRfvcbc0HcRboRsoC3lvHmx836FGqIHvMR9vzh4
10+
NiTqE/9vO/LyrK4NrZPFWCnG79pKeXSHeVLtWmHhtHm1x0wrq2eyXSCNWanXehi7
11+
vHeJvPChjBOzLPG4kDeDDDfrBO7sEzp4pGqiJ9T+RV7EbeyqzZZE499vrQ1+ke4j
12+
mVfiT21YOviMmwjTdVIU1Yl47oE5ei8X2yiafHZwwIrFWKcJEZFo7kOUyyOSZTiQ
13+
s5TVwkCWbvy8W40cNyQr+tbvO4tl7KbgR/1sdJ0+X1qJaOH15gjDZGb1/3TinoqA
14+
fSX7HB17VWso//BJoEjO/x2TFk7wHaPq2rHBOz+8fhGEyfmHAE+U6jX14fhWtsRY
15+
WD2YZuVgzcFKXANfyHP9T4tS7ZS3o12eCNVpGDw9+4eetibdmxvOS+6lHOavooTc
16+
0gijJXnnrn84drlDP90xft6nqQ5cvKwmJBIX/NK90HJb9WJhpuDcQXO5PknKZqFD
17+
moAyAckYVcEVISFYaCw+nwTRrIBjBlZXr7gyIUQgJf9DvUA8qsgDJPKNF4SUUuqE
18+
aLRqzQ7j6tGonACXacFNAgMBAAGjUzBRMB0GA1UdDgQWBBRA9fim9n1btLcET51w
19+
XOjAU1MZQjAfBgNVHSMEGDAWgBRA9fim9n1btLcET51wXOjAU1MZQjAPBgNVHRMB
20+
Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAq44mc7I0A7pgfDkajxs8+iBbi
21+
IU2Q3lZtyMT6siZrKF5VWxBDlknZrnOL/qQfm0Fffczxj0TmeRQ2698TliGb6nIz
22+
sEaPQQIfQf2upMXJZap2JF0InwLWqAArSqHpEdDNyHr9jbc/N4CWg1rs8CrmV1rj
23+
HCMjOa95yT3V4/QMd7wUl9azHwMM2qDNzNBOSWRmyboX8rrIqGOc//zF5qNeBkEh
24+
GoJntDis/fHPGEpr/LZtyKZidszXQm/EaQVCW2dezIV7QwwHqpcwy4Exy0hFfXiw
25+
VOyu2gF6xiXRgufi4J61P6TO82mQSyRWSTVtHl/+vAVmLgmb/d7nE8TQ4vl9IUE1
26+
4ZunJVr4dYgQii3TogrtSJT0u4AW1W/Yk1J06A3yJWDyFWPaPRdzKz18TdaZ1b4X
27+
UIiBIBhgtssAXTwG1tVC8RC5dbgJBT1yHb76ApJUC5/PQDJQzFfPQpb2D1Jxr+bF
28+
Q28Q4/HtgrPo+7OcukZyELB8qlQXlj/8jI6+kh1TGGG6yrHvud30Q/Ea6291g42X
29+
moGDeNy+/f9I3z20YUlfoFoQQkwE7BbVQMVFo2XcNpVqERMcAWMTvi/WIrjulCEw
30+
vCX3DQuILJvIGVv0iYaEWOMyT/dNOX3uta+jHa9IVNvO4E3M5dunUahB+FHPsKaR
31+
TmXYQ8FFXwMhjxXQpQ==
32+
-----END CERTIFICATE-----

test/fluent/resources/certs/ca.key

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
CEi4enYYTnmgtLiMkfcAmIFQnCc/Pg==
52+
-----END PRIVATE KEY-----
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEmDCCAoCgAwIBAgIUH5R2/gXWTx0px2JfimlnMhL6RTswDQYJKoZIhvcNAQEL
3+
BQAwTDELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ4wDAYDVQQHDAVUb2t5
4+
bzEOMAwGA1UECgwFTXlPcmcxDTALBgNVBAMMBE15Q0EwHhcNMjUwNDE0MDYwNDI5
5+
WhcNMjcwNzE4MDYwNDI5WjBTMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8x
6+
DjAMBgNVBAcMBVRva3lvMQ4wDAYDVQQKDAVNeU9yZzEUMBIGA1UEAwwLZXhhbXBs
7+
ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8BVD50NyVC4ug
8+
+a+TsQODj75EnzZEu4NPwXSc82JHbmm3dM1+zEOANxvzFnCBJp9ffEaaMtwmhePF
9+
hBcnVxsRSlqPLkIyQZXSPDcsRhhdx3Z0kmFvlSkmUFq9iwoTh397u99N40D1abhI
10+
rAF+2r8mHu5OhDSyTocMKPVChLQflojhAG9VKQEMX1bwLSAiU4yGAsRZaAi7vYE5
11+
6arOP0jGi/UQeSJrf1PheqktQ2kwU2v9yCdwOuhf8XtowSFIl74FuTIOFOCN0FMw
12+
I4xXTslZj81kz1Mu+GzMJfXKWXWe8mShRoUj1wdZ/nxgNyn119r1v901qNtsYqTf
13+
8Ep5Cfu3AgMBAAGjazBpMCcGA1UdEQQgMB6CCWxvY2FsaG9zdIILZXhhbXBsZS5j
14+
b22HBH8AAAEwHQYDVR0OBBYEFFh0Ut2/8I0uGM/NUK5nDZoHmwUNMB8GA1UdIwQY
15+
MBaAFED1+Kb2fVu0twRPnXBc6MBTUxlCMA0GCSqGSIb3DQEBCwUAA4ICAQAjeTPz
16+
E8ysklB2dBal/yl2ekhdZwNd9oyoisa8AN6KgXIJP6cyD4jSEOAUlSWumaklfx3p
17+
QHy5DQwz3JFeGeE0MPL8LmgR/m3ESJQdfoJ7VljE9MF8K0Sl4QC6OtgQM2/zyZhl
18+
7MGuRMb9dBX/+9m7njxMICVZfZBgwvh2a/MbbnJOT1yaD4sf/sl7c0jFiXLWHfdH
19+
CU9J3RQF7+7U8JjuEgsuU7uqVwCQHrYj0VxQDxtyqz+IWRCO9r5iATdhB2CVKVMU
20+
dDLxN4Xmr0wOLC4PHM7JK45rWrwtnxegtQr6sd3TiPKA6i3R9tqk1g2ZNRqk2//E
21+
aygIKJBnv8Rk+agks0dDILvK+I61jF3fx6m87nloW6ra4VHoBDVDDUDU3o1sskSk
22+
L2P2HvFGlkHlbNf080BS5JPjWcqKfbCIxK0+ntuxG9yc2fl7PhxLIuAAjw6nD+h2
23+
LOqW7X/6NyWBsF2VukXQ/LoF4h/T2H2MMU1TR1RUcmyfpgxZBwCB0lUFj54W8Kg2
24+
KPckC1OvEYvHp+b2y7ykVPD1OnyVf3RA0rNcnmCwBnQAJ6DXZjLN4clsiSn+LP2T
25+
3RJ47OKTip4DM/LdG0p8uDotn9qA3gjEf7929/9vQxqw7OICdvUMlzDV6CfCG9nB
26+
DwWU/E65S4Bg62tcohGbEsYdfRtzTh5GwnndJw==
27+
-----END CERTIFICATE-----
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC8BVD50NyVC4ug
3+
+a+TsQODj75EnzZEu4NPwXSc82JHbmm3dM1+zEOANxvzFnCBJp9ffEaaMtwmhePF
4+
hBcnVxsRSlqPLkIyQZXSPDcsRhhdx3Z0kmFvlSkmUFq9iwoTh397u99N40D1abhI
5+
rAF+2r8mHu5OhDSyTocMKPVChLQflojhAG9VKQEMX1bwLSAiU4yGAsRZaAi7vYE5
6+
6arOP0jGi/UQeSJrf1PheqktQ2kwU2v9yCdwOuhf8XtowSFIl74FuTIOFOCN0FMw
7+
I4xXTslZj81kz1Mu+GzMJfXKWXWe8mShRoUj1wdZ/nxgNyn119r1v901qNtsYqTf
8+
8Ep5Cfu3AgMBAAECggEAUnl0hTiIYbqgQ3ry+PKHS5Dkkb5S9EBaf8QozmX2YMX+
9+
inIqZ+na3CWQVYeszwItm5lscNxJdH57pJrl+yQ649E9Oxw7/kaFnSQ7wWh37L7/
10+
Z3AEXIlN9Rf/TbBtOZbQpWqKL+S1DFGU/A+zUj1K5sJfn0JfyS0oEP3wY37Jcib5
11+
I5UktfqyKjabUmHx7ohNo2unPTQEKWH6d2mK/3n3ks0rEi0BsVRwZg5FPkZ8wa9W
12+
SjbT7zgEEqe0IAeUQOhsrnWLvKBiuagzgO+M5Td9DrbkyqYBYbkLsBBoPuJQKZGw
13+
579JTBq3Rx7Ml13uM7jy9jWX1NY+uNEzizqOCefwiQKBgQDzG92nWgTyheWBq5gx
14+
bQBHPlWKrrKzsF+Cp5Vsymp2ifFdUVJqjQvjeSonYXagKlFa9T6UwKaXPvSaKMFJ
15+
2mW7cw/jD8HjLmmWlTe1tbA3F6lirlyn01jzPA7Qyoy+kiFNk6xUbP36kqnicOkO
16+
oz37UJt6/QMQDCQyuFDUqI8y/wKBgQDF/aUvZ22O7vrD/NOM6933ZM/GlS/T68it
17+
20Z5yTWPxDoLaGWYEfmMVqQIzmXvbN7MS1RHajaee09cb9qLWqbHFVC21sjK3w+0
18+
ntkRYoukGx5irzEq322lpGk6q/P1ocGYafgPDKYJuJ97i2llVzZraNl5MnZcXBTb
19+
FHr+7UiPSQKBgDjPkz2vcKaIGbjys48hTMZZT74n0wTgu4EZznZs2vI2jBvljB/w
20+
NA4FW492XDVTjk12MBis6IFBqgF4cqriiZGDcvv5y7JePzh8SFeDTNmjAudXnblu
21+
T0QQDdpG6xsBpRyu3L+h9Lwgl+idwCi2hx56mMrl41hVrgPYRLNdbJFbAoGAQ5Mu
22+
rd8/JWmrbPj9uztFpwphYAXLLSlsdOpCQ47JGSiAJySaiCyaX6uykM7hO7aM1G1h
23+
dn5p5e1wSLxkeuuVwJ0lz0G/hn5bfeo5bBWWU4xt8oCY52kao05aHAxUV6G90adZ
24+
YsmOYgMBa8lJT61UhZRjpVnzy9IhzCRRVnDmMwECgYBfqzkzcbpZ0TGwb4chRY6Z
25+
fLvELjz+HG5eJkYpVo5nTVB+MrzmBZRb37XCo68xl6E+fADZ5L0DlfnZ2vObBlAa
26+
FNaPeDoPfnqoNaW1D1ctLgrJWlgJt+Y4qkscje509VKfGXJ0frQb5gNDltrcq00f
27+
y6gKku9/sYggk+DO8pmi0w==
28+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)