protobuffy 3.6.0 → 4.0.0

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 (209) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +67 -0
  4. data/.rubocop_todo.yml +145 -0
  5. data/.travis.yml +25 -5
  6. data/CHANGES.md +55 -0
  7. data/CONTRIBUTING.md +1 -1
  8. data/LICENSE.txt +17 -9
  9. data/README.md +13 -12
  10. data/Rakefile +15 -11
  11. data/bin/protoc-gen-ruby +8 -3
  12. data/bin/rpc_server +1 -0
  13. data/examples/lib/example/reverse-client.rb +2 -2
  14. data/install-protobuf.sh +28 -0
  15. data/lib/protobuf.rb +57 -53
  16. data/lib/protobuf/cli.rb +94 -74
  17. data/lib/protobuf/code_generator.rb +60 -9
  18. data/lib/protobuf/decoder.rb +19 -65
  19. data/lib/protobuf/deprecation.rb +117 -0
  20. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +11 -1
  21. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +55 -3
  22. data/lib/protobuf/encoder.rb +13 -53
  23. data/lib/protobuf/enum.rb +58 -63
  24. data/lib/protobuf/field.rb +4 -4
  25. data/lib/protobuf/field/base_field.rb +101 -173
  26. data/lib/protobuf/field/bool_field.rb +17 -11
  27. data/lib/protobuf/field/bytes_field.rb +21 -35
  28. data/lib/protobuf/field/double_field.rb +0 -1
  29. data/lib/protobuf/field/enum_field.rb +23 -22
  30. data/lib/protobuf/field/field_array.rb +5 -4
  31. data/lib/protobuf/field/fixed32_field.rb +1 -1
  32. data/lib/protobuf/field/fixed64_field.rb +0 -1
  33. data/lib/protobuf/field/float_field.rb +4 -1
  34. data/lib/protobuf/field/int32_field.rb +0 -1
  35. data/lib/protobuf/field/int64_field.rb +0 -1
  36. data/lib/protobuf/field/integer_field.rb +0 -1
  37. data/lib/protobuf/field/message_field.rb +13 -28
  38. data/lib/protobuf/field/sfixed32_field.rb +0 -1
  39. data/lib/protobuf/field/sfixed64_field.rb +0 -1
  40. data/lib/protobuf/field/signed_integer_field.rb +0 -1
  41. data/lib/protobuf/field/sint32_field.rb +0 -1
  42. data/lib/protobuf/field/sint64_field.rb +0 -1
  43. data/lib/protobuf/field/string_field.rb +2 -4
  44. data/lib/protobuf/field/uint32_field.rb +0 -1
  45. data/lib/protobuf/field/uint64_field.rb +0 -1
  46. data/lib/protobuf/field/varint_field.rb +30 -13
  47. data/lib/protobuf/generators/base.rb +30 -16
  48. data/lib/protobuf/generators/enum_generator.rb +6 -9
  49. data/lib/protobuf/generators/extension_generator.rb +1 -2
  50. data/lib/protobuf/generators/field_generator.rb +25 -13
  51. data/lib/protobuf/generators/file_generator.rb +157 -35
  52. data/lib/protobuf/generators/group_generator.rb +22 -17
  53. data/lib/protobuf/generators/message_generator.rb +13 -14
  54. data/lib/protobuf/generators/option_generator.rb +17 -0
  55. data/lib/protobuf/generators/printable.rb +12 -13
  56. data/lib/protobuf/generators/service_generator.rb +2 -3
  57. data/lib/protobuf/http.rb +2 -2
  58. data/lib/protobuf/lifecycle.rb +20 -33
  59. data/lib/protobuf/logging.rb +39 -0
  60. data/lib/protobuf/message.rb +114 -47
  61. data/lib/protobuf/message/fields.rb +170 -88
  62. data/lib/protobuf/message/serialization.rb +19 -18
  63. data/lib/protobuf/optionable.rb +53 -6
  64. data/lib/protobuf/rpc/buffer.rb +18 -19
  65. data/lib/protobuf/rpc/client.rb +22 -50
  66. data/lib/protobuf/rpc/connectors/base.rb +177 -12
  67. data/lib/protobuf/rpc/connectors/http.rb +14 -9
  68. data/lib/protobuf/rpc/connectors/ping.rb +89 -0
  69. data/lib/protobuf/rpc/connectors/socket.rb +13 -8
  70. data/lib/protobuf/rpc/connectors/zmq.rb +178 -73
  71. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +4 -1
  72. data/lib/protobuf/rpc/env.rb +12 -12
  73. data/lib/protobuf/rpc/error.rb +3 -3
  74. data/lib/protobuf/rpc/error/client_error.rb +4 -4
  75. data/lib/protobuf/rpc/error/server_error.rb +9 -9
  76. data/lib/protobuf/rpc/middleware/exception_handler.rb +6 -2
  77. data/lib/protobuf/rpc/middleware/logger.rb +8 -4
  78. data/lib/protobuf/rpc/middleware/request_decoder.rb +17 -21
  79. data/lib/protobuf/rpc/middleware/response_encoder.rb +22 -27
  80. data/lib/protobuf/rpc/middleware/statsd.rb +3 -3
  81. data/lib/protobuf/rpc/rpc.pb.rb +4 -1
  82. data/lib/protobuf/rpc/server.rb +1 -1
  83. data/lib/protobuf/rpc/servers/http/server.rb +19 -17
  84. data/lib/protobuf/rpc/servers/socket/server.rb +78 -70
  85. data/lib/protobuf/rpc/servers/socket/worker.rb +4 -4
  86. data/lib/protobuf/rpc/servers/socket_runner.rb +27 -15
  87. data/lib/protobuf/rpc/servers/zmq/broker.rb +70 -31
  88. data/lib/protobuf/rpc/servers/zmq/server.rb +55 -47
  89. data/lib/protobuf/rpc/servers/zmq/util.rb +14 -13
  90. data/lib/protobuf/rpc/servers/zmq/worker.rb +16 -16
  91. data/lib/protobuf/rpc/servers/zmq_runner.rb +26 -7
  92. data/lib/protobuf/rpc/service.rb +21 -27
  93. data/lib/protobuf/rpc/service_directory.rb +43 -27
  94. data/lib/protobuf/rpc/service_dispatcher.rb +9 -10
  95. data/lib/protobuf/rpc/service_filters.rb +32 -55
  96. data/lib/protobuf/rpc/stat.rb +4 -8
  97. data/lib/protobuf/socket.rb +1 -2
  98. data/lib/protobuf/tasks/compile.rake +3 -4
  99. data/lib/protobuf/varint.rb +9 -0
  100. data/lib/protobuf/varint_pure.rb +13 -0
  101. data/lib/protobuf/version.rb +1 -1
  102. data/lib/protobuf/zmq.rb +2 -2
  103. data/proto/google/protobuf/descriptor.proto +190 -31
  104. data/protobuffy.gemspec +30 -17
  105. data/spec/benchmark/tasks.rb +27 -19
  106. data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
  107. data/spec/encoding/all_types_spec.rb +96 -84
  108. data/spec/encoding/extreme_values_spec.rb +0 -0
  109. data/spec/functional/class_inheritance_spec.rb +52 -0
  110. data/spec/functional/code_generator_spec.rb +38 -0
  111. data/spec/functional/socket_server_spec.rb +15 -15
  112. data/spec/functional/zmq_server_spec.rb +29 -27
  113. data/spec/lib/protobuf/cli_spec.rb +82 -67
  114. data/spec/lib/protobuf/code_generator_spec.rb +37 -10
  115. data/spec/lib/protobuf/enum_spec.rb +77 -46
  116. data/spec/lib/protobuf/field/bool_field_spec.rb +91 -0
  117. data/spec/lib/protobuf/field/double_field_spec.rb +9 -0
  118. data/spec/lib/protobuf/field/enum_field_spec.rb +26 -0
  119. data/spec/lib/protobuf/field/field_array_spec.rb +69 -0
  120. data/spec/lib/protobuf/field/fixed32_field_spec.rb +7 -0
  121. data/spec/lib/protobuf/field/fixed64_field_spec.rb +7 -0
  122. data/spec/lib/protobuf/field/float_field_spec.rb +90 -0
  123. data/spec/lib/protobuf/field/int32_field_spec.rb +114 -1
  124. data/spec/lib/protobuf/field/int64_field_spec.rb +7 -0
  125. data/spec/lib/protobuf/field/message_field_spec.rb +132 -0
  126. data/spec/lib/protobuf/field/sfixed32_field_spec.rb +9 -0
  127. data/spec/lib/protobuf/field/sfixed64_field_spec.rb +9 -0
  128. data/spec/lib/protobuf/field/sint32_field_spec.rb +9 -0
  129. data/spec/lib/protobuf/field/sint64_field_spec.rb +9 -0
  130. data/spec/lib/protobuf/field/string_field_spec.rb +44 -11
  131. data/spec/lib/protobuf/field/uint32_field_spec.rb +7 -0
  132. data/spec/lib/protobuf/field/uint64_field_spec.rb +7 -0
  133. data/spec/lib/protobuf/field_spec.rb +4 -6
  134. data/spec/lib/protobuf/generators/base_spec.rb +80 -13
  135. data/spec/lib/protobuf/generators/enum_generator_spec.rb +35 -21
  136. data/spec/lib/protobuf/generators/extension_generator_spec.rb +12 -13
  137. data/spec/lib/protobuf/generators/field_generator_spec.rb +73 -21
  138. data/spec/lib/protobuf/generators/file_generator_spec.rb +89 -6
  139. data/spec/lib/protobuf/generators/service_generator_spec.rb +25 -13
  140. data/spec/lib/protobuf/lifecycle_spec.rb +25 -20
  141. data/spec/lib/protobuf/message_spec.rb +578 -79
  142. data/spec/lib/protobuf/optionable_spec.rb +202 -26
  143. data/spec/lib/protobuf/rpc/client_spec.rb +16 -16
  144. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +167 -13
  145. data/spec/lib/protobuf/rpc/connectors/connector_spec.rb +4 -5
  146. data/spec/lib/protobuf/rpc/connectors/http_spec.rb +13 -11
  147. data/spec/lib/protobuf/rpc/connectors/ping_spec.rb +69 -0
  148. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +6 -7
  149. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +35 -52
  150. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +10 -10
  151. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +11 -11
  152. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +23 -23
  153. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +11 -11
  154. data/spec/lib/protobuf/rpc/middleware/statsd_spec.rb +6 -6
  155. data/spec/lib/protobuf/rpc/servers/http/server_spec.rb +47 -44
  156. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +6 -6
  157. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +12 -10
  158. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +11 -11
  159. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +7 -7
  160. data/spec/lib/protobuf/rpc/service_directory_spec.rb +47 -49
  161. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +8 -25
  162. data/spec/lib/protobuf/rpc/service_filters_spec.rb +102 -69
  163. data/spec/lib/protobuf/rpc/service_spec.rb +37 -36
  164. data/spec/lib/protobuf/rpc/stat_spec.rb +7 -9
  165. data/spec/lib/protobuf/varint_spec.rb +29 -0
  166. data/spec/lib/protobuf_spec.rb +55 -28
  167. data/spec/spec_helper.rb +12 -27
  168. data/spec/support/all.rb +0 -1
  169. data/spec/support/packed_field.rb +4 -3
  170. data/spec/support/{test → protos}/all_types.data.bin +0 -0
  171. data/spec/support/{test → protos}/all_types.data.txt +0 -0
  172. data/spec/support/{test → protos}/enum.pb.rb +8 -4
  173. data/spec/support/{test → protos}/enum.proto +4 -1
  174. data/spec/support/{test → protos}/extreme_values.data.bin +0 -0
  175. data/spec/support/protos/google_unittest.bin +0 -0
  176. data/spec/support/protos/google_unittest.pb.rb +798 -0
  177. data/spec/support/{test → protos}/google_unittest.proto +237 -66
  178. data/spec/support/protos/google_unittest_custom_options.bin +0 -0
  179. data/spec/support/protos/google_unittest_custom_options.pb.rb +268 -0
  180. data/spec/support/protos/google_unittest_custom_options.proto +424 -0
  181. data/spec/support/protos/google_unittest_import.pb.rb +55 -0
  182. data/spec/support/{test → protos}/google_unittest_import.proto +19 -10
  183. data/spec/support/protos/google_unittest_import_public.pb.rb +31 -0
  184. data/spec/support/{test → protos}/google_unittest_import_public.proto +8 -5
  185. data/spec/support/{test → protos}/multi_field_extensions.pb.rb +5 -2
  186. data/spec/support/{test → protos}/multi_field_extensions.proto +2 -0
  187. data/spec/support/{test → protos}/resource.pb.rb +47 -11
  188. data/spec/support/{test → protos}/resource.proto +24 -1
  189. data/spec/support/resource_service.rb +23 -0
  190. data/spec/support/server.rb +32 -61
  191. metadata +119 -59
  192. data/lib/protobuf/deprecator.rb +0 -42
  193. data/lib/protobuf/logger.rb +0 -93
  194. data/lib/protobuf/rpc/connector.rb +0 -21
  195. data/lib/protobuf/rpc/connectors/common.rb +0 -172
  196. data/spec/data/data.bin +0 -3
  197. data/spec/data/types.bin +0 -0
  198. data/spec/lib/protobuf/logger_spec.rb +0 -145
  199. data/spec/lib/protobuf/rpc/connector_spec.rb +0 -26
  200. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +0 -170
  201. data/spec/support/test/defaults.pb.rb +0 -25
  202. data/spec/support/test/defaults.proto +0 -9
  203. data/spec/support/test/extended.pb.rb +0 -22
  204. data/spec/support/test/extended.proto +0 -10
  205. data/spec/support/test/google_unittest.pb.rb +0 -543
  206. data/spec/support/test/google_unittest_import.pb.rb +0 -37
  207. data/spec/support/test/google_unittest_import_public.pb.rb +0 -8
  208. data/spec/support/test/resource_service.rb +0 -26
  209. data/spec/support/tolerance_matcher.rb +0 -40
