protobuf 2.0.0.rc2 → 2.0.0.rc3
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.
- data/.gitignore +1 -0
- data/ext/ruby_generator/Makefile +10 -0
- data/ext/ruby_generator/RubyGenerator.cpp +85 -70
- data/ext/ruby_generator/RubyGenerator.h +23 -4
- data/lib/protobuf.rb +33 -26
- data/lib/protobuf/cli.rb +18 -13
- data/lib/protobuf/enum.rb +39 -34
- data/lib/protobuf/enum_value.rb +29 -0
- data/lib/protobuf/field/base_field.rb +34 -5
- data/lib/protobuf/field/enum_field.rb +6 -14
- data/lib/protobuf/field/extension_fields.rb +13 -5
- data/lib/protobuf/field/field_array.rb +17 -7
- data/lib/protobuf/field/varint_field.rb +4 -6
- data/lib/protobuf/message.rb +44 -148
- data/lib/protobuf/rpc/server.rb +2 -2
- data/lib/protobuf/version.rb +1 -1
- data/spec/benchmark/tasks.rb +7 -8
- data/spec/functional/evented_server_spec.rb +9 -9
- data/spec/functional/socket_server_spec.rb +8 -8
- data/spec/functional/zmq_server_spec.rb +8 -8
- data/spec/lib/protobuf/cli_spec.rb +30 -11
- data/spec/lib/protobuf/enum_spec.rb +90 -0
- data/spec/lib/protobuf/enum_value_spec.rb +13 -0
- data/spec/lib/protobuf/message/encoder_spec.rb +1 -1
- data/spec/lib/protobuf/message_spec.rb +50 -0
- data/spec/lib/protobuf/rpc/client_spec.rb +23 -23
- data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/service_spec.rb +18 -18
- data/spec/lib/protobuf_spec.rb +62 -0
- data/spec/spec_helper.rb +12 -1
- data/spec/support/all.rb +0 -1
- data/spec/support/server.rb +1 -1
- data/spec/support/test/enum.pb.rb +32 -0
- data/spec/support/test/enum.proto +12 -0
- data/spec/support/test/resource.pb.rb +52 -0
- data/spec/{proto/test.proto → support/test/resource.proto} +2 -2
- data/spec/support/test/resource_service.rb +14 -0
- metadata +51 -48
- data/ext/Makefile +0 -11
- data/spec/lib/protobuf/message/enum_spec.rb +0 -13
- data/spec/lib/protobuf/message/message_spec.rb +0 -67
- data/spec/proto/test.pb.rb +0 -54
- data/spec/proto/test_service.rb +0 -30
- data/spec/proto/test_service_impl.rb +0 -18
- data/spec/support/silent_constants.rb +0 -44
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'spec/
|
2
|
+
require 'spec/support/test/resource_service'
|
3
3
|
|
4
4
|
describe Protobuf::Rpc::Client do
|
5
5
|
before(:each) do
|
6
6
|
load 'protobuf/evented.rb'
|
7
7
|
::Protobuf::Rpc::Connector.connector_for_client(true)
|
8
|
-
::
|
8
|
+
::Test::ResourceService.configure(::Test::ResourceService::DEFAULT_LOCATION)
|
9
9
|
end
|
10
10
|
|
11
11
|
context "when using fiber based calls" do
|
12
12
|
it "waits for response when running synchronously" do
|
13
13
|
EventMachine.fiber_run do
|
14
14
|
StubServer.new(:delay => 3) do |server|
|
15
|
-
client =
|
15
|
+
client = Test::ResourceService.client(:async => false)
|
16
16
|
start = now
|
17
17
|
|
18
18
|
client.find(:name => "Test Name", :active => true) do |c|
|
19
19
|
c.on_success do |succ|
|
20
20
|
succ.name.should eq("Test Name")
|
21
|
-
succ.status.should eq(
|
21
|
+
succ.status.should eq(Test::StatusType::ENABLED)
|
22
22
|
end
|
23
23
|
|
24
24
|
c.on_failure do |err|
|
@@ -36,7 +36,7 @@ describe Protobuf::Rpc::Client do
|
|
36
36
|
it "doesn't wait for response when running async call inside fiber" do
|
37
37
|
EventMachine.fiber_run do
|
38
38
|
StubServer.new(:delay => 3) do |server|
|
39
|
-
client =
|
39
|
+
client = Test::ResourceService.client(:async => true)
|
40
40
|
start = now
|
41
41
|
client.find(:name => "Test Name", :active => true)
|
42
42
|
|
@@ -50,7 +50,7 @@ describe Protobuf::Rpc::Client do
|
|
50
50
|
subject = Proc.new do
|
51
51
|
EventMachine.run do
|
52
52
|
StubServer.new(:delay => 1) do |server|
|
53
|
-
client =
|
53
|
+
client = Test::ResourceService.client(:async => false)
|
54
54
|
client.find(:name => "Test Name", :active => true)
|
55
55
|
end
|
56
56
|
end
|
@@ -64,7 +64,7 @@ describe Protobuf::Rpc::Client do
|
|
64
64
|
test_proc = Proc.new do
|
65
65
|
EventMachine.fiber_run do
|
66
66
|
StubServer.new(:delay => 2) do |server|
|
67
|
-
client =
|
67
|
+
client = Test::ResourceService.client(:async => false, :timeout => 1)
|
68
68
|
client.find(:name => "Test Name", :active => true) do |cl|
|
69
69
|
cl.on_success {}
|
70
70
|
cl.on_failure {|f| error = f}
|
@@ -83,7 +83,7 @@ describe Protobuf::Rpc::Client do
|
|
83
83
|
it "throws a timeout when client timeout is exceeded" do
|
84
84
|
subject = Proc.new do
|
85
85
|
StubServer.new(:delay => 2) do |server|
|
86
|
-
client =
|
86
|
+
client = Test::ResourceService.client(:async => false, :timeout => 1)
|
87
87
|
client.find(:name => "Test Name", :active => true)
|
88
88
|
end
|
89
89
|
end
|
@@ -96,7 +96,7 @@ describe Protobuf::Rpc::Client do
|
|
96
96
|
|
97
97
|
subject = Proc.new do
|
98
98
|
StubServer.new(:delay => 2) do |server|
|
99
|
-
client =
|
99
|
+
client = Test::ResourceService.client(:async => false, :timeout => 1)
|
100
100
|
client.find(:name => "Test Name", :active => true) do |c|
|
101
101
|
c.on_failure do |f|
|
102
102
|
failure_message = f.message
|
@@ -116,38 +116,38 @@ describe Protobuf::Rpc::Client do
|
|
116
116
|
context 'when creating a client from a service' do
|
117
117
|
|
118
118
|
it 'should be able to get a client through the Service#client helper method' do
|
119
|
-
|
119
|
+
Test::ResourceService.client(:port => 9191).should eq(Protobuf::Rpc::Client.new(:service => Test::ResourceService, :port => 9191))
|
120
120
|
end
|
121
121
|
|
122
122
|
it "should be able to override a service location's host and port" do
|
123
|
-
|
124
|
-
clean_client =
|
123
|
+
Test::ResourceService.located_at 'somewheregreat.com:12345'
|
124
|
+
clean_client = Test::ResourceService.client
|
125
125
|
clean_client.options[:host].should eq('somewheregreat.com')
|
126
126
|
clean_client.options[:port].should eq(12345)
|
127
127
|
|
128
|
-
updated_client =
|
128
|
+
updated_client = Test::ResourceService.client(:host => 'amazing.com', :port => 54321)
|
129
129
|
updated_client.options[:host].should eq('amazing.com')
|
130
130
|
updated_client.options[:port].should eq(54321)
|
131
131
|
end
|
132
132
|
|
133
133
|
it 'should be able to define the syncronicity of the client request' do
|
134
|
-
client =
|
134
|
+
client = Test::ResourceService.client(:async => false)
|
135
135
|
client.options[:async].should be_false
|
136
136
|
client.async?.should be_false
|
137
137
|
|
138
|
-
client =
|
138
|
+
client = Test::ResourceService.client(:async => true)
|
139
139
|
client.options[:async].should be_true
|
140
140
|
client.async?.should be_true
|
141
141
|
end
|
142
142
|
|
143
143
|
it 'should be able to define which service to create itself for' do
|
144
|
-
client = Protobuf::Rpc::Client.new :service =>
|
145
|
-
client.options[:service].should eq(
|
144
|
+
client = Protobuf::Rpc::Client.new :service => Test::ResourceService
|
145
|
+
client.options[:service].should eq(Test::ResourceService)
|
146
146
|
end
|
147
147
|
|
148
148
|
it 'should have a hard default for host and port on a service that has not been configured' do
|
149
|
-
reset_service_location
|
150
|
-
client =
|
149
|
+
reset_service_location Test::ResourceService
|
150
|
+
client = Test::ResourceService.client
|
151
151
|
client.options[:host].should eq(Protobuf::Rpc::Service::DEFAULT_LOCATION[:host])
|
152
152
|
client.options[:port].should eq(Protobuf::Rpc::Service::DEFAULT_LOCATION[:port])
|
153
153
|
end
|
@@ -161,7 +161,7 @@ describe Protobuf::Rpc::Client do
|
|
161
161
|
# namely the :find method
|
162
162
|
|
163
163
|
it 'should respond to defined service methods' do
|
164
|
-
client =
|
164
|
+
client = Test::ResourceService.client
|
165
165
|
client.should_receive(:send_request).and_return(nil)
|
166
166
|
expect { client.find(nil) }.to_not raise_error
|
167
167
|
end
|
@@ -173,7 +173,7 @@ describe Protobuf::Rpc::Client do
|
|
173
173
|
it 'should be able to set and get local variables within client response blocks' do
|
174
174
|
outer_value = 'OUTER'
|
175
175
|
inner_value = 'INNER'
|
176
|
-
client =
|
176
|
+
client = Test::ResourceService.client(:async => true)
|
177
177
|
|
178
178
|
EM.should_receive(:reactor_running?).and_return(true)
|
179
179
|
EM.stub!(:next_tick) do
|
@@ -194,10 +194,10 @@ describe Protobuf::Rpc::Client do
|
|
194
194
|
context 'when receiving request objects' do
|
195
195
|
|
196
196
|
it 'should be able to create the correct request object if passed a hash' do
|
197
|
-
client =
|
197
|
+
client = Test::ResourceService.client
|
198
198
|
client.should_receive(:send_request)
|
199
199
|
client.find({:name => 'Test Name', :active => false})
|
200
|
-
client.options[:request].should be_a(
|
200
|
+
client.options[:request].should be_a(Test::ResourceFindRequest)
|
201
201
|
client.options[:request].name.should eq('Test Name')
|
202
202
|
client.options[:request].active.should eq(false)
|
203
203
|
end
|
@@ -1,45 +1,45 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'spec/
|
2
|
+
require 'spec/support/test/resource_service'
|
3
3
|
|
4
4
|
describe Protobuf::Rpc::Service do
|
5
5
|
|
6
6
|
context 'when configuring' do
|
7
7
|
before :each do
|
8
|
-
reset_service_location
|
8
|
+
reset_service_location Test::ResourceService
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'should have a default location configured' do
|
12
|
-
|
13
|
-
|
12
|
+
Test::ResourceService.host.should == Protobuf::Rpc::Service::DEFAULT_LOCATION[:host]
|
13
|
+
Test::ResourceService.port.should == Protobuf::Rpc::Service::DEFAULT_LOCATION[:port]
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should be able to pre-configure a service location for clients" do
|
17
|
-
|
18
|
-
client =
|
17
|
+
Test::ResourceService.located_at 'google.com:12345'
|
18
|
+
client = Test::ResourceService.client
|
19
19
|
client.options[:host].should == 'google.com'
|
20
20
|
client.options[:port].should == 12345
|
21
21
|
end
|
22
22
|
|
23
23
|
context 'configuring host' do
|
24
|
-
before(:each) {
|
25
|
-
after(:each) {
|
24
|
+
before(:each) { Test::ResourceService.configure :host => 'somehost.com' }
|
25
|
+
after(:each) { Test::ResourceService.configure :host => '127.0.0.1' }
|
26
26
|
|
27
27
|
it 'should be able to configure and read the host' do
|
28
|
-
|
28
|
+
Test::ResourceService.host.should == 'somehost.com'
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'should be able to configure and read the port' do
|
33
|
-
|
34
|
-
|
33
|
+
Test::ResourceService.configure :port => 12345
|
34
|
+
Test::ResourceService.port.should == 12345
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'should skip configuring location if the location passed does not match host:port syntax' do
|
38
38
|
invalid_locations = [nil, 'myhost:', ':9939', 'badhost123']
|
39
39
|
invalid_locations.each do |location|
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
Test::ResourceService.located_at location
|
41
|
+
Test::ResourceService.host.should == Protobuf::Rpc::Service::DEFAULT_LOCATION[:host]
|
42
|
+
Test::ResourceService.port.should == Protobuf::Rpc::Service::DEFAULT_LOCATION[:port]
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -48,8 +48,8 @@ describe Protobuf::Rpc::Service do
|
|
48
48
|
|
49
49
|
before(:all) do
|
50
50
|
class ::NewTestService < Protobuf::Rpc::Service
|
51
|
-
rpc :bad_method,
|
52
|
-
rpc :bad_var,
|
51
|
+
rpc :bad_method, Test::ResourceFindRequest, Test::Resource
|
52
|
+
rpc :bad_var, Test::ResourceFindRequest, Test::Resource
|
53
53
|
def bad_method
|
54
54
|
hash = {}
|
55
55
|
hash[:one].explode
|
@@ -62,14 +62,14 @@ describe Protobuf::Rpc::Service do
|
|
62
62
|
|
63
63
|
it 'raises an undefined method name error when calling a method on a non-existant object' do
|
64
64
|
expect {
|
65
|
-
req = mock('RequestWrapper', :request_proto =>
|
65
|
+
req = mock('RequestWrapper', :request_proto => Test::ResourceFindRequest.new(:name => 'mmeh').to_s)
|
66
66
|
::NewTestService.new.bad_method(req)
|
67
67
|
}.to raise_error(NoMethodError)
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'raises a name error when accessing a non-existant object' do
|
71
71
|
expect {
|
72
|
-
req = mock('RequestWrapper', :request_proto =>
|
72
|
+
req = mock('RequestWrapper', :request_proto => Test::ResourceFindRequest.new(:name => 'mmeh').to_s)
|
73
73
|
::NewTestService.new.bad_var(req)
|
74
74
|
}.to raise_error(NameError)
|
75
75
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'protobuf'
|
3
|
+
|
4
|
+
describe ::Protobuf do
|
5
|
+
|
6
|
+
describe '.connector_type' do
|
7
|
+
before { described_class.instance_variable_set(:@_connector_type, nil) }
|
8
|
+
|
9
|
+
it 'defaults to socket' do
|
10
|
+
described_class.connector_type.should eq :socket
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'accepts socket, evented, or zmq' do
|
14
|
+
[:socket, :evented, :zmq].each do |type|
|
15
|
+
described_class.connector_type = type
|
16
|
+
described_class.connector_type.should eq type
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'does not accept other types' do
|
21
|
+
[:hello, :world].each do |type|
|
22
|
+
expect {
|
23
|
+
described_class.connector_type = type
|
24
|
+
}.to raise_error(ArgumentError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.gc_pause_server_request?' do
|
30
|
+
before { described_class.instance_variable_set(:@_gc_pause_server_request, nil) }
|
31
|
+
|
32
|
+
it 'defaults to a false value' do
|
33
|
+
described_class.gc_pause_server_request?.should be_false
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'is settable' do
|
37
|
+
described_class.gc_pause_server_request = true
|
38
|
+
described_class.gc_pause_server_request?.should be_true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '.print_deprecation_warnings?' do
|
43
|
+
before { described_class.instance_variable_set(:@_print_deprecation_warnings, nil) }
|
44
|
+
|
45
|
+
it 'defaults to a true value' do
|
46
|
+
described_class.print_deprecation_warnings?.should be_true
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'is settable' do
|
50
|
+
described_class.print_deprecation_warnings = false
|
51
|
+
described_class.print_deprecation_warnings?.should be_false
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when ENV["PB_IGNORE_DEPRECATIONS"] present' do
|
55
|
+
it 'defaults to a false value' do
|
56
|
+
ENV['PB_IGNORE_DEPRECATIONS'] = '1'
|
57
|
+
described_class.print_deprecation_warnings?.should be_false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -19,9 +19,20 @@ if ENV["DEBUG"]
|
|
19
19
|
end
|
20
20
|
|
21
21
|
::RSpec.configure do |c|
|
22
|
-
c.include(::SilentConstants)
|
23
22
|
c.include(::Sander6::CustomMatchers)
|
24
23
|
c.mock_with :rspec
|
24
|
+
|
25
|
+
c.before(:suite) do
|
26
|
+
unless ENV['NO_COMPILE_TEST_PROTOS']
|
27
|
+
$stdout.puts 'Compiling test protos (use NO_COMPILE_TEST_PROTOS=1 to skip)'
|
28
|
+
proto_path = File.expand_path("../support/", __FILE__)
|
29
|
+
%x{ rprotoc --proto_path=#{proto_path} --ruby_out=#{proto_path} #{File.join(proto_path, '**', '*.proto')} }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Dir[File.expand_path('../support/**/*.pb.rb', __FILE__)].each do |proto_file|
|
35
|
+
require proto_file
|
25
36
|
end
|
26
37
|
|
27
38
|
class ::Protobuf::Rpc::Client
|
data/spec/support/all.rb
CHANGED
data/spec/support/server.rb
CHANGED
@@ -5,7 +5,7 @@ require 'protobuf/rpc/servers/socket/server'
|
|
5
5
|
require 'protobuf/rpc/servers/socket_runner'
|
6
6
|
require 'protobuf/rpc/servers/zmq/server'
|
7
7
|
require 'protobuf/rpc/servers/zmq_runner'
|
8
|
-
require 'spec/
|
8
|
+
require 'spec/support/test/resource_service'
|
9
9
|
|
10
10
|
# Want to abort if server dies?
|
11
11
|
Thread.abort_on_exception = true
|
@@ -0,0 +1,32 @@
|
|
1
|
+
##
|
2
|
+
# This file is auto-generated. DO NOT EDIT!
|
3
|
+
#
|
4
|
+
require 'protobuf/message'
|
5
|
+
|
6
|
+
module Test
|
7
|
+
##
|
8
|
+
# Enum Classes
|
9
|
+
#
|
10
|
+
class EnumTestType < ::Protobuf::Enum; end
|
11
|
+
|
12
|
+
##
|
13
|
+
# Message Classes
|
14
|
+
#
|
15
|
+
class EnumTestMessage < ::Protobuf::Message; end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Enum Values
|
19
|
+
#
|
20
|
+
::Test::EnumTestType.define :ONE, 1
|
21
|
+
::Test::EnumTestType.define :TWO, 2
|
22
|
+
|
23
|
+
|
24
|
+
##
|
25
|
+
# Message Fields
|
26
|
+
#
|
27
|
+
::Test::EnumTestMessage.optional(::Test::EnumTestType, :non_default_enum, 1)
|
28
|
+
::Test::EnumTestMessage.optional(::Test::EnumTestType, :default_enum, 2, :default => ::Test::EnumTestType::ONE)
|
29
|
+
::Test::EnumTestMessage.repeated(::Test::EnumTestType, :repeated_enums, 3)
|
30
|
+
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
##
|
2
|
+
# This file is auto-generated. DO NOT EDIT!
|
3
|
+
#
|
4
|
+
require 'protobuf/message'
|
5
|
+
require 'protobuf/rpc/service'
|
6
|
+
|
7
|
+
module Test
|
8
|
+
##
|
9
|
+
# Enum Classes
|
10
|
+
#
|
11
|
+
class StatusType < ::Protobuf::Enum; end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Message Classes
|
15
|
+
#
|
16
|
+
class ResourceFindRequest < ::Protobuf::Message; end
|
17
|
+
class Resource < ::Protobuf::Message; end
|
18
|
+
class Nested < ::Protobuf::Message; end
|
19
|
+
|
20
|
+
##
|
21
|
+
# Enum Values
|
22
|
+
#
|
23
|
+
::Test::StatusType.define :PENDING, 0
|
24
|
+
::Test::StatusType.define :ENABLED, 1
|
25
|
+
::Test::StatusType.define :DISABLED, 2
|
26
|
+
::Test::StatusType.define :DELETED, 3
|
27
|
+
|
28
|
+
|
29
|
+
##
|
30
|
+
# Message Fields
|
31
|
+
#
|
32
|
+
::Test::ResourceFindRequest.required(::Protobuf::Field::StringField, :name, 1)
|
33
|
+
::Test::ResourceFindRequest.optional(::Protobuf::Field::BoolField, :active, 2)
|
34
|
+
|
35
|
+
::Test::Resource.required(::Protobuf::Field::StringField, :name, 1)
|
36
|
+
::Test::Resource.optional(::Protobuf::Field::Int64Field, :date_created, 2)
|
37
|
+
::Test::Resource.optional(::Test::StatusType, :status, 3)
|
38
|
+
::Test::Resource.repeated(::Test::StatusType, :repeated_enum, 4)
|
39
|
+
|
40
|
+
::Test::Nested.optional(::Protobuf::Field::StringField, :name, 1)
|
41
|
+
::Test::Nested.optional(::Test::Resource, :resource, 2)
|
42
|
+
::Test::Nested.repeated(::Test::Resource, :multiple_resources, 3)
|
43
|
+
::Test::Nested.optional(::Test::StatusType, :status, 4)
|
44
|
+
|
45
|
+
|
46
|
+
##
|
47
|
+
# Services
|
48
|
+
#
|
49
|
+
class ResourceService < ::Protobuf::Rpc::Service
|
50
|
+
rpc :find, ::Test::ResourceFindRequest, ::Test::Resource
|
51
|
+
end
|
52
|
+
end
|