fluent-plugin-nats 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 774b17902a6d2b133d83d093ae6ea1b2e1767112
4
+ data.tar.gz: 6d75ec076c1ab6e82916bd43da7101191a34d5b4
5
+ SHA512:
6
+ metadata.gz: 8dc09878eeee36105446dc2a07669f9cd57c55547d2c430fc1be0f944dcddaa45d94335411474a420639a07cb672078c7caaf8917f721d8136bbf16b24fd0fe7
7
+ data.tar.gz: 5f8a5cfbb0190f7600c8450d8e82afaeaaee9368da6e456d3bb11e0f61d289f430630c0d9c0bfe868d1382bee54b5212efb2ca8887ffa7a312aa039e448df746
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ Gemfile.lock
5
6
  coverage
6
7
  InstalledFiles
7
8
  lib/bundler/man
@@ -1,4 +1,16 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.2
4
- - 1.9.3
3
+ - 2.4.2
4
+ - 2.3.5
5
+ - 2.2
6
+ - 2.1
7
+
8
+ env:
9
+ global:
10
+ GNATSD_VERSION: 1.0.4
11
+
12
+ before_install:
13
+ - sudo rm -f /usr/local/bin/gnatsd
14
+ - curl -L https://github.com/nats-io/gnatsd/releases/download/v${GNATSD_VERSION}/gnatsd-v${GNATSD_VERSION}-linux-amd64.zip > /tmp/gnatsd-v${GNATSD_VERSION}-linux-amd64.zip
15
+ - unzip /tmp/gnatsd-v${GNATSD_VERSION}-linux-amd64.zip -d /tmp
16
+ - sudo mv /tmp/gnatsd-v${GNATSD_VERSION}-linux-amd64/gnatsd /usr/local/bin/gnatsd
data/README.md CHANGED
@@ -12,7 +12,7 @@ Setup the NATS input:
12
12
 
13
13
  ~~~~~
14
14
  <source>
15
- type nats
15
+ @type nats
16
16
  tag nats
17
17
  host localhost
18
18
  port 4222
@@ -27,7 +27,7 @@ Setup the match output:
27
27
 
28
28
  ~~~~
29
29
  <match nats.fluent.**>
30
- type stdout
30
+ @type stdout
31
31
  </match>
32
32
  ~~~~
33
33
 
data/Rakefile CHANGED
@@ -8,7 +8,8 @@ Rake::TestTask.new(:test) do |test|
8
8
  test.test_files = Dir['test/plugin/*.rb']
9
9
  test.ruby_opts = ['-rubygems'] if defined? Gem
10
10
  test.ruby_opts << '-I.'
11
- test.verbose = true
11
+ test.verbose = false
12
+ test.warning = false
12
13
  end
13
14
 
14
15
  task :default => :test
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = "fluent-plugin-nats"
6
- gem.version = File.read("VERSION").strip
6
+ gem.version = "0.1.0"
7
7
  gem.authors = ["Eduardo Aceituno"]
8
8
  gem.email = ["achied@gmail.com"]
9
9
  gem.homepage = "https://github.com/achied/fluent-plugin-nats"
@@ -15,9 +15,10 @@ Gem::Specification.new do |gem|
15
15
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
16
  gem.require_paths = ["lib"]
17
17
 
18
- gem.add_dependency "fluentd", ">= 0.10.7"
18
+ gem.add_dependency "eventmachine", ">= 0.12.10"
19
+ gem.add_dependency "fluentd", ">= 0.10.7", "< 0.14"
19
20
  gem.add_dependency "nats", ">= 0.4.22"
20
- gem.add_dependency "eventmachine", "= 0.12.10"
21
-
21
+
22
22
  gem.add_development_dependency "rake", ">= 0.9.2"
23
+ gem.add_development_dependency "test-unit", "> 3.1"
23
24
  end
@@ -4,7 +4,7 @@ module Fluent
4
4
 
5
5
  config_param :host, :string, :default => "localhost"
6
6
  config_param :user, :string, :default => "nats"
7
- config_param :password, :string, :default => "nats"
7
+ config_param :password, :string, :default => "nats", :secret => true
8
8
  config_param :port, :integer, :default => 4222
