protobuf 3.3.6 → 3.4.0
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.
- checksums.yaml +7 -0
- data/.rubocop.yml +48 -0
- data/.rubocop_todo.yml +79 -0
- data/.travis.yml +12 -4
- data/Rakefile +14 -11
- data/bin/protoc-gen-ruby +0 -1
- data/bin/rpc_server +1 -0
- data/install-protobuf.sh +8 -0
- data/lib/protobuf.rb +30 -24
- data/lib/protobuf/cli.rb +35 -35
- data/lib/protobuf/code_generator.rb +11 -8
- data/lib/protobuf/decoder.rb +4 -5
- data/lib/protobuf/deprecation.rb +20 -0
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +2 -0
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +2 -0
- data/lib/protobuf/encoder.rb +9 -4
- data/lib/protobuf/enum.rb +38 -54
- data/lib/protobuf/field.rb +2 -2
- data/lib/protobuf/field/base_field.rb +28 -32
- data/lib/protobuf/field/bool_field.rb +4 -4
- data/lib/protobuf/field/bytes_field.rb +5 -4
- data/lib/protobuf/field/double_field.rb +0 -1
- data/lib/protobuf/field/enum_field.rb +4 -7
- data/lib/protobuf/field/field_array.rb +3 -4
- data/lib/protobuf/field/fixed32_field.rb +1 -1
- data/lib/protobuf/field/fixed64_field.rb +0 -1
- data/lib/protobuf/field/float_field.rb +0 -1
- data/lib/protobuf/field/int32_field.rb +0 -1
- data/lib/protobuf/field/int64_field.rb +0 -1
- data/lib/protobuf/field/integer_field.rb +0 -1
- data/lib/protobuf/field/message_field.rb +2 -3
- data/lib/protobuf/field/sfixed32_field.rb +0 -1
- data/lib/protobuf/field/sfixed64_field.rb +0 -1
- data/lib/protobuf/field/signed_integer_field.rb +0 -1
- data/lib/protobuf/field/sint32_field.rb +0 -1
- data/lib/protobuf/field/sint64_field.rb +0 -1
- data/lib/protobuf/field/string_field.rb +0 -1
- data/lib/protobuf/field/uint32_field.rb +0 -1
- data/lib/protobuf/field/uint64_field.rb +0 -1
- data/lib/protobuf/field/varint_field.rb +0 -1
- data/lib/protobuf/generators/base.rb +1 -2
- data/lib/protobuf/generators/enum_generator.rb +1 -2
- data/lib/protobuf/generators/extension_generator.rb +1 -2
- data/lib/protobuf/generators/field_generator.rb +4 -5
- data/lib/protobuf/generators/file_generator.rb +22 -27
- data/lib/protobuf/generators/group_generator.rb +15 -16
- data/lib/protobuf/generators/message_generator.rb +13 -14
- data/lib/protobuf/generators/printable.rb +9 -10
- data/lib/protobuf/generators/service_generator.rb +1 -2
- data/lib/protobuf/lifecycle.rb +20 -33
- data/lib/protobuf/logging.rb +4 -6
- data/lib/protobuf/message.rb +22 -16
- data/lib/protobuf/message/fields.rb +14 -17
- data/lib/protobuf/message/serialization.rb +6 -5
- data/lib/protobuf/rpc/buffer.rb +10 -12
- data/lib/protobuf/rpc/client.rb +12 -12
- data/lib/protobuf/rpc/connectors/base.rb +4 -3
- data/lib/protobuf/rpc/connectors/common.rb +15 -17
- data/lib/protobuf/rpc/connectors/socket.rb +2 -2
- data/lib/protobuf/rpc/connectors/zmq.rb +118 -108
- data/lib/protobuf/rpc/dynamic_discovery.pb.rb +2 -0
- data/lib/protobuf/rpc/env.rb +12 -12
- data/lib/protobuf/rpc/error.rb +1 -1
- data/lib/protobuf/rpc/error/client_error.rb +4 -4
- data/lib/protobuf/rpc/error/server_error.rb +6 -6
- data/lib/protobuf/rpc/middleware/exception_handler.rb +1 -1
- data/lib/protobuf/rpc/middleware/logger.rb +3 -3
- data/lib/protobuf/rpc/middleware/request_decoder.rb +5 -5
- data/lib/protobuf/rpc/middleware/response_encoder.rb +3 -3
- data/lib/protobuf/rpc/rpc.pb.rb +2 -0
- data/lib/protobuf/rpc/servers/socket/server.rb +75 -65
- data/lib/protobuf/rpc/servers/socket/worker.rb +2 -2
- data/lib/protobuf/rpc/servers/socket_runner.rb +12 -6
- data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -6
- data/lib/protobuf/rpc/servers/zmq/server.rb +20 -26
- data/lib/protobuf/rpc/servers/zmq/util.rb +7 -7
- data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -7
- data/lib/protobuf/rpc/servers/zmq_runner.rb +14 -3
- data/lib/protobuf/rpc/service.rb +15 -15
- data/lib/protobuf/rpc/service_directory.rb +7 -11
- data/lib/protobuf/rpc/service_dispatcher.rb +3 -3
- data/lib/protobuf/rpc/service_filters.rb +27 -28
- data/lib/protobuf/rpc/stat.rb +4 -7
- data/lib/protobuf/socket.rb +0 -1
- data/lib/protobuf/tasks/compile.rake +2 -2
- data/lib/protobuf/version.rb +1 -1
- data/protobuf.gemspec +20 -4
- data/spec/benchmark/tasks.rb +49 -23
- data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
- data/spec/encoding/all_types_spec.rb +91 -77
- data/spec/encoding/extreme_values_spec.rb +0 -0
- data/spec/functional/socket_server_spec.rb +9 -10
- data/spec/functional/zmq_server_spec.rb +21 -19
- data/spec/lib/protobuf/cli_spec.rb +20 -20
- data/spec/lib/protobuf/code_generator_spec.rb +6 -6
- data/spec/lib/protobuf/enum_spec.rb +57 -31
- data/spec/lib/protobuf/field/float_field_spec.rb +2 -2
- data/spec/lib/protobuf/field/int32_field_spec.rb +1 -1
- data/spec/lib/protobuf/field/string_field_spec.rb +7 -8
- data/spec/lib/protobuf/field_spec.rb +3 -6
- data/spec/lib/protobuf/generators/base_spec.rb +6 -6
- data/spec/lib/protobuf/generators/enum_generator_spec.rb +22 -17
- data/spec/lib/protobuf/generators/extension_generator_spec.rb +8 -9
- data/spec/lib/protobuf/generators/field_generator_spec.rb +14 -11
- data/spec/lib/protobuf/generators/file_generator_spec.rb +7 -4
- data/spec/lib/protobuf/generators/service_generator_spec.rb +14 -11
- data/spec/lib/protobuf/lifecycle_spec.rb +9 -4
- data/spec/lib/protobuf/message_spec.rb +63 -35
- data/spec/lib/protobuf/optionable_spec.rb +3 -3
- data/spec/lib/protobuf/rpc/client_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/connector_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/connectors/base_spec.rb +6 -6
- data/spec/lib/protobuf/rpc/connectors/common_spec.rb +26 -18
- data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +11 -9
- data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +7 -7
- data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +14 -14
- data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +5 -5
- data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +9 -7
- data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +9 -9
- data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/service_directory_spec.rb +24 -23
- data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/service_filters_spec.rb +84 -51
- data/spec/lib/protobuf/rpc/service_spec.rb +15 -14
- data/spec/lib/protobuf/rpc/stat_spec.rb +1 -1
- data/spec/lib/protobuf_spec.rb +9 -9
- data/spec/spec_helper.rb +7 -19
- data/spec/support/server.rb +29 -59
- data/spec/support/test/defaults.pb.rb +2 -0
- data/spec/support/test/enum.pb.rb +2 -0
- data/spec/support/test/extended.pb.rb +2 -0
- data/spec/support/test/google_unittest_import.pb.rb +2 -0
- data/spec/support/test/google_unittest_import_public.pb.rb +2 -0
- data/spec/support/test/multi_field_extensions.pb.rb +2 -0
- data/spec/support/test/resource.pb.rb +2 -0
- data/spec/support/test/resource_service.rb +17 -20
- metadata +153 -112
- data/lib/protobuf/deprecator.rb +0 -42
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe ::Protobuf::Rpc::Zmq::Worker do
|
3
|
+
RSpec.describe ::Protobuf::Rpc::Zmq::Worker do
|
4
4
|
before(:each) do
|
5
5
|
load 'protobuf/zmq.rb'
|
6
6
|
|
@@ -14,7 +14,7 @@ describe ::Protobuf::Rpc::Zmq::Worker do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
subject do
|
17
|
-
described_class.new(
|
17
|
+
described_class.new(:host => '127.0.0.1', :port => 9400)
|
18
18
|
end
|
19
19
|
|
20
20
|
describe '#run' do
|
@@ -2,48 +2,48 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'protobuf/rpc/service_directory'
|
4
4
|
|
5
|
-
describe ::Protobuf::Rpc::ServiceDirectory do
|
5
|
+
RSpec.describe ::Protobuf::Rpc::ServiceDirectory do
|
6
6
|
subject { described_class.instance }
|
7
7
|
|
8
|
-
let(:echo_server)
|
8
|
+
let(:echo_server) do
|
9
9
|
::Protobuf::Rpc::DynamicDiscovery::Server.new(
|
10
10
|
:uuid => 'echo',
|
11
11
|
:address => '127.0.0.1',
|
12
12
|
:port => '1111',
|
13
13
|
:ttl => 10,
|
14
|
-
:services => %w
|
14
|
+
:services => %w(EchoService),
|
15
15
|
)
|
16
|
-
|
16
|
+
end
|
17
17
|
|
18
|
-
let(:hello_server)
|
18
|
+
let(:hello_server) do
|
19
19
|
::Protobuf::Rpc::DynamicDiscovery::Server.new(
|
20
20
|
:uuid => "hello",
|
21
21
|
:address => '127.0.0.1',
|
22
22
|
:port => "1112",
|
23
23
|
:ttl => 10,
|
24
|
-
:services => %w
|
24
|
+
:services => %w(HelloService),
|
25
25
|
)
|
26
|
-
|
26
|
+
end
|
27
27
|
|
28
|
-
let(:hello_server_with_short_ttl)
|
28
|
+
let(:hello_server_with_short_ttl) do
|
29
29
|
::Protobuf::Rpc::DynamicDiscovery::Server.new(
|
30
30
|
:uuid => "hello_server_with_short_ttl",
|
31
31
|
:address => '127.0.0.1',
|
32
32
|
:port => '1113',
|
33
33
|
:ttl => 1,
|
34
|
-
:services => %w
|
34
|
+
:services => %w(HelloService),
|
35
35
|
)
|
36
|
-
|
36
|
+
end
|
37
37
|
|
38
|
-
let(:combo_server)
|
38
|
+
let(:combo_server) do
|
39
39
|
::Protobuf::Rpc::DynamicDiscovery::Server.new(
|
40
40
|
:uuid => "combo",
|
41
41
|
:address => '127.0.0.1',
|
42
42
|
:port => '1114',
|
43
43
|
:ttl => 10,
|
44
|
-
:services => %w
|
44
|
+
:services => %w(HelloService EchoService),
|
45
45
|
)
|
46
|
-
|
46
|
+
end
|
47
47
|
|
48
48
|
before(:all) do
|
49
49
|
@address = "127.0.0.1"
|
@@ -57,15 +57,16 @@ describe ::Protobuf::Rpc::ServiceDirectory do
|
|
57
57
|
|
58
58
|
def expect_event_trigger(event)
|
59
59
|
expect(::ActiveSupport::Notifications).to receive(:instrument)
|
60
|
-
|
61
|
-
|
60
|
+
.with(event, hash_including(
|
61
|
+
:listing => an_instance_of(::Protobuf::Rpc::ServiceDirectory::Listing),
|
62
|
+
)).once
|
62
63
|
end
|
63
64
|
|
64
65
|
def send_beacon(type, server)
|
65
66
|
type = type.to_s.upcase
|
66
67
|
beacon = ::Protobuf::Rpc::DynamicDiscovery::Beacon.new(
|
67
68
|
:server => server,
|
68
|
-
:beacon_type => ::Protobuf::Rpc::DynamicDiscovery::BeaconType.fetch(type)
|
69
|
+
:beacon_type => ::Protobuf::Rpc::DynamicDiscovery::BeaconType.fetch(type),
|
69
70
|
)
|
70
71
|
|
71
72
|
@socket.send(beacon.encode, 0, @address, @port)
|
@@ -175,9 +176,9 @@ describe ::Protobuf::Rpc::ServiceDirectory do
|
|
175
176
|
send_beacon(:heartbeat, echo_server)
|
176
177
|
send_beacon(:heartbeat, combo_server)
|
177
178
|
|
178
|
-
expect
|
179
|
+
expect do |block|
|
179
180
|
subject.each_listing(&block)
|
180
|
-
|
181
|
+
end.to yield_control.exactly(3).times
|
181
182
|
end
|
182
183
|
end
|
183
184
|
|
@@ -198,7 +199,7 @@ describe ::Protobuf::Rpc::ServiceDirectory do
|
|
198
199
|
|
199
200
|
it "should not return expired listings" do
|
200
201
|
send_beacon(:heartbeat, hello_server_with_short_ttl)
|
201
|
-
sleep
|
202
|
+
sleep 5
|
202
203
|
expect(subject.lookup("HelloService")).to be_nil
|
203
204
|
end
|
204
205
|
|
@@ -259,17 +260,17 @@ describe ::Protobuf::Rpc::ServiceDirectory do
|
|
259
260
|
|
260
261
|
if ENV.key?("BENCH")
|
261
262
|
context "performance" do
|
262
|
-
let(:servers)
|
263
|
-
100.times.
|
263
|
+
let(:servers) do
|
264
|
+
100.times.map do |x|
|
264
265
|
::Protobuf::Rpc::DynamicDiscovery::Server.new(
|
265
266
|
:uuid => "performance_server#{x + 1}",
|
266
267
|
:address => '127.0.0.1',
|
267
268
|
:port => (5555 + x).to_s,
|
268
269
|
:ttl => rand(1..5),
|
269
|
-
:services => 10.times.
|
270
|
+
:services => 10.times.map { |y| "PerformanceService#{y}" },
|
270
271
|
)
|
271
272
|
end
|
272
|
-
|
273
|
+
end
|
273
274
|
|
274
275
|
before do
|
275
276
|
require 'benchmark'
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'protobuf/rpc/service_dispatcher'
|
3
3
|
|
4
|
-
describe Protobuf::Rpc::ServiceDispatcher do
|
4
|
+
RSpec.describe Protobuf::Rpc::ServiceDispatcher do
|
5
5
|
let(:app) { proc { |env| env } }
|
6
|
-
let(:env)
|
6
|
+
let(:env) do
|
7
7
|
Protobuf::Rpc::Env.new(
|
8
8
|
'method_name' => method_name,
|
9
9
|
'request' => request,
|
10
10
|
'rpc_service' => service_class,
|
11
11
|
'service_name' => service_name,
|
12
12
|
)
|
13
|
-
|
13
|
+
end
|
14
14
|
let(:method_name) { :find }
|
15
15
|
let(:request) { request_type.new(:name => 'required') }
|
16
16
|
let(:request_type) { service_class.rpcs[method_name].request_type }
|
@@ -42,7 +42,7 @@ describe Protobuf::Rpc::ServiceDispatcher do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
context "when the given RPC method is implemented and a NoMethodError is raised" do
|
45
|
-
before { allow(rpc_service).to receive(:callable_rpc_method).and_return(
|
45
|
+
before { allow(rpc_service).to receive(:callable_rpc_method).and_return(-> { rpc_service.__send__(:foo) }) }
|
46
46
|
|
47
47
|
it "raises the exeception" do
|
48
48
|
expect { subject.call(env) }.to raise_exception(NoMethodError)
|
@@ -27,7 +27,7 @@ class FilterTest
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
describe Protobuf::Rpc::ServiceFilters do
|
30
|
+
RSpec.describe Protobuf::Rpc::ServiceFilters do
|
31
31
|
let(:params) { {} }
|
32
32
|
subject { FilterTest.new(params) }
|
33
33
|
after(:each) { FilterTest.clear_filters! }
|
@@ -38,6 +38,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
38
38
|
before(:all) do
|
39
39
|
class FilterTest
|
40
40
|
private
|
41
|
+
|
41
42
|
def verify_before
|
42
43
|
@called << :verify_before
|
43
44
|
@before_filter_calls += 1
|
@@ -60,7 +61,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
60
61
|
|
61
62
|
it 'calls filters in the order they were defined' do
|
62
63
|
subject.__send__(:run_filters, :endpoint)
|
63
|
-
expect(subject.called).to eq [
|
64
|
+
expect(subject.called).to eq [:verify_before, :foo, :endpoint]
|
64
65
|
expect(subject.before_filter_calls).to eq 1
|
65
66
|
end
|
66
67
|
|
@@ -68,6 +69,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
68
69
|
before(:all) do
|
69
70
|
class FilterTest
|
70
71
|
private
|
72
|
+
|
71
73
|
def endpoint_with_verify
|
72
74
|
@called << :endpoint_with_verify
|
73
75
|
end
|
@@ -82,14 +84,14 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
82
84
|
context 'when invoking a method defined in "only" option' do
|
83
85
|
it 'invokes the filter' do
|
84
86
|
subject.__send__(:run_filters, :endpoint_with_verify)
|
85
|
-
expect(subject.called).to eq [
|
87
|
+
expect(subject.called).to eq [:verify_before, :endpoint_with_verify]
|
86
88
|
end
|
87
89
|
end
|
88
90
|
|
89
91
|
context 'when invoking a method not defined by "only" option' do
|
90
92
|
it 'does not invoke the filter' do
|
91
93
|
subject.__send__(:run_filters, :endpoint)
|
92
|
-
expect(subject.called).to eq [
|
94
|
+
expect(subject.called).to eq [:endpoint]
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
@@ -98,6 +100,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
98
100
|
before(:all) do
|
99
101
|
class FilterTest
|
100
102
|
private
|
103
|
+
|
101
104
|
def endpoint_without_verify
|
102
105
|
@called << :endpoint_without_verify
|
103
106
|
end
|
@@ -112,14 +115,14 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
112
115
|
context 'when invoking a method not defined in "except" option' do
|
113
116
|
it 'invokes the filter' do
|
114
117
|
subject.__send__(:run_filters, :endpoint)
|
115
|
-
expect(subject.called).to eq [
|
118
|
+
expect(subject.called).to eq [:verify_before, :endpoint]
|
116
119
|
end
|
117
120
|
end
|
118
121
|
|
119
122
|
context 'when invoking a method defined by "except" option' do
|
120
123
|
it 'does not invoke the filter' do
|
121
124
|
subject.__send__(:run_filters, :endpoint_without_verify)
|
122
|
-
expect(subject.called).to eq [
|
125
|
+
expect(subject.called).to eq [:endpoint_without_verify]
|
123
126
|
end
|
124
127
|
end
|
125
128
|
end
|
@@ -128,9 +131,18 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
128
131
|
before(:all) do
|
129
132
|
class FilterTest
|
130
133
|
private
|
131
|
-
|
132
|
-
def
|
133
|
-
|
134
|
+
|
135
|
+
def check_true
|
136
|
+
true
|
137
|
+
end
|
138
|
+
|
139
|
+
def check_false
|
140
|
+
false
|
141
|
+
end
|
142
|
+
|
143
|
+
def verify_before
|
144
|
+
@called << :verify_before
|
145
|
+
end
|
134
146
|
end
|
135
147
|
end
|
136
148
|
|
@@ -142,19 +154,19 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
142
154
|
|
143
155
|
it 'invokes the filter' do
|
144
156
|
subject.__send__(:run_filters, :endpoint)
|
145
|
-
expect(subject.called).to eq [
|
157
|
+
expect(subject.called).to eq [:verify_before, :endpoint]
|
146
158
|
end
|
147
159
|
end
|
148
160
|
|
149
161
|
context 'when "if" option is a callable that returns true' do
|
150
162
|
before do
|
151
163
|
FilterTest.clear_filters!
|
152
|
-
FilterTest.before_filter(:verify_before, :if =>
|
164
|
+
FilterTest.before_filter(:verify_before, :if => ->(_service) { true })
|
153
165
|
end
|
154
166
|
|
155
167
|
it 'invokes the filter' do
|
156
168
|
subject.__send__(:run_filters, :endpoint)
|
157
|
-
expect(subject.called).to eq [
|
169
|
+
expect(subject.called).to eq [:verify_before, :endpoint]
|
158
170
|
end
|
159
171
|
end
|
160
172
|
|
@@ -166,19 +178,19 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
166
178
|
|
167
179
|
it 'skips the filter' do
|
168
180
|
subject.__send__(:run_filters, :endpoint)
|
169
|
-
expect(subject.called).to eq [
|
181
|
+
expect(subject.called).to eq [:endpoint]
|
170
182
|
end
|
171
183
|
end
|
172
184
|
|
173
185
|
context 'when "if" option is a callable that returns false' do
|
174
186
|
before do
|
175
187
|
FilterTest.clear_filters!
|
176
|
-
FilterTest.before_filter(:verify_before, :if =>
|
188
|
+
FilterTest.before_filter(:verify_before, :if => ->(_service) { false })
|
177
189
|
end
|
178
190
|
|
179
191
|
it 'skips the filter' do
|
180
192
|
subject.__send__(:run_filters, :endpoint)
|
181
|
-
expect(subject.called).to eq [
|
193
|
+
expect(subject.called).to eq [:endpoint]
|
182
194
|
end
|
183
195
|
end
|
184
196
|
end
|
@@ -187,9 +199,18 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
187
199
|
before(:all) do
|
188
200
|
class FilterTest
|
189
201
|
private
|
190
|
-
|
191
|
-
def
|
192
|
-
|
202
|
+
|
203
|
+
def check_true
|
204
|
+
true
|
205
|
+
end
|
206
|
+
|
207
|
+
def check_false
|
208
|
+
false
|
209
|
+
end
|
210
|
+
|
211
|
+
def verify_before
|
212
|
+
@called << :verify_before
|
213
|
+
end
|
193
214
|
end
|
194
215
|
end
|
195
216
|
|
@@ -201,19 +222,19 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
201
222
|
|
202
223
|
it 'invokes the filter' do
|
203
224
|
subject.__send__(:run_filters, :endpoint)
|
204
|
-
expect(subject.called).to eq [
|
225
|
+
expect(subject.called).to eq [:verify_before, :endpoint]
|
205
226
|
end
|
206
227
|
end
|
207
228
|
|
208
229
|
context 'when "unless" option is a callable that returns true' do
|
209
230
|
before do
|
210
231
|
FilterTest.clear_filters!
|
211
|
-
FilterTest.before_filter(:verify_before, :unless =>
|
232
|
+
FilterTest.before_filter(:verify_before, :unless => ->(_service) { false })
|
212
233
|
end
|
213
234
|
|
214
235
|
it 'invokes the filter' do
|
215
236
|
subject.__send__(:run_filters, :endpoint)
|
216
|
-
expect(subject.called).to eq [
|
237
|
+
expect(subject.called).to eq [:verify_before, :endpoint]
|
217
238
|
end
|
218
239
|
end
|
219
240
|
|
@@ -225,19 +246,19 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
225
246
|
|
226
247
|
it 'skips the filter' do
|
227
248
|
subject.__send__(:run_filters, :endpoint)
|
228
|
-
expect(subject.called).to eq [
|
249
|
+
expect(subject.called).to eq [:endpoint]
|
229
250
|
end
|
230
251
|
end
|
231
252
|
|
232
253
|
context 'when "unless" option is a callable that returns false' do
|
233
254
|
before do
|
234
255
|
FilterTest.clear_filters!
|
235
|
-
FilterTest.before_filter(:verify_before, :unless =>
|
256
|
+
FilterTest.before_filter(:verify_before, :unless => ->(_service) { true })
|
236
257
|
end
|
237
258
|
|
238
259
|
it 'skips the filter' do
|
239
260
|
subject.__send__(:run_filters, :endpoint)
|
240
|
-
expect(subject.called).to eq [
|
261
|
+
expect(subject.called).to eq [:endpoint]
|
241
262
|
end
|
242
263
|
end
|
243
264
|
end
|
@@ -246,9 +267,10 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
246
267
|
before(:all) do
|
247
268
|
class FilterTest
|
248
269
|
private
|
270
|
+
|
249
271
|
def short_circuit_filter
|
250
272
|
@called << :short_circuit_filter
|
251
|
-
|
273
|
+
false
|
252
274
|
end
|
253
275
|
end
|
254
276
|
end
|
@@ -261,7 +283,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
261
283
|
it 'does not invoke the rpc method' do
|
262
284
|
expect(subject).not_to receive(:endpoint)
|
263
285
|
subject.__send__(:run_filters, :endpoint)
|
264
|
-
expect(subject.called).to eq [
|
286
|
+
expect(subject.called).to eq [:short_circuit_filter]
|
265
287
|
end
|
266
288
|
end
|
267
289
|
end
|
@@ -272,6 +294,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
272
294
|
before(:all) do
|
273
295
|
class FilterTest
|
274
296
|
private
|
297
|
+
|
275
298
|
def verify_after
|
276
299
|
@called << :verify_after
|
277
300
|
@after_filter_calls += 1
|
@@ -294,7 +317,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
294
317
|
|
295
318
|
it 'calls filters in the order they were defined' do
|
296
319
|
subject.__send__(:run_filters, :endpoint)
|
297
|
-
expect(subject.called).to eq [
|
320
|
+
expect(subject.called).to eq [:endpoint, :verify_after, :foo]
|
298
321
|
expect(subject.after_filter_calls).to eq 1
|
299
322
|
end
|
300
323
|
end
|
@@ -305,6 +328,7 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
305
328
|
before(:all) do
|
306
329
|
class FilterTest
|
307
330
|
private
|
331
|
+
|
308
332
|
def outer_around
|
309
333
|
@called << :outer_around_top
|
310
334
|
yield
|
@@ -331,17 +355,22 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
331
355
|
|
332
356
|
it 'calls filters in the order they were defined' do
|
333
357
|
subject.__send__(:run_filters, :endpoint)
|
334
|
-
expect(subject.called).to eq(
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
358
|
+
expect(subject.called).to eq(
|
359
|
+
[
|
360
|
+
:outer_around_top,
|
361
|
+
:inner_around_top,
|
362
|
+
:endpoint,
|
363
|
+
:inner_around_bottom,
|
364
|
+
:outer_around_bottom,
|
365
|
+
],
|
366
|
+
)
|
339
367
|
end
|
340
368
|
|
341
369
|
context 'when around_filter does not yield' do
|
342
370
|
before do
|
343
371
|
class FilterTest
|
344
372
|
private
|
373
|
+
|
345
374
|
def inner_around
|
346
375
|
@called << :inner_around
|
347
376
|
end
|
@@ -356,9 +385,13 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
356
385
|
it 'cancels calling the rest of the filters and the endpoint' do
|
357
386
|
expect(subject).not_to receive(:endpoint)
|
358
387
|
subject.__send__(:run_filters, :endpoint)
|
359
|
-
expect(subject.called).to eq(
|
360
|
-
|
361
|
-
|
388
|
+
expect(subject.called).to eq(
|
389
|
+
[
|
390
|
+
:outer_around_top,
|
391
|
+
:inner_around,
|
392
|
+
:outer_around_bottom,
|
393
|
+
],
|
394
|
+
)
|
362
395
|
end
|
363
396
|
|
364
397
|
end
|
@@ -377,22 +410,22 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
377
410
|
|
378
411
|
def filter_with_error1
|
379
412
|
@called << :filter_with_error1
|
380
|
-
|
413
|
+
fail CustomError1, 'Filter 1 failed'
|
381
414
|
end
|
382
415
|
|
383
416
|
def filter_with_error2
|
384
417
|
@called << :filter_with_error2
|
385
|
-
|
418
|
+
fail CustomError1, 'Filter 2 failed'
|
386
419
|
end
|
387
420
|
|
388
421
|
def filter_with_error3
|
389
422
|
@called << :filter_with_error3
|
390
|
-
|
423
|
+
fail CustomError3, 'Filter 3 failed'
|
391
424
|
end
|
392
425
|
|
393
426
|
def filter_with_runtime_error
|
394
427
|
@called << :filter_with_runtime_error
|
395
|
-
|
428
|
+
fail 'Filter with runtime error failed'
|
396
429
|
end
|
397
430
|
|
398
431
|
def custom_error_occurred(ex)
|
@@ -411,12 +444,12 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
411
444
|
before { FilterTest.before_filter(:filter_with_error3) }
|
412
445
|
|
413
446
|
it 'short-circuits the call stack' do
|
414
|
-
expect
|
447
|
+
expect do
|
415
448
|
expect(subject).not_to receive(:endpoint)
|
416
449
|
subject.__send__(:run_filters, :endpoint)
|
417
|
-
expect(subject.called).to eq([
|
450
|
+
expect(subject.called).to eq([:filter_with_error3, :custom_error_occurred])
|
418
451
|
expect(subject.ex_class).to eq CustomError3
|
419
|
-
|
452
|
+
end.not_to raise_error
|
420
453
|
end
|
421
454
|
end
|
422
455
|
|
@@ -432,12 +465,12 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
432
465
|
before { FilterTest.before_filter(:filter_with_error1) }
|
433
466
|
|
434
467
|
it 'short-circuits the call stack' do
|
435
|
-
expect
|
468
|
+
expect do
|
436
469
|
expect(subject).not_to receive(:endpoint)
|
437
470
|
subject.__send__(:run_filters, :endpoint)
|
438
|
-
expect(subject.called).to eq([
|
471
|
+
expect(subject.called).to eq([:filter_with_error1, :custom_error_occurred])
|
439
472
|
expect(subject.ex_class).to eq CustomError1
|
440
|
-
|
473
|
+
end.not_to raise_error
|
441
474
|
end
|
442
475
|
end
|
443
476
|
end
|
@@ -452,12 +485,12 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
452
485
|
before { FilterTest.before_filter(:filter_with_error1) }
|
453
486
|
|
454
487
|
it 'short-circuits the call stack' do
|
455
|
-
expect
|
488
|
+
expect do
|
456
489
|
expect(subject).not_to receive(:endpoint)
|
457
490
|
subject.__send__(:run_filters, :endpoint)
|
458
|
-
expect(subject.called).to eq([
|
491
|
+
expect(subject.called).to eq([:filter_with_error1, :block_rescue_handler])
|
459
492
|
expect(subject.ex_class).to eq CustomError1
|
460
|
-
|
493
|
+
end.not_to raise_error
|
461
494
|
end
|
462
495
|
end
|
463
496
|
|
@@ -471,12 +504,12 @@ describe Protobuf::Rpc::ServiceFilters do
|
|
471
504
|
before { FilterTest.before_filter(:filter_with_runtime_error) }
|
472
505
|
|
473
506
|
it 'rescues with the given callable' do
|
474
|
-
expect
|
507
|
+
expect do
|
475
508
|
expect(subject).not_to receive(:endpoint)
|
476
509
|
subject.__send__(:run_filters, :endpoint)
|
477
|
-
expect(subject.called).to eq([
|
510
|
+
expect(subject.called).to eq([:filter_with_runtime_error, :standard_error_rescue_handler])
|
478
511
|
expect(subject.ex_class).to eq RuntimeError
|
479
|
-
|
512
|
+
end.not_to raise_error
|
480
513
|
end
|
481
514
|
end
|
482
515
|
end
|