protobuf 1.0.1 → 1.1.0.beta0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/.yardopts +5 -0
- data/Gemfile.lock +25 -10
- data/bin/rpc_server +38 -33
- data/lib/protobuf.rb +22 -3
- data/lib/protobuf/common/logger.rb +6 -8
- data/lib/protobuf/compiler/visitors.rb +8 -9
- data/lib/protobuf/descriptor/descriptor_builder.rb +6 -6
- data/lib/protobuf/ext/eventmachine.rb +2 -4
- data/lib/protobuf/message/message.rb +1 -3
- data/lib/protobuf/rpc/buffer.rb +6 -6
- data/lib/protobuf/rpc/client.rb +59 -21
- data/lib/protobuf/rpc/connector.rb +10 -9
- data/lib/protobuf/rpc/connectors/base.rb +23 -8
- data/lib/protobuf/rpc/connectors/common.rb +155 -0
- data/lib/protobuf/rpc/connectors/em_client.rb +23 -192
- data/lib/protobuf/rpc/connectors/eventmachine.rb +36 -44
- data/lib/protobuf/rpc/connectors/socket.rb +58 -1
- data/lib/protobuf/rpc/error.rb +6 -14
- data/lib/protobuf/rpc/server.rb +72 -99
- data/lib/protobuf/rpc/servers/evented_runner.rb +32 -0
- data/lib/protobuf/rpc/servers/evented_server.rb +29 -0
- data/lib/protobuf/rpc/servers/socket_runner.rb +17 -0
- data/lib/protobuf/rpc/servers/socket_server.rb +145 -0
- data/lib/protobuf/rpc/service.rb +50 -51
- data/lib/protobuf/rpc/stat.rb +2 -2
- data/lib/protobuf/version.rb +1 -1
- data/protobuf.gemspec +9 -4
- data/spec/helper/all.rb +1 -7
- data/spec/helper/server.rb +45 -5
- data/spec/helper/silent_constants.rb +40 -0
- data/spec/proto/test_service.rb +0 -1
- data/spec/proto/test_service_impl.rb +4 -3
- data/spec/spec_helper.rb +19 -6
- data/spec/unit/enum_spec.rb +4 -4
- data/spec/unit/rpc/client_spec.rb +32 -42
- data/spec/unit/rpc/connector_spec.rb +11 -16
- data/spec/unit/rpc/connectors/base_spec.rb +14 -3
- data/spec/unit/rpc/connectors/common_spec.rb +132 -0
- data/spec/unit/rpc/connectors/{eventmachine/client_spec.rb → eventmachine_client_spec.rb} +0 -0
- data/spec/unit/rpc/connectors/socket_spec.rb +49 -0
- data/spec/unit/rpc/servers/evented_server_spec.rb +18 -0
- data/spec/unit/rpc/servers/socket_server_spec.rb +57 -0
- metadata +86 -16
- data/spec/unit/rpc/server_spec.rb +0 -27
File without changes
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples "a Protobuf Connector" do
|
4
|
+
subject{ described_class.new({}) }
|
5
|
+
|
6
|
+
context "API" do
|
7
|
+
# Check the API
|
8
|
+
specify{ subject.respond_to?(:send_request, true).should be_true }
|
9
|
+
specify{ subject.respond_to?(:post_init, true).should be_true }
|
10
|
+
specify{ subject.respond_to?(:close_connection, true).should be_true }
|
11
|
+
specify{ subject.respond_to?(:error?, true).should be_true }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Protobuf::Rpc::Connectors::Socket do
|
16
|
+
subject{ described_class.new({}) }
|
17
|
+
|
18
|
+
it_behaves_like "a Protobuf Connector"
|
19
|
+
|
20
|
+
specify{ described_class.include?(Protobuf::Rpc::Connectors::Common).should be_true }
|
21
|
+
|
22
|
+
context "#read_response" do
|
23
|
+
let(:data){ "New data" }
|
24
|
+
|
25
|
+
it "fills the buffer with data from the socket" do
|
26
|
+
socket = StringIO.new("#{data.bytesize}-#{data}")
|
27
|
+
subject.instance_variable_set(:@buffer, Protobuf::Rpc::Buffer.new(:read))
|
28
|
+
subject.instance_variable_set(:@socket, socket)
|
29
|
+
subject.should_receive(:parse_response).and_return(true)
|
30
|
+
|
31
|
+
subject.__send__(:read_response)
|
32
|
+
subject.instance_variable_get(:@buffer).flushed?.should be_true
|
33
|
+
subject.instance_variable_get(:@buffer).data.should eq(data)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "#check_async" do
|
38
|
+
it "raises an error when trying to execute asynchronously" do
|
39
|
+
conn = described_class.new(:async => true)
|
40
|
+
expect{ conn.__send__(:check_async) }.to raise_error
|
41
|
+
end
|
42
|
+
|
43
|
+
it "allows execution when synchronous" do
|
44
|
+
conn = described_class.new(:async => false)
|
45
|
+
expect{ conn.__send__(:check_async) }.to_not raise_error
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'spec/proto/test_service_impl'
|
3
|
+
require 'protobuf/rpc/servers/evented_runner'
|
4
|
+
|
5
|
+
describe Protobuf::Rpc::EventedServer do
|
6
|
+
|
7
|
+
it "provides a Runner class" do
|
8
|
+
runner_class = described_class.to_s.gsub(/Server/, "Runner")
|
9
|
+
expect { Protobuf::Util.constantize(runner_class) }.to_not raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
it "Runner provides a stop method" do
|
13
|
+
runner_class = described_class.to_s.gsub(/Server/, "Runner")
|
14
|
+
runner_class = Protobuf::Util.constantize(runner_class)
|
15
|
+
runner_class.respond_to?(:stop).should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'spec/proto/test_service_impl'
|
3
|
+
require 'protobuf/rpc/servers/socket_runner'
|
4
|
+
|
5
|
+
describe Protobuf::Rpc::SocketServer do
|
6
|
+
before(:all) do
|
7
|
+
server = OpenStruct.new(:server => "127.0.0.1", :port => 9399, :backlog => 100, :threshold => 100)
|
8
|
+
@server_thread = Thread.new(server) { |s| Protobuf::Rpc::SocketRunner.run(s) }
|
9
|
+
Thread.pass until Protobuf::Rpc::SocketServer.running?
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:all) do
|
13
|
+
Protobuf::Rpc::SocketRunner.stop
|
14
|
+
Thread.kill(@server_thread)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "Runner provides a stop method" do
|
18
|
+
runner_class = described_class.to_s.gsub(/Server/, "Runner")
|
19
|
+
runner_class = Protobuf::Util.constantize(runner_class)
|
20
|
+
runner_class.respond_to?(:stop).should be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "provides a stop method" do
|
24
|
+
described_class.respond_to?(:stop).should be_true
|
25
|
+
end
|
26
|
+
|
27
|
+
it "provides a Runner class" do
|
28
|
+
runner_class = described_class.to_s.gsub(/Server/, "Runner")
|
29
|
+
expect { Protobuf::Util.constantize(runner_class) }.to_not raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it "signals the Server is running" do
|
33
|
+
described_class.running?.should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
context "Eventmachine client" do
|
37
|
+
|
38
|
+
it "calls the service in the client request" do
|
39
|
+
with_constants "Protobuf::ConnectorType" => "Evented" do
|
40
|
+
client = Spec::Proto::TestService.client(:async => false, :port => 9399, :host => "127.0.0.1")
|
41
|
+
|
42
|
+
client.find(:name => "Test Name", :active => true) do |c|
|
43
|
+
c.on_success do |succ|
|
44
|
+
succ.name.should eq("Test Name")
|
45
|
+
succ.status.should eq(Spec::Proto::StatusType::ENABLED)
|
46
|
+
end
|
47
|
+
|
48
|
+
c.on_failure do |err|
|
49
|
+
raise err.inspect
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0.beta0
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- BJ Neilsen
|
@@ -14,7 +14,7 @@ date: 2011-12-07 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: eventmachine
|
17
|
-
requirement: &
|
17
|
+
requirement: &2152761640 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,32 @@ dependencies:
|
|
22
22
|
version: 0.12.10
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2152761640
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: eventually
|
28
|
+
requirement: &2152761120 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *2152761120
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: json_pure
|
39
|
+
requirement: &2152760580 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.6.4
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *2152760580
|
26
48
|
- !ruby/object:Gem::Dependency
|
27
49
|
name: rake
|
28
|
-
requirement: &
|
50
|
+
requirement: &2152759880 !ruby/object:Gem::Requirement
|
29
51
|
none: false
|
30
52
|
requirements:
|
31
53
|
- - ~>
|
@@ -33,18 +55,51 @@ dependencies:
|
|
33
55
|
version: 0.8.7
|
34
56
|
type: :development
|
35
57
|
prerelease: false
|
36
|
-
version_requirements: *
|
58
|
+
version_requirements: *2152759880
|
37
59
|
- !ruby/object:Gem::Dependency
|
38
60
|
name: rspec
|
39
|
-
requirement: &
|
61
|
+
requirement: &2152759400 !ruby/object:Gem::Requirement
|
40
62
|
none: false
|
41
63
|
requirements:
|
42
64
|
- - ~>
|
43
65
|
- !ruby/object:Gem::Version
|
44
|
-
version: 2.
|
66
|
+
version: 2.8.0
|
45
67
|
type: :development
|
46
68
|
prerelease: false
|
47
|
-
version_requirements: *
|
69
|
+
version_requirements: *2152759400
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: yard
|
72
|
+
requirement: &2152758820 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.7.4
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *2152758820
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: redcarpet
|
83
|
+
requirement: &2152758240 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 1.17.2
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *2152758240
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: simplecov
|
94
|
+
requirement: &2152757720 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ~>
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 0.5.4
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *2152757720
|
48
103
|
description: ! 'Ruby implementation for Protocol Buffers. Works with other protobuf
|
49
104
|
rpc implementations (e.g. Java, Python, C++).
|
50
105
|
|
@@ -56,7 +111,7 @@ description: ! 'Ruby implementation for Protocol Buffers. Works with other proto
|
|
56
111
|
went unsuccessful.'
|
57
112
|
email:
|
58
113
|
- bj.neilsen@gmail.com
|
59
|
-
- brandonsdewitt@gmail.com
|
114
|
+
- brandonsdewitt+protobuf@gmail.com
|
60
115
|
executables:
|
61
116
|
- rpc_server
|
62
117
|
- rprotoc
|
@@ -64,6 +119,7 @@ extensions: []
|
|
64
119
|
extra_rdoc_files: []
|
65
120
|
files:
|
66
121
|
- .gitignore
|
122
|
+
- .yardopts
|
67
123
|
- Gemfile
|
68
124
|
- Gemfile.lock
|
69
125
|
- README.md
|
@@ -105,6 +161,7 @@ files:
|
|
105
161
|
- lib/protobuf/rpc/client.rb
|
106
162
|
- lib/protobuf/rpc/connector.rb
|
107
163
|
- lib/protobuf/rpc/connectors/base.rb
|
164
|
+
- lib/protobuf/rpc/connectors/common.rb
|
108
165
|
- lib/protobuf/rpc/connectors/em_client.rb
|
109
166
|
- lib/protobuf/rpc/connectors/eventmachine.rb
|
110
167
|
- lib/protobuf/rpc/connectors/socket.rb
|
@@ -113,6 +170,10 @@ files:
|
|
113
170
|
- lib/protobuf/rpc/error/server_error.rb
|
114
171
|
- lib/protobuf/rpc/rpc.pb.rb
|
115
172
|
- lib/protobuf/rpc/server.rb
|
173
|
+
- lib/protobuf/rpc/servers/evented_runner.rb
|
174
|
+
- lib/protobuf/rpc/servers/evented_server.rb
|
175
|
+
- lib/protobuf/rpc/servers/socket_runner.rb
|
176
|
+
- lib/protobuf/rpc/servers/socket_server.rb
|
116
177
|
- lib/protobuf/rpc/service.rb
|
117
178
|
- lib/protobuf/rpc/stat.rb
|
118
179
|
- lib/protobuf/version.rb
|
@@ -122,6 +183,7 @@ files:
|
|
122
183
|
- spec/functional/embedded_service_spec.rb
|
123
184
|
- spec/helper/all.rb
|
124
185
|
- spec/helper/server.rb
|
186
|
+
- spec/helper/silent_constants.rb
|
125
187
|
- spec/helper/tolerance_matcher.rb
|
126
188
|
- spec/proto/test.pb.rb
|
127
189
|
- spec/proto/test.proto
|
@@ -134,9 +196,12 @@ files:
|
|
134
196
|
- spec/unit/rpc/client_spec.rb
|
135
197
|
- spec/unit/rpc/connector_spec.rb
|
136
198
|
- spec/unit/rpc/connectors/base_spec.rb
|
137
|
-
- spec/unit/rpc/connectors/
|
199
|
+
- spec/unit/rpc/connectors/common_spec.rb
|
200
|
+
- spec/unit/rpc/connectors/eventmachine_client_spec.rb
|
138
201
|
- spec/unit/rpc/connectors/eventmachine_spec.rb
|
139
|
-
- spec/unit/rpc/
|
202
|
+
- spec/unit/rpc/connectors/socket_spec.rb
|
203
|
+
- spec/unit/rpc/servers/evented_server_spec.rb
|
204
|
+
- spec/unit/rpc/servers/socket_server_spec.rb
|
140
205
|
- spec/unit/rpc/service_spec.rb
|
141
206
|
- test/check_unbuild.rb
|
142
207
|
- test/data/data.bin
|
@@ -199,9 +264,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
265
|
none: false
|
201
266
|
requirements:
|
202
|
-
- - ! '
|
267
|
+
- - ! '>'
|
203
268
|
- !ruby/object:Gem::Version
|
204
|
-
version:
|
269
|
+
version: 1.3.1
|
205
270
|
requirements: []
|
206
271
|
rubyforge_project:
|
207
272
|
rubygems_version: 1.8.10
|
@@ -213,6 +278,7 @@ test_files:
|
|
213
278
|
- spec/functional/embedded_service_spec.rb
|
214
279
|
- spec/helper/all.rb
|
215
280
|
- spec/helper/server.rb
|
281
|
+
- spec/helper/silent_constants.rb
|
216
282
|
- spec/helper/tolerance_matcher.rb
|
217
283
|
- spec/proto/test.pb.rb
|
218
284
|
- spec/proto/test.proto
|
@@ -225,9 +291,12 @@ test_files:
|
|
225
291
|
- spec/unit/rpc/client_spec.rb
|
226
292
|
- spec/unit/rpc/connector_spec.rb
|
227
293
|
- spec/unit/rpc/connectors/base_spec.rb
|
228
|
-
- spec/unit/rpc/connectors/
|
294
|
+
- spec/unit/rpc/connectors/common_spec.rb
|
295
|
+
- spec/unit/rpc/connectors/eventmachine_client_spec.rb
|
229
296
|
- spec/unit/rpc/connectors/eventmachine_spec.rb
|
230
|
-
- spec/unit/rpc/
|
297
|
+
- spec/unit/rpc/connectors/socket_spec.rb
|
298
|
+
- spec/unit/rpc/servers/evented_server_spec.rb
|
299
|
+
- spec/unit/rpc/servers/socket_server_spec.rb
|
231
300
|
- spec/unit/rpc/service_spec.rb
|
232
301
|
- test/check_unbuild.rb
|
233
302
|
- test/data/data.bin
|
@@ -275,3 +344,4 @@ test_files:
|
|
275
344
|
- test/test_serialize.rb
|
276
345
|
- test/test_standard_message.rb
|
277
346
|
- test/test_types.rb
|
347
|
+
has_rdoc:
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'protobuf/rpc/server'
|
3
|
-
require 'spec/proto/test_service_impl'
|
4
|
-
|
5
|
-
describe Protobuf::Rpc::Server do
|
6
|
-
context 'when sending response objects' do
|
7
|
-
it 'should be able to send a hash object as a response' do
|
8
|
-
server = Protobuf::Rpc::Server.new
|
9
|
-
|
10
|
-
# Setup the right mocks
|
11
|
-
server.instance_variable_set(:@klass, Spec::Proto::TestService)
|
12
|
-
response_wrapper = mock('response')
|
13
|
-
response_wrapper.stub(:response_proto=)
|
14
|
-
server.instance_variable_set(:@response, response_wrapper)
|
15
|
-
Spec::Proto::TestService.stub_chain(:rpcs, :[], :[], :response_type).and_return(Spec::Proto::ResourceFindRequest)
|
16
|
-
|
17
|
-
# Setup expectations
|
18
|
-
hash_response = {:name => 'Test Name', :active => false}
|
19
|
-
expected = Spec::Proto::ResourceFindRequest.new(hash_response)
|
20
|
-
Spec::Proto::ResourceFindRequest.should_receive(:new).with(hash_response).and_return(expected)
|
21
|
-
server.should_not_receive(:handle_error)
|
22
|
-
|
23
|
-
# Call the method
|
24
|
-
server.send(:parse_response_from_service, hash_response)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|