protobuf 2.8.13 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +84 -5
- data/CONTRIBUTING.md +3 -3
- data/Rakefile +46 -7
- data/lib/protobuf/cli.rb +2 -20
- data/lib/protobuf/decoder.rb +74 -0
- data/lib/protobuf/deprecator.rb +42 -0
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +17 -16
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +86 -85
- data/lib/protobuf/encoder.rb +62 -0
- data/lib/protobuf/enum.rb +298 -37
- data/lib/protobuf/field/base_field.rb +41 -27
- data/lib/protobuf/field/bool_field.rb +22 -4
- data/lib/protobuf/field/bytes_field.rb +36 -15
- data/lib/protobuf/field/double_field.rb +10 -3
- data/lib/protobuf/field/enum_field.rb +21 -18
- data/lib/protobuf/field/field_array.rb +26 -16
- data/lib/protobuf/field/fixed32_field.rb +10 -4
- data/lib/protobuf/field/fixed64_field.rb +10 -3
- data/lib/protobuf/field/float_field.rb +18 -5
- data/lib/protobuf/field/int32_field.rb +14 -4
- data/lib/protobuf/field/int64_field.rb +14 -4
- data/lib/protobuf/field/integer_field.rb +9 -4
- data/lib/protobuf/field/message_field.rb +16 -7
- data/lib/protobuf/field/sfixed32_field.rb +10 -3
- data/lib/protobuf/field/sfixed64_field.rb +12 -7
- data/lib/protobuf/field/signed_integer_field.rb +7 -0
- data/lib/protobuf/field/sint32_field.rb +14 -4
- data/lib/protobuf/field/sint64_field.rb +14 -4
- data/lib/protobuf/field/string_field.rb +11 -1
- data/lib/protobuf/field/uint32_field.rb +14 -4
- data/lib/protobuf/field/uint64_field.rb +14 -4
- data/lib/protobuf/field/varint_field.rb +11 -9
- data/lib/protobuf/field.rb +42 -25
- data/lib/protobuf/generators/enum_generator.rb +12 -1
- data/lib/protobuf/generators/field_generator.rb +1 -1
- data/lib/protobuf/lifecycle.rb +3 -4
- data/lib/protobuf/message/fields.rb +122 -0
- data/lib/protobuf/message/serialization.rb +84 -0
- data/lib/protobuf/message.rb +21 -221
- data/lib/protobuf/optionable.rb +23 -0
- data/lib/protobuf/rpc/client.rb +2 -4
- data/lib/protobuf/rpc/connector.rb +0 -2
- data/lib/protobuf/rpc/connectors/common.rb +2 -2
- data/lib/protobuf/rpc/dynamic_discovery.pb.rb +14 -16
- data/lib/protobuf/rpc/env.rb +58 -0
- data/lib/protobuf/rpc/error.rb +8 -5
- data/lib/protobuf/rpc/middleware/exception_handler.rb +36 -0
- data/lib/protobuf/rpc/middleware/logger.rb +91 -0
- data/lib/protobuf/rpc/middleware/request_decoder.rb +83 -0
- data/lib/protobuf/rpc/middleware/response_encoder.rb +88 -0
- data/lib/protobuf/rpc/middleware/runner.rb +18 -0
- data/lib/protobuf/rpc/middleware.rb +25 -0
- data/lib/protobuf/rpc/rpc.pb.rb +15 -16
- data/lib/protobuf/rpc/server.rb +14 -64
- data/lib/protobuf/rpc/servers/socket/server.rb +0 -2
- data/lib/protobuf/rpc/servers/socket/worker.rb +11 -15
- data/lib/protobuf/rpc/servers/zmq/util.rb +4 -1
- data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -13
- data/lib/protobuf/rpc/servers/zmq_runner.rb +1 -1
- data/lib/protobuf/rpc/service.rb +38 -72
- data/lib/protobuf/rpc/service_dispatcher.rb +20 -108
- data/lib/protobuf/version.rb +1 -2
- data/lib/protobuf.rb +5 -13
- data/protobuf.gemspec +5 -5
- data/spec/benchmark/tasks.rb +2 -77
- data/spec/functional/zmq_server_spec.rb +13 -21
- data/spec/lib/protobuf/cli_spec.rb +5 -43
- data/spec/lib/protobuf/enum_spec.rb +194 -61
- data/spec/lib/protobuf/field_spec.rb +194 -0
- data/spec/lib/protobuf/generators/enum_generator_spec.rb +24 -1
- data/spec/lib/protobuf/generators/field_generator_spec.rb +6 -6
- data/spec/lib/protobuf/message_spec.rb +52 -70
- data/spec/lib/protobuf/optionable_spec.rb +46 -0
- data/spec/lib/protobuf/rpc/client_spec.rb +1 -93
- data/spec/lib/protobuf/rpc/connector_spec.rb +1 -7
- data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +8 -0
- data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +62 -0
- data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +49 -0
- data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +115 -0
- data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +75 -0
- data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +0 -6
- data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +10 -0
- data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +30 -105
- data/spec/lib/protobuf/rpc/service_filters_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/service_spec.rb +20 -24
- data/spec/lib/protobuf_spec.rb +3 -3
- data/spec/spec_helper.rb +5 -4
- data/spec/support/packed_field.rb +15 -14
- data/spec/support/server.rb +4 -21
- data/spec/support/test/defaults.pb.rb +4 -4
- data/spec/support/test/enum.pb.rb +13 -1
- data/spec/support/test/enum.proto +15 -0
- data/spec/support/test/extended.pb.rb +1 -1
- data/spec/support/test/google_unittest.pb.rb +239 -241
- data/spec/support/test/google_unittest_import.pb.rb +2 -2
- data/spec/support/test/multi_field_extensions.pb.rb +2 -2
- data/spec/support/test/resource.pb.rb +19 -18
- data/spec/support/test/resource.proto +1 -0
- data/spec/support/test/resource_service.rb +5 -0
- metadata +78 -57
- data/bin/rprotoc +0 -8
- data/lib/protobuf/enum_value.rb +0 -85
- data/lib/protobuf/evented.rb +0 -37
- data/lib/protobuf/ext/eventmachine.rb +0 -14
- data/lib/protobuf/field/extension_fields.rb +0 -32
- data/lib/protobuf/message/decoder.rb +0 -72
- data/lib/protobuf/message/message.rb +0 -1
- data/lib/protobuf/rpc/connectors/em_client.rb +0 -84
- data/lib/protobuf/rpc/connectors/eventmachine.rb +0 -87
- data/lib/protobuf/rpc/servers/evented/server.rb +0 -36
- data/lib/protobuf/rpc/servers/evented_runner.rb +0 -31
- data/spec/functional/embedded_service_spec.rb +0 -7
- data/spec/functional/evented_server_spec.rb +0 -64
- data/spec/lib/protobuf/enum_value_spec.rb +0 -29
- data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +0 -19
@@ -1,32 +0,0 @@
|
|
1
|
-
module Protobuf
|
2
|
-
module Field
|
3
|
-
class ExtensionFields < Array
|
4
|
-
##
|
5
|
-
# Constructor
|
6
|
-
#
|
7
|
-
def initialize
|
8
|
-
@ranges = []
|
9
|
-
end
|
10
|
-
|
11
|
-
##
|
12
|
-
# Public Instance Methods
|
13
|
-
#
|
14
|
-
|
15
|
-
# Append a range to the list of ranges.
|
16
|
-
def add_range(range = (0..-1))
|
17
|
-
@ranges << range
|
18
|
-
end
|
19
|
-
|
20
|
-
# Set value at tag location, if tag is in a valid range.
|
21
|
-
def []=(key, value)
|
22
|
-
raise RangeError, "#{key} is not in #{@ranges.join(', ')}" unless include_tag?(key)
|
23
|
-
super
|
24
|
-
end
|
25
|
-
|
26
|
-
# Check if the given tag exists in any of the defined ranges.
|
27
|
-
def include_tag?(tag)
|
28
|
-
@ranges.any? { |range| range.include?(tag) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'protobuf/wire_type'
|
2
|
-
require 'protobuf/exceptions'
|
3
|
-
|
4
|
-
module Protobuf
|
5
|
-
|
6
|
-
module Decoder
|
7
|
-
|
8
|
-
module_function
|
9
|
-
|
10
|
-
# Read bytes from +stream+ and pass to +message+ object.
|
11
|
-
def decode(stream, message)
|
12
|
-
until stream.eof?
|
13
|
-
tag, wire_type = read_key(stream)
|
14
|
-
bytes =
|
15
|
-
case wire_type
|
16
|
-
when ::Protobuf::WireType::VARINT then
|
17
|
-
read_varint(stream)
|
18
|
-
when ::Protobuf::WireType::FIXED64 then
|
19
|
-
read_fixed64(stream)
|
20
|
-
when ::Protobuf::WireType::LENGTH_DELIMITED then
|
21
|
-
read_length_delimited(stream)
|
22
|
-
when ::Protobuf::WireType::FIXED32 then
|
23
|
-
read_fixed32(stream)
|
24
|
-
when ::Protobuf::WireType::START_GROUP then
|
25
|
-
raise NotImplementedError, 'Group is deprecated.'
|
26
|
-
when ::Protobuf::WireType::END_GROUP then
|
27
|
-
raise NotImplementedError, 'Group is deprecated.'
|
28
|
-
else
|
29
|
-
raise InvalidWireType, wire_type
|
30
|
-
end
|
31
|
-
message.set_field(tag, bytes)
|
32
|
-
end
|
33
|
-
message
|
34
|
-
end
|
35
|
-
|
36
|
-
# Read key pair (tag and wire-type) from +stream+.
|
37
|
-
def read_key(stream)
|
38
|
-
bits = read_varint(stream)
|
39
|
-
wire_type = bits & 0x07
|
40
|
-
tag = bits >> 3
|
41
|
-
[tag, wire_type]
|
42
|
-
end
|
43
|
-
|
44
|
-
# Read varint integer value from +stream+.
|
45
|
-
def read_varint(stream)
|
46
|
-
value = index = 0
|
47
|
-
begin
|
48
|
-
byte = stream.readbyte
|
49
|
-
value |= (byte & 0x7f) << (7 * index)
|
50
|
-
index += 1
|
51
|
-
end while (byte & 0x80).nonzero?
|
52
|
-
value
|
53
|
-
end
|
54
|
-
|
55
|
-
# Read 32-bit string value from +stream+.
|
56
|
-
def read_fixed32(stream)
|
57
|
-
stream.read(4)
|
58
|
-
end
|
59
|
-
|
60
|
-
# Read 64-bit string value from +stream+.
|
61
|
-
def read_fixed64(stream)
|
62
|
-
stream.read(8)
|
63
|
-
end
|
64
|
-
|
65
|
-
# Read length-delimited string value from +stream+.
|
66
|
-
def read_length_delimited(stream)
|
67
|
-
value_length = read_varint(stream)
|
68
|
-
stream.read(value_length)
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require 'protobuf/message' # Need to get rid of this
|
@@ -1,84 +0,0 @@
|
|
1
|
-
# Handles client connections to the server
|
2
|
-
module Protobuf
|
3
|
-
module Rpc
|
4
|
-
module Connectors
|
5
|
-
|
6
|
-
class EMClient < EM::Connection
|
7
|
-
include Protobuf::Logger::LogMethods
|
8
|
-
include Protobuf::Rpc::Connectors::Common
|
9
|
-
|
10
|
-
attr_reader :options, :request, :response
|
11
|
-
attr_reader :error, :error_reason, :error_message
|
12
|
-
|
13
|
-
##
|
14
|
-
# Constructor
|
15
|
-
#
|
16
|
-
def initialize(options = {}, &failure_cb)
|
17
|
-
@failure_cb = failure_cb
|
18
|
-
@options = DEFAULT_OPTIONS.merge(options)
|
19
|
-
@response_buffer = ::Protobuf::Rpc::Buffer.new(:read)
|
20
|
-
verify_options!
|
21
|
-
|
22
|
-
log_debug { sign_message("Client Initialized: #{options.inspect}") }
|
23
|
-
rescue => e
|
24
|
-
fail(:RPC_ERROR, "Failed to initialize connection: #{e.message}")
|
25
|
-
end
|
26
|
-
|
27
|
-
##
|
28
|
-
# Class Methods
|
29
|
-
#
|
30
|
-
def self.connect(options = {})
|
31
|
-
options = DEFAULT_OPTIONS.merge(options)
|
32
|
-
log_debug { sign_message("Connecting to server: #{options.inspect}") }
|
33
|
-
EM.connect(options[:host], options[:port], self, options)
|
34
|
-
end
|
35
|
-
|
36
|
-
# turn post_init back into a no-op for event machine
|
37
|
-
def post_init
|
38
|
-
end
|
39
|
-
|
40
|
-
##
|
41
|
-
# Instance Methods
|
42
|
-
#
|
43
|
-
# Completion callback registration
|
44
|
-
def on_complete(&complete_cb)
|
45
|
-
@complete_cb = complete_cb
|
46
|
-
end
|
47
|
-
|
48
|
-
# Failure callback registration
|
49
|
-
def on_failure(&failure_cb)
|
50
|
-
@failure_cb = failure_cb
|
51
|
-
end
|
52
|
-
|
53
|
-
# Success callback registration
|
54
|
-
def on_success(&success_cb)
|
55
|
-
@success_cb = success_cb
|
56
|
-
end
|
57
|
-
|
58
|
-
def receive_data(data)
|
59
|
-
log_debug { sign_message("receive_data: #{data}") }
|
60
|
-
@response_buffer << data
|
61
|
-
@response_data = @response_buffer.data
|
62
|
-
parse_response if !@response_data.nil? && @response_buffer.flushed?
|
63
|
-
end
|
64
|
-
|
65
|
-
def send_data
|
66
|
-
request_buffer = ::Protobuf::Rpc::Buffer.new(:write)
|
67
|
-
request_buffer.set_data(@request_data)
|
68
|
-
log_debug { sign_message("sending data: #{request_buffer.inspect}") }
|
69
|
-
super(request_buffer.write)
|
70
|
-
rescue => e
|
71
|
-
fail(:RPC_ERROR, "Connection error: #{e.message}")
|
72
|
-
end
|
73
|
-
|
74
|
-
# overwriting this method for java because it's broken in eventmachine. See https://github.com/eventmachine/eventmachine/issues/14
|
75
|
-
if RUBY_PLATFORM =~ /java/
|
76
|
-
def error?
|
77
|
-
!!@error
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'protobuf/rpc/connectors/base'
|
2
|
-
require 'protobuf/rpc/connectors/em_client'
|
3
|
-
|
4
|
-
module Protobuf
|
5
|
-
module Rpc
|
6
|
-
module Connectors
|
7
|
-
class EventMachine < Base
|
8
|
-
|
9
|
-
def send_request
|
10
|
-
ensure_em_running do
|
11
|
-
f = Fiber.current
|
12
|
-
|
13
|
-
::EM.next_tick do
|
14
|
-
log_debug { sign_message('Scheduling EventMachine client request to be created on next tick') }
|
15
|
-
cnxn = EMClient.connect(options, &ensure_cb)
|
16
|
-
cnxn.on_success(&success_cb) if success_cb
|
17
|
-
cnxn.on_failure(&ensure_cb)
|
18
|
-
cnxn.on_complete { resume_fiber(f) }
|
19
|
-
cnxn.setup_connection
|
20
|
-
cnxn.send_data
|
21
|
-
log_debug { sign_message('Connection scheduled') }
|
22
|
-
end
|
23
|
-
|
24
|
-
set_timeout_and_validate_fiber
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Returns a callable that ensures any errors will be returned to the client
|
29
|
-
#
|
30
|
-
# If a failure callback was set, just use that as a direct assignment
|
31
|
-
# otherwise implement one here that simply throws an exception, since we
|
32
|
-
# don't want to swallow the black holes.
|
33
|
-
#
|
34
|
-
def ensure_cb
|
35
|
-
@ensure_cb ||= (@failure_cb || lambda { |error| raise "#{error.code.name}: #{error.message}" })
|
36
|
-
end
|
37
|
-
|
38
|
-
def log_signature
|
39
|
-
@_log_signature ||= "client-#{self.class}"
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def ensure_em_running(&blk)
|
45
|
-
if ::EM.reactor_running?
|
46
|
-
@using_global_reactor = true
|
47
|
-
yield
|
48
|
-
else
|
49
|
-
@using_global_reactor = false
|
50
|
-
::EM.fiber_run do
|
51
|
-
blk.call
|
52
|
-
::EM.stop
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def resume_fiber(fib)
|
58
|
-
::EM::cancel_timer(@timeout_timer)
|
59
|
-
fib.resume(true)
|
60
|
-
rescue => ex
|
61
|
-
log_exception(ex)
|
62
|
-
message = "Synchronous client failed: #{ex.message}"
|
63
|
-
error_stop_reactor(message)
|
64
|
-
end
|
65
|
-
|
66
|
-
def set_timeout_and_validate_fiber
|
67
|
-
@timeout_timer = ::EM::add_timer(@options[:timeout]) do
|
68
|
-
message = "Client timeout of #{@options[:timeout]} seconds expired"
|
69
|
-
error_stop_reactor(message)
|
70
|
-
end
|
71
|
-
|
72
|
-
Fiber.yield
|
73
|
-
rescue FiberError => ex
|
74
|
-
log_exception(ex)
|
75
|
-
message = "Synchronous calls must be in 'EM.fiber_run' block"
|
76
|
-
error_stop_reactor(message)
|
77
|
-
end
|
78
|
-
|
79
|
-
def error_stop_reactor(message)
|
80
|
-
err = Protobuf::Rpc::ClientError.new(Protobuf::Socketrpc::ErrorReason::RPC_ERROR, message)
|
81
|
-
ensure_cb.call(err)
|
82
|
-
::EM.stop unless @using_global_reactor
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'protobuf/rpc/server'
|
2
|
-
|
3
|
-
module Protobuf
|
4
|
-
module Rpc
|
5
|
-
module Evented
|
6
|
-
class Server < ::EventMachine::Connection
|
7
|
-
include ::Protobuf::Rpc::Server
|
8
|
-
include ::Protobuf::Logger::LogMethods
|
9
|
-
|
10
|
-
# Initialize a new read buffer for storing client request info
|
11
|
-
def post_init
|
12
|
-
initialize_request!
|
13
|
-
@request_buffer = Protobuf::Rpc::Buffer.new(:read)
|
14
|
-
end
|
15
|
-
|
16
|
-
# Receive a chunk of data, potentially flushed to handle_client
|
17
|
-
def receive_data(data)
|
18
|
-
log_debug { sign_message("receive_data: #{data}") }
|
19
|
-
|
20
|
-
@request_buffer << data
|
21
|
-
@request_data = @request_buffer.data
|
22
|
-
|
23
|
-
handle_client if @request_buffer.flushed?
|
24
|
-
end
|
25
|
-
|
26
|
-
def send_data
|
27
|
-
response_buffer = Protobuf::Rpc::Buffer.new(:write)
|
28
|
-
response_buffer.set_data(@response)
|
29
|
-
@stats.response_size = response_buffer.size
|
30
|
-
log_debug { sign_message("sending data: #{response_buffer.inspect}") }
|
31
|
-
super(response_buffer.write)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Protobuf
|
2
|
-
module Rpc
|
3
|
-
class EventedRunner
|
4
|
-
|
5
|
-
def initialize(options)
|
6
|
-
@options = options
|
7
|
-
end
|
8
|
-
|
9
|
-
def run
|
10
|
-
# Startup and run the rpc server
|
11
|
-
::EventMachine.schedule do
|
12
|
-
::EventMachine.start_server(
|
13
|
-
@options[:host],
|
14
|
-
@options[:port],
|
15
|
-
::Protobuf::Rpc::Evented::Server
|
16
|
-
)
|
17
|
-
end
|
18
|
-
|
19
|
-
# Join or start the reactor
|
20
|
-
yield if block_given?
|
21
|
-
|
22
|
-
::EM.reactor_running? ? ::EM.reactor_thread.join : ::EM.run
|
23
|
-
end
|
24
|
-
|
25
|
-
def stop
|
26
|
-
::EventMachine.stop_event_loop if ::EventMachine.reactor_running?
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'spec/support/test/resource_service'
|
3
|
-
|
4
|
-
describe 'Functional EventMachine Client' do
|
5
|
-
before(:each) do
|
6
|
-
load 'protobuf/evented.rb'
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'runs fine when required fields are set' do
|
10
|
-
expect {
|
11
|
-
EventMachine.fiber_run do
|
12
|
-
StubServer.new do |server|
|
13
|
-
client = ::Test::ResourceService.client(:timeout => 5)
|
14
|
-
|
15
|
-
client.find(:name => 'Test Name', :active => true) do |c|
|
16
|
-
c.on_success do |succ|
|
17
|
-
succ.name.should eq("Test Name")
|
18
|
-
succ.status.should eq(::Test::StatusType::ENABLED)
|
19
|
-
end
|
20
|
-
|
21
|
-
c.on_failure do |err|
|
22
|
-
raise err.inspect
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
EM.stop
|
27
|
-
end
|
28
|
-
}.to_not raise_error
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'calls the on_failure callback when a message is malformed' do
|
32
|
-
error = nil
|
33
|
-
EventMachine.fiber_run do
|
34
|
-
StubServer.new do |server|
|
35
|
-
request = ::Test::ResourceFindRequest.new(:active => true)
|
36
|
-
client = ::Test::ResourceService.client
|
37
|
-
|
38
|
-
client.find(request) do |c|
|
39
|
-
c.on_success { raise "shouldn't pass"}
|
40
|
-
c.on_failure {|e| error = e}
|
41
|
-
end
|
42
|
-
end
|
43
|
-
EM.stop
|
44
|
-
end
|
45
|
-
error.message.should =~ /name.*required/
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'calls the on_failure callback when the request type is wrong' do
|
49
|
-
error = nil
|
50
|
-
EventMachine.fiber_run do
|
51
|
-
StubServer.new do |server|
|
52
|
-
request = ::Test::Resource.new(:name => 'Test Name')
|
53
|
-
client = ::Test::ResourceService.client
|
54
|
-
|
55
|
-
client.find(request) do |c|
|
56
|
-
c.on_success { raise "shouldn't pass"}
|
57
|
-
c.on_failure {|e| error = e}
|
58
|
-
end
|
59
|
-
end
|
60
|
-
EM.stop
|
61
|
-
end
|
62
|
-
error.message.should =~ /expected request.*ResourceFindRequest.*Resource instead/i
|
63
|
-
end
|
64
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Protobuf::EnumValue do
|
4
|
-
|
5
|
-
subject { Test::EnumTestType::ONE }
|
6
|
-
its(:class) { should eq(Fixnum) }
|
7
|
-
its(:parent_class) { should eq(Test::EnumTestType) }
|
8
|
-
its(:name) { should eq(:ONE) }
|
9
|
-
its(:value) { should eq(1) }
|
10
|
-
its(:to_hash_value) { should eq(1) }
|
11
|
-
its(:to_s) { should eq("1") }
|
12
|
-
its(:inspect) { should eq('#<Protobuf::EnumValue Test::EnumTestType::ONE=1>') }
|
13
|
-
specify { subject.to_s(:name).should eq("ONE") }
|
14
|
-
|
15
|
-
it "can be used as the index to an array" do
|
16
|
-
array = [0, 1, 2, 3]
|
17
|
-
array[::Test::EnumTestType::ONE].should eq(1)
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#try' do
|
21
|
-
specify { subject.try(:class).should eq subject.class }
|
22
|
-
specify { subject.try(:name).should eq subject.name }
|
23
|
-
specify { subject.try(:value).should eq subject.value }
|
24
|
-
specify { subject.try(:to_i).should eq subject.to_i }
|
25
|
-
specify { subject.try(:to_int).should eq subject.to_int }
|
26
|
-
specify { subject.try { |yielded| yielded.should eq subject } }
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'spec/support/test/resource_service'
|
3
|
-
require 'protobuf/rpc/servers/evented_runner'
|
4
|
-
require 'protobuf/evented'
|
5
|
-
|
6
|
-
describe Protobuf::Rpc::Evented::Server do
|
7
|
-
|
8
|
-
it "provides a Runner class" do
|
9
|
-
runner_class = described_class.to_s.gsub(/Evented::Server/, "EventedRunner")
|
10
|
-
expect { runner_class.constantize }.to_not raise_error
|
11
|
-
end
|
12
|
-
|
13
|
-
it "Runner provides a stop method" do
|
14
|
-
runner_class = described_class.to_s.gsub(/Evented::Server/, "EventedRunner").constantize
|
15
|
-
runner = runner_class.new({})
|
16
|
-
runner.respond_to?(:stop).should be_true
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|