@@ -1,13 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  shared_examples "a Protobuf Connector" do
4
- subject{ described_class.new({}) }
4
+ subject { described_class.new({}) }
5
5
 
6
6
  context "API" do
7
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 }
8
+ specify { subject.respond_to?(:send_request, true).should be true }
9
+ specify { subject.respond_to?(:close_connection, true).should be true }
10
+ specify { subject.respond_to?(:error?, true).should be true }
12
11
  end
13
12
  end
@@ -4,21 +4,23 @@ require 'faraday'
4
4
 
5
5
  describe ::Protobuf::Rpc::Connectors::Http do
6
6
  subject { described_class.new({}) }
7
-
8
- it_behaves_like "a Protobuf Connector"
9
7
 
10
- specify{ described_class.include?(Protobuf::Rpc::Connectors::Common).should be_true }
8
+ it_behaves_like "a Protobuf Connector"
9
+ specify { subject.respond_to?(:post_init, true).should be true }
11
10
 
12
11
  let(:client_double) do
13
12
  Faraday.new do |builder|
14
13
  builder.adapter :test do |stub|
15
- stub.post("/Foo/UserService/find") {[ 200, {}, "\n\n\n\x03foo\x12\x03bar" ]}
16
- stub.post("/Foo/UserService/foo1") {[ 404, {
17
- 'x-protobuf-error' => "Foo::UserService#foo1 is not a defined RPC method.",
18
- 'x-protobuf-error-reason' => Protobuf::Socketrpc::ErrorReason::METHOD_NOT_FOUND.to_s
19
- }, "" ]}
20
- stub.post("/Foo/UserService/foo2") {[ 500, {}, "" ]}
21
- stub.post("/base/Foo/UserService/foo3") {[ 200, {}, "\n\n\n\x03foo\x12\x03bar" ]}
14
+ stub.post("/Foo/UserService/find") { [200, {}, "\n\n\n\x03foo\x12\x03bar"] }
15
+ stub.post("/Foo/UserService/foo1") do
16
+ headers = {
17
+ 'x-protobuf-error' => "Foo::UserService#foo1 is not a defined RPC method.",
18
+ 'x-protobuf-error-reason' => Protobuf::Socketrpc::ErrorReason::METHOD_NOT_FOUND.to_s,
19
+ }
20
+ [404, headers, '']
21
+ end
22
+ stub.post("/Foo/UserService/foo2") { [500, {}, ""] }
23
+ stub.post("/base/Foo/UserService/foo3") { [200, {}, "\n\n\n\x03foo\x12\x03bar"] }
22
24
  end
