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
@@ -0,0 +1,38 @@
1
+ # encoding: binary
2
+
3
+ require 'spec_helper'
4
+ require 'protobuf/code_generator'
5
+
6
+ RSpec.describe 'code generation' do
7
+ it "generates code for google's unittest.proto" do
8
+ bytes = IO.read(PROTOS_PATH.join('google_unittest.bin'), :mode => 'rb')
9
+
10
+ expected_files =
11
+ ["google_unittest_import_public.pb.rb", "google_unittest_import.pb.rb", "google_unittest.pb.rb"]
12
+
13
+ expected_file_descriptors = expected_files.map do |file_name|
14
+ file_content = File.open(PROTOS_PATH.join(file_name), "r:UTF-8", &:read)
15
+ ::Google::Protobuf::Compiler::CodeGeneratorResponse::File.new(
16
+ :name => "protos/" + file_name, :content => file_content)
17
+ end
18
+
19
+ expected_output =
20
+ ::Google::Protobuf::Compiler::CodeGeneratorResponse.encode(:file => expected_file_descriptors)
21
+
22
+ code_generator = ::Protobuf::CodeGenerator.new(bytes)
23
+ code_generator.eval_unknown_extensions!
24
+ expect(code_generator.response_bytes).to eq(expected_output)
25
+ end
26
+
27
+ it "generates code (including service stubs) with custom field and method options" do
28
+ expected_unittest_custom_options =
29
+ File.open(PROTOS_PATH.join('google_unittest_custom_options.pb.rb'), "r:UTF-8", &:read)
30
+
31
+ bytes = IO.read(PROTOS_PATH.join('google_unittest_custom_options.bin'), :mode => 'rb')
32
+ code_generator = ::Protobuf::CodeGenerator.new(bytes)
33
+ code_generator.eval_unknown_extensions!
34
+ response = ::Google::Protobuf::Compiler::CodeGeneratorResponse.decode(code_generator.response_bytes)
35
+ expect(response.file.find { |f| f.name == 'protos/google_unittest_custom_options.pb.rb' }.content)
36
+ .to eq(expected_unittest_custom_options)
37
+ end
38
+ end
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
- require 'spec/support/test/resource_service'
2
+ require SUPPORT_PATH.join('resource_service')
3
3
 
4
- describe 'Functional Socket Client' do
4
+ RSpec.describe 'Functional Socket Client' do
5
5
  before(:all) do
6
6
  load "protobuf/socket.rb"
7
7
  @options = OpenStruct.new(:host => "127.0.0.1", :port => 9399, :backlog => 100, :threshold => 100)
8
8
  @runner = ::Protobuf::Rpc::SocketRunner.new(@options)
9
- @server_thread = Thread.new(@runner) { |runner| runner.run }
9
+ @server_thread = Thread.new(@runner, &:run)
10
10
  Thread.pass until @runner.running?
11
11
  end
12
12
 
@@ -16,20 +16,20 @@ describe 'Functional Socket Client' do
16
16
  end
17
17
 
18
18
  it 'runs fine when required fields are set' do
19
- expect {
19
+ expect do
20
20
  client = ::Test::ResourceService.client
21
21
 
22
22
  client.find(:name => 'Test Name', :active => true) do |c|
23
23
  c.on_success do |succ|
24
- succ.name.should eq("Test Name")
25
- succ.status.should eq(::Test::StatusType::ENABLED)
24
+ expect(succ.name).to eq("Test Name")
25
+ expect(succ.status).to eq(::Test::StatusType::ENABLED)
26
26
  end
27
27
 
28
28
  c.on_failure do |err|
29
- raise err.inspect
29
+ fail err.inspect
30
30
  end
31
31
  end
32
- }.to_not raise_error
32
+ end.to_not raise_error
33
33
  end
34
34
 
35
35
  it 'calls the on_failure callback when a message is malformed' do
@@ -38,10 +38,11 @@ describe 'Functional Socket Client' do
38
38
  client = ::Test::ResourceService.client
39
39
 
40
40
  client.find(request) do |c|
