protobuf 2.2.5-java

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.
Files changed (256) hide show
  1. data/.gitignore +17 -0
  2. data/.travis.yml +9 -0
  3. data/.yardopts +5 -0
  4. data/Gemfile +3 -0
  5. data/README.md +316 -0
  6. data/Rakefile +29 -0
  7. data/UPGRADING.md +60 -0
  8. data/bin/rpc_server +5 -0
  9. data/bin/rprotoc +62 -0
  10. data/examples/addressbook.pb.rb +55 -0
  11. data/examples/addressbook.proto +24 -0
  12. data/examples/reading_a_message.rb +32 -0
  13. data/examples/writing_a_message.rb +46 -0
  14. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +142 -0
  15. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +318 -0
  16. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +99 -0
  17. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +103 -0
  18. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +85 -0
  19. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +167 -0
  20. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +98 -0
  21. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  22. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +159 -0
  23. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +170 -0
  24. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +102 -0
  25. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +103 -0
  26. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  27. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +104 -0
  28. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +2721 -0
  29. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +303 -0
  30. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +84 -0
  31. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +121 -0
  32. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +77 -0
  33. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +108 -0
  34. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +101 -0
  35. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +72 -0
  36. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +213 -0
  37. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +109 -0
  38. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +134 -0
  39. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +121 -0
  40. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +113 -0
  41. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +120 -0
  42. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +113 -0
  43. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +64 -0
  44. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +434 -0
  45. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +73 -0
  46. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +790 -0
  47. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +156 -0
  48. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +108 -0
  49. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +93 -0
  50. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +1367 -0
  51. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +5223 -0
  52. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +366 -0
  53. data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +136 -0
  54. data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +904 -0
  55. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +424 -0
  56. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +82 -0
  57. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +1102 -0
  58. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h +64 -0
  59. data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +207 -0
  60. data/ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h +54 -0
  61. data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +136 -0
  62. data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +313 -0
  63. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +238 -0
  64. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +357 -0
  65. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +340 -0
  66. data/ext/protobuf-2.4.1/src/google/protobuf/message.h +692 -0
  67. data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +239 -0
  68. data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +64 -0
  69. data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +80 -0
  70. data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +1295 -0
  71. data/ext/protobuf-2.4.1/src/google/protobuf/service.h +291 -0
  72. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +1211 -0
  73. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +220 -0
  74. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +119 -0
  75. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +123 -0
  76. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +121 -0
  77. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +457 -0
  78. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +170 -0
  79. data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +174 -0
  80. data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +101 -0
  81. data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +83 -0
  82. data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +98 -0
  83. data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +285 -0
  84. data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +11915 -0
  85. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +2895 -0
  86. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +211 -0
  87. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +56 -0
  88. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +188 -0
  89. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +151 -0
  90. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +4752 -0
  91. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +150 -0
  92. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +816 -0
  93. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +197 -0
  94. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +403 -0
  95. data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +268 -0
  96. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +304 -0
  97. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +620 -0
  98. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +774 -0
  99. data/ext/ruby_generator/Makefile +10 -0
  100. data/ext/ruby_generator/RubyGenerator.cpp +450 -0
  101. data/ext/ruby_generator/RubyGenerator.h +199 -0
  102. data/ext/ruby_generator/extconf.rb +36 -0
  103. data/ext/ruby_generator/protoc-ruby +0 -0
  104. data/lib/protobuf/cli.rb +188 -0
  105. data/lib/protobuf/enum.rb +58 -0
  106. data/lib/protobuf/enum_value.rb +59 -0
  107. data/lib/protobuf/evented.rb +22 -0
  108. data/lib/protobuf/exceptions.rb +11 -0
  109. data/lib/protobuf/ext/eventmachine.rb +14 -0
  110. data/lib/protobuf/field/base_field.rb +240 -0
  111. data/lib/protobuf/field/bool_field.rb +36 -0
  112. data/lib/protobuf/field/bytes_field.rb +38 -0
  113. data/lib/protobuf/field/double_field.rb +19 -0
  114. data/lib/protobuf/field/enum_field.rb +50 -0
  115. data/lib/protobuf/field/extension_fields.rb +32 -0
  116. data/lib/protobuf/field/field_array.rb +65 -0
  117. data/lib/protobuf/field/fixed32_field.rb +19 -0
  118. data/lib/protobuf/field/fixed64_field.rb +22 -0
  119. data/lib/protobuf/field/float_field.rb +31 -0
  120. data/lib/protobuf/field/int32_field.rb +12 -0
  121. data/lib/protobuf/field/int64_field.rb +12 -0
  122. data/lib/protobuf/field/integer_field.rb +19 -0
  123. data/lib/protobuf/field/message_field.rb +53 -0
  124. data/lib/protobuf/field/sfixed32_field.rb +21 -0
  125. data/lib/protobuf/field/sfixed64_field.rb +24 -0
  126. data/lib/protobuf/field/signed_integer_field.rb +23 -0
  127. data/lib/protobuf/field/sint32_field.rb +12 -0
  128. data/lib/protobuf/field/sint64_field.rb +12 -0
  129. data/lib/protobuf/field/string_field.rb +14 -0
  130. data/lib/protobuf/field/uint32_field.rb +12 -0
  131. data/lib/protobuf/field/uint64_field.rb +12 -0
  132. data/lib/protobuf/field/varint_field.rb +61 -0
  133. data/lib/protobuf/field.rb +57 -0
  134. data/lib/protobuf/logger.rb +86 -0
  135. data/lib/protobuf/message/decoder.rb +83 -0
  136. data/lib/protobuf/message/encoder.rb +48 -0
  137. data/lib/protobuf/message/extend.rb +8 -0
  138. data/lib/protobuf/message/message.rb +1 -0
  139. data/lib/protobuf/message.rb +320 -0
  140. data/lib/protobuf/rpc/buffer.rb +79 -0
  141. data/lib/protobuf/rpc/client.rb +166 -0
  142. data/lib/protobuf/rpc/connector.rb +19 -0
  143. data/lib/protobuf/rpc/connectors/base.rb +38 -0
  144. data/lib/protobuf/rpc/connectors/common.rb +156 -0
  145. data/lib/protobuf/rpc/connectors/em_client.rb +84 -0
  146. data/lib/protobuf/rpc/connectors/eventmachine.rb +87 -0
  147. data/lib/protobuf/rpc/connectors/socket.rb +73 -0
  148. data/lib/protobuf/rpc/connectors/zmq.rb +69 -0
  149. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  150. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  151. data/lib/protobuf/rpc/error.rb +25 -0
  152. data/lib/protobuf/rpc/rpc.pb.rb +118 -0
  153. data/lib/protobuf/rpc/server.rb +89 -0
  154. data/lib/protobuf/rpc/servers/evented/server.rb +41 -0
  155. data/lib/protobuf/rpc/servers/evented_runner.rb +21 -0
  156. data/lib/protobuf/rpc/servers/socket/server.rb +111 -0
  157. data/lib/protobuf/rpc/servers/socket/worker.rb +66 -0
  158. data/lib/protobuf/rpc/servers/socket_runner.rb +27 -0
  159. data/lib/protobuf/rpc/servers/zmq/broker.rb +87 -0
  160. data/lib/protobuf/rpc/servers/zmq/server.rb +50 -0
  161. data/lib/protobuf/rpc/servers/zmq/util.rb +27 -0
  162. data/lib/protobuf/rpc/servers/zmq/worker.rb +60 -0
  163. data/lib/protobuf/rpc/servers/zmq_runner.rb +25 -0
  164. data/lib/protobuf/rpc/service.rb +173 -0
  165. data/lib/protobuf/rpc/service_dispatcher.rb +130 -0
  166. data/lib/protobuf/rpc/service_filters.rb +267 -0
  167. data/lib/protobuf/rpc/stat.rb +83 -0
  168. data/lib/protobuf/socket.rb +22 -0
  169. data/lib/protobuf/version.rb +4 -0
  170. data/lib/protobuf/wire_type.rb +10 -0
  171. data/lib/protobuf/zmq.rb +21 -0
  172. data/lib/protobuf.rb +86 -0
  173. data/proto/rpc.pb.rb +48 -0
  174. data/proto/rpc.proto +73 -0
  175. data/protobuf.gemspec +44 -0
  176. data/spec/benchmark/tasks.rb +179 -0
  177. data/spec/functional/embedded_service_spec.rb +7 -0
  178. data/spec/functional/evented_server_spec.rb +64 -0
  179. data/spec/functional/socket_server_spec.rb +58 -0
  180. data/spec/functional/zmq_server_spec.rb +58 -0
  181. data/spec/lib/protobuf/cli_spec.rb +212 -0
  182. data/spec/lib/protobuf/enum_spec.rb +98 -0
  183. data/spec/lib/protobuf/enum_value_spec.rb +15 -0
  184. data/spec/lib/protobuf/logger_spec.rb +131 -0
  185. data/spec/lib/protobuf/message/encoder_spec.rb +19 -0
  186. data/spec/lib/protobuf/message_spec.rb +209 -0
  187. data/spec/lib/protobuf/rpc/client_spec.rb +158 -0
  188. data/spec/lib/protobuf/rpc/connector_spec.rb +32 -0
  189. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +50 -0
  190. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +128 -0
  191. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +36 -0
  192. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +22 -0
  193. data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +18 -0
  194. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +43 -0
  195. data/spec/lib/protobuf/rpc/servers/zmq/broker_spec.rb +35 -0
  196. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +41 -0
  197. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +45 -0
  198. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +44 -0
  199. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +116 -0
  200. data/spec/lib/protobuf/rpc/service_filters_spec.rb +451 -0
  201. data/spec/lib/protobuf/rpc/service_spec.rb +165 -0
  202. data/spec/lib/protobuf_spec.rb +62 -0
  203. data/spec/spec_helper.rb +51 -0
  204. data/spec/support/all.rb +6 -0
  205. data/spec/support/server.rb +101 -0
  206. data/spec/support/test/enum.pb.rb +34 -0
  207. data/spec/support/test/enum.proto +12 -0
  208. data/spec/support/test/resource.pb.rb +58 -0
  209. data/spec/support/test/resource.proto +31 -0
  210. data/spec/support/test/resource_service.rb +14 -0
  211. data/spec/support/test_app_file.rb +2 -0
  212. data/spec/support/tolerance_matcher.rb +40 -0
  213. data/test/data/data.bin +3 -0
  214. data/test/data/data_source.py +14 -0
  215. data/test/data/types.bin +0 -0
  216. data/test/data/types_source.py +22 -0
  217. data/test/data/unk.png +0 -0
  218. data/test/proto/addressbook.pb.rb +66 -0
  219. data/test/proto/addressbook.proto +33 -0
  220. data/test/proto/addressbook_base.pb.rb +58 -0
  221. data/test/proto/addressbook_base.proto +26 -0
  222. data/test/proto/addressbook_ext.pb.rb +20 -0
  223. data/test/proto/addressbook_ext.proto +6 -0
  224. data/test/proto/collision.pb.rb +17 -0
  225. data/test/proto/collision.proto +5 -0
  226. data/test/proto/ext_collision.pb.rb +24 -0
  227. data/test/proto/ext_collision.proto +8 -0
  228. data/test/proto/ext_range.pb.rb +22 -0
  229. data/test/proto/ext_range.proto +7 -0
  230. data/test/proto/float_default.proto +10 -0
  231. data/test/proto/lowercase.pb.rb +30 -0
  232. data/test/proto/lowercase.proto +9 -0
  233. data/test/proto/merge.pb.rb +39 -0
  234. data/test/proto/merge.proto +15 -0
  235. data/test/proto/nested.pb.rb +30 -0
  236. data/test/proto/nested.proto +9 -0
  237. data/test/proto/optional_field.pb.rb +35 -0
  238. data/test/proto/optional_field.proto +12 -0
  239. data/test/proto/packed.pb.rb +22 -0
  240. data/test/proto/packed.proto +6 -0
  241. data/test/proto/rpc.proto +6 -0
  242. data/test/proto/types.pb.rb +84 -0
  243. data/test/proto/types.proto +37 -0
  244. data/test/test_addressbook.rb +56 -0
  245. data/test/test_enum_value.rb +41 -0
  246. data/test/test_extension.rb +36 -0
  247. data/test/test_lowercase.rb +11 -0
  248. data/test/test_message.rb +128 -0
  249. data/test/test_optional_field.rb +103 -0
  250. data/test/test_packed_field.rb +40 -0
  251. data/test/test_parse.rb +15 -0
  252. data/test/test_repeated_types.rb +132 -0
  253. data/test/test_serialize.rb +61 -0
  254. data/test/test_standard_message.rb +96 -0
  255. data/test/test_types.rb +226 -0
  256. metadata +461 -0
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+ require 'spec/support/test/resource_service'
3
+ require 'protobuf/rpc/servers/socket_runner'
4
+ require 'protobuf/evented'
5
+ require 'protobuf/socket'
6
+
7
+ describe Protobuf::Rpc::Socket::Server do
8
+ before(:each) do
9
+ load 'protobuf/socket.rb'
10
+ end
11
+
12
+ before(:all) do
13
+ load 'protobuf/socket.rb'
14
+ Thread.abort_on_exception = true
15
+ server = OpenStruct.new(:server => "127.0.0.1", :port => 9399, :backlog => 100, :threshold => 100)
16
+ @server_thread = Thread.new(server) { |s| Protobuf::Rpc::SocketRunner.run(s) }
17
+ Thread.pass until Protobuf::Rpc::Socket::Server.running?
18
+ end
19
+
20
+ after(:all) do
21
+ Protobuf::Rpc::SocketRunner.stop
22
+ @server_thread.join
23
+ end
24
+
25
+ it "Runner provides a stop method" do
26
+ runner_class = described_class.to_s.gsub(/Evented::Server/, "EventedRunner").constantize
27
+ runner_class.respond_to?(:stop).should be_true
28
+ end
29
+
30
+ it "provides a stop method" do
31
+ described_class.respond_to?(:stop).should be_true
32
+ end
33
+
34
+ it "provides a Runner class" do
35
+ runner_class = described_class.to_s.gsub(/Evented::Server/, "EventedRunner")
36
+ expect { runner_class.constantize }.to_not raise_error
37
+ end
38
+
39
+ it "signals the Server is running" do
40
+ described_class.running?.should be_true
41
+ end
42
+
43
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Protobuf::Rpc::Zmq::Broker do
4
+ before(:each) do
5
+ load 'protobuf/zmq.rb'
6
+ end
7
+
8
+ after(:each) do
9
+ subject.teardown
10
+ end
11
+
12
+ subject do
13
+ described_class.new({ :host => '127.0.0.1', :port => 9399 })
14
+ end
15
+
16
+ it 'sets up a context' do
17
+ subject.context.should be_a(::ZMQ::Context)
18
+ end
19
+
20
+ it 'sets up a frontend socket' do
21
+ subject.frontend.should be_a(::ZMQ::Socket)
22
+ end
23
+
24
+ it 'sets up a backend socket' do
25
+ subject.backend.should be_a(::ZMQ::Socket)
26
+ end
27
+
28
+ it 'sets up a polling object' do
29
+ subject.poller.should be_a(::ZMQ::Poller)
30
+ end
31
+
32
+ describe '#poll' do
33
+ # no unit tests for this method
34
+ end
35
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+ require 'protobuf/rpc/servers/zmq/server'
3
+
4
+ describe Protobuf::Rpc::Zmq::Server do
5
+ before(:each) do
6
+ load 'protobuf/zmq.rb'
7
+ end
8
+
9
+ describe '.running?' do
10
+ it 'returns true if running' do
11
+ described_class.instance_variable_set(:@running, true)
12
+ described_class.running?.should be_true
13
+ end
14
+
15
+ it 'returns false if not running' do
16
+ described_class.instance_variable_set(:@running, false)
17
+ described_class.running?.should be_false
18
+ end
19
+ end
20
+
21
+ describe '.stop' do
22
+ # keep threads instance variable from retaining any thread mocks we've
23
+ # created (breaks tests down the line, otherwise)
24
+ after(:each) do
25
+ described_class.instance_variable_set(:@threads, [])
26
+ end
27
+
28
+ it 'lets all threads stop' do
29
+ thread_mock = double(Thread)
30
+ thread_mock.should_receive(:join)
31
+ described_class.instance_variable_set(:@threads, [thread_mock])
32
+ described_class.stop
33
+ end
34
+
35
+ it 'sets running to false' do
36
+ described_class.instance_variable_set(:@threads, [])
37
+ described_class.stop
38
+ described_class.instance_variable_get(:@running).should be_false
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ class UtilTest
4
+ include ::Protobuf::Rpc::Zmq::Util
5
+ end
6
+
7
+ describe ::Protobuf::Rpc::Zmq::Util do
8
+ before(:each) do
9
+ load 'protobuf/zmq.rb'
10
+ end
11
+
12
+ subject { UtilTest.new }
13
+ describe '#zmq_error_check' do
14
+ it 'raises when the error code is less than 0' do
15
+ expect {
16
+ subject.zmq_error_check(-1)
17
+ }.to raise_error
18
+ end
19
+
20
+ it 'retrieves the error string from ZeroMQ' do
21
+ ZMQ::Util.stub(:error_string).and_return('an error from zmq')
22
+ expect {
23
+ subject.zmq_error_check(-1)
24
+ }.to raise_error(RuntimeError, /an error from zmq/i)
25
+ end
26
+
27
+ it 'does nothing if the error code is > 0' do
28
+ expect {
29
+ subject.zmq_error_check(1)
30
+ }.to_not raise_error
31
+ end
32
+
33
+ it 'does nothing if the error code is == 0' do
34
+ expect {
35
+ subject.zmq_error_check(0)
36
+ }.to_not raise_error
37
+ end
38
+ end
39
+
40
+ describe '#log_signature' do
41
+ it 'returns the signature for the log' do
42
+ subject.log_signature.should include('server', 'UtilTest')
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Protobuf::Rpc::Zmq::Worker do
4
+ before(:each) do
5
+ load 'protobuf/zmq.rb'
6
+ end
7
+
8
+ after(:each) do
9
+ subject.instance_variable_get(:@socket).close
10
+ subject.instance_variable_get(:@zmq_context).terminate
11
+ end
12
+
13
+ subject do
14
+ described_class.new({ :host => '127.0.0.1', :port => 9400 })
15
+ end
16
+
17
+ it 'sets the context' do
18
+ subject.instance_variable_get(:@zmq_context).should be_a(::ZMQ::Context)
19
+ end
20
+
21
+ it 'sets the poller' do
22
+ subject.instance_variable_get(:@socket).should be_a(::ZMQ::Socket)
23
+ end
24
+
25
+ it 'sets the socket' do
26
+ subject.instance_variable_get(:@poller).should be_a(::ZMQ::Poller)
27
+ end
28
+
29
+ describe '#run' do
30
+ # not tested via unit tests
31
+ end
32
+
33
+ describe '#handle_request' do
34
+ # not tested via unit tests
35
+ end
36
+
37
+ describe '#initialize_buffers' do
38
+ # not tested via unit tests
39
+ end
40
+
41
+ describe '#send_data' do
42
+ # not tested via unit tests
43
+ end
44
+ end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+ require 'protobuf/rpc/service_dispatcher'
3
+
4
+ describe Protobuf::Rpc::ServiceDispatcher do
5
+ let(:service_name) { 'Test::ResourceService' }
6
+ let(:method_name) { 'find' }
7
+ let(:request) { Test::ResourceFindRequest.new(:name => 'resource') }
8
+ let(:request_bytes) { request.to_s }
9
+ let(:response) { Test::Resource.new }
10
+ let(:wrapper) do
11
+ Protobuf::Socketrpc::Request.new({ :service_name => service_name,
12
+ :method_name => method_name,
13
+ :request_proto => request_bytes })
14
+
15
+ end
16
+
17
+ subject { described_class.new(wrapper) }
18
+
19
+ context 'creating a new dispatcher' do
20
+ its(:service) { should be_instance_of service_name.constantize }
21
+ its(:callable_method) { should respond_to(:call)}
22
+ its(:outer_request) { should eq wrapper }
23
+ its(:error) { should be_nil }
24
+
25
+ context 'when service name is not a valid constant' do
26
+ let(:service_name) { 'FlibbityGibbit' }
27
+ its(:success?) { should be_false }
28
+ its(:error) { should be_instance_of(Protobuf::Rpc::ServiceNotFound) }
29
+ end
30
+
31
+ context 'when method is not defined by the service' do
32
+ let(:method_name) { 'holly_hooby_whaty' }
33
+ its(:success?) { should be_false }
34
+ its(:error) { should be_instance_of(Protobuf::Rpc::MethodNotFound) }
35
+ end
36
+
37
+ context 'when method is defined but is not an rpc method' do
38
+ before do
39
+ class Test::Resource
40
+ def non_rpc_method; end
41
+ end
42
+ end
43
+
44
+ let(:method_name) { 'non_rpc_method' }
45
+ its(:success?) { should be_false }
46
+ its(:error) { should be_instance_of(Protobuf::Rpc::MethodNotFound) }
47
+ end
48
+ end
49
+
50
+ describe '#invoke!' do
51
+ context 'regular invocation' do
52
+ before { subject.callable_method.should_receive(:call) }
53
+ before { subject.service.stub(:response).and_return(response) }
54
+ before { subject.invoke! }
55
+ its(:response) { should be_instance_of Test::Resource }
56
+ its(:success?) { should be_true }
57
+ end
58
+
59
+ context 'when service responds with' do
60
+ context 'a hash object' do
61
+ before { subject.callable_method.should_receive(:call) }
62
+ before { subject.service.stub(:response).and_return({ :name => 'returned' }) }
63
+ before { subject.invoke! }
64
+ its(:success?) { should be_true }
65
+ its(:response) { should eq Test::Resource.new(:name => 'returned') }
66
+ end
67
+
68
+ context 'an object that responds to to_hash but is not a hash' do
69
+ let(:hashable) do
70
+ mock('hashable', :to_hash => { :name => 'hashable' })
71
+ end
72
+ before { subject.callable_method.should_receive(:call) }
73
+ before { subject.service.stub(:response).and_return(hashable) }
74
+ before { subject.invoke! }
75
+ its(:success?) { should be_true }
76
+ its(:response) { should eq Test::Resource.new(:name => 'hashable') }
77
+ end
78
+
79
+ context 'an object that responds to to_proto' do
80
+ let(:protoable) do
81
+ mock('protoable', :to_proto => Test::Resource.new(:name => 'protoable'))
82
+ end
83
+ before { subject.callable_method.should_receive(:call) }
84
+ before { subject.service.stub(:response).and_return(protoable) }
85
+ before { subject.invoke! }
86
+ its(:success?) { should be_true }
87
+ its(:response) { should eq Test::Resource.new(:name => 'protoable') }
88
+ end
89
+
90
+ context 'a type not identified by the rpc definition' do
91
+ before { subject.callable_method.should_receive(:call) }
92
+ before { subject.service.stub(:response).and_return("I'm not a valid response") }
93
+ before { subject.invoke! }
94
+ its(:error) { should be_instance_of(Protobuf::Rpc::BadResponseProto) }
95
+ end
96
+ end
97
+
98
+ context 'when service invokes rpc failed callback' do
99
+ before(:all) do
100
+ class Test::ResourceService
101
+ rpc :find_with_rpc_failed, Test::ResourceFindRequest, Test::Resource
102
+ def find_with_rpc_failed
103
+ rpc_failed('Find failed')
104
+ end
105
+ end
106
+ end
107
+
108
+ let(:method_name) { 'find_with_rpc_failed' }
109
+ before { subject.service.find_with_rpc_failed }
110
+
111
+ its(:success?) { should be_false }
112
+ its(:error) { should be_instance_of(Protobuf::Rpc::RpcFailed) }
113
+ end
114
+ end
115
+
116
+ end