23
25
  end
24
26
  end
@@ -51,7 +53,7 @@ describe ::Protobuf::Rpc::Connectors::Http do
51
53
  end
52
54
 
53
55
  it "prepends base path option correctly" do
54
- subject.stub(:options) { { :base => "/base" }}
56
+ subject.stub(:options) { { :base => "/base" } }
55
57
  subject.stub(:request_bytes) { "\n\x10Foo::UserService\x12\x04foo3\x1A\r\n\vfoo@bar.com\"\rabcdefghijklm" }
56
58
  subject.send(:setup_connection)
57
59
  subject.send(:send_data)
@@ -0,0 +1,69 @@
1
+ require "spec_helper"
2
+ require "protobuf/zmq"
3
+
4
+ ::RSpec.describe ::Protobuf::Rpc::Connectors::Ping do
5
+ subject { described_class.new("google.com", 80) }
6
+
7
+ let(:host) { "google.com" }
8
+ let(:port) { 80 }
9
+
10
+ describe ".new" do
11
+ it "assigns host" do
12
+ expect(subject.host).to eq(host)
13
+ end
14
+
15
+ it "assigns port" do
16
+ expect(subject.port).to eq(port)
17
+ end
18
+ end
19
+
20
+ describe "#online?" do
21
+ it "closes the socket" do
22
+ socket = double(:close => nil, :setsockopt => nil)
23
+ allow(subject).to receive(:tcp_socket).and_return(socket)
24
+ expect(socket).to receive(:close)
25
+ expect(subject).to be_online
26
+ end
27
+
28
+ context "when a socket can connect" do
29
+ let(:socket) { double(:close => nil, :setsockopt => nil) }
30
+ before { allow(subject).to receive(:tcp_socket).and_return(socket) }
31
+
32
+ it "returns true" do
33
+ expect(subject).to be_online
34
+ end
35
+ end
36
+
37
+ context "when a socket error is raised" do
38
+ before { allow(subject).to receive(:tcp_socket).and_raise(::Errno::ECONNREFUSED) }
39
+
40
+ it "returns false" do
41
+ expect(subject).to_not be_online
42
+ end
43
+ end
44
+
45
+ context "when a select timeout is fired" do
46
+ let(:wait_writable_class) { ::Class.new(StandardError) { include ::IO::WaitWritable } }
47
+ before { expect_any_instance_of(::Socket).to receive(:connect_nonblock).and_raise(wait_writable_class) }
48
+
49
+ it "returns false" do
50
+ expect(::IO).to receive(:select).and_return(false)
51
+ expect(subject).to_not be_online
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "#timeout" do
57
+ it "uses the default value" do
58
+ expect(subject.timeout).to eq(0.2)
59
+ end
60
+
61
+ context "when environment variable is set" do
62
+ before { ::ENV["PB_RPC_PING_PORT_TIMEOUT"] = "100" }
63
+
64
+ it "uses the environmet variable" do
65
+ expect(subject.timeout).to eq(0.1)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,24 +1,23 @@
1
1
  require 'spec_helper'