41
- c.on_success { raise "shouldn't pass"}
42
- c.on_failure {|e| error = e}
41
+ c.on_success { fail "shouldn't pass" }
42
+ c.on_failure { |e| error = e }
43
43
  end
44
- error.message.should =~ /name.*required/
44
+
45
+ expect(error.message).to match(/Required field.*does not have a value/)
45
46
  end
46
47
 
47
48
  it 'calls the on_failure callback when the request type is wrong' do
@@ -50,10 +51,9 @@ describe 'Functional Socket Client' do
50
51
  client = ::Test::ResourceService.client
51
52
 
52
53
  client.find(request) do |c|
53
- c.on_success { raise "shouldn't pass"}
54
- c.on_failure {|e| error = e}
54
+ c.on_success { fail "shouldn't pass" }
55
+ c.on_failure { |e| error = e }
55
56
  end
56
- error.message.should =~ /expected request.*ResourceFindRequest.*Resource instead/i
57
+ expect(error.message).to match(/expected request.*ResourceFindRequest.*Resource instead/i)
57
58
  end
58
59
  end
59
-
@@ -1,18 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'spec/support/test/resource_service'
4
3
  require 'protobuf/rpc/service_directory'
4
+ require SUPPORT_PATH.join('resource_service')
5
5
 
6
- describe 'Functional ZMQ Client' do
6
+ RSpec.describe 'Functional ZMQ Client' do
7
7
  before(:all) do
8
8
  load "protobuf/zmq.rb"
9
- @runner = ::Protobuf::Rpc::ZmqRunner.new({ :host => "127.0.0.1",
10
- :port => 9399,
11
- :worker_port => 9408,
12
- :backlog => 100,
13
- :threshold => 100,
14
- :threads => 5 })
15
- @server_thread = Thread.new(@runner) { |runner| runner.run }
9
+ @runner = ::Protobuf::Rpc::ZmqRunner.new(
10
+ 'host' => '127.0.0.1',
11
+ 'port' => 9399,
12
+ 'worker_port' => 9408,
13
+ 'backlog' => 100,
14
+ 'threshold' => 100,
15
+ 'threads' => 5
16
+ )
17
+ @server_thread = Thread.new(@runner, &:run)
16
18
  Thread.pass until @runner.running?
17
19
  end
18
20
 
@@ -22,36 +24,36 @@ describe 'Functional ZMQ Client' do
22
24
  end
23
25
 
24
26
  it 'runs fine when required fields are set' do
25
- expect {
27
+ expect do
26
28
  client = ::Test::ResourceService.client
27
29
 
28
30
  client.find(:name => 'Test Name', :active => true) do |c|
29
31
  c.on_success do |succ|
30
- succ.name.should eq("Test Name")
31
- succ.status.should eq(::Test::StatusType::ENABLED)
32
+ expect(succ.name).to eq("Test Name")
33
+ expect(succ.status).to eq(::Test::StatusType::ENABLED)
32
34
  end
33
35
 
34
36
  c.on_failure do |err|
35
- raise err.inspect
37
+ fail err.inspect
36
38
  end
37
39
  end
38
- }.to_not raise_error
40
+ end.to_not raise_error
39
41
  end
40
42
 
41
43
  it 'runs under heavy load' do
42
- 10.times do |x|
43
- 5.times.map do |y|
44
+ 10.times do
45
+ 5.times.map do
44
46
  Thread.new do
45
47
  client = ::Test::ResourceService.client
46
48
 
47
49
  client.find(:name => 'Test Name', :active => true) do |c|
48
50
  c.on_success do |succ|
49
- succ.name.should eq("Test Name")
50
- succ.status.should eq(::Test::StatusType::ENABLED)
51
+ expect(succ.name).to eq("Test Name")
52
+ expect(succ.status).to eq(::Test::StatusType::ENABLED)
51
53
  end
52
54
 
53
55
  c.on_failure do |err|
54
- raise err.inspect
56
+ fail err.inspect
55
57
  end
56
58
  end
57
59
  end