9
9
  config_param :queue, :string, :default => "fluent.>"
10
10
  config_param :tag, :string, :default => "nats"
@@ -21,7 +21,7 @@ module Fluent
21
21
 
22
22
  def configure(conf)
23
23
  super
24
- @conf = conf
24
+
25
25
  unless @host && @queue
26
26
  raise ConfigError, "'host' and 'queue' must be all specified."
27
27
  end
@@ -40,7 +40,7 @@ module Fluent
40
40
  super
41
41
  run_reactor_thread
42
42
  @thread = Thread.new(&method(:run))
43
- $log.info "listening nats on #{@uri}/#{@queue}"
43
+ log.info "listening nats on #{@uri}/#{@queue}"
44
44
  end
45
45
 
46
46
  def shutdown
@@ -61,11 +61,11 @@ module Fluent
61
61
  begin
62
62
  msg_json = JSON.parse(msg)
63
63
  rescue JSON::ParserError => e
64
- $log.error "Failed parsing JSON #{e.inspect}. Passing as a normal string"
64
+ log.error "Failed parsing JSON #{e.inspect}. Passing as a normal string"
65
65
  msg_json = msg
66
66
  end
67
67
  time = Engine.now
68
- Engine.emit(tag, time, msg_json)
68
+ router.emit(tag, time, msg_json || {})
69
69
  end
70
70
  end