2
2
  require 'protobuf/socket'
3
3
 
4
- describe Protobuf::Rpc::Connectors::Socket do
5
- subject{ described_class.new({}) }
4
+ RSpec.describe Protobuf::Rpc::Connectors::Socket do
5
+ subject { described_class.new({}) }
6
6
 
7
7
  it_behaves_like "a Protobuf Connector"
8
-
9
- specify{ described_class.include?(Protobuf::Rpc::Connectors::Common).should be_true }
8
+ specify { subject.respond_to?(:post_init, true).should be true }
10
9
 
11
10
  context "#read_response" do
12
- let(:data){ "New data" }
11
+ let(:data) { "New data" }
13
12
 
14
13
  it "fills the buffer with data from the socket" do
15
14
  socket = StringIO.new("#{data.bytesize}-#{data}")
16
15
  subject.instance_variable_set(:@socket, socket)
17
16
  subject.instance_variable_set(:@stats, OpenStruct.new)
18
- subject.should_receive(:parse_response).and_return(true)
17
+ expect(subject).to receive(:parse_response).and_return(true)
19
18
 
20
19
  subject.__send__(:read_response)
21
- subject.instance_variable_get(:@response_data).should eq(data)
20
+ expect(subject.instance_variable_get(:@response_data)).to eq(data)
22
21
  end
