protobuffy 3.6.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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)