@@ -66,10 +68,10 @@ describe 'Functional ZMQ Client' do
66
68
  client = ::Test::ResourceService.client
67
69
 
68
70
  client.find(request) do |c|
69
- c.on_success { raise "shouldn't pass" }
70
- c.on_failure {|e| error = e }
71
+ c.on_success { fail "shouldn't pass" }
72
+ c.on_failure { |e| error = e }
71
73
  end
72
- error.message.should match(/name.*required/)
74
+ expect(error.message).to match(/Required field.*does not have a value/)
73
75
  end
74
76
  end
75
77
 
@@ -80,10 +82,10 @@ describe 'Functional ZMQ Client' do
80
82
  client = ::Test::ResourceService.client
81
83
 
82
84
  client.find(request) do |c|
83
- c.on_success { raise "shouldn't pass" }
84
- c.on_failure {|e| error = e}
85
+ c.on_success { fail "shouldn't pass" }
86
+ c.on_failure { |e| error = e }
85
87
  end
86
- error.message.should match(/expected request.*ResourceFindRequest.*Resource instead/i)
88
+ expect(error.message).to match(/expected request.*ResourceFindRequest.*Resource instead/i)
87
89
  end
88
90
  end
89
91
 
@@ -93,10 +95,10 @@ describe 'Functional ZMQ Client' do
93
95
  client = ::Test::ResourceService.client(:timeout => 1)
94
96
 
95
97
  client.find_with_sleep(:sleep => 2) do |c|
96
- c.on_success { raise "shouldn't pass" }
98
+ c.on_success { fail "shouldn't pass" }
97
99
  c.on_failure { |e| error = e }
98
100
  end
99
- error.message.should match(/The server repeatedly failed to respond/)
101
+ expect(error.message).to match(/The server repeatedly failed to respond/)
100
102
  end
101
103
  end
102
104
 
@@ -1,96 +1,102 @@
1
1
  require 'spec_helper'
2
2
  require 'protobuf/cli'
3
3
 
4
- describe ::Protobuf::CLI do
4
+ RSpec.describe ::Protobuf::CLI do
5
5
 
6
6
  let(:app_file) do
7
7
  File.expand_path('../../../support/test_app_file.rb', __FILE__)
8
8
  end
9
9
 
10
- let(:sock_runner) {
10
+ let(:sock_runner) do
11
11
  runner = double("SocketRunner", :register_signals => nil)
12
- runner.stub(:run) { ::ActiveSupport::Notifications.publish( "after_server_bind" ) }
12
+ allow(runner).to receive(:run).and_return(::ActiveSupport::Notifications.publish("after_server_bind"))
13
13
  runner
14
- }
14
+ end
15
15
 
16
- let(:zmq_runner) {
17
- runner = double "ZmqRunner", register_signals: nil
18
- runner.stub(:run) { ::ActiveSupport::Notifications.publish( "after_server_bind" ) }
16
+ let(:zmq_runner) do
17
+ runner = double("ZmqRunner", :register_signals => nil)
18
+ allow(runner).to receive(:run).and_return(::ActiveSupport::Notifications.publish("after_server_bind"))
19
19
  runner
20
- }
20
+ end
21
+
22
+ around(:each) do |example|
23
+ logger = ::Protobuf::Logging.logger
24
+ example.run
25
+ ::Protobuf::Logging.logger = logger
26
+ end
21
27
 
22
28
  before(:each) do
23
- ::Protobuf::Rpc::SocketRunner.stub(:new) { sock_runner }
24
- ::Protobuf::Rpc::ZmqRunner.stub(:new) { zmq_runner }
29
+ allow(::Protobuf::Rpc::SocketRunner).to receive(:new).and_return(sock_runner)
30
+ allow(::Protobuf::Rpc::ZmqRunner).to receive(:new).and_return(zmq_runner)
25
31
  end
26
32
 
27
33
  describe '#start' do
28
- let(:base_args) { [ 'start', app_file ] }
34
+ let(:base_args) { ['start', app_file] }
29
35
  let(:test_args) { [] }
30
36
  let(:args) { base_args + test_args }
31
37
 