23
22
  end
24
23
  end
@@ -1,35 +1,27 @@
1
1
  require 'spec_helper'
2
2
  require 'protobuf/zmq'
3
3
 
4
- describe ::Protobuf::Rpc::Connectors::Zmq do
4
+ RSpec.describe ::Protobuf::Rpc::Connectors::Zmq do
5
5
  subject { described_class.new(options) }
6
-
7
- it_behaves_like "a Protobuf Connector"
8
-
9
- specify{ described_class.include?(Protobuf::Rpc::Connectors::Common).should be_true }
10
6
 
11
- let(:options) {{
12
- :service => "Test::Service",
13
- :method => "find",
14
- :timeout => 3,
15
- :host => "127.0.0.1",
16
- :port => "9400"
17
- }}
7
+ it_behaves_like "a Protobuf Connector"
18
8
 
19
- let(:socket_double) do
20
- sm = double(::ZMQ::Socket)
21
- sm.stub(:connect).and_return(0)
22
- sm
9
+ let(:options) do
10
+ {
11
+ :service => "Test::Service",
12
+ :method => "find",
13
+ :timeout => 3,
14
+ :host => "127.0.0.1",
15
+ :port => "9400",
16
+ }
23
17
  end
24
18
 
25
- let(:zmq_context_double) do
26
- zc = double(::ZMQ::Context)
27
- zc.stub(:socket).and_return(socket_double)
28
- zc
29
- end
19
+ let(:socket_double) { double(::ZMQ::Socket, :connect => 0) }
20
+ let(:zmq_context_double) { double(::ZMQ::Context, :socket => socket_double) }
30
21
 
31
22
  before do
32
- ::ZMQ::Context.stub(:new).and_return(zmq_context_double)
23
+ allow(::ZMQ::Context).to receive(:new).and_return(zmq_context_double)
24
+ allow(socket_double).to receive(:setsockopt)
33
25
  end
34
26
 
35
27
  before(:all) do
@@ -41,24 +33,22 @@ describe ::Protobuf::Rpc::Connectors::Zmq do
41
33
  end
42
34
 
43
35
  describe "#lookup_server_uri" do
44
- let(:service_directory) { double('ServiceDirectory', :running? => running? ) }
36
+ let(:service_directory) { double('ServiceDirectory', :running? => running?) }
45
37
  let(:listing) { double('Listing', :address => '127.0.0.2', :port => 9399) }
46
38
  let(:listings) { [listing] }
47
39
  let(:running?) { true }
48
40
 
49
- before do
50
- subject.stub(:service_directory) { service_directory }
51
- end
41
+ before { allow(subject).to receive(:service_directory).and_return(service_directory) }
52
42
 
53
43
  context "when the service directory is running" do
54
44
  it "searches the service directory" do
55
- service_directory.stub(:all_listings_for).and_return(listings)
56
- subject.send(:lookup_server_uri).should eq "tcp://127.0.0.2:9399"
45
+ allow(service_directory).to receive(:all_listings_for).and_return(listings)
46
+ expect(subject.send(:lookup_server_uri)).to eq "tcp://127.0.0.2:9399"
57
47
  end
58
48
 
59
49
  it "defaults to the options" do
60
- service_directory.stub(:all_listings_for).and_return([])
61
- subject.send(:lookup_server_uri).should eq "tcp://127.0.0.1:9400"
50
+ allow(service_directory).to receive(:all_listings_for).and_return([])
51
+ expect(subject.send(:lookup_server_uri)).to eq "tcp://127.0.0.1:9400"
62
52
  end
