protobuf 3.7.0.pre2 → 3.7.0.pre3
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 +4 -4
- data/.rubocop.yml +6 -1
- data/.rubocop_todo.yml +7 -1
- data/.travis.yml +8 -1
- data/CHANGES.md +25 -1
- data/bin/protoc-gen-ruby +2 -2
- data/lib/protobuf/cli.rb +29 -17
- data/lib/protobuf/code_generator.rb +49 -1
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +9 -1
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +14 -1
- data/lib/protobuf/encoder.rb +2 -2
- data/lib/protobuf/enum.rb +3 -3
- data/lib/protobuf/field/base_field.rb +27 -19
- data/lib/protobuf/field/bool_field.rb +10 -8
- data/lib/protobuf/field/bytes_field.rb +14 -6
- data/lib/protobuf/field/float_field.rb +2 -0
- data/lib/protobuf/field/string_field.rb +10 -0
- data/lib/protobuf/field/varint_field.rb +12 -2
- data/lib/protobuf/generators/base.rb +29 -14
- data/lib/protobuf/generators/enum_generator.rb +4 -7
- data/lib/protobuf/generators/field_generator.rb +17 -4
- data/lib/protobuf/generators/file_generator.rb +121 -10
- data/lib/protobuf/generators/group_generator.rb +9 -3
- data/lib/protobuf/generators/message_generator.rb +8 -2
- data/lib/protobuf/generators/option_generator.rb +17 -0
- data/lib/protobuf/generators/printable.rb +2 -2
- data/lib/protobuf/generators/service_generator.rb +27 -3
- data/lib/protobuf/lifecycle.rb +1 -1
- data/lib/protobuf/message/fields.rb +13 -15
- data/lib/protobuf/message/serialization.rb +9 -9
- data/lib/protobuf/message.rb +23 -29
- data/lib/protobuf/optionable.rb +10 -10
- data/lib/protobuf/rpc/buffer.rb +7 -6
- data/lib/protobuf/rpc/client.rb +2 -30
- data/lib/protobuf/rpc/connectors/base.rb +168 -6
- data/lib/protobuf/rpc/connectors/ping.rb +2 -2
- data/lib/protobuf/rpc/connectors/socket.rb +6 -1
- data/lib/protobuf/rpc/connectors/zmq.rb +1 -2
- data/lib/protobuf/rpc/dynamic_discovery.pb.rb +2 -1
- data/lib/protobuf/rpc/error.rb +2 -2
- data/lib/protobuf/rpc/middleware/exception_handler.rb +4 -0
- data/lib/protobuf/rpc/middleware/logger.rb +4 -0
- data/lib/protobuf/rpc/middleware/request_decoder.rb +11 -16
- data/lib/protobuf/rpc/middleware/response_encoder.rb +18 -23
- data/lib/protobuf/rpc/rpc.pb.rb +2 -1
- data/lib/protobuf/rpc/rpc_method.rb +16 -0
- data/lib/protobuf/rpc/servers/socket/server.rb +4 -4
- data/lib/protobuf/rpc/servers/socket_runner.rb +8 -0
- data/lib/protobuf/rpc/servers/zmq/broker.rb +7 -6
- data/lib/protobuf/rpc/servers/zmq/server.rb +8 -7
- data/lib/protobuf/rpc/servers/zmq/util.rb +6 -6
- data/lib/protobuf/rpc/servers/zmq/worker.rb +7 -6
- data/lib/protobuf/rpc/servers/zmq_runner.rb +8 -0
- data/lib/protobuf/rpc/service.rb +6 -15
- data/lib/protobuf/rpc/service_directory.rb +1 -1
- data/lib/protobuf/rpc/service_dispatcher.rb +5 -6
- data/lib/protobuf/rpc/service_filters.rb +8 -30
- data/lib/protobuf/socket.rb +2 -2
- data/lib/protobuf/version.rb +1 -1
- data/lib/protobuf/zmq.rb +2 -2
- data/lib/protobuf.rb +12 -27
- data/protobuf.gemspec +5 -3
- data/spec/benchmark/tasks.rb +1 -0
- data/spec/functional/code_generator_spec.rb +38 -0
- data/spec/lib/protobuf/cli_spec.rb +19 -10
- data/spec/lib/protobuf/code_generator_spec.rb +28 -0
- data/spec/lib/protobuf/enum_spec.rb +6 -2
- data/spec/lib/protobuf/field/bool_field_spec.rb +4 -0
- data/spec/lib/protobuf/field/double_field_spec.rb +9 -0
- data/spec/lib/protobuf/field/fixed32_field_spec.rb +7 -0
- data/spec/lib/protobuf/field/fixed64_field_spec.rb +7 -0
- data/spec/lib/protobuf/field/float_field_spec.rb +5 -1
- data/spec/lib/protobuf/field/int64_field_spec.rb +7 -0
- data/spec/lib/protobuf/field/message_field_spec.rb +53 -0
- data/spec/lib/protobuf/field/sfixed32_field_spec.rb +9 -0
- data/spec/lib/protobuf/field/sfixed64_field_spec.rb +9 -0
- data/spec/lib/protobuf/field/sint32_field_spec.rb +9 -0
- data/spec/lib/protobuf/field/sint64_field_spec.rb +9 -0
- data/spec/lib/protobuf/field/uint32_field_spec.rb +7 -0
- data/spec/lib/protobuf/field/uint64_field_spec.rb +7 -0
- data/spec/lib/protobuf/generators/base_spec.rb +69 -1
- data/spec/lib/protobuf/generators/enum_generator_spec.rb +1 -1
- data/spec/lib/protobuf/generators/field_generator_spec.rb +58 -0
- data/spec/lib/protobuf/generators/file_generator_spec.rb +47 -0
- data/spec/lib/protobuf/generators/service_generator_spec.rb +58 -14
- data/spec/lib/protobuf/message_spec.rb +2 -2
- data/spec/lib/protobuf/optionable_spec.rb +96 -0
- data/spec/lib/protobuf/rpc/connectors/base_spec.rb +151 -0
- data/spec/lib/protobuf/rpc/connectors/ping_spec.rb +3 -3
- data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +0 -2
- data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +1 -18
- data/spec/lib/protobuf/rpc/service_filters_spec.rb +2 -2
- data/spec/lib/protobuf/varint_spec.rb +1 -1
- data/spec/lib/protobuf_spec.rb +13 -16
- data/spec/support/packed_field.rb +3 -2
- data/spec/support/protos/enum.pb.rb +2 -1
- data/spec/support/protos/enum.proto +1 -0
- data/spec/support/protos/google_unittest.pb.rb +69 -58
- data/spec/support/protos/google_unittest_custom_options.bin +0 -0
- data/spec/support/protos/google_unittest_custom_options.pb.rb +361 -0
- data/spec/support/protos/google_unittest_custom_options.proto +424 -0
- data/spec/support/protos/google_unittest_import.pb.rb +8 -0
- data/spec/support/protos/google_unittest_import_public.pb.rb +6 -0
- data/spec/support/protos/resource.pb.rb +54 -2
- data/spec/support/protos/resource.proto +42 -2
- data/spec/support/server.rb +1 -1
- metadata +39 -16
- data/lib/protobuf/rpc/connector.rb +0 -19
- data/lib/protobuf/rpc/connectors/common.rb +0 -176
- data/spec/lib/protobuf/rpc/connector_spec.rb +0 -26
- data/spec/lib/protobuf/rpc/connectors/common_spec.rb +0 -170
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.7.0.
|
4
|
+
version: 3.7.0.pre3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- BJ Neilsen
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2017-03-15 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -87,16 +87,16 @@ dependencies:
|
|
87
87
|
name: rake
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- - "
|
90
|
+
- - "<"
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: '0'
|
92
|
+
version: '11.0'
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- - "
|
97
|
+
- - "<"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: '0'
|
99
|
+
version: '11.0'
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: rspec
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,14 +117,14 @@ dependencies:
|
|
117
117
|
requirements:
|
118
118
|
- - "~>"
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.
|
120
|
+
version: 0.38.0
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
125
|
- - "~>"
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: 0.
|
127
|
+
version: 0.38.0
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
129
|
name: parser
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
@@ -304,6 +304,7 @@ files:
|
|
304
304
|
- lib/protobuf/generators/file_generator.rb
|
305
305
|
- lib/protobuf/generators/group_generator.rb
|
306
306
|
- lib/protobuf/generators/message_generator.rb
|
307
|
+
- lib/protobuf/generators/option_generator.rb
|
307
308
|
- lib/protobuf/generators/printable.rb
|
308
309
|
- lib/protobuf/generators/service_generator.rb
|
309
310
|
- lib/protobuf/lifecycle.rb
|
@@ -314,9 +315,7 @@ files:
|
|
314
315
|
- lib/protobuf/optionable.rb
|
315
316
|
- lib/protobuf/rpc/buffer.rb
|
316
317
|
- lib/protobuf/rpc/client.rb
|
317
|
-
- lib/protobuf/rpc/connector.rb
|
318
318
|
- lib/protobuf/rpc/connectors/base.rb
|
319
|
-
- lib/protobuf/rpc/connectors/common.rb
|
320
319
|
- lib/protobuf/rpc/connectors/ping.rb
|
321
320
|
- lib/protobuf/rpc/connectors/socket.rb
|
322
321
|
- lib/protobuf/rpc/connectors/zmq.rb
|
@@ -332,6 +331,7 @@ files:
|
|
332
331
|
- lib/protobuf/rpc/middleware/response_encoder.rb
|
333
332
|
- lib/protobuf/rpc/middleware/runner.rb
|
334
333
|
- lib/protobuf/rpc/rpc.pb.rb
|
334
|
+
- lib/protobuf/rpc/rpc_method.rb
|
335
335
|
- lib/protobuf/rpc/server.rb
|
336
336
|
- lib/protobuf/rpc/servers/socket/server.rb
|
337
337
|
- lib/protobuf/rpc/servers/socket/worker.rb
|
@@ -364,18 +364,29 @@ files:
|
|
364
364
|
- spec/encoding/all_types_spec.rb
|
365
365
|
- spec/encoding/extreme_values_spec.rb
|
366
366
|
- spec/functional/class_inheritance_spec.rb
|
367
|
+
- spec/functional/code_generator_spec.rb
|
367
368
|
- spec/functional/socket_server_spec.rb
|
368
369
|
- spec/functional/zmq_server_spec.rb
|
369
370
|
- spec/lib/protobuf/cli_spec.rb
|
370
371
|
- spec/lib/protobuf/code_generator_spec.rb
|
371
372
|
- spec/lib/protobuf/enum_spec.rb
|
372
373
|
- spec/lib/protobuf/field/bool_field_spec.rb
|
374
|
+
- spec/lib/protobuf/field/double_field_spec.rb
|
373
375
|
- spec/lib/protobuf/field/enum_field_spec.rb
|
374
376
|
- spec/lib/protobuf/field/field_array_spec.rb
|
377
|
+
- spec/lib/protobuf/field/fixed32_field_spec.rb
|
378
|
+
- spec/lib/protobuf/field/fixed64_field_spec.rb
|
375
379
|
- spec/lib/protobuf/field/float_field_spec.rb
|
376
380
|
- spec/lib/protobuf/field/int32_field_spec.rb
|
381
|
+
- spec/lib/protobuf/field/int64_field_spec.rb
|
377
382
|
- spec/lib/protobuf/field/message_field_spec.rb
|
383
|
+
- spec/lib/protobuf/field/sfixed32_field_spec.rb
|
384
|
+
- spec/lib/protobuf/field/sfixed64_field_spec.rb
|
385
|
+
- spec/lib/protobuf/field/sint32_field_spec.rb
|
386
|
+
- spec/lib/protobuf/field/sint64_field_spec.rb
|
378
387
|
- spec/lib/protobuf/field/string_field_spec.rb
|
388
|
+
- spec/lib/protobuf/field/uint32_field_spec.rb
|
389
|
+
- spec/lib/protobuf/field/uint64_field_spec.rb
|
379
390
|
- spec/lib/protobuf/field_spec.rb
|
380
391
|
- spec/lib/protobuf/generators/base_spec.rb
|
381
392
|
- spec/lib/protobuf/generators/enum_generator_spec.rb
|
@@ -388,9 +399,7 @@ files:
|
|
388
399
|
- spec/lib/protobuf/message_spec.rb
|
389
400
|
- spec/lib/protobuf/optionable_spec.rb
|
390
401
|
- spec/lib/protobuf/rpc/client_spec.rb
|
391
|
-
- spec/lib/protobuf/rpc/connector_spec.rb
|
392
402
|
- spec/lib/protobuf/rpc/connectors/base_spec.rb
|
393
|
-
- spec/lib/protobuf/rpc/connectors/common_spec.rb
|
394
403
|
- spec/lib/protobuf/rpc/connectors/ping_spec.rb
|
395
404
|
- spec/lib/protobuf/rpc/connectors/socket_spec.rb
|
396
405
|
- spec/lib/protobuf/rpc/connectors/zmq_spec.rb
|
@@ -420,6 +429,9 @@ files:
|
|
420
429
|
- spec/support/protos/google_unittest.bin
|
421
430
|
- spec/support/protos/google_unittest.pb.rb
|
422
431
|
- spec/support/protos/google_unittest.proto
|
432
|
+
- spec/support/protos/google_unittest_custom_options.bin
|
433
|
+
- spec/support/protos/google_unittest_custom_options.pb.rb
|
434
|
+
- spec/support/protos/google_unittest_custom_options.proto
|
423
435
|
- spec/support/protos/google_unittest_import.pb.rb
|
424
436
|
- spec/support/protos/google_unittest_import.proto
|
425
437
|
- spec/support/protos/google_unittest_import_public.pb.rb
|
@@ -451,7 +463,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
451
463
|
version: 1.3.1
|
452
464
|
requirements: []
|
453
465
|
rubyforge_project:
|
454
|
-
rubygems_version: 2.
|
466
|
+
rubygems_version: 2.5.2
|
455
467
|
signing_key:
|
456
468
|
specification_version: 4
|
457
469
|
summary: Google Protocol Buffers serialization and RPC implementation for Ruby.
|
@@ -461,18 +473,29 @@ test_files:
|
|
461
473
|
- spec/encoding/all_types_spec.rb
|
462
474
|
- spec/encoding/extreme_values_spec.rb
|
463
475
|
- spec/functional/class_inheritance_spec.rb
|
476
|
+
- spec/functional/code_generator_spec.rb
|
464
477
|
- spec/functional/socket_server_spec.rb
|
465
478
|
- spec/functional/zmq_server_spec.rb
|
466
479
|
- spec/lib/protobuf/cli_spec.rb
|
467
480
|
- spec/lib/protobuf/code_generator_spec.rb
|
468
481
|
- spec/lib/protobuf/enum_spec.rb
|
469
482
|
- spec/lib/protobuf/field/bool_field_spec.rb
|
483
|
+
- spec/lib/protobuf/field/double_field_spec.rb
|
470
484
|
- spec/lib/protobuf/field/enum_field_spec.rb
|
471
485
|
- spec/lib/protobuf/field/field_array_spec.rb
|
486
|
+
- spec/lib/protobuf/field/fixed32_field_spec.rb
|
487
|
+
- spec/lib/protobuf/field/fixed64_field_spec.rb
|
472
488
|
- spec/lib/protobuf/field/float_field_spec.rb
|
473
489
|
- spec/lib/protobuf/field/int32_field_spec.rb
|
490
|
+
- spec/lib/protobuf/field/int64_field_spec.rb
|
474
491
|
- spec/lib/protobuf/field/message_field_spec.rb
|
492
|
+
- spec/lib/protobuf/field/sfixed32_field_spec.rb
|
493
|
+
- spec/lib/protobuf/field/sfixed64_field_spec.rb
|
494
|
+
- spec/lib/protobuf/field/sint32_field_spec.rb
|
495
|
+
- spec/lib/protobuf/field/sint64_field_spec.rb
|
475
496
|
- spec/lib/protobuf/field/string_field_spec.rb
|
497
|
+
- spec/lib/protobuf/field/uint32_field_spec.rb
|
498
|
+
- spec/lib/protobuf/field/uint64_field_spec.rb
|
476
499
|
- spec/lib/protobuf/field_spec.rb
|
477
500
|
- spec/lib/protobuf/generators/base_spec.rb
|
478
501
|
- spec/lib/protobuf/generators/enum_generator_spec.rb
|
@@ -485,9 +508,7 @@ test_files:
|
|
485
508
|
- spec/lib/protobuf/message_spec.rb
|
486
509
|
- spec/lib/protobuf/optionable_spec.rb
|
487
510
|
- spec/lib/protobuf/rpc/client_spec.rb
|
488
|
-
- spec/lib/protobuf/rpc/connector_spec.rb
|
489
511
|
- spec/lib/protobuf/rpc/connectors/base_spec.rb
|
490
|
-
- spec/lib/protobuf/rpc/connectors/common_spec.rb
|
491
512
|
- spec/lib/protobuf/rpc/connectors/ping_spec.rb
|
492
513
|
- spec/lib/protobuf/rpc/connectors/socket_spec.rb
|
493
514
|
- spec/lib/protobuf/rpc/connectors/zmq_spec.rb
|
@@ -517,6 +538,9 @@ test_files:
|
|
517
538
|
- spec/support/protos/google_unittest.bin
|
518
539
|
- spec/support/protos/google_unittest.pb.rb
|
519
540
|
- spec/support/protos/google_unittest.proto
|
541
|
+
- spec/support/protos/google_unittest_custom_options.bin
|
542
|
+
- spec/support/protos/google_unittest_custom_options.pb.rb
|
543
|
+
- spec/support/protos/google_unittest_custom_options.proto
|
520
544
|
- spec/support/protos/google_unittest_import.pb.rb
|
521
545
|
- spec/support/protos/google_unittest_import.proto
|
522
546
|
- spec/support/protos/google_unittest_import_public.pb.rb
|
@@ -528,4 +552,3 @@ test_files:
|
|
528
552
|
- spec/support/resource_service.rb
|
529
553
|
- spec/support/server.rb
|
530
554
|
- spec/support/test_app_file.rb
|
531
|
-
has_rdoc:
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'protobuf'
|
2
|
-
|
3
|
-
module Protobuf
|
4
|
-
module Rpc
|
5
|
-
class Connector
|
6
|
-
|
7
|
-
# Returns a connector class for the pre-defined connector_type.
|
8
|
-
def self.connector_for_client
|
9
|
-
case ::Protobuf.connector_type
|
10
|
-
when :zmq then
|
11
|
-
::Protobuf::Rpc::Connectors::Zmq
|
12
|
-
else
|
13
|
-
::Protobuf::Rpc::Connectors::Socket
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,176 +0,0 @@
|
|
1
|
-
require 'protobuf'
|
2
|
-
|
3
|
-
module Protobuf
|
4
|
-
module Rpc
|
5
|
-
module Connectors
|
6
|
-
module Common
|
7
|
-
|
8
|
-
attr_reader :error
|
9
|
-
|
10
|
-
def any_callbacks?
|
11
|
-
[@complete_cb, @failure_cb, @success_cb].any?
|
12
|
-
end
|
13
|
-
|
14
|
-
def request_caller
|
15
|
-
@options[:client_host] || ::Protobuf.client_host
|
16
|
-
end
|
17
|
-
|
18
|
-
def complete
|
19
|
-
@stats.stop
|
20
|
-
logger.info { @stats.to_s }
|
21
|
-
logger.debug { sign_message('Response proceessing complete') }
|
22
|
-
@complete_cb.call(self) unless @complete_cb.nil?
|
23
|
-
rescue => e
|
24
|
-
logger.error { sign_message('Complete callback error encountered') }
|
25
|
-
log_exception(e)
|
26
|
-
raise
|
27
|
-
end
|
28
|
-
|
29
|
-
def data_callback(data)
|
30
|
-
logger.debug { sign_message('Using data_callback') }
|
31
|
-
@used_data_callback = true
|
32
|
-
@data = data
|
33
|
-
end
|
34
|
-
|
35
|
-
# All failures should be routed through this method.
|
36
|
-
#
|
37
|
-
# @param [Symbol] code The code we're using (see ::Protobuf::Socketrpc::ErrorReason)
|
38
|
-
# @param [String] message The error message
|
39
|
-
def failure(code, message)
|
40
|
-
@error = ClientError.new
|
41
|
-
@error.code = Protobuf::Socketrpc::ErrorReason.fetch(code)
|
42
|
-
@error.message = message
|
43
|
-
logger.debug { sign_message("Server failed request (invoking on_failure): #{@error.inspect}") }
|
44
|
-
|
45
|
-
@failure_cb.call(@error) unless @failure_cb.nil?
|
46
|
-
rescue => e
|
47
|
-
logger.error { sign_message("Failure callback error encountered") }
|
48
|
-
log_exception(e)
|
49
|
-
raise
|
50
|
-
ensure
|
51
|
-
complete
|
52
|
-
end
|
53
|
-
|
54
|
-
def initialize_stats
|
55
|
-
@stats = ::Protobuf::Rpc::Stat.new(:CLIENT)
|
56
|
-
@stats.server = [@options[:port], @options[:host]]
|
57
|
-
@stats.service = @options[:service].name
|
58
|
-
@stats.method_name = @options[:method].to_s
|
59
|
-
rescue => ex
|
60
|
-
log_exception(ex)
|
61
|
-
failure(:RPC_ERROR, "Invalid stats configuration. #{ex.message}")
|
62
|
-
end
|
63
|
-
|
64
|
-
def log_signature
|
65
|
-
@_log_signature ||= "[client-#{self.class}]"
|
66
|
-
end
|
67
|
-
|
68
|
-
def parse_response
|
69
|
-
# Close up the connection as we no longer need it
|
70
|
-
close_connection
|
71
|
-
|
72
|
-
logger.debug { sign_message("Parsing response from server (connection closed)") }
|
73
|
-
|
74
|
-
# Parse out the raw response
|
75
|
-
@stats.response_size = @response_data.size unless @response_data.nil?
|
76
|
-
response_wrapper = Protobuf::Socketrpc::Response.decode(@response_data)
|
77
|
-
|
78
|
-
# Determine success or failure based on parsed data
|
79
|
-
if response_wrapper.field?(:error_reason)
|
80
|
-
logger.debug { sign_message("Error response parsed") }
|
81
|
-
|
82
|
-
# fail the call if we already know the client is failed
|
83
|
-
# (don't try to parse out the response payload)
|
84
|
-
failure(response_wrapper.error_reason, response_wrapper.error)
|
85
|
-
else
|
86
|
-
logger.debug { sign_message("Successful response parsed") }
|
87
|
-
|
88
|
-
# Ensure client_response is an instance
|
89
|
-
parsed = @options[:response_type].decode(response_wrapper.response_proto.to_s)
|
90
|
-
|
91
|
-
if parsed.nil? && !response_wrapper.field?(:error_reason)
|
92
|
-
failure(:BAD_RESPONSE_PROTO, 'Unable to parse response from server')
|
93
|
-
else
|
94
|
-
verify_callbacks
|
95
|
-
succeed(parsed)
|
96
|
-
return @data if @used_data_callback
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def post_init
|
102
|
-
send_data unless error?
|
103
|
-
rescue => e
|
104
|
-
failure(:RPC_ERROR, "Connection error: #{e.message}")
|
105
|
-
end
|
106
|
-
|
107
|
-
def request_bytes
|
108
|
-
validate_request_type!
|
109
|
-
fields = { :service_name => @options[:service].name,
|
110
|
-
:method_name => @options[:method].to_s,
|
111
|
-
:request_proto => @options[:request],
|
112
|
-
:caller => request_caller }
|
113
|
-
|
114
|
-
return ::Protobuf::Socketrpc::Request.encode(fields)
|
115
|
-
rescue => e
|
116
|
-
failure(:INVALID_REQUEST_PROTO, "Could not set request proto: #{e.message}")
|
117
|
-
end
|
118
|
-
|
119
|
-
def setup_connection
|
120
|
-
initialize_stats
|
121
|
-
@request_data = request_bytes
|
122
|
-
@stats.request_size = request_bytes.size
|
123
|
-
end
|
124
|
-
|
125
|
-
def succeed(response)
|
126
|
-
logger.debug { sign_message("Server succeeded request (invoking on_success)") }
|
127
|
-
@success_cb.call(response) unless @success_cb.nil?
|
128
|
-
rescue => e
|
129
|
-
logger.error { sign_message("Success callback error encountered") }
|
130
|
-
log_exception(e)
|
131
|
-
failure(:RPC_ERROR, "An exception occurred while calling on_success: #{e.message}")
|
132
|
-
ensure
|
133
|
-
complete
|
134
|
-
end
|
135
|
-
|
136
|
-
def timeout
|
137
|
-
if options[:timeout]
|
138
|
-
options[:timeout]
|
139
|
-
else
|
140
|
-
300 # seconds
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
# Wrap the given block in a timeout of the configured number of seconds.
|
145
|
-
#
|
146
|
-
def timeout_wrap(&block)
|
147
|
-
::Timeout.timeout(timeout, &block)
|
148
|
-
rescue ::Timeout::Error
|
149
|
-
failure(:RPC_FAILED, "The server took longer than #{timeout} seconds to respond")
|
150
|
-
end
|
151
|
-
|
152
|
-
def validate_request_type!
|
153
|
-
unless @options[:request].class == @options[:request_type]
|
154
|
-
expected = @options[:request_type].name
|
155
|
-
actual = @options[:request].class.name
|
156
|
-
failure(:INVALID_REQUEST_PROTO, "Expected request type to be type of #{expected}, got #{actual} instead")
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
def verify_callbacks
|
161
|
-
unless any_callbacks?
|
162
|
-
logger.debug { sign_message("No callbacks set, using data_callback") }
|
163
|
-
@success_cb = @failure_cb = method(:data_callback)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
def verify_options!
|
168
|
-
# Verify the options that are necessary and merge them in
|
169
|
-
[:service, :method, :host, :port].each do |opt|
|
170
|
-
failure(:RPC_ERROR, "Invalid client connection configuration. #{opt} must be a defined option.") if @options[opt].nil?
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'protobuf/socket'
|
3
|
-
require 'protobuf/zmq'
|
4
|
-
|
5
|
-
RSpec.describe ::Protobuf::Rpc::Connector do
|
6
|
-
|
7
|
-
describe '.connector_for_client(true)' do
|
8
|
-
subject { described_class.connector_for_client }
|
9
|
-
|
10
|
-
context 'Protobuf.connector_type is socket' do
|
11
|
-
before { ::Protobuf.connector_type = :socket }
|
12
|
-
specify { expect(subject).to eq ::Protobuf::Rpc::Connectors::Socket }
|
13
|
-
end
|
14
|
-
|
15
|
-
context 'Protobuf.connector_type is not a known value' do
|
16
|
-
before { allow(::Protobuf).to receive(:connector_type).and_return(:foo) }
|
17
|
-
specify { expect(subject).to eq(::Protobuf::Rpc::Connectors::Socket) }
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'Protobuf.connector_type is zmq' do
|
21
|
-
before { ::Protobuf.connector_type = :zmq }
|
22
|
-
specify { expect(subject).to eq(::Protobuf::Rpc::Connectors::Zmq) }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
@@ -1,170 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'protobuf/rpc/service'
|
3
|
-
|
4
|
-
RSpec.describe Protobuf::Rpc::Connectors::Common do
|
5
|
-
let(:common_class) do
|
6
|
-
Class.new(Protobuf::Rpc::Connectors::Base) do
|
7
|
-
include Protobuf::Rpc::Connectors::Common
|
8
|
-
attr_accessor :options
|
9
|
-
attr_accessor :stats
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:subject_options) { {} }
|
14
|
-
|
15
|
-
subject { @subject ||= common_class.new(subject_options) }
|
16
|
-
|
17
|
-
context "API" do
|
18
|
-
specify { expect(subject.respond_to?(:any_callbacks?)).to be true }
|
19
|
-
specify { expect(subject.respond_to?(:request_caller)).to be true }
|
20
|
-
specify { expect(subject.respond_to?(:data_callback)).to be true }
|
21
|
-
specify { expect(subject.respond_to?(:error)).to be true }
|
22
|
-
specify { expect(subject.respond_to?(:failure)).to be true }
|
23
|
-
specify { expect(subject.respond_to?(:complete)).to be true }
|
24
|
-
specify { expect(subject.respond_to?(:parse_response)).to be true }
|
25
|
-
specify { expect(subject.respond_to?(:verify_options!)).to be true }
|
26
|
-
specify { expect(subject.respond_to?(:verify_callbacks)).to be true }
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#any_callbacks?" do
|
30
|
-
|
31
|
-
[:@complete_cb, :@success_cb, :@failure_cb].each do |cb|
|
32
|
-
it "returns true if #{cb} is provided" do
|
33
|
-
subject.instance_variable_set(cb, "something")
|
34
|
-
expect(subject.any_callbacks?).to be true
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
it "returns false when all callbacks are not provided" do
|
39
|
-
subject.instance_variable_set(:@complete_cb, nil)
|
40
|
-
subject.instance_variable_set(:@success_cb, nil)
|
41
|
-
subject.instance_variable_set(:@failure_cb, nil)
|
42
|
-
|
43
|
-
expect(subject.any_callbacks?).to be false
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
describe '#request_caller' do
|
49
|
-
specify { expect(subject.request_caller).to eq ::Protobuf.client_host }
|
50
|
-
|
51
|
-
context 'when "client_host" option is given to initializer' do
|
52
|
-
let(:hostname) { 'myhost.myserver.com' }
|
53
|
-
let(:subject_options) { { :client_host => hostname } }
|
54
|
-
|
55
|
-
specify { expect(subject.request_caller).to_not eq ::Protobuf.client_host }
|
56
|
-
specify { expect(subject.request_caller).to eq hostname }
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "#data_callback" do
|
61
|
-
it "changes state to use the data callback" do
|
62
|
-
subject.data_callback("data")
|
63
|
-
expect(subject.instance_variable_get(:@used_data_callback)).to be true
|
64
|
-
end
|
65
|
-
|
66
|
-
it "sets the data var when using the data_callback" do
|
67
|
-
subject.data_callback("data")
|
68
|
-
expect(subject.instance_variable_get(:@data)).to eq("data")
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe '#request_bytes' do
|
73
|
-
let(:service) { Test::ResourceService }
|
74
|
-
let(:method) { :find }
|
75
|
-
let(:request) { '' }
|
76
|
-
let(:client_host) { 'myhost.myservice.com' }
|
77
|
-
let(:subject_options) do
|
78
|
-
{
|
79
|
-
:service => service,
|
80
|
-
:method => method,
|
81
|
-
:request => request,
|
82
|
-
:client_host => client_host,
|
83
|
-
}
|
84
|
-
end
|
85
|
-
|
86
|
-
let(:expected) do
|
87
|
-
::Protobuf::Socketrpc::Request.new(
|
88
|
-
:service_name => service.name,
|
89
|
-
:method_name => 'find',
|
90
|
-
:request_proto => '',
|
91
|
-
:caller => client_host,
|
92
|
-
)
|
93
|
-
end
|
94
|
-
|
95
|
-
before { allow(subject).to receive(:validate_request_type!).and_return(true) }
|
96
|
-
before { expect(subject).not_to receive(:failure) }
|
97
|
-
|
98
|
-
specify { expect(subject.request_bytes).to eq expected.encode }
|
99
|
-
end
|
100
|
-
|
101
|
-
describe "#verify_callbacks" do
|
102
|
-
|
103
|
-
it "sets @failure_cb to #data_callback when no callbacks are defined" do
|
104
|
-
subject.verify_callbacks
|
105
|
-
expect(subject.instance_variable_get(:@failure_cb)).to eq(subject.method(:data_callback))
|
106
|
-
end
|
107
|
-
|
108
|
-
it "sets @success_cb to #data_callback when no callbacks are defined" do
|
109
|
-
subject.verify_callbacks
|
110
|
-
expect(subject.instance_variable_get(:@success_cb)).to eq(subject.method(:data_callback))
|
111
|
-
end
|
112
|
-
|
113
|
-
it "doesn't set @failure_cb when already defined" do
|
114
|
-
set_cb = -> { true }
|
115
|
-
subject.instance_variable_set(:@failure_cb, set_cb)
|
116
|
-
subject.verify_callbacks
|
117
|
-
expect(subject.instance_variable_get(:@failure_cb)).to eq(set_cb)
|
118
|
-
expect(subject.instance_variable_get(:@failure_cb)).to_not eq(subject.method(:data_callback))
|
119
|
-
end
|
120
|
-
|
121
|
-
it "doesn't set @success_cb when already defined" do
|
122
|
-
set_cb = -> { true }
|
123
|
-
subject.instance_variable_set(:@success_cb, set_cb)
|
124
|
-
subject.verify_callbacks
|
125
|
-
expect(subject.instance_variable_get(:@success_cb)).to eq(set_cb)
|
126
|
-
expect(subject.instance_variable_get(:@success_cb)).to_not eq(subject.method(:data_callback))
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
|
131
|
-
shared_examples "a ConnectorDisposition" do |meth, cb, *args|
|
132
|
-
|
133
|
-
it "calls #complete before exit" do
|
134
|
-
subject.stats = double("Object", :stop => true)
|
135
|
-
|
136
|
-
expect(subject).to receive(:complete)
|
137
|
-
subject.method(meth).call(*args)
|
138
|
-
end
|
139
|
-
|
140
|
-
it "calls the #{cb} callback when provided" do
|
141
|
-
stats = double("Object")
|
142
|
-
allow(stats).to receive(:stop).and_return(true)
|
143
|
-
subject.stats = stats
|
144
|
-
some_cb = double("Object")
|
145
|
-
|
146
|
-
subject.instance_variable_set("@#{cb}", some_cb)
|
147
|
-
expect(some_cb).to receive(:call).and_return(true)
|
148
|
-
subject.method(meth).call(*args)
|
149
|
-
end
|
150
|
-
|
151
|
-
it "calls the complete callback when provided" do
|
152
|
-
stats = double("Object")
|
153
|
-
allow(stats).to receive(:stop).and_return(true)
|
154
|
-
subject.stats = stats
|
155
|
-
comp_cb = double("Object")
|
156
|
-
|
157
|
-
subject.instance_variable_set(:@complete_cb, comp_cb)
|
158
|
-
expect(comp_cb).to receive(:call).and_return(true)
|
159
|
-
subject.method(meth).call(*args)
|
160
|
-
end
|
161
|
-
|
162
|
-
end
|
163
|
-
|
164
|
-
it_behaves_like("a ConnectorDisposition", :failure, "failure_cb", "code", "message")
|
165
|
-
it_behaves_like("a ConnectorDisposition", :failure, "complete_cb", "code", "message")
|
166
|
-
it_behaves_like("a ConnectorDisposition", :succeed, "complete_cb", "response")
|
167
|
-
it_behaves_like("a ConnectorDisposition", :succeed, "success_cb", "response")
|
168
|
-
it_behaves_like("a ConnectorDisposition", :complete, "complete_cb")
|
169
|
-
|
170
|
-
end
|