test-jq 0.5.1

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.
@@ -0,0 +1,57 @@
1
+ require "helper"
2
+ require "fluent/test/driver/formatter"
3
+ require "fluent/plugin/formatter_jq"
4
+
5
+ class JqFormatterTest < Test::Unit::TestCase
6
+ setup do
7
+ Fluent::Test.setup
8
+ end
9
+
10
+ teardown do
11
+ @driver.instance.shutdown if @driver
12
+ end
13
+
14
+ test "it should require jq parameter" do
15
+ assert_raise(Fluent::ConfigError) { create_driver '' }
16
+ end
17
+
18
+ test "it should raise error on invalid jq parameter" do
19
+ e = assert_raise(Fluent::ConfigError) { create_driver 'jq blah' }
20
+ assert_match(/compile error/, e.message)
21
+ end
22
+
23
+ test "it should work" do
24
+ d = create_driver 'jq .log'
25
+ record = {"log" => "this is a log", "source" => "stdout"}
26
+ text = d.instance.format("some.tag", event_time, record)
27
+ assert_equal record["log"], text
28
+ end
29
+
30
+ test "it should ignore error by default" do
31
+ d = create_driver 'jq .[1]'
32
+ record = {"log" => "some message"}
33
+ text = d.instance.format "some.tag", event_time, record
34
+ assert_equal record.to_json, text
35
+ end
36
+
37
+ test "it can skip on error" do
38
+ d = create_driver "jq .[1]\non_error skip"
39
+ record = {"log" => "some message"}
40
+ text = d.instance.format "some.tag", event_time, record
41
+ assert_equal '', text
42
+ end
43
+
44
+ test "it can raise error on error" do
45
+ d = create_driver "jq .[1]\non_error raise_error"
46
+ record = {"log" => "some message"}
47
+ assert_raise(RuntimeError) {
48
+ d.instance.format "some.tag", event_time, record
49
+ }
50
+ end
51
+
52
+ private
53
+
54
+ def create_driver(conf)
55
+ @driver = Fluent::Test::Driver::Formatter.new(Fluent::Plugin::JqFormatter).configure(conf).tap { |d| d.instance.start }
56
+ end
57
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "helper"
4
+ require "fluent/test/driver/output"
5
+ require "fluent/plugin/out_jq"
6
+
7
+ class JqOutputTest < Test::Unit::TestCase
8
+ setup do
9
+ Fluent::Test.setup
10
+ end
11
+
12
+ test "it should require jq" do
13
+ assert_raise(Fluent::ConfigError) { create_driver '' }
14
+ end
15
+
16
+ test "it should raise error on invalid jq program" do
17
+ e = assert_raise(Fluent::ConfigError) { create_driver 'jq blah' }
18
+ assert_match(/compile error/, e.message)
19
+ end
20
+
21
+ test "it should work on tag" do
22
+ events = create_driver('jq "{tag}"').events
23
+ assert_equal events.size, 1
24
+ assert_equal events[0][2]["tag"], "some.tag"
25
+ end
26
+
27
+ test "it should work on time" do
28
+ events = create_driver('jq "{time: .time | gmtime }"').events
29
+ assert_equal events.size, 1
30
+ assert_equal events[0][2]["time"][0..5], [2018, 2, 22, 1, 23, 45]
31
+ end
32
+
33
+ test "it should support array" do
34
+ events = create_driver('jq ".record | to_entries"').events.map { |evt| evt[2] }
35
+ assert_equal events.size, 2
36
+ assert_include events, {"key" => "log", "value" => "this is a log"}
37
+ assert_include events, {"key" => "source", "value" => "stdout"}
38
+ end
39
+
40
+ test "it should remove specified tag prefix" do
41
+ events = create_driver(<<~CONF).events
42
+ jq ".record"
43
+ remove_tag_prefix some
44
+ CONF
45
+
46
+ assert_equal events.size, 1
47
+ assert_equal events[0][0], "tag"
48
+ end
49
+
50
+ private
51
+
52
+ def create_driver(conf)
53
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::JqOutput).configure(conf).tap { |d|
54
+ time = event_time("2018-03-22 01:23:45 UTC")
55
+ d.run { d.feed "some.tag", time, {"log" => "this is a log", "source" => "stdout"} }
56
+ }
57
+ end
58
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "helper"
4
+ require "fluent/test/driver/parser"
5
+ require "fluent/plugin/parser_jq"
6
+
7
+ class JqParserTest < Test::Unit::TestCase
8
+ setup do
9
+ Fluent::Test.setup
10
+ end
11
+
12
+ teardown do
13
+ @driver.instance.shutdown if @driver
14
+ end
15
+
16
+ test "it should require jq" do
17
+ assert_raise(Fluent::ConfigError) { create_driver '' }
18
+ end
19
+
20
+ test "it should raise error on invalid jq program" do
21
+ e = assert_raise(Fluent::ConfigError) { create_driver 'jq blah' }
22
+ assert_match(/compile error/, e.message)
23
+ end
24
+
25
+ test "it should work" do
26
+ d = create_driver 'jq split(",") | reduce .[] as $item ({}; ($item | split(":")) as $pair | .[$pair[0]] = $pair[1])'
27
+ text = "name:jq,type:parser,author:Gimi"
28
+ expected_record = {"name" => "jq", "type" => "parser", "author" => "Gimi"}
29
+ d.instance.parse(text) { |time, record|
30
+ assert_equal expected_record, record
31
+ }
32
+ assert_nil d.instance.log.logs.find { |log| log =~ /\[error\]/ }
33
+ end
34
+
35
+ test "it should skip if it does not return a hash" do
36
+ d = create_driver 'jq split(",")'
37
+ text = "name:jq,type:parser,author:Gimi"
38
+ expected_record = {"name": "jq", "type": "parser", "author": "Gimi"}
39
+ d.instance.parse(text) { |time, record| assert false }
40
+ assert d.instance.log.logs.any? { |log| log =~ /\[error\]/ }
41
+ end
42
+
43
+ private
44
+
45
+ def create_driver(conf)
46
+ @driver = Fluent::Test::Driver::Parser.new(Fluent::Plugin::JqParser).configure(conf).tap { |d| d.instance.start }
47
+ end
48
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: test-jq
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ platform: ruby
6
+ authors:
7
+ - Rock
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.14'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fluentd
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.14.10
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '2'
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 0.14.10
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '2'
89
+ - !ruby/object:Gem::Dependency
90
+ name: multi_json
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.13'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.13'
103
+ description: fluent-plungin-jq is a collection of fluentd plugins which uses the jq
104
+ engine to transform or format fluentd events.
105
+ email:
106
+ - rbaek@splunk.com
107
+ executables: []
108
+ extensions: []
109
+ extra_rdoc_files: []
110
+ files:
111
+ - CHANGES.md
112
+ - CONTRIBUTING.md
113
+ - Gemfile
114
+ - Gemfile.lock
115
+ - LICENSE
116
+ - Makefile
117
+ - README.md
118
+ - Rakefile
119
+ - VERSION
120
+ - example/Dockerfile
121
+ - example/fluent.conf
122
+ - example/statsd.sample
123
+ - fluent-plugin-jq.gemspec
124
+ - lib/fluent/plugin/filter_jq_transformer.rb
125
+ - lib/fluent/plugin/formatter_jq.rb
126
+ - lib/fluent/plugin/jq_mixin.rb
127
+ - lib/fluent/plugin/out_jq.rb
128
+ - lib/fluent/plugin/parser_jq.rb
129
+ - run_ci.sh
130
+ - test/helper.rb
131
+ - test/plugin/test_filter_jq_transformer.rb
132
+ - test/plugin/test_formatter_jq.rb
133
+ - test/plugin/test_out_jq.rb
134
+ - test/plugin/test_parser_jq.rb
135
+ homepage: https://github.com/rockb1017/fluent-plugin-jq
136
+ licenses:
137
+ - Apache-2.0
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubygems_version: 3.0.6
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Fluentd plugins uses the jq engine.
158
+ test_files:
159
+ - test/helper.rb
160
+ - test/plugin/test_formatter_jq.rb
161
+ - test/plugin/test_parser_jq.rb
162
+ - test/plugin/test_filter_jq_transformer.rb
163
+ - test/plugin/test_out_jq.rb