63
53
  end
64
54
 
@@ -66,22 +56,22 @@ describe ::Protobuf::Rpc::Connectors::Zmq do
66
56
  let(:running?) { false }
67
57
 
68
58
  it "defaults to the options" do
69
- service_directory.stub(:all_listings_for).and_return([])
70
- subject.send(:lookup_server_uri).should eq "tcp://127.0.0.1:9400"
59
+ allow(service_directory).to receive(:all_listings_for).and_return([])
60
+ expect(subject.send(:lookup_server_uri)).to eq "tcp://127.0.0.1:9400"
71
61
  end
72
62
  end
73
63
 
74
64
  it "checks if the server is alive" do
75
- service_directory.stub(:all_listings_for).and_return([])
76
- subject.should_receive(:host_alive?).with("127.0.0.1") { true }
77
- subject.send(:lookup_server_uri).should eq "tcp://127.0.0.1:9400"
65
+ allow(service_directory).to receive(:all_listings_for).and_return([])
66
+ expect(subject).to receive(:host_alive?).with("127.0.0.1") { true }
67
+ expect(subject.send(:lookup_server_uri)).to eq "tcp://127.0.0.1:9400"
78
68
  end
79
69
 
80
70
  context "when no host is alive" do
81
71
  it "raises an error" do
82
- service_directory.stub(:all_listings_for).and_return(listings)
83
- subject.stub(:host_alive?).and_return(false)
84
- expect { subject.send(:lookup_server_uri) }.to raise_error
72
+ allow(service_directory).to receive(:all_listings_for).and_return(listings)
73
+ allow(subject).to receive(:host_alive?).and_return(false)
74
+ expect { subject.send(:lookup_server_uri) }.to raise_error(RuntimeError)
85
75
  end
86
76
  end
87
77
 
@@ -94,35 +84,28 @@ describe ::Protobuf::Rpc::Connectors::Zmq do
94
84
  end
95
85
 
96
86
  it "returns true" do
97
- subject.send(:host_alive?, "yip.yip").should be_true
87
+ expect(subject.send(:host_alive?, "yip.yip")).to be true
98
88
  end
99
89
 
100
90
  it "does not attempt a connection" do
101
- TCPSocket.should_not_receive(:new)
91
+ expect(TCPSocket).not_to receive(:new)
102
92
  subject.send(:host_alive?, "blargh.com")
103
93
  end
104
94
  end
105
95
 
106
96
  context "when the PB_RPC_PING_PORT is set" do
107
97
  before do
108
- ENV["PB_RPC_PING_PORT"] = "3307"
98
+ ::ENV["PB_RPC_PING_PORT"] = "3307"
109
99
  end
110
100
 
111
101
  it "returns true when the connection succeeds" do
112
- TCPSocket.should_receive(:new).with("huzzah.com", 3307) { double(:close => nil) }
113
- subject.send(:host_alive?, "huzzah.com").should be_true
102
+ allow_any_instance_of(::Protobuf::Rpc::Connectors::Ping).to receive(:online?).and_return(true)
103
+ expect(subject.send(:host_alive?, "huzzah1.com")).to eq(true)
114
104
  end
115
105
 
116
106
  it "returns false when the connection fails" do
117
- TCPSocket.should_receive(:new).with("hayoob.com", 3307).and_raise(Errno::ECONNREFUSED)
118
- subject.send(:host_alive?, "hayoob.com").should be_false
119
- end
120
-
121
- it "closes the socket" do
122
- socket = double("TCPSocket")
123
- socket.should_receive(:close)
124
- TCPSocket.should_receive(:new).with("absorbalof.com", 3307) { socket }
125
- subject.send(:host_alive?, "absorbalof.com").should be_true
107
+ allow_any_instance_of(::Protobuf::Rpc::Connectors::Ping).to receive(:online?).and_return(false)
108
+ expect(subject.send(:host_alive?, "huzzah2.com")).to eq(false)
126
109
  end
127
110
  end
128
111
  end
@@ -1,26 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Protobuf::Rpc::Middleware::ExceptionHandler do
4
- let(:app) { Proc.new { |env| env } }
3
+ RSpec.describe Protobuf::Rpc::Middleware::ExceptionHandler do
4
+ let(:app) { proc { |env| env } }
5
5
  let(:env) { Protobuf::Rpc::Env.new }
6
6
 
7
7
  subject { described_class.new(app) }
8
8
 
9
9
  describe "#call" do
10
10
  it "calls the stack" do
11
- app.should_receive(:call).with(env)
11
+ expect(app).to receive(:call).with(env)
12
12
  subject.call(env)
13
13
  end
14
14
 
15
15
  it "returns the env" do
16
- subject.call(env).should eq env
16
+ expect(subject.call(env)).to eq env
17
17
  end
18
18
 
19
19
  context "when exceptions occur" do
20
20
  let(:encoded_error) { error.encode }