32
38
  context 'host option' do
33
- let(:test_args) { [ '--host=123.123.123.123' ] }
39
+ let(:test_args) { ['--host=123.123.123.123'] }
34
40
 
35
41
  it 'sends the host option to the runner' do
36
- ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
37
- options[:host].should eq '123.123.123.123'
42
+ expect(::Protobuf::Rpc::SocketRunner).to receive(:new) do |options|
43
+ expect(options[:host]).to eq '123.123.123.123'
38
44
  end.and_return(sock_runner)
39
45
  described_class.start(args)
40
46
  end
41
47
  end
42
48
 
43
49
  context 'port option' do
44
- let(:test_args) { [ '--port=12345' ] }
50
+ let(:test_args) { ['--port=12345'] }
45
51
 
46
52
  it 'sends the port option to the runner' do
47
- ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
48
- options[:port].should eq 12345
53
+ expect(::Protobuf::Rpc::SocketRunner).to receive(:new) do |options|
54
+ expect(options[:port]).to eq 12345
49
55
  end.and_return(sock_runner)
50
56
  described_class.start(args)
51
57
  end
52
58
  end
53
59
 
54
60
  context 'threads option' do
55
- let(:test_args) { [ '--threads=500' ] }
61
+ let(:test_args) { ['--threads=500'] }
56
62
 
57
63
  it 'sends the threads option to the runner' do
58
- ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
59
- options[:threads].should eq 500
64
+ expect(::Protobuf::Rpc::SocketRunner).to receive(:new) do |options|
65
+ expect(options[:threads]).to eq 500
60
66
  end.and_return(sock_runner)
61
67
  described_class.start(args)
62
68
  end
63
69
  end
64
70
 
65
71
  context 'backlog option' do
66
- let(:test_args) { [ '--backlog=500' ] }
72
+ let(:test_args) { ['--backlog=500'] }
67
73
 
68
74
  it 'sends the backlog option to the runner' do
69
- ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
70
- options[:backlog].should eq 500
75
+ expect(::Protobuf::Rpc::SocketRunner).to receive(:new) do |options|
76
+ expect(options[:backlog]).to eq 500
71
77
  end.and_return(sock_runner)
72
78
  described_class.start(args)
73
79
  end
74
80
  end
75
81
 
76
82
  context 'threshold option' do
77
- let(:test_args) { [ '--threshold=500' ] }
83
+ let(:test_args) { ['--threshold=500'] }
78
84
 
79
85
  it 'sends the backlog option to the runner' do
80
- ::Protobuf::Rpc::SocketRunner.should_receive(:new) do |options|
81
- options[:threshold].should eq 500
86
+ expect(::Protobuf::Rpc::SocketRunner).to receive(:new) do |options|
87
+ expect(options[:threshold]).to eq 500
82
88
  end.and_return(sock_runner)
83
89
  described_class.start(args)
84
90
  end
85
91
  end
86
92
 
87
93
  context 'log options' do
88
- let(:test_args) { [ '--log=mylog.log', '--level=0' ] }
94
+ let(:test_args) { ['--log=mylog.log', '--level=0'] }
89
95
 
90
96
  it 'sends the log file and level options to the runner' do
91
- ::Protobuf::Logger.should_receive(:configure) do |options|
92
- options[:file].should eq 'mylog.log'
93
- options[:level].should eq 0
97
+ expect(::Protobuf::Logging).to receive(:initialize_logger) do |file, level|
98
+ expect(file).to eq 'mylog.log'
99
+ expect(level).to eq 0
94
100
  end
95
101
  described_class.start(args)
96
102
  end
@@ -103,17 +109,17 @@ describe ::Protobuf::CLI do
103
109
 
104
110
  it 'sets both request and serialization pausing to false' do
105
111
  described_class.start(args)
106
- ::Protobuf.should_not be_gc_pause_server_request
112
+ expect(::Protobuf).to_not be_gc_pause_server_request
107
113
  end
108
114
  end
109
115
 
110
116
  unless defined?(JRUBY_VERSION)
111
117
  context 'request pausing' do
