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.
Files changed (45) hide show
  1. data/.gitignore +3 -0
  2. data/.yardopts +5 -0
  3. data/Gemfile.lock +25 -10
  4. data/bin/rpc_server +38 -33
  5. data/lib/protobuf.rb +22 -3
  6. data/lib/protobuf/common/logger.rb +6 -8
  7. data/lib/protobuf/compiler/visitors.rb +8 -9
  8. data/lib/protobuf/descriptor/descriptor_builder.rb +6 -6
  9. data/lib/protobuf/ext/eventmachine.rb +2 -4
  10. data/lib/protobuf/message/message.rb +1 -3
  11. data/lib/protobuf/rpc/buffer.rb +6 -6
  12. data/lib/protobuf/rpc/client.rb +59 -21
  13. data/lib/protobuf/rpc/connector.rb +10 -9
  14. data/lib/protobuf/rpc/connectors/base.rb +23 -8
  15. data/lib/protobuf/rpc/connectors/common.rb +155 -0
  16. data/lib/protobuf/rpc/connectors/em_client.rb +23 -192
  17. data/lib/protobuf/rpc/connectors/eventmachine.rb +36 -44
  18. data/lib/protobuf/rpc/connectors/socket.rb +58 -1
  19. data/lib/protobuf/rpc/error.rb +6 -14
  20. data/lib/protobuf/rpc/server.rb +72 -99
  21. data/lib/protobuf/rpc/servers/evented_runner.rb +32 -0
  22. data/lib/protobuf/rpc/servers/evented_server.rb +29 -0
  23. data/lib/protobuf/rpc/servers/socket_runner.rb +17 -0
  24. data/lib/protobuf/rpc/servers/socket_server.rb +145 -0
  25. data/lib/protobuf/rpc/service.rb +50 -51
  26. data/lib/protobuf/rpc/stat.rb +2 -2
  27. data/lib/protobuf/version.rb +1 -1
  28. data/protobuf.gemspec +9 -4
  29. data/spec/helper/all.rb +1 -7
  30. data/spec/helper/server.rb +45 -5
  31. data/spec/helper/silent_constants.rb +40 -0
  32. data/spec/proto/test_service.rb +0 -1
  33. data/spec/proto/test_service_impl.rb +4 -3
  34. data/spec/spec_helper.rb +19 -6
  35. data/spec/unit/enum_spec.rb +4 -4
  36. data/spec/unit/rpc/client_spec.rb +32 -42
  37. data/spec/unit/rpc/connector_spec.rb +11 -16
  38. data/spec/unit/rpc/connectors/base_spec.rb +14 -3
  39. data/spec/unit/rpc/connectors/common_spec.rb +132 -0
  40. data/spec/unit/rpc/connectors/{eventmachine/client_spec.rb → eventmachine_client_spec.rb} +0 -0
  41. data/spec/unit/rpc/connectors/socket_spec.rb +49 -0
  42. data/spec/unit/rpc/servers/evented_server_spec.rb +18 -0
  43. data/spec/unit/rpc/servers/socket_server_spec.rb +57 -0
  44. metadata +86 -16
  45. data/spec/unit/rpc/server_spec.rb +0 -27
@@ -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.1
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: &2156121020 !ruby/object:Gem::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: *2156121020
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: &2156088060 !ruby/object:Gem::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: *2156088060
58
+ version_requirements: *2152759880
37
59
  - !ruby/object:Gem::Dependency
38
60
  name: rspec
39
- requirement: &2156085040 !ruby/object:Gem::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.7.0
66
+ version: 2.8.0
45
67
  type: :development
46
68
  prerelease: false
47
- version_requirements: *2156085040
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/eventmachine/client_spec.rb
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/server_spec.rb
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: '0'
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/eventmachine/client_spec.rb
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/server_spec.rb
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