21
21
  let(:error) { Protobuf::Rpc::MethodNotFound.new('Boom!') }
22
22
 
23
- before { app.stub(:call).and_raise(error, 'Boom!') }
23
+ before { allow(app).to receive(:call).and_raise(error, 'Boom!') }
24
24
 
25
25
  it "rescues exceptions" do
26
26
  expect { subject.call(env) }.not_to raise_exception
@@ -32,12 +32,12 @@ describe Protobuf::Rpc::Middleware::ExceptionHandler do
32
32
 
33
33
  # Can't compare the error instances because the response has been
34
34
  # raised and thus has a backtrace while the error does not.
35
- stack_env.response.class.should eq error.class
35
+ expect(stack_env.response.class).to eq error.class
36
36
  end
37
37
 
38
38
  it "encodes the response" do
39
39
  stack_env = subject.call(env)
40
- stack_env.encoded_response.should eq encoded_error
40
+ expect(stack_env.encoded_response).to eq encoded_error
41
41
  end
42
42
  end
43
43
 
@@ -45,16 +45,16 @@ describe Protobuf::Rpc::Middleware::ExceptionHandler do
45
45
  let(:encoded_error) { error.encode }
46
46
  let(:error) { Protobuf::Rpc::RpcFailed.new('Boom!') }
47
47
 
48
- before { app.stub(:call).and_raise(RuntimeError, 'Boom!') }
48
+ before { allow(app).to receive(:call).and_raise(RuntimeError, 'Boom!') }
49
49
 
50
50
  it "wraps the exception in a generic Protobuf error" do
51
51
  stack_env = subject.call(env)
52
- stack_env.response.should eq error
52
+ expect(stack_env.response).to eq error
53
53
  end
54
54
 
55
55
  it "encodes the wrapped exception" do
56
56
  stack_env = subject.call(env)
57
- stack_env.encoded_response.should eq encoded_error
57
+ expect(stack_env.encoded_response).to eq encoded_error
58
58
  end
59
59
  end
60
60
  end
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Protobuf::Rpc::Middleware::Logger do
4
- let(:app) { Proc.new { |inner_env| inner_env } }
5
- let(:env) {
3
+ RSpec.describe Protobuf::Rpc::Middleware::Logger do
4
+ let(:app) { proc { |inner_env| inner_env } }
5
+ let(:env) do
6
6
  Protobuf::Rpc::Env.new(
7
7
  'client_host' => 'client_host.test.co',
8
8
  'encoded_request' => request_wrapper.encode,
@@ -14,20 +14,20 @@ describe Protobuf::Rpc::Middleware::Logger do
14
14
  'response_type' => rpc_method.response_type,
15
15
  'rpc_method' => rpc_method,
16
16
  'rpc_service' => service_class,
17
- 'service_name' => service_name,
17
+ 'service_name' => service_name
18
18
  )
19
- }
19
+ end
20
20
  let(:method_name) { :find }
21
21
  let(:request) { request_type.new(:name => 'required') }
22
22
  let(:request_type) { rpc_method.request_type }