112
- let(:test_args) { [ '--gc_pause_request' ] }
118
+ let(:test_args) { ['--gc_pause_request'] }
113
119
 
114
120
  it 'sets the configuration option to GC pause server request' do
115
121
  described_class.start(args)
116
- ::Protobuf.should be_gc_pause_server_request
122
+ expect(::Protobuf).to be_gc_pause_server_request
117
123
  end
118
124
  end
119
125
  end
@@ -128,7 +134,7 @@ describe ::Protobuf::CLI do
128
134
 
129
135
  it 'sets the deprecation warning flag to true' do
130
136
  described_class.start(args)
131
- ::Protobuf.print_deprecation_warnings?.should be_true
137
+ expect(::Protobuf.print_deprecation_warnings?).to be true
132
138
  end
133
139
  end
134
140
 
@@ -138,69 +144,83 @@ describe ::Protobuf::CLI do
138
144
 
139
145
  it 'sets the deprecation warning flag to false ' do
140
146
  described_class.start(args)
141
- ::Protobuf.print_deprecation_warnings?.should be_false
147
+ expect(::Protobuf.print_deprecation_warnings?).to be false
142
148
  end
143
149
  end
144
150
  end
145
151
 
146
152
  context 'when enabled' do
147
- let(:test_args) { [ '--print_deprecation_warnings' ] }
153
+ let(:test_args) { ['--print_deprecation_warnings'] }
148
154
 
149
155
  it 'sets the deprecation warning flag to true' do
150
156
  described_class.start(args)
151
- ::Protobuf.print_deprecation_warnings?.should be_true
157
+ expect(::Protobuf.print_deprecation_warnings?).to be true
152
158
  end
153
159
  end
154
160
 
155
161
  context 'when disabled' do
156
- let(:test_args) { [ '--no-print_deprecation_warnings' ] }
162
+ let(:test_args) { ['--no-print_deprecation_warnings'] }
157
163
 
158
164
  it 'sets the deprecation warning flag to false' do
159
165
  described_class.start(args)
160
- ::Protobuf.print_deprecation_warnings?.should be_false
166
+ expect(::Protobuf.print_deprecation_warnings?).to be false
161
167
  end
162
168
  end
163
169
  end
164
170
 
165
171
  context 'run modes' do
166
172
 
173
+ context "extension" do
174
+ let(:runner) { ::Protobuf::Rpc::Servers::SocketRunner }
175
+
176
+ it "loads the runner specified by PB_SERVER_TYPE" do
177
+ ENV['PB_SERVER_TYPE'] = "protobuf/rpc/servers/socket_runner"
178
+ expect(runner).to receive(:new).and_return(sock_runner)
179
+ described_class.start(args)
180
+ ENV.delete('PB_SERVER_TYPE')
181
+ end
182
+
183
+ context "without extension loaded" do
184
+ it "will throw a LoadError when extension is not loaded" do
185
+ ENV['PB_SERVER_TYPE'] = "socket_to_load"
186
+ expect { described_class.start(args) }.to raise_error(LoadError, /socket_to_load/)
187
+ ENV.delete("PB_SERVER_TYPE")
188
+ end
189
+ end
190
+ end
191
+
167
192
  context 'socket' do
168
- let(:test_args) { [ '--socket' ] }
193
+ let(:test_args) { ['--socket'] }
169
194
  let(:runner) { ::Protobuf::Rpc::SocketRunner }
170
195
 
171
196
  before do
172
- ::Protobuf::Rpc::ZmqRunner.should_not_receive(:new)
197
+ expect(::Protobuf::Rpc::ZmqRunner).not_to receive(:new)
173
198
  end
174
199
 
175
200
  it 'is activated by the --socket switch' do
176
- runner.should_receive(:new)
201
+ expect(runner).to receive(:new)
177
202
  described_class.start(args)
178
203
  end
179
204
 
180
205
  it 'is activated by PB_SERVER_TYPE=Socket ENV variable' do
181
206
  ENV['PB_SERVER_TYPE'] = "Socket"
