fluent-plugin-gcloud-pubsub-custom-subscriber 1.3.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,226 @@
1
+ # coding: utf-8
2
+ require_relative "../test_helper"
3
+ require "fluent/test/driver/output"
4
+ require "fluent/test/helpers"
5
+
6
+ class GcloudPubSubOutputTest < Test::Unit::TestCase
7
+ include Fluent::Test::Helpers
8
+
9
+ CONFIG = %[
10
+ project project-test
11
+ topic topic-test
12
+ key key-test
13
+ ]
14
+
15
+ ReRaisedError = Class.new(RuntimeError)
16
+
17
+ def create_driver(conf = CONFIG)
18
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::GcloudPubSubOutput).configure(conf)
19
+ end
20
+
21
+ setup do
22
+ Fluent::Test.setup
23
+ end
24
+
25
+ setup do
26
+ @time = event_time('2016-07-09 11:12:13 UTC')
27
+ end
28
+
29
+ sub_test_case 'configure' do
30
+ test 'default values are configured' do
31
+ d = create_driver(%[
32
+ project project-test
33
+ topic topic-test
34
+ key key-test
35
+ ])
36
+
37
+ assert_equal('project-test', d.instance.project)
38
+ assert_equal('topic-test', d.instance.topic)
39
+ assert_equal('key-test', d.instance.key)
40
+ assert_equal(false, d.instance.autocreate_topic)
41
+ assert_equal(1000, d.instance.max_messages)
42
+ assert_equal(9800000, d.instance.max_total_size)
43
+ assert_equal(4000000, d.instance.max_message_size)
44
+ end
45
+
46
+ test '"topic" must be specified' do
47
+ assert_raises Fluent::ConfigError do
48
+ create_driver(%[
49
+ project project-test
50
+ key key-test
51
+ ])
52
+ end
53
+ end
54
+
55
+ test '"autocreate_topic" can be specified' do
56
+ d = create_driver(%[
57
+ project project-test
58
+ topic topic-test
59
+ key key-test
60
+ autocreate_topic true
61
+ ])
62
+
63
+ assert_equal(true, d.instance.autocreate_topic)
64
+ end
65
+ end
66
+
67
+ sub_test_case 'topic' do
68
+ setup do
69
+ @publisher = mock!
70
+ @pubsub_mock = mock!
71
+ stub(Google::Cloud::Pubsub).new { @pubsub_mock }
72
+ end
73
+
74
+ test '"autocreate_topic" is enabled' do
75
+ d = create_driver(%[
76
+ project project-test
77
+ topic topic-test
78
+ key key-test
79
+ autocreate_topic true
80
+ ])
81
+
82
+ @publisher.publish.once
83
+ @pubsub_mock.topic("topic-test").once { nil }
84
+ @pubsub_mock.create_topic("topic-test").once { @publisher }
85
+ d.run(default_tag: "test") do
86
+ d.feed(@time, {"a" => "b"})
87
+ end
88
+ end
89
+
90
+ test '40x error occurred on connecting to Pub/Sub' do
91
+ d = create_driver
92
+
93
+ @pubsub_mock.topic('topic-test').once do
94
+ raise Google::Cloud::NotFoundError.new('TEST')
95
+ end
96
+
97
+ assert_raise Google::Cloud::NotFoundError do
98
+ d.run(default_tag: "test") do
99
+ d.feed(@time, {"a" => "b"})
100
+ end
101
+ end
102
+ end
103
+
104
+ test '50x error occurred on connecting to Pub/Sub' do
105
+ d = create_driver
106
+
107
+ @pubsub_mock.topic('topic-test').once do
108
+ raise Google::Cloud::UnavailableError.new('TEST')
109
+ end
110
+
111
+ assert_raise Fluent::GcloudPubSub::RetryableError do
112
+ d.run(default_tag: "test") do
113
+ d.feed(@time, {"a" => "b"})
114
+ end
115
+ end
116
+ end
117
+
118
+ test 'topic is nil' do
119
+ d = create_driver
120
+
121
+ @pubsub_mock.topic('topic-test').once { nil }
122
+
123
+ assert_raise Fluent::GcloudPubSub::Error do
124
+ d.run(default_tag: "test") do
125
+ d.feed(@time, {"a" => "b"})
126
+ end
127
+ end
128
+ end
129
+
130
+ test 'messages exceeding "max_message_size" are not published' do
131
+ d = create_driver(%[
132
+ project project-test
133
+ topic topic-test
134
+ key key-test
135
+ max_message_size 1000
136
+ ])
137
+
138
+ @publisher.publish.times(0)
139
+ d.run(default_tag: "test") do
140
+ d.feed(@time, {"a" => "a" * 1000})
141
+ end
142
+ end
143
+ end
144
+
145
+ sub_test_case 'publish' do
146
+ setup do
147
+ @publisher = mock!
148
+ @pubsub_mock = mock!.topic(anything) { @publisher }
149
+ stub(Google::Cloud::Pubsub).new { @pubsub_mock }
150
+ end
151
+
152
+ test 'messages are divided into "max_messages"' do
153
+ d = create_driver
154
+ @publisher.publish.times(2)
155
+ d.run(default_tag: "test") do
156
+ # max_messages is default 1000
157
+ 1001.times do |i|
158
+ d.feed(@time, {"a" => i})
159
+ end
160
+ end
161
+ end
162
+
163
+ test 'messages are divided into "max_total_size"' do
164
+ d = create_driver(%[
165
+ project project-test
166
+ topic topic-test
167
+ key key-test
168
+ max_messages 100000
169
+ max_total_size 1000
170
+ ])
171
+
172
+ @publisher.publish.times(2)
173
+ d.run(default_tag: "test") do
174
+ # 400 * 4 / max_total_size = twice
175
+ 4.times do
176
+ d.feed(@time, {"a" => "a" * 400})
177
+ end
178
+ end
179
+ end
180
+
181
+ test 'accept "ASCII-8BIT" encoded multibyte strings' do
182
+ # on fluentd v0.14, all strings treated as "ASCII-8BIT" except specified encoding.
183
+ d = create_driver
184
+ @publisher.publish.once
185
+ d.run(default_tag: "test") do
186
+ d.feed(@time, {"a" => "あああ".force_encoding("ASCII-8BIT")})
187
+ end
188
+ end
189
+
190
+ test 'reraise unexpected errors' do
191
+ d = create_driver
192
+ @publisher.publish.once { raise ReRaisedError }
193
+ assert_raises ReRaisedError do
194
+ d.run(default_tag: "test") do
195
+ d.feed([{'a' => 1, 'b' => 2}])
196
+ end
197
+ end
198
+ end
199
+
200
+ test 'reraise RetryableError' do
201
+ d = create_driver
202
+ @publisher.publish.once { raise Google::Cloud::UnavailableError.new('TEST') }
203
+ assert_raises Fluent::GcloudPubSub::RetryableError do
204
+ d.run(default_tag: "test") do
205
+ d.feed([{'a' => 1, 'b' => 2}])
206
+ end
207
+ end
208
+ end
209
+
210
+ test 'inject section' do
211
+ d = create_driver(%[
212
+ project project-test
213
+ topic topic-test
214
+ key key-test
215
+ <inject>
216
+ tag_key tag
217
+ </inject>
218
+ ])
219
+ @publisher.publish.once
220
+ d.run(default_tag: 'test') do
221
+ d.feed({"foo" => "bar"})
222
+ end
223
+ assert_equal({"tag" => 'test', "foo" => "bar"}, JSON.parse(MessagePack.unpack(d.formatted.first)[0]))
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require "test/unit/rr"
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+
16
+ require 'fluent/test'
17
+ unless ENV.has_key?('VERBOSE')
18
+ nulllogger = Object.new
19
+ nulllogger.instance_eval {|obj|
20
+ def method_missing(method, *args)
21
+ # pass
22
+ end
23
+ }
24
+ $log = nulllogger
25
+ end
26
+
27
+ require 'fluent/plugin/in_gcloud_pubsub'
28
+ require 'fluent/plugin/out_gcloud_pubsub'
29
+
30
+ class Test::Unit::TestCase
31
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-gcloud-pubsub-custom-subscriber
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.1
5
+ platform: ruby
6
+ authors:
7
+ - BL-Logging-Engineer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fluentd
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.14.15
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.14.15
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: google-cloud-pubsub
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.30.0
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.30.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: test-unit
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: test-unit-rr
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ description: Google Cloud Pub/Sub input/output plugin for Fluentd event collector
104
+ without auto-create topic requiring only Pub/Sub subscriber ACL
105
+ email:
106
+ executables: []
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - ".gitignore"
111
+ - ".travis.yml"
112
+ - CHANGELOG.md
113
+ - Gemfile
114
+ - LICENSE
115
+ - README.md
116
+ - Rakefile
117
+ - fluent-plugin-gcloud-pubsub-custom.gemspec
118
+ - lib/fluent/plugin/gcloud_pubsub/client.rb
119
+ - lib/fluent/plugin/in_gcloud_pubsub.rb
120
+ - lib/fluent/plugin/out_gcloud_pubsub.rb
121
+ - test/plugin/test_in_gcloud_pubsub.rb
122
+ - test/plugin/test_out_gcloud_pubsub.rb
123
+ - test/test_helper.rb
124
+ homepage:
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubygems_version: 3.0.6
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: Google Cloud Pub/Sub input/output plugin for Fluentd event collector without
147
+ auto-create topic requiring only Pub/Sub subscriber ACL
148
+ test_files: []