logstash-integration-logstash 0.0.1-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 (46) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE +202 -0
  5. data/NOTICE.TXT +2 -0
  6. data/README.md +98 -0
  7. data/VERSION +1 -0
  8. data/docs/index.asciidoc +71 -0
  9. data/docs/input-logstash.asciidoc +252 -0
  10. data/docs/output-logstash.asciidoc +271 -0
  11. data/lib/logstash/inputs/logstash.rb +185 -0
  12. data/lib/logstash/outputs/logstash.rb +162 -0
  13. data/logstash-integration-logstash.gemspec +36 -0
  14. data/spec/fixtures/certs/generate.sh +69 -0
  15. data/spec/fixtures/certs/generated/README.txt +2 -0
  16. data/spec/fixtures/certs/generated/client_from_root.jks +0 -0
  17. data/spec/fixtures/certs/generated/client_from_root.key.pem +52 -0
  18. data/spec/fixtures/certs/generated/client_from_root.key.pkcs8.pem +54 -0
  19. data/spec/fixtures/certs/generated/client_from_root.p12 +0 -0
  20. data/spec/fixtures/certs/generated/client_from_root.pem +35 -0
  21. data/spec/fixtures/certs/generated/client_from_untrusted.jks +0 -0
  22. data/spec/fixtures/certs/generated/client_from_untrusted.key.pem +52 -0
  23. data/spec/fixtures/certs/generated/client_from_untrusted.key.pkcs8.pem +54 -0
  24. data/spec/fixtures/certs/generated/client_from_untrusted.p12 +0 -0
  25. data/spec/fixtures/certs/generated/client_from_untrusted.pem +35 -0
  26. data/spec/fixtures/certs/generated/client_self_signed.jks +0 -0
  27. data/spec/fixtures/certs/generated/client_self_signed.key.pem +52 -0
  28. data/spec/fixtures/certs/generated/client_self_signed.key.pkcs8.pem +54 -0
  29. data/spec/fixtures/certs/generated/client_self_signed.p12 +0 -0
  30. data/spec/fixtures/certs/generated/client_self_signed.pem +32 -0
  31. data/spec/fixtures/certs/generated/root.key.pem +52 -0
  32. data/spec/fixtures/certs/generated/root.pem +32 -0
  33. data/spec/fixtures/certs/generated/server_from_root-key-pkcs8.pem +52 -0
  34. data/spec/fixtures/certs/generated/server_from_root.jks +0 -0
  35. data/spec/fixtures/certs/generated/server_from_root.key.pem +52 -0
  36. data/spec/fixtures/certs/generated/server_from_root.key.pkcs8.pem +54 -0
  37. data/spec/fixtures/certs/generated/server_from_root.p12 +0 -0
  38. data/spec/fixtures/certs/generated/server_from_root.pem +37 -0
  39. data/spec/fixtures/certs/generated/untrusted.key.pem +52 -0
  40. data/spec/fixtures/certs/generated/untrusted.pem +32 -0
  41. data/spec/fixtures/certs/openssl.cnf +57 -0
  42. data/spec/spec_helper.rb +22 -0
  43. data/spec/unit/full_transmission_spec.rb +202 -0
  44. data/spec/unit/logstash_input_spec.rb +151 -0
  45. data/spec/unit/logstash_output_spec.rb +170 -0
  46. metadata +243 -0
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ gxbVPuFrxfd7bdsIsfJcT4AV2tRpNA==
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ gxbVPuFrxfd7bdsIsfJcT4AV2tRpNA==
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,54 @@
1
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
2
+ 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
54
+ -----END ENCRYPTED PRIVATE KEY-----
@@ -0,0 +1,37 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
36
+ onoG0Zjb7skQttS0yA==
37
+ -----END CERTIFICATE-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ CJXkeVKeh5sWp0maI7gC69stR6wvhg==
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,57 @@
1
+ [ req ]
2
+ distinguished_name= req_distinguished_name
3
+ attributes= req_attributes
4
+
5
+ [ req_distinguished_name ]
6
+ countryName= Country Name (2 letter code)
7
+ countryName_min= 2
8
+ countryName_max= 2
9
+ stateOrProvinceName= State or Province Name (full name)
10
+ localityName= Locality Name (eg, city)
11
+ 0.organizationName= Organization Name (eg, company)
12
+ organizationalUnitName= Organizational Unit Name (eg, section)
13
+ commonName= Common Name (eg, fully qualified host name)
14
+ commonName_max= 64
15
+ emailAddress= Email Address
16
+ emailAddress_max= 64
17
+
18
+ [ req_attributes ]
19
+ challengePassword= A challenge password
20
+ challengePassword_min= 4
21
+ challengePassword_max= 20
22
+
23
+ [ ca ]
24
+ subjectKeyIdentifier = hash
25
+ authorityKeyIdentifier = keyid:always,issuer
26
+ basicConstraints = critical, CA:true
27
+ keyUsage = critical, digitalSignature, cRLSign, keyCertSign
28
+
29
+ [ client_cert ]
30
+ basicConstraints = CA:FALSE
31
+ nsCertType = client, email
32
+ nsComment = "OpenSSL Generated Client Certificate"
33
+ subjectKeyIdentifier = hash
34
+ authorityKeyIdentifier = keyid,issuer
35
+ keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
36
+ extendedKeyUsage = clientAuth, emailProtection
37
+ subjectAltName = "DNS:localhost, IP:127.0.0.1"
38
+
39
+ [ client_cert_no_matching_subject ]
40
+ basicConstraints = CA:FALSE
41
+ nsCertType = client, email
42
+ nsComment = "OpenSSL Generated Client Certificate"
43
+ subjectKeyIdentifier = hash
44
+ authorityKeyIdentifier = keyid,issuer
45
+ keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
46
+ extendedKeyUsage = clientAuth, emailProtection
47
+ subjectAltName = "DNS:nowhere, IP:123.45.67.89"
48
+
49
+ [ server_cert ]
50
+ basicConstraints = CA:FALSE
51
+ nsCertType = server
52
+ nsComment = "OpenSSL Generated Server Certificate"
53
+ subjectKeyIdentifier = hash
54
+ authorityKeyIdentifier = keyid,issuer:always
55
+ keyUsage = critical, digitalSignature, keyEncipherment
56
+ extendedKeyUsage = serverAuth
57
+ subjectAltName = "DNS:localhost, IP:127.0.0.1"
@@ -0,0 +1,22 @@
1
+ require "rspec"
2
+ require "rspec/mocks"
3
+ require "logstash/devutils/rspec/spec_helper"
4
+
5
+ module SpecHelper
6
+
7
+ def cert_fixture(name)
8
+ File.expand_path("fixtures/certs/generated/#{name}", __dir__)
9
+ end
10
+
11
+ def cert_fixture!(name)
12
+ cert_fixture(name).tap do |filename|
13
+ fail "MISSING: #{filename}" unless File.file?(filename)
14
+ fail "UNREADABLE: #{filename}" unless File.readable?(filename)
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ RSpec.configure do |config|
21
+ config.include SpecHelper
22
+ end
@@ -0,0 +1,202 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "../spec_helper"
4
+ require "logstash/devutils/rspec/shared_examples"
5
+ require "logstash/inputs/logstash"
6
+ require "logstash/outputs/logstash"
7
+ require "rspec/collection_matchers"
8
+ require "random-port"
9
+
10
+ describe 'Logstash Output -> Input complete transmission' do
11
+
12
+ let(:port) { @available_port }
13
+
14
+ around(:each) do |example|
15
+ RandomPort::Pool::SINGLETON.acquire do |available_port|
16
+ @available_port = available_port
17
+ example.call
18
+ end
19
+ end
20
+
21
+ # requires: input_events (an array of Events)
22
+ # requires: output_plugin (a Logstash output plugin)
23
+ # requires: input_plugin (a Logstash input plugin)
24
+ # optional: concurrency (default: 1)
25
+ # optional: batch_size (default: 125)
26
+ # provides: output_events (an array of Events)
27
+ shared_context 'transmission' do
28
+ let(:concurrency) { defined?(super) ? super() : 8 }
29
+ let(:batch_size) { defined?(super) ? super() : 125 }
30
+
31
+ let(:output_events) { [] }
32
+ let(:errors) { [] }
33
+
34
+ before(:each) do
35
+ input_plugin.register
36
+ output_plugin.register
37
+
38
+ transmit_queue = Queue.new
39
+ input_events.each_slice(batch_size) { |batch| transmit_queue << batch }
40
+
41
+ receipt_queue = Queue.new
42
+ input_thread = Thread.new(receipt_queue) { |queue| input_plugin.run(queue) }
43
+
44
+ error_queue = Queue.new
45
+
46
+ concurrency.times.map do
47
+ Thread.new(receipt_queue) do
48
+ loop do
49
+ batch = transmit_queue.pop(true) rescue break
50
+ begin
51
+ Timeout.timeout(5) do
52
+ output_plugin.multi_receive(batch)
53
+ end
54
+ rescue => e
55
+ error_queue << e
56
+ end
57
+ end
58
+ end
59
+ end.map(&:join)
60
+
61
+ output_plugin.close
62
+ input_plugin.stop
63
+ input_thread.join
64
+
65
+ receipt_queue.size.times { output_events << receipt_queue.pop }
66
+ error_queue.size.times { errors << error_queue.pop }
67
+ end
68
+ end
69
+
70
+ # provides: input_events
71
+ # depends: output_events
72
+ shared_examples "large sequence" do
73
+ let(:event_count) { 10_000 }
74
+
75
+ let(:input_events) { (0...event_count).map { |idx| LogStash::Event.new("event" => {"sequence" => idx}) } }
76
+
77
+ it 'transmits all events' do
78
+ expect(output_events).to have_exactly(event_count).items
79
+
80
+ expect(output_events.map{|e| e.get("[event][sequence]")}.uniq).to have_exactly(event_count).items
81
+ end
82
+ end
83
+
84
+ shared_examples "connection failure" do
85
+ let(:input_events) { [LogStash::Event.new("event" => {"sequence" => 999})] }
86
+
87
+ it 'fails to transmit the events' do
88
+ expect(errors).to have_exactly(1).items
89
+ expect(output_events).to be_empty
90
+ end
91
+ end
92
+
93
+ context 'basic plaintext' do
94
+ let(:output_plugin) { LogStash::Outputs::Logstash.new("host" => "127.0.0.1", "port" => port, "ssl_enabled" => false) }
95
+ let(:input_plugin) { LogStash::Inputs::Logstash.new("host" => "127.0.0.1", "port" => port, "ssl_enabled" => false) }
96
+
97
+ include_context 'transmission'
98
+ include_examples "large sequence"
99
+ end
100
+
101
+ context 'simple ssl with client authentication none' do
102
+ let(:input_plugin) {
103
+ LogStash::Inputs::Logstash.new({
104
+ "host" => "127.0.0.1", "port" => port,
105
+ "ssl_keystore_path" => cert_fixture!('server_from_root.jks'),
106
+ "ssl_keystore_password" => "12345678",
107
+ })
108
+ }
109
+
110
+ context 'output connects via ssl' do
111
+ let(:output_plugin) {
112
+ LogStash::Outputs::Logstash.new({
113
+ "host" => "127.0.0.1", "port" => port,
114
+ "ssl_certificate_authorities" => cert_fixture!('root.pem'),
115
+ })
116
+ }
117
+
118
+ include_context 'transmission'
119
+ include_examples "large sequence"
120
+ end
121
+
122
+ context 'output connects without ssl' do
123
+ let(:output_plugin) {
124
+ LogStash::Outputs::Logstash.new({
125
+ "host" => "127.0.0.1", "port" => port,
126
+ "ssl_enabled" => false,
127
+ })
128
+ }
129
+
130
+ include_context 'transmission'
131
+ include_examples "connection failure"
132
+ end
133
+
134
+ end
135
+
136
+ context 'client auth ssl' do
137
+ let(:input_plugin) {
138
+ LogStash::Inputs::Logstash.new({
139
+ "host" => "127.0.0.1", "port" => port,
140
+ "ssl_certificate" => cert_fixture!('server_from_root.pem'),
141
+ "ssl_key" => cert_fixture!('server_from_root.key.pkcs8.pem'),
142
+ "ssl_key_passphrase" => "12345678",
143
+ "ssl_certificate_authorities" => cert_fixture!('root.pem'),
144
+ "ssl_client_authentication" => "required",
145
+ })
146
+ }
147
+
148
+ context 'output presents peer certificate' do
149
+ let(:output_plugin) {
150
+ LogStash::Outputs::Logstash.new({
151
+ "host" => "127.0.0.1", "port" => port,
152
+ "ssl_certificate_authorities" => cert_fixture!('root.pem'),
153
+ "ssl_keystore_path" => cert_fixture!('client_from_root.jks'),
154
+ "ssl_keystore_password" => "12345678",
155
+ })
156
+ }
157
+
158
+ include_context 'transmission'
159
+ include_examples "large sequence"
160
+ end
161
+
162
+ context 'output presents NO certificate' do
163
+ let(:output_plugin) {
164
+ LogStash::Outputs::Logstash.new({
165
+ "host" => "127.0.0.1", "port" => port,
166
+ "ssl_certificate_authorities" => cert_fixture!('root.pem'),
167
+ })
168
+ }
169
+
170
+ include_context 'transmission'
171
+ include_examples "connection failure"
172
+ end
173
+
174
+ context 'output presents untrusted certificate' do
175
+ let(:output_plugin) {
176
+ LogStash::Outputs::Logstash.new({
177
+ "host" => "127.0.0.1", "port" => port,
178
+ "ssl_certificate_authorities" => cert_fixture!('root.pem'),
179
+ "ssl_keystore_path" => cert_fixture!('client_from_untrusted.jks'),
180
+ "ssl_keystore_password" => "12345678",
181
+ })
182
+ }
183
+
184
+ include_context 'transmission'
185
+ include_examples "connection failure"
186
+ end
187
+
188
+ context 'output presents self-signed certificate' do
189
+ let(:output_plugin) {
190
+ LogStash::Outputs::Logstash.new({
191
+ "host" => "127.0.0.1", "port" => port,
192
+ "ssl_certificate_authorities" => cert_fixture!('root.pem'),
193
+ "ssl_keystore_path" => cert_fixture!('client_self_signed.jks'),
194
+ "ssl_keystore_password" => "12345678",
195
+ })
196
+ }
197
+
198
+ include_context 'transmission'
199
+ include_examples "connection failure"
200
+ end
201
+ end
202
+ end