182
- runner.should_receive(:new).and_return(sock_runner)
207
+ expect(runner).to receive(:new).and_return(sock_runner)
183
208
  described_class.start(args)
184
209
  ENV.delete('PB_SERVER_TYPE')
185
210
  end
186
-
187
- it 'configures the connector type to be socket' do
188
- load "protobuf/socket.rb"
189
- ::Protobuf.connector_type.should == :socket
190
- end
191
211
  end
192
212
 
193
213
  context 'zmq workers only' do
194
- let(:test_args) { [ '--workers_only', '--zmq' ] }
214
+ let(:test_args) { ['--workers_only', '--zmq'] }
195
215
  let(:runner) { ::Protobuf::Rpc::ZmqRunner }
196
216
 
197
217
  before do
198
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:new)
218
+ expect(::Protobuf::Rpc::SocketRunner).not_to receive(:new)
199
219
  end
200
220
 
201
221
  it 'is activated by the --workers_only switch' do
202
- runner.should_receive(:new) do |options|
203
- options[:workers_only].should be_true
222
+ expect(runner).to receive(:new) do |options|
223
+ expect(options[:workers_only]).to be true
204
224
  end.and_return(zmq_runner)
205
225
 
206
226
  described_class.start(args)
@@ -208,8 +228,8 @@ describe ::Protobuf::CLI do
208
228
 
209
229
  it 'is activated by PB_WORKERS_ONLY=1 ENV variable' do
210
230
  ENV['PB_WORKERS_ONLY'] = "1"
211
- runner.should_receive(:new) do |options|
212
- options[:workers_only].should be_true
231
+ expect(runner).to receive(:new) do |options|
232
+ expect(options[:workers_only]).to be true
213
233
  end.and_return(zmq_runner)
214
234
 
215
235
  described_class.start(args)
@@ -218,16 +238,16 @@ describe ::Protobuf::CLI do
218
238
  end
219
239
 
220
240
  context 'zmq worker port' do
221
- let(:test_args) { [ '--worker_port=1234', '--zmq' ] }
241
+ let(:test_args) { ['--worker_port=1234', '--zmq'] }
222
242
  let(:runner) { ::Protobuf::Rpc::ZmqRunner }
223
243
 
224
244
  before do
225
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:new)
245
+ expect(::Protobuf::Rpc::SocketRunner).not_to receive(:new)
226
246
  end
227
247
 
228
248
  it 'is activated by the --worker_port switch' do
229
- runner.should_receive(:new) do |options|
230
- options[:worker_port].should eq(1234)
249
+ expect(runner).to receive(:new) do |options|
250
+ expect(options[:worker_port]).to eq(1234)
231
251
  end.and_return(zmq_runner)
232
252
 
233
253
  described_class.start(args)
@@ -235,29 +255,24 @@ describe ::Protobuf::CLI do
235
255
  end
236
256
 
237
257
  context 'zmq' do
238
- let(:test_args) { [ '--zmq' ] }
258
+ let(:test_args) { ['--zmq'] }
239
259
  let(:runner) { ::Protobuf::Rpc::ZmqRunner }
240
260
 
241
261
  before do
242
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:new)
262
+ expect(::Protobuf::Rpc::SocketRunner).not_to receive(:new)
243
263
  end
244
264
 
245
265
  it 'is activated by the --zmq switch' do
246
- runner.should_receive(:new)
266
+ expect(runner).to receive(:new)
247
267
  described_class.start(args)
248
268
  end
249
269
 
250
270
  it 'is activated by PB_SERVER_TYPE=Zmq ENV variable' do
251
271
  ENV['PB_SERVER_TYPE'] = "Zmq"
252
- runner.should_receive(:new)
272
+ expect(runner).to receive(:new)
253
273
  described_class.start(args)
254
274
  ENV.delete('PB_SERVER_TYPE')
255
275
  end
256
-
257
- it 'configures the connector type to be zmq' do
258
- load "protobuf/zmq.rb"
259
- ::Protobuf.connector_type.should == :zmq
260
- end
261
276
  end
262
277
 
263
278
  end