logstash-output-opensearch 1.0.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/ADMINS.md +29 -0
  5. data/CODE_OF_CONDUCT.md +25 -0
  6. data/CONTRIBUTING.md +99 -0
  7. data/DEVELOPER_GUIDE.md +208 -0
  8. data/Gemfile +20 -0
  9. data/LICENSE +202 -0
  10. data/MAINTAINERS.md +71 -0
  11. data/NOTICE +2 -0
  12. data/README.md +37 -0
  13. data/RELEASING.md +36 -0
  14. data/SECURITY.md +3 -0
  15. data/lib/logstash/outputs/opensearch.rb +449 -0
  16. data/lib/logstash/outputs/opensearch/distribution_checker.rb +44 -0
  17. data/lib/logstash/outputs/opensearch/http_client.rb +465 -0
  18. data/lib/logstash/outputs/opensearch/http_client/manticore_adapter.rb +140 -0
  19. data/lib/logstash/outputs/opensearch/http_client/pool.rb +467 -0
  20. data/lib/logstash/outputs/opensearch/http_client_builder.rb +182 -0
  21. data/lib/logstash/outputs/opensearch/template_manager.rb +60 -0
  22. data/lib/logstash/outputs/opensearch/templates/ecs-disabled/1x.json +44 -0
  23. data/lib/logstash/outputs/opensearch/templates/ecs-disabled/7x.json +44 -0
  24. data/lib/logstash/plugin_mixins/opensearch/api_configs.rb +168 -0
  25. data/lib/logstash/plugin_mixins/opensearch/common.rb +294 -0
  26. data/lib/logstash/plugin_mixins/opensearch/noop_distribution_checker.rb +18 -0
  27. data/logstash-output-opensearch.gemspec +40 -0
  28. data/spec/fixtures/_nodes/nodes.json +74 -0
  29. data/spec/fixtures/htpasswd +2 -0
  30. data/spec/fixtures/nginx_reverse_proxy.conf +22 -0
  31. data/spec/fixtures/scripts/painless/scripted_update.painless +2 -0
  32. data/spec/fixtures/scripts/painless/scripted_update_nested.painless +1 -0
  33. data/spec/fixtures/scripts/painless/scripted_upsert.painless +1 -0
  34. data/spec/integration/outputs/compressed_indexing_spec.rb +76 -0
  35. data/spec/integration/outputs/create_spec.rb +76 -0
  36. data/spec/integration/outputs/delete_spec.rb +72 -0
  37. data/spec/integration/outputs/index_spec.rb +164 -0
  38. data/spec/integration/outputs/index_version_spec.rb +110 -0
  39. data/spec/integration/outputs/ingest_pipeline_spec.rb +82 -0
  40. data/spec/integration/outputs/metrics_spec.rb +75 -0
  41. data/spec/integration/outputs/no_opensearch_on_startup_spec.rb +67 -0
  42. data/spec/integration/outputs/painless_update_spec.rb +147 -0
  43. data/spec/integration/outputs/parent_spec.rb +103 -0
  44. data/spec/integration/outputs/retry_spec.rb +182 -0
  45. data/spec/integration/outputs/routing_spec.rb +70 -0
  46. data/spec/integration/outputs/sniffer_spec.rb +70 -0
  47. data/spec/integration/outputs/templates_spec.rb +105 -0
  48. data/spec/integration/outputs/update_spec.rb +123 -0
  49. data/spec/opensearch_spec_helper.rb +141 -0
  50. data/spec/spec_helper.rb +19 -0
  51. data/spec/unit/http_client_builder_spec.rb +194 -0
  52. data/spec/unit/outputs/error_whitelist_spec.rb +62 -0
  53. data/spec/unit/outputs/opensearch/http_client/manticore_adapter_spec.rb +159 -0
  54. data/spec/unit/outputs/opensearch/http_client/pool_spec.rb +306 -0
  55. data/spec/unit/outputs/opensearch/http_client_spec.rb +292 -0
  56. data/spec/unit/outputs/opensearch/template_manager_spec.rb +36 -0
  57. data/spec/unit/outputs/opensearch_proxy_spec.rb +112 -0
  58. data/spec/unit/outputs/opensearch_spec.rb +800 -0
  59. data/spec/unit/outputs/opensearch_ssl_spec.rb +179 -0
  60. metadata +289 -0
  61. metadata.gz.sig +0 -0
