logstash-output-elasticsearch 7.3.6-java → 7.3.7-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/docs/index.asciidoc +1 -1
- data/lib/logstash/outputs/elasticsearch/http_client.rb +29 -24
- data/lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb +1 -1
- data/lib/logstash/outputs/elasticsearch/http_client_builder.rb +3 -5
- data/logstash-output-elasticsearch.gemspec +1 -1
- data/spec/fixtures/test_certs/ca/ca.crt +22 -0
- data/spec/fixtures/test_certs/ca/ca.key +27 -0
- data/spec/fixtures/test_certs/test.crt +21 -0
- data/spec/fixtures/test_certs/test.key +27 -0
- data/spec/integration/outputs/index_spec.rb +27 -19
- data/spec/unit/http_client_builder_spec.rb +5 -13
- data/spec/unit/outputs/elasticsearch_spec.rb +3 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f7192d92b49c809e5e75e71954febf19fe49d8e
|
4
|
+
data.tar.gz: d0bfa079c1a5658b1e5bd56ce99fd7d77177782c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8277f8569152e3e874c40631d03b95dbe141368f42faf71a67d4e0b5f35fdf94b58d12b1b6c2fc9cb2a197c00c567820f26539c3b4bbefe2c8a9b3e58b490ddf
|
7
|
+
data.tar.gz: 34c6ae1d82f9284d90c0daf906500f215b3707d65c85e1a6fdb1398e6929f536ccfc000c94aa0772f4f1055236fcd77e12f204168d015e7e8cb335fb642bc24b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 7.3.7
|
2
|
+
- Properly support characters needing escaping in users / passwords across multiple SafeURI implementions (pre/post LS 5.5.1)
|
3
|
+
- Logstash 5.5.0 does NOT work with this release as it has a broken SafeURI implementation
|
4
|
+
|
1
5
|
## 7.3.5
|
2
6
|
- Fix incorrect variable reference when DLQing events
|
3
7
|
|
data/docs/index.asciidoc
CHANGED
@@ -286,32 +286,37 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
286
286
|
end
|
287
287
|
|
288
288
|
def host_to_url(h)
|
289
|
-
#
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
289
|
+
# Never override the calculated scheme
|
290
|
+
raw_scheme = @url_template[:scheme] || 'http'
|
291
|
+
|
292
|
+
raw_user = h.user || @url_template[:user]
|
293
|
+
raw_password = h.password || @url_template[:password]
|
294
|
+
postfixed_userinfo = raw_user && raw_password ? "#{raw_user}:#{raw_password}@" : nil
|
295
|
+
|
296
|
+
raw_host = h.host # Always replace this!
|
297
|
+
raw_port = h.port || @url_template[:port]
|
298
|
+
|
299
|
+
raw_path = !h.path.nil? && !h.path.empty? && h.path != "/" ? h.path : @url_template[:path]
|
300
|
+
prefixed_raw_path = raw_path && !raw_path.empty? ? raw_path : "/"
|
301
|
+
|
301
302
|
parameters = client_settings[:parameters]
|
302
|
-
if parameters && !parameters.empty?
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
303
|
+
raw_query = if parameters && !parameters.empty?
|
304
|
+
combined = h.query ?
|
305
|
+
Hash[URI::decode_www_form(h.query)].merge(parameters) :
|
306
|
+
parameters
|
307
|
+
query_str = combined.flat_map {|k,v|
|
308
|
+
values = Array(v)
|
309
|
+
values.map {|av| "#{k}=#{av}"}
|
310
|
+
}.join("&")
|
311
|
+
query_str
|
312
|
+
else
|
313
|
+
h.query
|
314
|
+
end
|
315
|
+
prefixed_raw_query = raw_query && !raw_query.empty? ? "?#{raw_query}" : nil
|
316
|
+
|
317
|
+
raw_url = "#{raw_scheme}://#{postfixed_userinfo}#{raw_host}:#{raw_port}#{prefixed_raw_path}#{prefixed_raw_query}"
|
313
318
|
|
314
|
-
::LogStash::Util::SafeURI.new(
|
319
|
+
::LogStash::Util::SafeURI.new(raw_url)
|
315
320
|
end
|
316
321
|
|
317
322
|
def template_exists?(name)
|
@@ -56,7 +56,7 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
|
|
56
56
|
|
57
57
|
if url.user
|
58
58
|
params[:auth] = {
|
59
|
-
:user => url.user,
|
59
|
+
:user => CGI.unescape(url.user),
|
60
60
|
# We have to unescape the password here since manticore won't do it
|
61
61
|
# for us unless its part of the URL
|
62
62
|
:password => CGI.unescape(url.password),
|
@@ -140,14 +140,12 @@ module LogStash; module Outputs; class ElasticSearch;
|
|
140
140
|
|
141
141
|
def self.setup_basic_auth(logger, params)
|
142
142
|
user, password = params["user"], params["password"]
|
143
|
-
unsafe_password = password && password.value
|
144
|
-
unsafe_escaped_password = unsafe_password ? CGI.escape(unsafe_password) : nil
|
145
143
|
|
146
|
-
return {} unless user &&
|
144
|
+
return {} unless user && password && password.value
|
147
145
|
|
148
146
|
{
|
149
|
-
:user => user,
|
150
|
-
:password =>
|
147
|
+
:user => CGI.escape(user),
|
148
|
+
:password => CGI.escape(password.value)
|
151
149
|
}
|
152
150
|
end
|
153
151
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-elasticsearch'
|
3
|
-
s.version = '7.3.
|
3
|
+
s.version = '7.3.7'
|
4
4
|
s.licenses = ['apache-2.0']
|
5
5
|
s.summary = "Logstash Output to Elasticsearch"
|
6
6
|
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDmzCCAoOgAwIBAgIUJ3zg8MPyVvlLtNfv27YwTmy8sKAwDQYJKoZIhvcNAQEL
|
3
|
+
BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l
|
4
|
+
cmF0ZWQgQ0EwHhcNMTcwNzExMjA0ODM3WhcNMjAwNzEwMjA0ODM3WjA0MTIwMAYD
|
5
|
+
VQQDEylFbGFzdGljIENlcnRpZmljYXRlIFRvb2wgQXV0b2dlbmVyYXRlZCBDQTCC
|
6
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIH11HENfB27hsxlPIIZJvBV
|
7
|
+
gyDRo8T29HEm/mm9hlg4c76xsdXlPoKZ0ENzcEMg+AyKjQxD5cZIACvsd3lbJnca
|
8
|
+
+8CUcfqKDu1rDq6T5YMX75Gw21ZeJoGy3voCXGvTIoH1aNdRt/8EcWq9P81Mew7A
|
9
|
+
jh1qhv8WR8Ajxt29OSyWH8VC2WHrihkD/s+3eHCNNpW3CCFtA3uc3sbENVB04A7d
|
10
|
+
0HzZRD5EfZcZVlcfd5o4ZPuH5PnR4LkZAR2TEgQ8qpruF3m3YMmPvnHaRx5/Bivv
|
11
|
+
0IuBOAQhkL1w5MzSZVOg3N0u91Krss2tUGLf8c5qnxveqdSKShgVxwI/6P0CaccC
|
12
|
+
AwEAAaOBpDCBoTAdBgNVHQ4EFgQUba74O4k4WAzgVH9WqCLvypyTj1swbwYDVR0j
|
13
|
+
BGgwZoAUba74O4k4WAzgVH9WqCLvypyTj1uhOKQ2MDQxMjAwBgNVBAMTKUVsYXN0
|
14
|
+
aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2VuZXJhdGVkIENBghQnfODww/JW+Uu0
|
15
|
+
1+/btjBObLywoDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAf
|
16
|
+
jVC71jdUu649ZWketKEqlmAL5K4RmBghKS49Coso1eACngbzVfnh0vfKxF1giIvw
|
17
|
+
154ZmcAD0bmArO538j+uEvr9kj3ZX8qmvNLRNQ2IcUQaR7N+8Iu8WIqtTIfI07hp
|
18
|
+
cXHv0jIcq7sFp4BpWDnWGlipFN+ldFRBvaUarrK1QcDAeWyPaUqryY7egecV9PpV
|
19
|
+
Ebh28RblD5QlA9+sLc5u+zg1vlWg7fLsiGQqNR29dXWmavcamKfo5TOAuzXFlU78
|
20
|
+
it8DhTCvTnmCIi0NIxJY9rHLHgz/3aDRsBDzCZMQFJ2KfssI6YHZ9LpZ+3iVObr6
|
21
|
+
jGjKiXeVb9DcAnYR+Ihy
|
22
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpAIBAAKCAQEAgfXUcQ18HbuGzGU8ghkm8FWDINGjxPb0cSb+ab2GWDhzvrGx
|
3
|
+
1eU+gpnQQ3NwQyD4DIqNDEPlxkgAK+x3eVsmdxr7wJRx+ooO7WsOrpPlgxfvkbDb
|
4
|
+
Vl4mgbLe+gJca9MigfVo11G3/wRxar0/zUx7DsCOHWqG/xZHwCPG3b05LJYfxULZ
|
5
|
+
YeuKGQP+z7d4cI02lbcIIW0De5zexsQ1UHTgDt3QfNlEPkR9lxlWVx93mjhk+4fk
|
6
|
+
+dHguRkBHZMSBDyqmu4XebdgyY++cdpHHn8GK+/Qi4E4BCGQvXDkzNJlU6Dc3S73
|
7
|
+
Uquyza1QYt/xzmqfG96p1IpKGBXHAj/o/QJpxwIDAQABAoIBADvKJGWqpYpsRvTs
|
8
|
+
Mm1MMwzo2n4T1Lt+PjF8lhmBtzgJKL73s3BLmnmtWBJgHqrTlSr35zJYXnLdly6e
|
9
|
+
CM1NMSIkyOPtp45zS7DQyx1oL3QjY/VsH0zZ3e9Xopv00B5PMZYGmKhPEU6C9cb8
|
10
|
+
sEi8QfUkg31nEBp1Xqc4DnrfXllzQiZIVrhHleRcBVtpYVkR3dN5wg+YTwF5n8ru
|
11
|
+
2Z/N8yuBMrKWqozlUY+x7iDCVXIbp+t3zePfOOhzSdIt4qx372PX6L0HmrI4ZAzw
|
12
|
+
HkpCQbnlWL55G2CPcnvJF3evbDWoiX8vCYDAQmzFA6X8lAMF9jjKfWlo2Qa1AciN
|
13
|
+
yqwePKECgYEA0wR9CT51h5PuvGUmKPAfImTNyqQIksibe+AOkU01ldHmBVRfX16f
|
14
|
+
SKMDKMry4tzXGinVjITonxTdT7jXO5z3754CBoEItdASruikay63DF90hVvP18Zl
|
15
|
+
OcH/UIBkyvtSjJLEm2/jdfwI+qIOSfhwi5mymXUGVRyEb5i8FORWidcCgYEAnanv
|
16
|
+
9dk3cx034vG/p36RmI57I1gh6UsEBk53uPZAcecBigDJut2o3vO7/gc/+vROCzk3
|
17
|
+
Y+EY7tgRDQUh0b9ex+Dq6BkjkZkAKWVCf+u8KDCpW7Xlgm1YDpS2B0EwASgql6Xl
|
18
|
+
qXu1VgTNc44g0D74yJbs853GWYg5AnV/sRCfgZECgYAklw6nX7E5hSlMea2YQ6ri
|
19
|
+
Z+BXVwI1kZuEa2GbSGwWQoNEQVEYVGwCSGHv3OEo/Wo/GynwZ8t+ajvF6yNHLvy/
|
20
|
+
DAMF5bIA9MeIlMaN31fWSWcHCNiNbdV3onAHIXxYxiOWRIza9xfWCZH1A8y+ftnl
|
21
|
+
Gw2hFm22rG86ep2CceWfmQKBgQCXe8fK90GHoPMpYg066SkK4xr9ApjShfj/9jSh
|
22
|
+
yjhxN/sKlWc92+t9C8H8eQrIHCNANWE63fQOyBrZ36x20uBGO5x4FG9QXSkCnQAf
|
23
|
+
2GeYVeji7QnvHxAUMl4S6lctRWJnAkZ/aRT56PNdq5lrfJWcZSaVi2oga/oamrpt
|
24
|
+
bgNTgQKBgQCGUheUb+51c6hoi7kjuv1uJNyGzirkYA+pNUest2EXVMwMpsLP9hSl
|
25
|
+
fN11QvMVqRsBnwl2pRnwGilJHl5OO9Z3GBTHsG15EPXhjgUX8r49+GB/HNPP57Ev
|
26
|
+
lA775+tliHVv6Pl0E3RjhUlSuJIwZZ2ImV+RDryElBKCet4kI/KrIw==
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDjDCCAnSgAwIBAgIULhSohxna+aUn+a7UIQmNPLb11p8wDQYJKoZIhvcNAQEL
|
3
|
+
BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l
|
4
|
+
cmF0ZWQgQ0EwHhcNMTcwNzExMjA0OTEwWhcNMjAwNzEwMjA0OTEwWjAPMQ0wCwYD
|
5
|
+
VQQDEwR0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNOuaiad
|
6
|
+
YCotO/bSTVJwlR4f1Kdt3gMZeD1i3QKX8QSXACpVeNaTn/6Vflbf/jlWk8i6Mbsv
|
7
|
+
HeZgdxMe3/CMs8U9fRx2tt4hF5tVivnkRfXbvC5lhYsjg4k2DorkigP/4D4XDonv
|
8
|
+
pFwB7qKeChnYbe9ADh8DMymKj2Z0LXxSEjuP5VH1O+5jLyddL4gRpCRa5G79vq9m
|
9
|
+
7rdnq7HTfZ6m3t15AIY4XWZ0VW2epMsflQcbNChcYNMMDhBZzPkhRs7KEEHUV9ye
|
10
|
+
sGTxGRUBLWNd7rNLY0T0biiUlaWfgbGfUmDKZKofowoo+M9w5rREEnXqrGkc3QmT
|
11
|
+
zx9XRHqfeEC/ZQIDAQABo4G6MIG3MB0GA1UdDgQWBBS++BZR6DYwjv7jlkS2mVdJ
|
12
|
+
NtpILDBvBgNVHSMEaDBmgBRtrvg7iThYDOBUf1aoIu/KnJOPW6E4pDYwNDEyMDAG
|
13
|
+
A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0GC
|
14
|
+
FCd84PDD8lb5S7TX79u2ME5svLCgMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAA
|
15
|
+
ATAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBugjYG5LK91A1awDYTsrrT
|
16
|
+
Bmi8TiOeHa69Qia4SrFpwua648TpC5esaIC4uAJlTVP5MwcMB/5+lZOcUjVgFIss
|
17
|
+
Z4mdRgExXMAoDiI5OOqXcCiGYWv/jGJzKj4EZ65UZADVrGDFmZPW99g4XDInc27W
|
18
|
+
lmZETkjriueku7gH4eEOdfSX9jv6M+mYhRJlllWlzk77zzENtFn4uCQmd9bzFDQM
|
19
|
+
hOxi+tif9SrGEAoJoSP204vunLIDNve2KycVXuQkhZO+Q5JYmN38DqFrjC/U5JbC
|
20
|
+
IIdTES3+iydEHevB3biI251NrQkg1eOOTG376viFZVmZB9e75waf8JLKKswNmubU
|
21
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEowIBAAKCAQEAnNOuaiadYCotO/bSTVJwlR4f1Kdt3gMZeD1i3QKX8QSXACpV
|
3
|
+
eNaTn/6Vflbf/jlWk8i6MbsvHeZgdxMe3/CMs8U9fRx2tt4hF5tVivnkRfXbvC5l
|
4
|
+
hYsjg4k2DorkigP/4D4XDonvpFwB7qKeChnYbe9ADh8DMymKj2Z0LXxSEjuP5VH1
|
5
|
+
O+5jLyddL4gRpCRa5G79vq9m7rdnq7HTfZ6m3t15AIY4XWZ0VW2epMsflQcbNChc
|
6
|
+
YNMMDhBZzPkhRs7KEEHUV9yesGTxGRUBLWNd7rNLY0T0biiUlaWfgbGfUmDKZKof
|
7
|
+
owoo+M9w5rREEnXqrGkc3QmTzx9XRHqfeEC/ZQIDAQABAoIBAAm4XREbP5ncQ116
|
8
|
+
GOLN/0hey55EmlyuWH/JXj1QkdZQcIOEHDQXKKM8BkwEWnHJYAJc6J14ep0h0EzR
|
9
|
+
FJLQuAfUa9E7WGhRMD/kUtMAVhO3/1yUi5pRW2wlrwILvcqIIO3nK0qtZfsL8Nq3
|
10
|
+
nZAGthFqSNAXP/2Fz56/vOes0vFqQpHC9y+xzQVm9Kr/bZeB0gWH1Eq32Dz2Q8pW
|
11
|
+
E1BNgy48az20AcH8KiJCy5JjByDkcBjBPm8S074Hab9VPvLEnKrpApNZT3V/cLVd
|
12
|
+
t0UmGT937g1DuqwYBl6eLB+FgOZhNjONtF7llHDYWtx0r9XaKplGtmMeW1rDRLp4
|
13
|
+
XkDeKqkCgYEA54xm+Uc1SLGgnzPQb88Sk+H6ffFy4fkzS2FTeEm7NlKpFLtPVNx+
|
14
|
+
wZys0GobYn7XFq0lGODWhuFJbN8vm8aGZ2xgKv3213yKWOjn/UBP8D8JyC3HQs5f
|
15
|
+
atf6a15z7bp+Vrab+tn0dOi4Jz6FhNxmhwFVS3n+e7fZo7gUxAAOxTcCgYEArWNI
|
16
|
+
c2f+Qf44lskqrN2NNNY44/lYEDB5WWKT8q+9Z/4MuFXmYQvQHrdvI1yuYfXSLUqN
|
17
|
+
VeH4j7V25nQXBbB1zCvHmjP2/t00EwhRh1Z9iNA74eukRJrzvMvgugSioVc3PpDx
|
18
|
+
yb3+7kT68iE3LHWWW0If0ENb3CX6/OyAiJRG7kMCgYEA0//0+B9+ZcRcb+cc3IIX
|
19
|
+
XFb25gD/Um67zDScG/JF+oLMVDL7e5M2a0Zr45aC5DeF7zkwUgrp4Cy88XWXPWUT
|
20
|
+
AfZ0RmiobLuWX7k/TtxnVGwjJKjlXAFf049TtKKSOgMaUYJ4ZcDQ1YmNskDINtEk
|
21
|
+
/k72LVjQ6611EzUjriDvZRkCgYAmtAPHJw59Yqb1GaB6B9ZuVedLFCyRKJDd4ABQ
|
22
|
+
auQno3DpcNtFDGL/iEi5pwWR/lJVI9AavJ9ETOhmlsFQ1svksF0U0cavq2blXLT+
|
23
|
+
NdM9x+WmD3iSi9gea5AVVdWLmDFPuQEP3GZcf29YvwtW1ESkyETbsz19DclRzeT/
|
24
|
+
F8IhiwKBgCrTlgDzZrvMKzD2VHNPLkr2ixJwEolTQFwhklAFeFvlUkI0XwBHkfwS
|
25
|
+
hQ+EQosZaPIQ5pupn8UFmpfGpv7f4vyTSVtbkay7eBIgFY8jPZFkM1zqtgwRerN1
|
26
|
+
5HNArAuzAH9LiauuZrAhFolwPfEdSWxvJhvfPE/aM5OpbQRUyQb4
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -44,11 +44,11 @@ describe "TARGET_BULK_BYTES", :integration => true do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
describe "indexing"
|
47
|
+
describe "indexing" do
|
48
48
|
let(:event) { LogStash::Event.new("message" => "Hello World!", "type" => type) }
|
49
49
|
let(:index) { 10.times.collect { rand(10).to_s }.join("") }
|
50
50
|
let(:type) { 10.times.collect { rand(10).to_s }.join("") }
|
51
|
-
let(:event_count) {
|
51
|
+
let(:event_count) { 1 + rand(2) }
|
52
52
|
let(:config) { "not implemented" }
|
53
53
|
let(:events) { event_count.times.map { event }.to_a }
|
54
54
|
subject { LogStash::Outputs::ElasticSearch.new(config) }
|
@@ -64,7 +64,7 @@ describe "indexing", :integration => true do
|
|
64
64
|
subject.register
|
65
65
|
end
|
66
66
|
|
67
|
-
shared_examples "an indexer" do
|
67
|
+
shared_examples "an indexer" do |secure|
|
68
68
|
it "ships events" do
|
69
69
|
subject.multi_receive(events)
|
70
70
|
|
@@ -84,8 +84,20 @@ describe "indexing", :integration => true do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "sets the correct content-type header" do
|
87
|
+
expected_manticore_opts = {:headers => {"Content-Type" => "application/json"}, :body => anything}
|
88
|
+
if secure
|
89
|
+
expected_manticore_opts = {
|
90
|
+
:headers => {"Content-Type" => "application/json"},
|
91
|
+
:body => anything,
|
92
|
+
:auth => {
|
93
|
+
:user => user,
|
94
|
+
:password => password,
|
95
|
+
:eager => true
|
96
|
+
}}
|
97
|
+
end
|
98
|
+
|
87
99
|
expect(subject.client.pool.adapter.client).to receive(:send).
|
88
|
-
with(anything, anything,
|
100
|
+
with(anything, anything, expected_manticore_opts).
|
89
101
|
and_call_original
|
90
102
|
subject.multi_receive(events)
|
91
103
|
end
|
@@ -115,15 +127,15 @@ describe "indexing", :integration => true do
|
|
115
127
|
describe "a secured indexer", :secure_integration => true do
|
116
128
|
let(:user) { "simpleuser" }
|
117
129
|
let(:password) { "abc123" }
|
118
|
-
let(:cacert) { "spec/fixtures/
|
119
|
-
let(:es_url) {"https://localhost:
|
130
|
+
let(:cacert) { "spec/fixtures/test_certs/test.crt" }
|
131
|
+
let(:es_url) {"https://localhost:9200"}
|
120
132
|
let(:config) do
|
121
133
|
{
|
122
|
-
"hosts" => ["localhost:
|
134
|
+
"hosts" => ["localhost:9200"],
|
123
135
|
"user" => user,
|
124
136
|
"password" => password,
|
125
137
|
"ssl" => true,
|
126
|
-
"cacert" => "spec/fixtures/
|
138
|
+
"cacert" => "spec/fixtures/test_certs/test.crt",
|
127
139
|
"index" => index
|
128
140
|
}
|
129
141
|
end
|
@@ -139,30 +151,26 @@ describe "indexing", :integration => true do
|
|
139
151
|
}
|
140
152
|
}
|
141
153
|
end
|
142
|
-
it_behaves_like("an indexer")
|
154
|
+
it_behaves_like("an indexer", true)
|
143
155
|
|
144
156
|
describe "with a password requiring escaping" do
|
145
|
-
let(:user) { "
|
157
|
+
let(:user) { "f@ncyuser" }
|
146
158
|
let(:password) { "ab%12#" }
|
147
159
|
|
148
|
-
include_examples("an indexer")
|
160
|
+
include_examples("an indexer", true)
|
149
161
|
end
|
150
162
|
|
151
|
-
describe "with a password requiring escaping in the URL" do
|
163
|
+
describe "with a user/password requiring escaping in the URL" do
|
152
164
|
let(:config) do
|
153
165
|
{
|
154
|
-
"hosts" => ["https://#{user}:#{CGI.escape(password)}@localhost:
|
166
|
+
"hosts" => ["https://#{CGI.escape(user)}:#{CGI.escape(password)}@localhost:9200"],
|
155
167
|
"ssl" => true,
|
156
|
-
"cacert" => "spec/fixtures/
|
168
|
+
"cacert" => "spec/fixtures/test_certs/test.crt",
|
157
169
|
"index" => index
|
158
170
|
}
|
159
171
|
end
|
160
172
|
|
161
|
-
|
162
|
-
include_examples("an indexer")
|
163
|
-
rescue => e
|
164
|
-
require 'pry'; binding.pry
|
165
|
-
end
|
173
|
+
include_examples("an indexer", true)
|
166
174
|
end
|
167
175
|
end
|
168
176
|
end
|
@@ -7,7 +7,7 @@ describe LogStash::Outputs::ElasticSearch::HttpClientBuilder do
|
|
7
7
|
describe "auth setup with url encodable passwords" do
|
8
8
|
let(:klass) { LogStash::Outputs::ElasticSearch::HttpClientBuilder }
|
9
9
|
let(:user) { "foo@bar"}
|
10
|
-
let(:password) {"
|
10
|
+
let(:password) {"baz@blah" }
|
11
11
|
let(:password_secured) do
|
12
12
|
secured = double("password")
|
13
13
|
allow(secured).to receive(:value).and_return(password)
|
@@ -17,20 +17,12 @@ describe LogStash::Outputs::ElasticSearch::HttpClientBuilder do
|
|
17
17
|
let(:logger) { mock("logger") }
|
18
18
|
let(:auth_setup) { klass.setup_basic_auth(double("logger"), {"user" => user, "password" => password_secured}) }
|
19
19
|
|
20
|
-
it "should return the user
|
21
|
-
expect(auth_setup[:user]).to eql(user)
|
20
|
+
it "should return the user escaped" do
|
21
|
+
expect(auth_setup[:user]).to eql(CGI.escape(user))
|
22
22
|
end
|
23
23
|
|
24
|
-
it "should return the password
|
25
|
-
expect(auth_setup[:password]).to eql(password)
|
26
|
-
end
|
27
|
-
|
28
|
-
context "passwords that need escaping" do
|
29
|
-
let(:password) { "foo@bar#" }
|
30
|
-
|
31
|
-
it "should escape the password" do
|
32
|
-
expect(auth_setup[:password]).to eql("foo%40bar%23")
|
33
|
-
end
|
24
|
+
it "should return the password escaped" do
|
25
|
+
expect(auth_setup[:password]).to eql(CGI.escape(password))
|
34
26
|
end
|
35
27
|
end
|
36
28
|
|
@@ -171,13 +171,15 @@ describe "outputs/elasticsearch" do
|
|
171
171
|
end
|
172
172
|
|
173
173
|
describe "without a port specified" do
|
174
|
+
let(:options) { super.merge('hosts' => 'localhost') }
|
174
175
|
it "should properly set the default port (9200) on the HTTP client" do
|
175
176
|
expect(manticore_url.port).to eql(9200)
|
176
177
|
end
|
177
178
|
end
|
178
179
|
describe "with a port other than 9200 specified" do
|
180
|
+
let(:options) { super.merge('hosts' => 'localhost:9202') }
|
179
181
|
it "should properly set the specified port on the HTTP client" do
|
180
|
-
expect(
|
182
|
+
expect(manticore_url.port).to eql(9202)
|
181
183
|
end
|
182
184
|
end
|
183
185
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-elasticsearch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.3.
|
4
|
+
version: 7.3.7
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -230,6 +230,10 @@ files:
|
|
230
230
|
- spec/fixtures/scripts/painless/scripted_update.painless
|
231
231
|
- spec/fixtures/scripts/painless/scripted_update_nested.painless
|
232
232
|
- spec/fixtures/scripts/painless/scripted_upsert.painless
|
233
|
+
- spec/fixtures/test_certs/ca/ca.crt
|
234
|
+
- spec/fixtures/test_certs/ca/ca.key
|
235
|
+
- spec/fixtures/test_certs/test.crt
|
236
|
+
- spec/fixtures/test_certs/test.key
|
233
237
|
- spec/integration/outputs/compressed_indexing_spec.rb
|
234
238
|
- spec/integration/outputs/create_spec.rb
|
235
239
|
- spec/integration/outputs/delete_spec.rb
|
@@ -290,6 +294,10 @@ test_files:
|
|
290
294
|
- spec/fixtures/scripts/painless/scripted_update.painless
|
291
295
|
- spec/fixtures/scripts/painless/scripted_update_nested.painless
|
292
296
|
- spec/fixtures/scripts/painless/scripted_upsert.painless
|
297
|
+
- spec/fixtures/test_certs/ca/ca.crt
|
298
|
+
- spec/fixtures/test_certs/ca/ca.key
|
299
|
+
- spec/fixtures/test_certs/test.crt
|
300
|
+
- spec/fixtures/test_certs/test.key
|
293
301
|
- spec/integration/outputs/compressed_indexing_spec.rb
|
294
302
|
- spec/integration/outputs/create_spec.rb
|
295
303
|
- spec/integration/outputs/delete_spec.rb
|