23
- let(:request_wrapper) {
24
- Protobuf::Socketrpc::Request.new(
23
+ let(:request_wrapper) do
24
+ ::Protobuf::Socketrpc::Request.new(
25
25
  :service_name => service_name,
26
26
  :method_name => method_name.to_s,
27
27
  :request_proto => request
28
28
  )
29
- }
30
- let(:response_wrapper) { Protobuf::Socketrpc::Response.new(:response_proto => response) }
29
+ end
30
+ let(:response_wrapper) { ::Protobuf::Socketrpc::Response.new(:response_proto => response) }
31
31
  let(:response) { rpc_method.response_type.new(:name => 'required') }
32
32
  let(:rpc_method) { service_class.rpcs[method_name] }
33
33
  let(:rpc_service) { service_class.new(env) }
@@ -38,12 +38,12 @@ describe Protobuf::Rpc::Middleware::Logger do
38
38
 
39
39
  describe "#call" do
40
40
  it "calls the stack" do
41
- app.should_receive(:call).with(env)
41
+ expect(app).to receive(:call).with(env).and_return(env)
42
42
  subject.call(env)
43
43
  end
44
44
 
45
45
  it "returns the env" do
46
- subject.call(env).should eq env
46
+ expect(subject.call(env)).to eq env
47
47
  end
48
48
  end
49
49
  end
@@ -1,26 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Protobuf::Rpc::Middleware::RequestDecoder do
4
- let(:app) { Proc.new { |env| env } }
3
+ RSpec.describe Protobuf::Rpc::Middleware::RequestDecoder do
4
+ let(:app) { proc { |env| env } }
5
5
  let(:client_host) { 'client_host.test.co' }
6
- let(:env) {
6
+ let(:env) do
7
7
  Protobuf::Rpc::Env.new(
8
8
  'encoded_request' => encoded_request,
9
9
  'log_signature' => 'log_signature'
10
10
  )
11
- }
11
+ end
12
12
  let(:encoded_request) { request_wrapper.encode }
13
13
  let(:method_name) { :find }
14
14
  let(:request) { request_type.new(:name => 'required') }
15
15
  let(:request_type) { rpc_method.request_type }
16
- let(:request_wrapper) {
17
- Protobuf::Socketrpc::Request.new(
16
+ let(:request_wrapper) do
17
+ ::Protobuf::Socketrpc::Request.new(
18
18
  :caller => client_host,
19
19
  :service_name => service_name,
20
20
  :method_name => method_name.to_s,
21
21
  :request_proto => request
22
22
  )
23
- }
23
+ end
24
24
  let(:response_type) { rpc_method.response_type }
25
25
  let(:rpc_method) { rpc_service.rpcs[method_name] }
26
26
  let(:rpc_service) { Test::ResourceService }
@@ -31,51 +31,51 @@ describe Protobuf::Rpc::Middleware::RequestDecoder do
31
31
  describe "#call" do
32
32
  it "decodes the request" do
33
33
  stack_env = subject.call(env)
34
- stack_env.request.should eq request
34
+ expect(stack_env.request).to eq request
35
35
  end
36
36
 
37
37
  it "calls the stack" do
38
- app.should_receive(:call).with(env)
38
+ expect(app).to receive(:call).with(env)
39
39
  subject.call(env)
40
40
  end
41
41
 
42
42
  it "sets Env#client_host" do
43
43
  stack_env = subject.call(env)
44
- stack_env.client_host.should eq client_host
44
+ expect(stack_env.client_host).to eq client_host
45
45
  end
46
46
 
47
47
  it "sets Env#service_name" do
48
48
  stack_env = subject.call(env)
49
- stack_env.service_name.should eq service_name
49
+ expect(stack_env.service_name).to eq service_name
50
50
  end
51
51
 
52
52
  it "sets Env#method_name" do
53
53
  stack_env = subject.call(env)
54
- stack_env.method_name.should eq method_name.to_sym
54
+ expect(stack_env.method_name).to eq method_name.to_sym
55
55
  end
56
56
 
57
57
  it "sets Env#request_type" do
58
58
  stack_env = subject.call(env)
59
- stack_env.request_type.should eq request_type
59
+ expect(stack_env.request_type).to eq request_type
60
60
  end
61
61
 
62
62
  it "sets Env#response_type" do
63
63
  stack_env = subject.call(env)
64
- stack_env.response_type.should eq response_type
64
+ expect(stack_env.response_type).to eq response_type
65
65
  end
66
66
 
67
67
  it "sets Env#rpc_method" do
68
68
  stack_env = subject.call(env)
69
- stack_env.rpc_method.should eq rpc_method
69
+ expect(stack_env.rpc_method).to eq rpc_method
70
70
  end
71
71
 
72
72
  it "sets Env#rpc_service" do
73
73
  stack_env = subject.call(env)
74
- stack_env.rpc_service.should eq rpc_service
74
+ expect(stack_env.rpc_service).to eq rpc_service
75
75
  end
76
76
 
77
77
  context "when decoding fails" do
78
- before { Protobuf::Socketrpc::Request.stub(:decode).and_raise(RuntimeError) }
78
+ before { allow(::Protobuf::Socketrpc::Request).to receive(:decode).and_raise(RuntimeError) }
79
79
 
80
80
  it "raises a bad request data exception" do
81
81
  expect { subject.call(env) }.to raise_exception(Protobuf::Rpc::BadRequestData)
@@ -83,14 +83,14 @@ describe Protobuf::Rpc::Middleware::RequestDecoder do
83
83
  end
84
84
 
85
85
  context "when the RPC service is not defined" do
86
- let(:request_wrapper) {
87
- Protobuf::Socketrpc::Request.new(
86
+ let(:request_wrapper) do
87
+ ::Protobuf::Socketrpc::Request.new(
88
88
  :caller => client_host,
89
89
  :service_name => 'Foo',
90
90
  :method_name => method_name.to_s,
91
91
  :request_proto => request
92
92
  )
93
- }
93
+ end
94
94
 
95
95
  it "raises a bad request data exception" do
96
96
  expect { subject.call(env) }.to raise_exception(Protobuf::Rpc::ServiceNotFound)
@@ -98,14 +98,14 @@ describe Protobuf::Rpc::Middleware::RequestDecoder do
98
98
  end
99
99
 
100
100
  context "when RPC method is not defined" do
101
- let(:request_wrapper) {
102
- Protobuf::Socketrpc::Request.new(
101
+ let(:request_wrapper) do
102
+ ::Protobuf::Socketrpc::Request.new(
103
103
  :caller => client_host,
104
104
  :service_name => service_name,
105
105
  :method_name => 'foo',
106
106
  :request_proto => request
107
107
  )
108
- }
108
+ end
109
109
 
110
110
  it "raises a bad request data exception" do
111
111
  expect { subject.call(env) }.to raise_exception(Protobuf::Rpc::MethodNotFound)