@@ -0,0 +1,179 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+
10
+ require_relative "../../../spec/spec_helper"
11
+ require 'stud/temporary'
12
+
13
+ describe "SSL option" do
14
+ let(:manticore_double) { double("manticoreSSL #{self.inspect}") }
15
+ before do
16
+ allow(manticore_double).to receive(:close)
17
+
18
+ response_double = double("manticore response").as_null_object
19
+ # Allow healtchecks
20
+ allow(manticore_double).to receive(:head).with(any_args).and_return(response_double)
21
+ allow(manticore_double).to receive(:get).with(any_args).and_return(response_double)
22
+
23
+ allow(::Manticore::Client).to receive(:new).and_return(manticore_double)
24
+ end
25
+
26
+ context "when using ssl without cert verification" do
27
+ subject do
28
+ require "logstash/outputs/opensearch"
29
+ settings = {
30
+ "hosts" => "localhost",
31
+ "ssl" => true,
32
+ "ssl_certificate_verification" => false,
33
+ "pool_max" => 1,
34
+ "pool_max_per_route" => 1
35
+ }
36
+ LogStash::Outputs::OpenSearch.new(settings)
37
+ end
38
+
39
+ after do
40
+ subject.close
41
+ end
42
+
43
+ it "should pass the flag to the OpenSearch client" do
44
+ expect(::Manticore::Client).to receive(:new) do |args|
45
+ expect(args[:ssl]).to eq(:enabled => true, :verify => false)
46
+ end.and_return(manticore_double)
47
+
48
+ subject.register
49
+ end
50
+
51
+ it "should print a warning" do
52
+ disabled_matcher = /You have enabled encryption but DISABLED certificate verification/
53
+ expect(subject.logger).to receive(:warn).with(disabled_matcher).at_least(:once)
54
+ allow(subject.logger).to receive(:warn).with(any_args)
55
+
56
+ subject.register
57
+ allow(LogStash::Outputs::OpenSearch::HttpClient::Pool).to receive(:start)
58
+ end
59
+ end
60
+
61
+ context "when using ssl with client certificates" do
62
+ let(:keystore_path) { Stud::Temporary.file.path }
63
+ before do
64
+ `openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout lumberjack.key -out #{keystore_path}.pem`
65
+ end
66
+
67
+ after :each do
68
+ File.delete(keystore_path)
69
+ subject.close
70
+ end
71
+
72
+ subject do
73
+ require "logstash/outputs/opensearch"
74
+ settings = {
75
+ "hosts" => "node01",
76
+ "ssl" => true,
77
+ "cacert" => keystore_path,
78
+ }
79
+ next LogStash::Outputs::OpenSearch.new(settings)
80
+ end
81
+
82
+ it "should pass the keystore parameters to the OpenSearch client" do
83
+ expect(::Manticore::Client).to receive(:new) do |args|
84
+ expect(args[:ssl]).to include(:keystore => keystore_path, :keystore_password => "test")
85
+ end.and_call_original
86
+ subject.register
87
+ end
88
+
89
+ end
90
+
91
+ context "when using ssl with client certificates and key" do
92
+ let(:tls_certificate) { Stud::Temporary.file.path }
93
+ let(:tls_key) { Stud::Temporary.file.path }
94
+ before do
95
+ `openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout #{tls_key} -out #{tls_certificate}`
96
+ end
97
+
98
+ after :each do
99
+ File.delete(tls_key)
100
+ File.delete(tls_certificate)
101
+ subject.close
102
+ end
103
+
104
+ subject do
105
+ require "logstash/outputs/opensearch"
106
+ settings = {
107
+ "hosts" => "node01",
108
+ "ssl" => true,
109
+ "tls_certificate" => tls_certificate,
110
+ "tls_key" => tls_key
111
+ }
112
+ next LogStash::Outputs::OpenSearch.new(settings)
113
+ end
114
+
115
+ it "should pass the tls certificate parameters to the OpenSearch client" do
116
+ expect(::Manticore::Client).to receive(:new) do |args|
117
+ expect(args[:ssl]).to include(:client_cert => tls_certificate, :client_key => tls_key)
118
+ end.and_call_original
119
+ subject.register
120
+ end
121
+
122
+ end
123
+
124
+ context "passing only tls certificate but missing the key" do
125
+ let(:tls_certificate) { Stud::Temporary.file.path }
126
+ let(:tls_key) { Stud::Temporary.file.path }
127
+ before do
128
+ `openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout #{tls_key} -out #{tls_certificate}`
129
+ end
130
+
131
+ after :each do
132
+ File.delete(tls_key)
133
+ File.delete(tls_certificate)
134
+ subject.close
135
+ end
136
+
137
+ subject do
138
+ settings = {
139
+ "hosts" => "node01",
140
+ "ssl" => true,
141
+ "tls_certificate" => tls_certificate,
142
+ }
143
+ next LogStash::Outputs::OpenSearch.new(settings)
144
+ end
145
+
146
+ it "should not load plugin" do
147
+ expect { subject.register }.to raise_error(LogStash::ConfigurationError)
148
+ end
149
+ end
150
+
151
+ context "passing only tls key but missing the certificate" do
152
+ let(:tls_certificate) { Stud::Temporary.file.path }
153
+ let(:tls_key) { Stud::Temporary.file.path }
154
+ before do
155
+ `openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout #{tls_key} -out #{tls_certificate}`
156
+ end
157
+
158
+ after :each do
159
+ File.delete(tls_key)
160
+ File.delete(tls_certificate)
161
+ subject.close
162
+ end
163
+
164
+ subject do
165
+ settings = {
166
+ "hosts" => "node01",
167
+ "ssl" => true,
168
+ "tls_key" => tls_key,
169
+ }
170
+ next LogStash::Outputs::OpenSearch.new(settings)
171
+ end
172
+
173
+ it "should not load plugin" do
174
+ expect { subject.register }.to raise_error(LogStash::ConfigurationError)
175
+ end
176
+ end
177
+
178
+
179
+ end
metadata ADDED
@@ -0,0 +1,289 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-output-opensearch
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: java
6
+ authors:
7
+ - Elastic
8
+ - OpenSearch Contributors
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain:
12
+ - |
13
+ -----BEGIN CERTIFICATE-----
14
+ MIIDfDCCAmSgAwIBAgIBATANBgkqhkiG9w0BAQUFADBCMRMwEQYDVQQDDApvcGVu
15
+ c2VhcmNoMRYwFAYKCZImiZPyLGQBGRYGYW1hem9uMRMwEQYKCZImiZPyLGQBGRYD
16
+ Y29tMB4XDTIxMDgwMjIxMDQwM1oXDTIyMDgwMjIxMDQwM1owQjETMBEGA1UEAwwK
17
+ b3BlbnNlYXJjaDEWMBQGCgmSJomT8ixkARkWBmFtYXpvbjETMBEGCgmSJomT8ixk
18
+ ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1z3/jcitjV
19
+ umXwRFn+JSBBd36qZB54Dtucf6+E2fmNPzBRhgYN5XJy/+clQJ9NIJV7C8H52P3V
20
+ dsce/VXcNAcgfUdlN57nM0ksjFFNlnHWXea8Ub9/6R1K0p1RBizEINzUneoJLvqe
21
+ 7w/KfvBJStj7AmJgZmzCiu98j75YLcdLhZQykRyJdB03wZsMQUvxPFkhTZn+Qi8k
22
+ 0U909l9JD0i1PC0xVukYlskUA2xeo36kMMllABJGN536Z0aIT2KX2XTiKK7hILoP
23
+ +flNmgA4eyXa5Ki9q4HBN6QhsTKdEinqGngQnUI35YTu2AHsvfjn1wP/nUa9aRVH
24
+ zfR37/NQFkECAwEAAaN9MHswCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
25
+ BBYEFJJ2myhLXK742btavNbG0IWrMNBIMCAGA1UdEQQZMBeBFW9wZW5zZWFyY2hA
26
+ YW1hem9uLmNvbTAgBgNVHRIEGTAXgRVvcGVuc2VhcmNoQGFtYXpvbi5jb20wDQYJ
27
+ KoZIhvcNAQEFBQADggEBAE7gBP5ecTtKb04qmEsnbJ6+yn0LUSmxPabFBnB6h1+T
28
+ XW8BvBw9MpE//5fQf4HSia3m9XjRpl4WxBcJiyfLER64tk/c1JLhV2+rq3CCV/be
29
+ DFSP6gY93kK7jwauajGQvyHzORaW1TBM6diIRYCMLY7Isf+PTHl0xhZZBSVm8wl6
30
+ IstV+mTP2KC1l7hSzUDb4rrOSnpRB7AEczcDdkjwzHKIlw8rcL+PLLnFTOgqKyq3
31
+ yXikuH6LEVykA8pgOcB9gKsB2/zMd2ZlSj2monM8Qw9EfB14ZSDTYS8VYuwWCeF0
32
+ eFmXXk0ufQFKl1Yll7quHkmQ0PzKkvXTpONBT6qPkXE=
33
+ -----END CERTIFICATE-----
34
+ date: 2021-08-02 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 0.5.4
42
+ - - "<"
43
+ - !ruby/object:Gem::Version
44
+ version: 1.0.0
45
+ name: manticore
46
+ prerelease: false
47
+ type: :runtime
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.5.4
53
+ - - "<"
54
+ - !ruby/object:Gem::Version
55
+ version: 1.0.0
56
+ - !ruby/object:Gem::Dependency
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.0'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.0.17
65
+ name: stud
66
+ prerelease: false
67
+ type: :runtime
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '0.0'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.0.17
76
+ - !ruby/object:Gem::Dependency
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '1.60'
82
+ - - "<="
83
+ - !ruby/object:Gem::Version
84
+ version: '2.99'
85
+ name: logstash-core-plugin-api
86
+ prerelease: false
87
+ type: :runtime
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '1.60'
93
+ - - "<="
94
+ - !ruby/object:Gem::Version
95
+ version: '2.99'
96
+ - !ruby/object:Gem::Dependency
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '1.0'
102
+ name: logstash-mixin-ecs_compatibility_support
103
+ prerelease: false
104
+ type: :runtime
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.0'
110
+ - !ruby/object:Gem::Dependency
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ name: logstash-codec-plain
117
+ prerelease: false
118
+ type: :development
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ name: logstash-devutils
131
+ prerelease: false
132
+ type: :development
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ name: flores
145
+ prerelease: false
146
+ type: :development
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '0.6'
158
+ name: cabin
159
+ prerelease: false
160
+ type: :development
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.6'
166
+ description: This gem is a Logstash plugin required to be installed on top of the
167
+ Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gem. This gem
168
+ is not a stand-alone program
169
+ email: opensearch@amazon.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - ADMINS.md
175
+ - CODE_OF_CONDUCT.md
176
+ - CONTRIBUTING.md
177
+ - DEVELOPER_GUIDE.md
178
+ - Gemfile
179
+ - LICENSE
180
+ - MAINTAINERS.md
181
+ - NOTICE
182
+ - README.md
183
+ - RELEASING.md
184
+ - SECURITY.md
185
+ - lib/logstash/outputs/opensearch.rb
186
+ - lib/logstash/outputs/opensearch/distribution_checker.rb
187
+ - lib/logstash/outputs/opensearch/http_client.rb
188
+ - lib/logstash/outputs/opensearch/http_client/manticore_adapter.rb
189
+ - lib/logstash/outputs/opensearch/http_client/pool.rb
190
+ - lib/logstash/outputs/opensearch/http_client_builder.rb
191
+ - lib/logstash/outputs/opensearch/template_manager.rb
192
+ - lib/logstash/outputs/opensearch/templates/ecs-disabled/1x.json
193
+ - lib/logstash/outputs/opensearch/templates/ecs-disabled/7x.json
194
+ - lib/logstash/plugin_mixins/opensearch/api_configs.rb
195
+ - lib/logstash/plugin_mixins/opensearch/common.rb
196
+ - lib/logstash/plugin_mixins/opensearch/noop_distribution_checker.rb
197
+ - logstash-output-opensearch.gemspec
198
+ - spec/fixtures/_nodes/nodes.json
199
+ - spec/fixtures/htpasswd
200
+ - spec/fixtures/nginx_reverse_proxy.conf
201
+ - spec/fixtures/scripts/painless/scripted_update.painless
202
+ - spec/fixtures/scripts/painless/scripted_update_nested.painless
203
+ - spec/fixtures/scripts/painless/scripted_upsert.painless
204
+ - spec/integration/outputs/compressed_indexing_spec.rb
205
+ - spec/integration/outputs/create_spec.rb
206
+ - spec/integration/outputs/delete_spec.rb
207
+ - spec/integration/outputs/index_spec.rb
208
+ - spec/integration/outputs/index_version_spec.rb
209
+ - spec/integration/outputs/ingest_pipeline_spec.rb
210
+ - spec/integration/outputs/metrics_spec.rb
211
+ - spec/integration/outputs/no_opensearch_on_startup_spec.rb
212
+ - spec/integration/outputs/painless_update_spec.rb
213
+ - spec/integration/outputs/parent_spec.rb
214
+ - spec/integration/outputs/retry_spec.rb
215
+ - spec/integration/outputs/routing_spec.rb
216
+ - spec/integration/outputs/sniffer_spec.rb
217
+ - spec/integration/outputs/templates_spec.rb
218
+ - spec/integration/outputs/update_spec.rb
219
+ - spec/opensearch_spec_helper.rb
220
+ - spec/spec_helper.rb
221
+ - spec/unit/http_client_builder_spec.rb
222
+ - spec/unit/outputs/error_whitelist_spec.rb
223
+ - spec/unit/outputs/opensearch/http_client/manticore_adapter_spec.rb
224
+ - spec/unit/outputs/opensearch/http_client/pool_spec.rb
225
+ - spec/unit/outputs/opensearch/http_client_spec.rb
226
+ - spec/unit/outputs/opensearch/template_manager_spec.rb
227
+ - spec/unit/outputs/opensearch_proxy_spec.rb
228
+ - spec/unit/outputs/opensearch_spec.rb
229
+ - spec/unit/outputs/opensearch_ssl_spec.rb
230
+ homepage: https://opensearch.org/
231
+ licenses:
232
+ - Apache-2.0
233
+ metadata:
234
+ logstash_plugin: 'true'
235
+ logstash_group: output
236
+ source_code_uri: https://github.com/opensearch-project/logstash-output-opensearch
237
+ post_install_message:
238
+ rdoc_options: []
239
+ require_paths:
240
+ - lib
241
+ required_ruby_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ requirements: []
252
+ rubyforge_project:
253
+ rubygems_version: 2.7.10
254
+ signing_key:
255
+ specification_version: 4
256
+ summary: Stores logs in OpenSearch
257
+ test_files:
258
+ - spec/fixtures/_nodes/nodes.json
259
+ - spec/fixtures/htpasswd
260
+ - spec/fixtures/nginx_reverse_proxy.conf
261
+ - spec/fixtures/scripts/painless/scripted_update.painless
262
+ - spec/fixtures/scripts/painless/scripted_update_nested.painless
263
+ - spec/fixtures/scripts/painless/scripted_upsert.painless
264
+ - spec/integration/outputs/compressed_indexing_spec.rb
265
+ - spec/integration/outputs/create_spec.rb
266
+ - spec/integration/outputs/delete_spec.rb
267
+ - spec/integration/outputs/index_spec.rb
268
+ - spec/integration/outputs/index_version_spec.rb
269
+ - spec/integration/outputs/ingest_pipeline_spec.rb
270
+ - spec/integration/outputs/metrics_spec.rb
271
+ - spec/integration/outputs/no_opensearch_on_startup_spec.rb
272
+ - spec/integration/outputs/painless_update_spec.rb
273
+ - spec/integration/outputs/parent_spec.rb
274
+ - spec/integration/outputs/retry_spec.rb
275
+ - spec/integration/outputs/routing_spec.rb
276
+ - spec/integration/outputs/sniffer_spec.rb
277
+ - spec/integration/outputs/templates_spec.rb
278
+ - spec/integration/outputs/update_spec.rb
279
+ - spec/opensearch_spec_helper.rb
280
+ - spec/spec_helper.rb
281
+ - spec/unit/http_client_builder_spec.rb
282
+ - spec/unit/outputs/error_whitelist_spec.rb
283
+ - spec/unit/outputs/opensearch/http_client/manticore_adapter_spec.rb
284
+ - spec/unit/outputs/opensearch/http_client/pool_spec.rb
285
+ - spec/unit/outputs/opensearch/http_client_spec.rb
286
+ - spec/unit/outputs/opensearch/template_manager_spec.rb
287
+ - spec/unit/outputs/opensearch_proxy_spec.rb
288
+ - spec/unit/outputs/opensearch_spec.rb
289
+ - spec/unit/outputs/opensearch_ssl_spec.rb