71
71
  }
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "nats/client"
5
+ require "optparse"
6
+ require "uri"
7
+
8
+ def main(argv)
9
+ uri = nil
10
+ queue = nil
11
+ message = nil
12
+ parser = OptionParser.new
13
+ parser.on("--uri=URI", "NATS server URI") do |value|
14
+ uri = URI.parse(value)
15
+ end
16
+ parser.on("--queue=QUEUE", "Queue names") do |value|
17
+ queue = value
18
+ end
19
+ parser.on("--message=MESSAGE", "Message JSON") do |value|
20
+ message = value[1..-2]
21
+ end
22
+ begin
23
+ parser.parse!
24
+ rescue OptionParser::ParseError => ex
25
+ puts ex.message
26
+ end
27
+ options = {
28
+ uri: uri.to_s
29
+ }
30
+ options[:user] = uri.user if uri.user
31
+ options[:pass] = uri.password if uri.password
32
+ NATS.start(options) do
33
+ NATS.publish(queue, message) do
34
+ sleep 0.5
35
+ NATS.stop
36
+ end
37
+ end
38
+ end
39
+
40
+ main(ARGV)
@@ -0,0 +1,234 @@
1
+ require 'test/unit'
2
+ require 'fluent/test'
3
+ require 'lib/fluent/plugin/in_nats.rb'
4
+ require 'nats/client'
5
+ require 'test_helper'
6
+
7
+ class NATSInputTest < Test::Unit::TestCase
8
+ include NATSTestHelper
9
+
10
+ CONFIG = %[
11
+ port 4222
12
+ host localhost
13
+ user nats
14
+ password nats
15
+ ]
16
+
17
+ def basic_queue_conf
18
+ CONFIG + %[
19
+ queue fluent.>
20
+ ]
21
+ end
22
+
23
+ def multiple_queue_conf
24
+ CONFIG + %[
25
+ queue fluent.>, fluent2.>
26
+ ]
27
+ end
28
+
29
+ def ssl_conf
30
+ basic_queue_conf + %[
31
+ ssl true
32
+ ]
33
+ end
34
+
35
+ def create_driver(conf)
36
+ Fluent::Test::InputTestDriver.new(Fluent::NATSInput).configure(conf)
37
+ end
38
+
39
+ sub_test_case "configure" do
40
+ test "basic" do
41
+ d = create_driver basic_queue_conf
42
+ assert_equal 4222, d.instance.port
43
+ assert_equal 'localhost', d.instance.host
44
+ assert_equal 'nats', d.instance.user
45
+ assert_equal 'nats', d.instance.password
46
+ assert_equal 'fluent.>', d.instance.queue
47
+ end
48
+
49
+ test "multiple queue" do
50
+ d = create_driver multiple_queue_conf
51
+ assert_equal 4222, d.instance.port
52
+ assert_equal 'localhost', d.instance.host
53
+ assert_equal 'nats', d.instance.user
54
+ assert_equal 'nats', d.instance.password
55
+ assert_equal 'fluent.>, fluent2.>', d.instance.queue
56
+ end
57
+
58
+ test "basic with ssl" do
59
+ d = create_driver ssl_conf
60
+ assert_equal 4222, d.instance.port
61
+ assert_equal 'localhost', d.instance.host
62
+ assert_equal 'nats', d.instance.user
63
+ assert_equal 'nats', d.instance.password
64
+ assert_equal 'fluent.>', d.instance.queue
65
+ assert_equal true, d.instance.ssl
66
+ end
67
+ end
68
+
69
+ sub_test_case "events" do
70
+ test "with credentials" do
71
+ d = create_driver basic_queue_conf
72
+
73
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
74
+ Fluent::Engine.now = time
75
+
76
+ d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
77
+ d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
78
+
79
+ uri = generate_uri(d)
80
+
81
+ run_server(uri) do
82
+ d.run do
83
+ d.expected_emits.each { |tag, _time, record|
84
+ send(uri, tag[5..-1], record)
85
+ sleep 0.5
86
+ }
87
+ end
88
+ end
89
+ end
90
+
91
+ test "without credentials" do
92
+ d = create_driver basic_queue_conf
93
+
94
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
95
+ Fluent::Engine.now = time
96
+
97
+ d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
98
+ d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
99
+
100
+ uri = generate_uri(d)
101
+
102
+ run_server(uri) do
103
+ d.run do
104
+ d.expected_emits.each { |tag, time, record|
105
+ send(uri, tag[5..-1], record)
106
+ sleep 0.5
107
+ }
108
+ end
109
+ end
110
+ end
111
+
112
+ test "multiple queues" do
113
+ d = create_driver multiple_queue_conf
114
+
115
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
116
+ Fluent::Engine.now = time
117
+
118
+ d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
119
+ d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
120
+ d.expect_emit "nats.fluent2.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
121
+ d.expect_emit "nats.fluent2.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
122
+
123
+ uri = generate_uri(d)
124
+
125
+ run_server(uri) do
126
+ d.run do
127
+ d.expected_emits.each { |tag, time, record|
128
+ send(uri, tag[5..-1], record)
129
+ sleep 0.5
130
+ }
131
+ end
132
+ end
133
+ end
134
+
135
+ test "without fluent timestamp" do
136
+ d = create_driver basic_queue_conf
137
+
138
+ time = Time.now.to_i
139
+ Fluent::Engine.now = time
140
+
141
+ d.expect_emit "nats.fluent.test1", time, {"message"=>'nats'}
142
+
143
+ uri = generate_uri(d)
144
+ run_server(uri) do
145
+ d.run do
146
+ d.expected_emits.each do |tag, time, record|
147
+ send(uri, tag[5..-1], record)
148
+ sleep 0.5
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ test "arrays" do
155
+ d = create_driver basic_queue_conf
156
+
157
+ time = Time.now.to_i
158
+ Fluent::Engine.now = time
159
+
160
+ d.expect_emit "nats.fluent.empty_array", time, []
161
+ d.expect_emit "nats.fluent.string_array", time, %w(one two three)
162
+
163
+ user = d.instance.user
164
+ password = d.instance.password
165
+ uri = "nats://#{user}:#{password}@#{d.instance.host}:#{d.instance.port}"
166
+ run_server(uri) do
167
+ d.run do
168
+ d.expected_emits.each do |tag, time, record|
169
+ send(uri, tag[5..-1], record)
170
+ sleep 0.5
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ test "empty publish string" do
177
+ d = create_driver basic_queue_conf
178
+
179
+ time = Time.now.to_i
180
+ Fluent::Engine.now = time
181
+
182
+ d.expect_emit "nats.fluent.nil", time, {}
183
+
184
+ uri = generate_uri(d)
185
+ run_server(uri) do
186
+ d.run do
187
+ d.expected_emits.each do |tag, time, record|
188
+ send(uri, tag[5..-1], nil)
189
+ sleep 0.5
190
+ end
191
+ end
192
+ end
193
+ end
194
+
195
+ test "regular publish string" do
196
+ d = create_driver basic_queue_conf
197
+
198
+ time = Time.now.to_i
199
+ Fluent::Engine.now = time
200
+
201
+ d.expect_emit "nats.fluent.string", time, "Lorem ipsum dolor sit amet"
202
+
203
+ uri = generate_uri(d)
204
+ run_server(uri) do
205
+ d.run do
206
+ d.expected_emits.each do |tag, time, record|
207
+ send(uri, tag[5..-1], "Lorem ipsum dolor sit amet")
208
+ sleep 0.5
209
+ end
210
+ end
211
+ end
212
+ end
213
+ end
214
+
215
+ def setup
216
+ Fluent::Test.setup
217
+ end
218
+
219
+ def send(uri, tag, msg)
220
+ system("test/nats-publish-message.rb", *%W[--uri=#{uri} --queue=#{tag} --message='#{msg.to_json}'])
221
+ end
222
+
223
+ def generate_uri(driver)
224
+ user = driver.instance.user
225
+ pass = driver.instance.password
226
+ host = driver.instance.host
227
+ port = driver.instance.port
228
+ if user && pass
229
+ "nats://#{user}:#{pass}@#{host}:#{port}"
230
+ else
231
+ "nats://#{host}:#{port}"
232
+ end
233
+ end
234
+ end
@@ -28,44 +28,26 @@ end
28
28
  require 'nats/client'
29
29
 
30
30
  module NATSTestHelper
31
-
32
- def server_pid
33
- @pid ||= File.read(@pid_file).chomp.to_i
34
- end
35
-
36
- def setup_nats_server(uri)
37
- @uri = URI.parse(uri)
38
- @pid_file = '/tmp/test-nats.pid'
39
- args = "-p #{@uri.port} -P #{@pid_file}"
40
- args += " --user #{@uri.user}" unless (@uri.user.nil? || @uri.user.empty?)
41
- args += " --pass #{@uri.password}" unless (@uri.password.nil? || @uri.password.empty?)
42
- args += " #{@flags}" if @flags
43
- args += ' -d'
44
- end
45
-
46
- def kill_nats
47
- if File.exists? @pid_file
48
- %x[kill -9 #{server_pid} 2> /dev/null]
49
- %x[rm #{@pid_file} 2> /dev/null]
50
- %x[rm #{NATS::AUTOSTART_LOG_FILE} 2> /dev/null]
51
- @pid = nil
31
+ def run_server(uri)
32
+ uri = URI.parse(uri)
33
+ unless NATS.server_running?(uri)
34
+ args = prepare_args(uri)
35
+ # We can invoke gnatsd before run test
36
+ pid = spawn("gnatsd", *args, out: "/dev/null", err: "/dev/null")
37
+ NATS.wait_for_server(uri, 10)
52
38
  end
39
+ yield
40
+ rescue
41
+ raise
42
+ ensure
43
+ Process.kill(:INT, pid) if pid
53
44
  end
54
-
55
- def start_nats(uri)
56
-
57
- args = setup_nats_server(uri)
58
45
 
59
- if NATS.server_running? @uri
60
- @was_running = true
61
- return 0
62
- end
63
-
64
- %x[bundle exec nats-server #{args} 2> /dev/null]
65
- exitstatus = $?.exitstatus
66
- NATS.wait_for_server(@uri, 10)
67
- exitstatus
46
+ def prepare_args(uri)
47
+ args = ["-p", uri.port.to_s]
48
+ args.push("--user", uri.user) if uri.user
49
+ args.push("--pass", uri.password) if uri.password
50
+ args.push(*@flags) if @flags
51
+ args
68
52
  end
69
53
  end
70
-
71
-
metadata CHANGED
@@ -1,80 +1,91 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-nats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Eduardo Aceituno
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000 Z
11
+ date: 2017-10-25 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: eventmachine
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.12.10
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.12.10
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: fluentd
16
29
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
30
  requirements:
19
- - - ! '>='
31
+ - - ">="
20
32
  - !ruby/object:Gem::Version
21
33
  version: 0.10.7
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '0.14'
22
37
  type: :runtime
23
38
  prerelease: false
24
39
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
40
  requirements:
27
- - - ! '>='
41
+ - - ">="
28
42
  - !ruby/object:Gem::Version
29
43
  version: 0.10.7
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.14'
30
47
  - !ruby/object:Gem::Dependency
31
48
  name: nats
32
49
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
50
  requirements:
35
- - - ! '>='
51
+ - - ">="
36
52
  - !ruby/object:Gem::Version
37
53
  version: 0.4.22
38
54
  type: :runtime
39
55
  prerelease: false
40
56
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
57
  requirements:
43
- - - ! '>='
58
+ - - ">="
44
59
  - !ruby/object:Gem::Version
45
60
  version: 0.4.22
46
61
  - !ruby/object:Gem::Dependency
47
- name: eventmachine
62
+ name: rake
48
63
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
64
  requirements:
51
- - - '='
65
+ - - ">="
52
66
  - !ruby/object:Gem::Version
53
- version: 0.12.10
54
- type: :runtime
67
+ version: 0.9.2
68
+ type: :development
55
69
  prerelease: false
56
70
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
71
  requirements:
59
- - - '='
72
+ - - ">="
60
73
  - !ruby/object:Gem::Version
61
- version: 0.12.10
74
+ version: 0.9.2
62
75
  - !ruby/object:Gem::Dependency
63
- name: rake
76
+ name: test-unit
64
77
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
78
  requirements:
67
- - - ! '>='
79
+ - - ">"
68
80
  - !ruby/object:Gem::Version
69
- version: 0.9.2
81
+ version: '3.1'
70
82
  type: :development
71
83
  prerelease: false
72
84
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
85
  requirements:
75
- - - ! '>='
86
+ - - ">"
76
87
  - !ruby/object:Gem::Version
77
- version: 0.9.2
88
+ version: '3.1'
78
89
  description: nats plugin for fluentd, an event collector
79
90
  email:
80
91
  - achied@gmail.com
@@ -82,40 +93,38 @@ executables: []
82
93
  extensions: []
83
94
  extra_rdoc_files: []
84
95
  files:
85
- - .gitignore
86
- - .travis.yml
96
+ - ".gitignore"
97
+ - ".travis.yml"
87
98
  - COPYING
88
99
  - Gemfile
89
- - Gemfile.lock
90
100
  - README.md
91
101
  - Rakefile
92
- - VERSION
93
102
  - fluent-plugin-nats.gemspec
94
103
  - lib/fluent/plugin/in_nats.rb
95
- - test/plugin/in_nats.rb
104
+ - test/nats-publish-message.rb
105
+ - test/plugin/test_in_nats.rb
96
106
  - test/test_helper.rb
97
107
  homepage: https://github.com/achied/fluent-plugin-nats
98
108
  licenses: []
109
+ metadata: {}
99
110
  post_install_message:
100
111
  rdoc_options: []
101
112
  require_paths:
102
113
  - lib
103
114
  required_ruby_version: !ruby/object:Gem::Requirement
104
- none: false
105
115
  requirements:
106
- - - ! '>='
116
+ - - ">="
107
117
  - !ruby/object:Gem::Version
108
118
  version: '0'
109
119
  required_rubygems_version: !ruby/object:Gem::Requirement
110
- none: false
111
120
  requirements:
112
- - - ! '>='
121
+ - - ">="
113
122
  - !ruby/object:Gem::Version
114
123
  version: '0'
115
124
  requirements: []
116
125
  rubyforge_project:
117
- rubygems_version: 1.8.24
126
+ rubygems_version: 2.6.13
118
127
  signing_key:
119
- specification_version: 3
128
+ specification_version: 4
120
129
  summary: nats plugin for fluentd, an event collector
121
130
  test_files: []
@@ -1,45 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- fluent-plugin-nats (0.0.5)
5
- eventmachine (= 0.12.10)
6
- fluentd (>= 0.10.7)
7
- nats (>= 0.4.22)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- cool.io (1.1.0)
13
- iobuffer (>= 1.0.0)
14
- daemons (1.1.9)
15
- eventmachine (0.12.10)
16
- fluentd (0.10.28)
17
- cool.io (~> 1.1.0)
18
- http_parser.rb (~> 0.5.1)
19
- json (>= 1.4.3)
20
- msgpack (~> 0.4.4)
21
- yajl-ruby (~> 1.0)
22
- http_parser.rb (0.5.3)
23
- iobuffer (1.1.2)
24
- json (1.7.5)
25
- json_pure (1.7.5)
26
- msgpack (0.4.7)
27
- nats (0.4.28)
28
- daemons (>= 1.1.5)
29
- eventmachine (= 0.12.10)
30
- json_pure (>= 1.7.3)
31
- thin (>= 1.4.1)
32
- rack (1.4.1)
33
- rake (0.9.2.2)
34
- thin (1.4.1)
35
- daemons (>= 1.0.9)
36
- eventmachine (>= 0.12.6)
37
- rack (>= 1.0.0)
38
- yajl-ruby (1.1.0)
39
-
40
- PLATFORMS
41
- ruby
42
-
43
- DEPENDENCIES
44
- fluent-plugin-nats!
45
- rake (>= 0.9.2)
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.5
@@ -1,223 +0,0 @@
1
- require 'test/unit'
2
- require 'fluent/test'
3
- require 'lib/fluent/plugin/in_nats.rb'
4
- require 'nats/client'
5
- require 'test_helper'
6
-
7
- class NATSInputTest < Test::Unit::TestCase
8
- include NATSTestHelper
9
-
10
- CONFIG = %[
11
- port 4222
12
- host localhost
13
- user nats
14
- password nats
15
- ]
16
-
17
- def basic_queue_conf
18
- conf = CONFIG + %[
19
- queue fluent.>
20
- ]
21
- end
22
-
23
- def multiple_queue_conf
24
- conf = CONFIG + %[
25
- queue fluent.>, fluent2.>
26
- ]
27
- end
28
-
29
- def ssl_conf
30
- conf = basic_queue_conf + %[
31
- ssl true
32
- ]
33
- end
34
-
35
- def create_driver(conf=CONFIG)
36
- Fluent::Test::InputTestDriver.new(Fluent::NATSInput).configure(conf)
37
- end
38
-
39
- def test_configure_basic
40
- d = create_driver basic_queue_conf
41
- assert_equal 4222, d.instance.port
42
- assert_equal 'localhost', d.instance.host
43
- assert_equal 'nats', d.instance.user
44
- assert_equal 'nats', d.instance.password
45
- assert_equal 'fluent.>', d.instance.queue
46
- end
47
-
48
- def test_configure_multiple_queue
49
- d = create_driver multiple_queue_conf
50
- assert_equal 4222, d.instance.port
51
- assert_equal 'localhost', d.instance.host
52
- assert_equal 'nats', d.instance.user
53
- assert_equal 'nats', d.instance.password
54
- assert_equal 'fluent.>, fluent2.>', d.instance.queue
55
- end
56
-
57
- def test_configure_basic_with_ssl
58
- d = create_driver ssl_conf
59
- assert_equal 4222, d.instance.port
60
- assert_equal 'localhost', d.instance.host
61
- assert_equal 'nats', d.instance.user
62
- assert_equal 'nats', d.instance.password
63
- assert_equal 'fluent.>', d.instance.queue
64
- assert_equal true, d.instance.ssl
65
- end
66
-
67
- def test_emit_with_credentials
68
- d = create_driver basic_queue_conf
69
-
70
- time = Time.parse("2011-01-02 13:14:15 UTC").to_i
71
- Fluent::Engine.now = time
72
-
73
- d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
74
- d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
75
-
76
- uri = "nats://#{d.instance.user}:#{d.instance.password}@#{d.instance.host}:#{d.instance.port}"
77
-
78
- start_nats(uri)
79
- d.run do
80
- d.expected_emits.each { |tag, time, record|
81
- send(uri, tag[5..-1], record)
82
- sleep 0.5
83
- }
84
- end
85
- kill_nats
86
- end
87
-
88
- def test_emit_without_credentials
89
- d = create_driver basic_queue_conf
90
-
91
- time = Time.parse("2011-01-02 13:14:15 UTC").to_i
92
- Fluent::Engine.now = time
93
-
94
- d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
95
- d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
96
-
97
- uri = "nats://#{d.instance.host}:#{d.instance.port}"
98
-
99
- start_nats(uri)
100
- d.run do
101
- d.expected_emits.each { |tag, time, record|
102
- send(uri, tag[5..-1], record)
103
- sleep 0.5
104
- }
105
- end
106
- kill_nats
107
- end
108
-
109
- def test_emit_multiple_queues
110
- d = create_driver multiple_queue_conf
111
-
112
- time = Time.parse("2011-01-02 13:14:15 UTC").to_i
113
- Fluent::Engine.now = time
114
-
115
- d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
116
- d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
117
- d.expect_emit "nats.fluent2.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
118
- d.expect_emit "nats.fluent2.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
119
-
120
- uri = "nats://#{d.instance.host}:#{d.instance.port}"
121
-
122
- start_nats(uri)
123
- d.run do
124
- d.expected_emits.each { |tag, time, record|
125
- send(uri, tag[5..-1], record)
126
- sleep 0.5
127
- }
128
- end
129
- kill_nats
130
- end
131
-
132
-
133
- def test_emit_without_fluent_timestamp
134
- d = create_driver basic_queue_conf
135
-
136
- time = Time.now.to_i
137
- Fluent::Engine.now = time
138
-
139
- d.expect_emit "nats.fluent.test1", time, {"message"=>'nats'}
140
-
141
- uri = "nats://#{d.instance.host}:#{d.instance.port}"
142
- start_nats(uri)
143
- d.run do
144
- d.expected_emits.each do |tag, time, record|
145
- send(uri, tag[5..-1], record)
146
- sleep 0.5
147
- end
148
- end
149
- kill_nats
150
- end
151
-
152
- def test_emit_arrays
153
- d = create_driver basic_queue_conf
154
-
155
- time = Time.now.to_i
156
- Fluent::Engine.now = time
157
-
158
- d.expect_emit "nats.fluent.empty_array", time, []
159
- d.expect_emit "nats.fluent.string_array", time, %w(one two three)
160
-
161
- uri = "nats://#{d.instance.host}:#{d.instance.port}"
162
- start_nats(uri)
163
- d.run do
164
- d.expected_emits.each do |tag, time, record|
165
- send(uri, tag[5..-1], record)
166
- sleep 0.5
167
- end
168
- end
169
- kill_nats
170
- end
171
-
172
- def test_empty_publish_string
173
- d = create_driver basic_queue_conf
174
-
175
- time = Time.now.to_i
176
- Fluent::Engine.now = time
177
-
178
- d.expect_emit "nats.fluent.nil", time, nil
179
-
180
- uri = "nats://#{d.instance.host}:#{d.instance.port}"
181
- start_nats(uri)
182
- d.run do
183
- d.expected_emits.each do |tag, time, record|
184
- send(uri, tag[5..-1], nil)
185
- sleep 0.5
186
- end
187
- end
188
- kill_nats
189
- end
190
-
191
- def test_regular_publish_string
192
- d = create_driver basic_queue_conf
193
-
194
- time = Time.now.to_i
195
- Fluent::Engine.now = time
196
-
197
- d.expect_emit "nats.fluent.string", time, "Lorem ipsum dolor sit amet"
198
-
199
- uri = "nats://#{d.instance.host}:#{d.instance.port}"
200
- start_nats(uri)
201
- d.run do
202
- d.expected_emits.each do |tag, time, record|
203
- send(uri, tag[5..-1], "Lorem ipsum dolor sit amet")
204
- sleep 0.5
205
- end
206
- end
207
- kill_nats
208
- end
209
-
210
- def setup
211
- Fluent::Test.setup
212
- end
213
-
214
- def send(uri, tag, msg)
215
- EM.run {
216
- n = NATS.connect(:uri => uri)
217
- n.publish(tag,msg.to_json)
218
- n.close
219
- }
220
- end
221
- end
222
-
223
-