upfluence-thrift 2.6.1 → 2.7.4

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/benchmark/benchmark_constants.rb +11 -0
  3. data/benchmark/benchmark_service.rb +152 -0
  4. data/benchmark/benchmark_types.rb +10 -0
  5. data/ext/struct.c +5 -1
  6. data/lib/thrift/base_stream.rb +85 -0
  7. data/lib/thrift/bidi_stream.rb +183 -0
  8. data/lib/thrift/client.rb +84 -17
  9. data/lib/thrift/definition.rb +4 -0
  10. data/lib/thrift/inbound_stream.rb +72 -0
  11. data/lib/thrift/middleware.rb +42 -0
  12. data/lib/thrift/outbound_stream.rb +52 -0
  13. data/lib/thrift/processor.rb +287 -47
  14. data/lib/thrift/protocol/base_protocol.rb +35 -33
  15. data/lib/thrift/protocol/binary_protocol.rb +8 -1
  16. data/lib/thrift/protocol/binary_protocol_accelerated.rb +8 -0
  17. data/lib/thrift/protocol/compact_protocol.rb +8 -0
  18. data/lib/thrift/protocol/json_protocol.rb +21 -4
  19. data/lib/thrift/protocol/multiplexed_protocol.rb +5 -1
  20. data/lib/thrift/server/base_server.rb +8 -2
  21. data/lib/thrift/server/nonblocking_server.rb +5 -4
  22. data/lib/thrift/server/simple_server.rb +5 -1
  23. data/lib/thrift/server/thread_pool_server.rb +5 -1
  24. data/lib/thrift/server/threaded_server.rb +5 -1
  25. data/lib/thrift/transport/base_server_transport.rb +1 -1
  26. data/lib/thrift/transport/base_transport.rb +8 -0
  27. data/lib/thrift/transport/buffered_transport.rb +9 -1
  28. data/lib/thrift/transport/framed_transport.rb +9 -1
  29. data/lib/thrift/transport/http_client_transport.rb +4 -0
  30. data/lib/thrift/transport/io_stream_transport.rb +4 -1
  31. data/lib/thrift/transport/memory_buffer_transport.rb +4 -0
  32. data/lib/thrift/transport/server_socket.rb +5 -0
  33. data/lib/thrift/transport/socket.rb +21 -17
  34. data/lib/thrift/transport/ssl_server_socket.rb +41 -0
  35. data/lib/thrift/transport/ssl_socket.rb +51 -0
  36. data/lib/thrift/transport/unix_server_socket.rb +5 -1
  37. data/lib/thrift/transport/unix_socket.rb +5 -1
  38. data/lib/thrift/types/annotation/deprecation/deprecation_constants.rb +1 -1
  39. data/lib/thrift/types/annotation/deprecation/deprecation_types.rb +2 -2
  40. data/lib/thrift/types/annotation/exception/exception_constants.rb +17 -0
  41. data/lib/thrift/types/annotation/exception/exception_types.rb +44 -0
  42. data/lib/thrift/types/annotation/naming/naming_constants.rb +1 -1
  43. data/lib/thrift/types/annotation/naming/naming_types.rb +2 -2
  44. data/lib/thrift/types/annotation/rpc/rpc_constants.rb +17 -0
  45. data/lib/thrift/types/annotation/rpc/rpc_types.rb +74 -0
  46. data/lib/thrift/types/annotation_definition/annotation_definition_constants.rb +15 -0
  47. data/lib/thrift/types/annotation_definition/annotation_definition_types.rb +116 -0
  48. data/lib/thrift/types/constant_definition/constant_definition_constants.rb +15 -0
  49. data/lib/thrift/types/constant_definition/constant_definition_types.rb +292 -0
  50. data/lib/thrift/types/core/core_constants.rb +15 -0
  51. data/lib/thrift/types/core/core_types.rb +58 -0
  52. data/lib/thrift/types/enum_definition/enum_definition_constants.rb +15 -0
  53. data/lib/thrift/types/enum_definition/enum_definition_types.rb +106 -0
  54. data/lib/thrift/types/known/any/any_constants.rb +1 -1
  55. data/lib/thrift/types/known/any/any_types.rb +2 -2
  56. data/lib/thrift/types/known/duration/duration_constants.rb +1 -1
  57. data/lib/thrift/types/known/duration/duration_types.rb +2 -2
  58. data/lib/thrift/types/known/timestamp/timestamp_constants.rb +1 -1
  59. data/lib/thrift/types/known/timestamp/timestamp_types.rb +2 -2
  60. data/lib/thrift/types/plugin/plugin.rb +139 -0
  61. data/lib/thrift/types/plugin/plugin_constants.rb +15 -0
  62. data/lib/thrift/types/plugin/plugin_types.rb +106 -0
  63. data/lib/thrift/types/program_definition/program_definition_constants.rb +15 -0
  64. data/lib/thrift/types/program_definition/program_definition_types.rb +137 -0
  65. data/lib/thrift/types/service_definition/service_definition_constants.rb +15 -0
  66. data/lib/thrift/types/service_definition/service_definition_types.rb +160 -0
  67. data/lib/thrift/types/struct_definition/struct_definition_constants.rb +15 -0
  68. data/lib/thrift/types/struct_definition/struct_definition_types.rb +157 -0
  69. data/lib/thrift/types/type_definition/type_definition_constants.rb +15 -0
  70. data/lib/thrift/types/type_definition/type_definition_types.rb +242 -0
  71. data/lib/thrift/types/value/value_constants.rb +1 -1
  72. data/lib/thrift/types/value/value_types.rb +50 -51
  73. data/lib/thrift/types.rb +11 -3
  74. data/lib/thrift/union.rb +3 -6
  75. data/lib/thrift.rb +6 -0
  76. data/lib/types/annotation/deprecation/deprecation_constants.rb +16 -0
  77. data/lib/types/annotation/deprecation/deprecation_types.rb +42 -0
  78. data/lib/types/annotation/naming/naming_constants.rb +16 -0
  79. data/lib/types/annotation/naming/naming_types.rb +57 -0
  80. data/lib/types/annotation_definition/annotation_definition_constants.rb +14 -0
  81. data/lib/types/annotation_definition/annotation_definition_types.rb +114 -0
  82. data/lib/types/constant_definition/constant_definition_constants.rb +14 -0
  83. data/lib/types/constant_definition/constant_definition_types.rb +290 -0
  84. data/lib/types/core/core_constants.rb +14 -0
  85. data/lib/types/core/core_types.rb +56 -0
  86. data/lib/types/enum_definition/enum_definition_constants.rb +14 -0
  87. data/lib/types/enum_definition/enum_definition_types.rb +104 -0
  88. data/lib/types/known/any/any_constants.rb +16 -0
  89. data/lib/types/known/any/any_types.rb +59 -0
  90. data/lib/types/known/duration/duration_constants.rb +16 -0
  91. data/lib/types/known/duration/duration_types.rb +59 -0
  92. data/lib/types/known/timestamp/timestamp_constants.rb +16 -0
  93. data/lib/types/known/timestamp/timestamp_types.rb +59 -0
  94. data/lib/types/plugin/plugin.rb +137 -0
  95. data/lib/types/plugin/plugin_constants.rb +14 -0
  96. data/lib/types/plugin/plugin_types.rb +104 -0
  97. data/lib/types/program_definition/program_definition_constants.rb +14 -0
  98. data/lib/types/program_definition/program_definition_types.rb +135 -0
  99. data/lib/types/service_definition/service_definition_constants.rb +14 -0
  100. data/lib/types/service_definition/service_definition_types.rb +158 -0
  101. data/lib/types/struct_definition/struct_definition_constants.rb +14 -0
  102. data/lib/types/struct_definition/struct_definition_types.rb +155 -0
  103. data/lib/types/type_definition/type_definition_constants.rb +14 -0
  104. data/lib/types/type_definition/type_definition_types.rb +240 -0
  105. data/lib/types/value/value_constants.rb +14 -0
  106. data/lib/types/value/value_types.rb +330 -0
  107. data/spec/base/base_service.rb +152 -0
  108. data/spec/base/base_service_constants.rb +11 -0
  109. data/spec/base/base_service_types.rb +45 -0
  110. data/spec/base_protocol_spec.rb +79 -71
  111. data/spec/base_transport_spec.rb +155 -117
  112. data/spec/binary_protocol_accelerated_spec.rb +6 -2
  113. data/spec/binary_protocol_spec.rb +16 -8
  114. data/spec/binary_protocol_spec_shared.rb +77 -77
  115. data/spec/bytes_spec.rb +38 -38
  116. data/spec/client_spec.rb +48 -50
  117. data/spec/compact_protocol_spec.rb +59 -46
  118. data/spec/exception_spec.rb +54 -54
  119. data/spec/extended/extended_service.rb +137 -0
  120. data/spec/extended/extended_service_constants.rb +11 -0
  121. data/spec/extended/extended_service_types.rb +12 -0
  122. data/spec/flat_spec.rb +5 -5
  123. data/spec/gen-rb/flat/namespaced_nonblocking_service.rb +507 -0
  124. data/spec/gen-rb/flat/referenced_constants.rb +11 -0
  125. data/spec/gen-rb/flat/referenced_types.rb +17 -0
  126. data/spec/gen-rb/flat/thrift_namespaced_spec_constants.rb +11 -0
  127. data/spec/gen-rb/flat/thrift_namespaced_spec_types.rb +47 -0
  128. data/spec/http_client_spec.rb +96 -43
  129. data/spec/json_protocol_spec.rb +170 -131
  130. data/spec/namespaced_spec.rb +24 -27
  131. data/spec/namespaced_spec_namespace/namespaced_nonblocking_service.rb +507 -0
  132. data/spec/namespaced_spec_namespace/thrift_namespaced_spec_constants.rb +11 -0
  133. data/spec/namespaced_spec_namespace/thrift_namespaced_spec_types.rb +47 -0
  134. data/spec/nonblocking_server_spec.rb +16 -16
  135. data/spec/nonblocking_service.rb +507 -0
  136. data/spec/other_namespace/referenced_constants.rb +11 -0
  137. data/spec/other_namespace/referenced_types.rb +17 -0
  138. data/spec/processor_spec.rb +42 -31
  139. data/spec/rack_application_spec.rb +22 -26
  140. data/spec/serializer_spec.rb +20 -20
  141. data/spec/server_socket_spec.rb +27 -22
  142. data/spec/server_spec.rb +91 -51
  143. data/spec/socket_spec.rb +23 -16
  144. data/spec/socket_spec_shared.rb +31 -31
  145. data/spec/spec_helper.rb +17 -17
  146. data/spec/ssl_server_socket_spec.rb +34 -0
  147. data/spec/ssl_socket_spec.rb +78 -0
  148. data/spec/streaming_spec.rb +442 -0
  149. data/spec/struct_nested_containers_spec.rb +24 -24
  150. data/spec/struct_spec.rb +120 -120
  151. data/spec/thin_http_server_spec.rb +71 -28
  152. data/spec/thrift_spec_constants.rb +11 -0
  153. data/spec/thrift_spec_types.rb +1173 -0
  154. data/spec/types/known/any_spec.rb +2 -2
  155. data/spec/types/known/duration_spec.rb +1 -1
  156. data/spec/types/known/timestamp_spec.rb +1 -1
  157. data/spec/types/value_spec.rb +2 -1
  158. data/spec/types_spec.rb +56 -53
  159. data/spec/union_spec.rb +51 -40
  160. data/spec/unix_socket_spec.rb +43 -34
  161. data/test/debug_proto/gen-rb/debug_proto_test_constants.rb +281 -0
  162. data/test/debug_proto/gen-rb/debug_proto_test_types.rb +2033 -0
  163. data/test/debug_proto/gen-rb/empty_service.rb +52 -0
  164. data/test/debug_proto/gen-rb/inherited.rb +155 -0
  165. data/test/debug_proto/gen-rb/reverse_order_service.rb +169 -0
  166. data/test/debug_proto/gen-rb/service_for_exception_with_a_map.rb +150 -0
  167. data/test/debug_proto/gen-rb/srv.rb +718 -0
  168. metadata +202 -7
@@ -20,59 +20,70 @@
20
20
  require 'spec_helper'
21
21
 
22
22
  describe 'Processor' do
23
-
24
23
  class ProcessorSpec
25
24
  include Thrift::Processor
26
25
  end
27
26
 
28
27
  describe Thrift::Processor do
29
28
  before(:each) do
30
- @processor = ProcessorSpec.new(mock("MockHandler"))
31
- @prot = mock("MockProtocol")
29
+ @processor = ProcessorSpec.new(double('MockHandler'))
30
+ @prot = double('MockProtocol')
32
31
  end
33
32
 
34
33
  def mock_trans(obj)
35
- obj.should_receive(:trans).ordered.and_return do
36
- mock("trans").tap do |trans|
37
- trans.should_receive(:flush).ordered
34
+ expect(obj).to receive(:trans).ordered do
35
+ double('trans').tap do |trans|
36
+ expect(trans).to receive(:flush).ordered
38
37
  end
39
38
  end
40
39
  end
41
40
 
42
- it "should call process_<message> when it receives that message" do
43
- @prot.should_receive(:read_message_begin).ordered.and_return ['testMessage', Thrift::MessageTypes::CALL, 17]
44
- @processor.should_receive(:process_testMessage).with(17, @prot, @prot).ordered
45
- @processor.process(@prot, @prot).should == true
41
+ it 'should call process_<message> when it receives that message' do
42
+ expect(@prot).to receive(:read_message_begin).ordered.and_return ['testMessage', Thrift::MessageTypes::CALL, 17]
43
+ expect(@processor).to receive(:process_testMessage).with(17, @prot, @prot).ordered
44
+ expect(@processor.process(@prot, @prot)).to eq(true)
46
45
  end
47
46
 
48
- xit "should raise an ApplicationException when the received message cannot be processed" do
49
- @prot.should_receive(:read_message_begin).ordered.and_return ['testMessage', Thrift::MessageTypes::CALL, 4]
50
- @prot.should_receive(:skip).with(Thrift::Types::STRUCT).ordered
51
- @prot.should_receive(:read_message_end).ordered
52
- @prot.should_receive(:write_message_begin).with('testMessage', Thrift::MessageTypes::EXCEPTION, 4).ordered
53
- e = mock(Thrift::ApplicationException)
54
- e.should_receive(:write).with(@prot).ordered
55
- Thrift::ApplicationException.should_receive(:new).with(Thrift::ApplicationException::UNKNOWN_METHOD, "Unknown function testMessage").and_return(e)
56
- @prot.should_receive(:write_message_end).ordered
47
+ it 'should raise an ApplicationException when the received message cannot be processed' do
48
+ expect(@prot).to receive(:read_message_begin).ordered.and_return ['testMessage', Thrift::MessageTypes::CALL, 4]
49
+ expect(@prot).to receive(:skip).with(Thrift::Types::STRUCT).ordered
50
+ expect(@prot).to receive(:read_message_end).ordered
51
+ expect(@prot).to receive(:write_message_begin).with('testMessage', Thrift::MessageTypes::EXCEPTION, 4).ordered
52
+ e = Thrift::ApplicationException.new(
53
+ Thrift::ApplicationException::UNKNOWN_METHOD,
54
+ 'Unknown function testMessage'
55
+ )
56
+ expect(Thrift::ApplicationException).to receive(:new).with(Thrift::ApplicationException::UNKNOWN_METHOD,
57
+ 'Unknown function testMessage').and_return(e)
58
+ expect(@prot).to receive(:write_struct_begin).with('Thrift::ApplicationException').ordered
59
+ expect(@prot).to receive(:write_field_begin).with('message', Thrift::Types::STRING, 1).ordered
60
+ expect(@prot).to receive(:write_string).with('Unknown function testMessage').ordered
61
+ expect(@prot).to receive(:write_field_end).ordered
62
+ expect(@prot).to receive(:write_field_begin).with('type', Thrift::Types::I32, 2).ordered
63
+ expect(@prot).to receive(:write_i32).with(Thrift::ApplicationException::UNKNOWN_METHOD).ordered
64
+ expect(@prot).to receive(:write_field_end).ordered
65
+ expect(@prot).to receive(:write_field_stop).ordered
66
+ expect(@prot).to receive(:write_struct_end).ordered
67
+ expect(@prot).to receive(:write_message_end).ordered
57
68
  mock_trans(@prot)
58
69
  @processor.process(@prot, @prot)
59
70
  end
60
71
 
61
- it "should pass args off to the args class" do
62
- args_class = mock("MockArgsClass")
63
- args = mock("#<MockArgsClass:mock>").tap do |args|
64
- args.should_receive(:read).with(@prot).ordered
72
+ it 'should pass args off to the args class' do
73
+ args_class = double('MockArgsClass')
74
+ args = double('#<MockArgsClass:mock>').tap do |args|
75
+ expect(args).to receive(:read).with(@prot).ordered
65
76
  end
66
- args_class.should_receive(:new).and_return args
67
- @prot.should_receive(:read_message_end).ordered
68
- @processor.read_args(@prot, args_class).should eql(args)
77
+ expect(args_class).to receive(:new).and_return args
78
+ expect(@prot).to receive(:read_message_end).ordered
79
+ expect(@processor.read_args(@prot, args_class)).to eql(args)
69
80
  end
70
81
 
71
- it "should write out a reply when asked" do
72
- @prot.should_receive(:write_message_begin).with('testMessage', Thrift::MessageTypes::REPLY, 23).ordered
73
- result = mock("MockResult")
74
- result.should_receive(:write).with(@prot).ordered
75
- @prot.should_receive(:write_message_end).ordered
82
+ it 'should write out a reply when asked' do
83
+ expect(@prot).to receive(:write_message_begin).with('testMessage', Thrift::MessageTypes::REPLY, 23).ordered
84
+ result = double('MockResult')
85
+ expect(result).to receive(:write).with(@prot).ordered
86
+ expect(@prot).to receive(:write_message_end).ordered
76
87
  mock_trans(@prot)
77
88
  @processor.write_result(result, @prot, 'testMessage', 23)
78
89
  end
@@ -25,53 +25,49 @@ require 'thrift/server/rack_application'
25
25
  describe Thrift::RackApplication do
26
26
  include Rack::Test::Methods
27
27
 
28
- let(:processor) { mock('processor') }
29
- let(:protocol_factory) { mock('protocol factory') }
28
+ let(:processor) { double('processor') }
29
+ let(:protocol_factory) { double('protocol factory') }
30
30
 
31
31
  def app
32
- Thrift::RackApplication.for("/", processor, protocol_factory)
32
+ Thrift::RackApplication.for('/', processor, protocol_factory)
33
33
  end
34
34
 
35
- context "404 response" do
36
-
35
+ context '404 response' do
37
36
  it 'receives a non-POST' do
38
- header('Content-Type', "application/x-thrift")
39
- get "/"
40
- last_response.status.should be 404
37
+ header('Content-Type', 'application/x-thrift')
38
+ get '/'
39
+ expect(last_response.status).to be 404
41
40
  end
42
41
 
43
42
  it 'receives a header other than application/x-thrift' do
44
- header('Content-Type', "application/json")
45
- post "/"
46
- last_response.status.should be 404
43
+ header('Content-Type', 'application/json')
44
+ post '/'
45
+ expect(last_response.status).to be 404
47
46
  end
48
-
49
47
  end
50
48
 
51
- context "200 response" do
52
-
49
+ context '200 response' do
53
50
  before do
54
- protocol_factory.stub(:get_protocol)
55
- processor.stub(:process)
51
+ allow(protocol_factory).to receive(:get_protocol)
52
+ allow(processor).to receive(:process)
56
53
  end
57
54
 
58
55
  it 'creates an IOStreamTransport' do
59
- header('Content-Type', "application/x-thrift")
60
- Thrift::IOStreamTransport.should_receive(:new).with(an_instance_of(StringIO), an_instance_of(Rack::Response))
61
- post "/"
56
+ header('Content-Type', 'application/x-thrift')
57
+ expect(Thrift::IOStreamTransport).to receive(:new).with(an_instance_of(StringIO), an_instance_of(Rack::Response))
58
+ post '/'
62
59
  end
63
60
 
64
61
  it 'fetches the right protocol based on the Transport' do
65
- header('Content-Type', "application/x-thrift")
66
- protocol_factory.should_receive(:get_protocol).with(an_instance_of(Thrift::IOStreamTransport))
67
- post "/"
62
+ header('Content-Type', 'application/x-thrift')
63
+ expect(protocol_factory).to receive(:get_protocol).with(an_instance_of(Thrift::IOStreamTransport))
64
+ post '/'
68
65
  end
69
66
 
70
67
  it 'status code 200' do
71
- header('Content-Type', "application/x-thrift")
72
- post "/"
73
- last_response.ok?.should be_true
68
+ header('Content-Type', 'application/x-thrift')
69
+ post '/'
70
+ expect(last_response.ok?).to be_truthy
74
71
  end
75
-
76
72
  end
77
73
  end
@@ -25,19 +25,19 @@ describe 'Serializer' do
25
25
  it "should serialize structs to binary by default" do
26
26
  serializer = Thrift::Serializer.new(Thrift::BinaryProtocolAcceleratedFactory.new)
27
27
  data = serializer.serialize(SpecNamespace::Hello.new(:greeting => "'Ello guv'nor!"))
28
- data.should == "\x0B\x00\x01\x00\x00\x00\x0E'Ello guv'nor!\x00"
28
+ expect(data).to eq("\x0B\x00\x01\x00\x00\x00\x0E'Ello guv'nor!\x00")
29
29
  end
30
30
 
31
31
  it "should serialize structs to the given protocol" do
32
- protocol = Thrift::BaseProtocol.new(mock("transport"))
33
- protocol.should_receive(:write_struct_begin).with("SpecNamespace::Hello")
34
- protocol.should_receive(:write_field_begin).with("greeting", Thrift::Types::STRING, 1)
35
- protocol.should_receive(:write_string).with("Good day")
36
- protocol.should_receive(:write_field_end)
37
- protocol.should_receive(:write_field_stop)
38
- protocol.should_receive(:write_struct_end)
39
- protocol_factory = mock("ProtocolFactory")
40
- protocol_factory.stub!(:get_protocol).and_return(protocol)
32
+ protocol = Thrift::BaseProtocol.new(double("transport"))
33
+ expect(protocol).to receive(:write_struct_begin).with("SpecNamespace::Hello")
34
+ expect(protocol).to receive(:write_field_begin).with("greeting", Thrift::Types::STRING, 1)
35
+ expect(protocol).to receive(:write_string).with("Good day")
36
+ expect(protocol).to receive(:write_field_end)
37
+ expect(protocol).to receive(:write_field_stop)
38
+ expect(protocol).to receive(:write_struct_end)
39
+ protocol_factory = double("ProtocolFactory")
40
+ allow(protocol_factory).to receive(:get_protocol).and_return(protocol)
41
41
  serializer = Thrift::Serializer.new(protocol_factory)
42
42
  serializer.serialize(SpecNamespace::Hello.new(:greeting => "Good day"))
43
43
  end
@@ -47,21 +47,21 @@ describe 'Serializer' do
47
47
  it "should deserialize structs from binary by default" do
48
48
  deserializer = Thrift::Deserializer.new
49
49
  data = "\x0B\x00\x01\x00\x00\x00\x0E'Ello guv'nor!\x00"
50
- deserializer.deserialize(SpecNamespace::Hello.new, data).should == SpecNamespace::Hello.new(:greeting => "'Ello guv'nor!")
50
+ expect(deserializer.deserialize(SpecNamespace::Hello.new, data)).to eq(SpecNamespace::Hello.new(:greeting => "'Ello guv'nor!"))
51
51
  end
52
52
 
53
53
  it "should deserialize structs from the given protocol" do
54
- protocol = Thrift::BaseProtocol.new(mock("transport"))
55
- protocol.should_receive(:read_struct_begin).and_return("SpecNamespace::Hello")
56
- protocol.should_receive(:read_field_begin).and_return(["greeting", Thrift::Types::STRING, 1],
54
+ protocol = Thrift::BaseProtocol.new(double("transport"))
55
+ expect(protocol).to receive(:read_struct_begin).and_return("SpecNamespace::Hello")
56
+ expect(protocol).to receive(:read_field_begin).and_return(["greeting", Thrift::Types::STRING, 1],
57
57
  [nil, Thrift::Types::STOP, 0])
58
- protocol.should_receive(:read_string).and_return("Good day")
59
- protocol.should_receive(:read_field_end)
60
- protocol.should_receive(:read_struct_end)
61
- protocol_factory = mock("ProtocolFactory")
62
- protocol_factory.stub!(:get_protocol).and_return(protocol)
58
+ expect(protocol).to receive(:read_string).and_return("Good day")
59
+ expect(protocol).to receive(:read_field_end)
60
+ expect(protocol).to receive(:read_struct_end)
61
+ protocol_factory = double("ProtocolFactory")
62
+ allow(protocol_factory).to receive(:get_protocol).and_return(protocol)
63
63
  deserializer = Thrift::Deserializer.new(protocol_factory)
64
- deserializer.deserialize(SpecNamespace::Hello.new, "").should == SpecNamespace::Hello.new(:greeting => "Good day")
64
+ expect(deserializer.deserialize(SpecNamespace::Hello.new, "")).to eq(SpecNamespace::Hello.new(:greeting => "Good day"))
65
65
  end
66
66
  end
67
67
  end
@@ -28,52 +28,57 @@ describe 'Thrift::ServerSocket' do
28
28
  end
29
29
 
30
30
  it "should create a handle when calling listen" do
31
- TCPServer.should_receive(:new).with(nil, 1234)
31
+ expect(TCPServer).to receive(:new).with(nil, 1234)
32
32
  @socket.listen
33
33
  end
34
34
 
35
35
  it "should accept an optional host argument" do
36
36
  @socket = Thrift::ServerSocket.new('localhost', 1234)
37
- TCPServer.should_receive(:new).with('localhost', 1234)
37
+ expect(TCPServer).to receive(:new).with('localhost', 1234)
38
+ @socket.to_s == "server(localhost:1234)"
38
39
  @socket.listen
39
40
  end
40
41
 
41
42
  it "should create a Thrift::Socket to wrap accepted sockets" do
42
- handle = mock("TCPServer")
43
- TCPServer.should_receive(:new).with(nil, 1234).and_return(handle)
43
+ handle = double("TCPServer")
44
+ expect(TCPServer).to receive(:new).with(nil, 1234).and_return(handle)
44
45
  @socket.listen
45
- sock = mock("sock")
46
- handle.should_receive(:accept).and_return(sock)
47
- trans = mock("Socket")
48
- Thrift::Socket.should_receive(:new).and_return(trans)
49
- trans.should_receive(:handle=).with(sock)
50
- @socket.accept.should == trans
46
+ sock = double("sock")
47
+ expect(handle).to receive(:accept).and_return(sock)
48
+ trans = double("Socket")
49
+ expect(Thrift::Socket).to receive(:new).and_return(trans)
50
+ expect(trans).to receive(:handle=).with(sock)
51
+ expect(@socket.accept).to eq(trans)
51
52
  end
52
53
 
53
54
  it "should close the handle when closed" do
54
- handle = mock("TCPServer", :closed? => false)
55
- TCPServer.should_receive(:new).with(nil, 1234).and_return(handle)
55
+ handle = double("TCPServer", :closed? => false)
56
+ expect(TCPServer).to receive(:new).with(nil, 1234).and_return(handle)
56
57
  @socket.listen
57
- handle.should_receive(:close)
58
+ expect(handle).to receive(:close)
58
59
  @socket.close
59
60
  end
60
61
 
61
62
  it "should return nil when accepting if there is no handle" do
62
- @socket.accept.should be_nil
63
+ expect(@socket.accept).to be_nil
63
64
  end
64
65
 
65
66
  it "should return true for closed? when appropriate" do
66
- handle = mock("TCPServer", :closed? => false)
67
- TCPServer.stub!(:new).and_return(handle)
67
+ handle = double("TCPServer", :closed? => false)
68
+ allow(TCPServer).to receive(:new).and_return(handle)
68
69
  @socket.listen
69
- @socket.should_not be_closed
70
- handle.stub!(:close)
70
+ expect(@socket).not_to be_closed
71
+ allow(handle).to receive(:close)
71
72
  @socket.close
72
- @socket.should be_closed
73
+ expect(@socket).to be_closed
73
74
  @socket.listen
74
- @socket.should_not be_closed
75
- handle.stub!(:closed?).and_return(true)
76
- @socket.should be_closed
75
+ expect(@socket).not_to be_closed
76
+ allow(handle).to receive(:closed?).and_return(true)
77
+ expect(@socket).to be_closed
78
+ end
79
+
80
+ it "should provide a reasonable to_s" do
81
+ expect(@socket.to_s).to eq("socket(:1234)")
77
82
  end
78
83
  end
79
84
  end
data/spec/server_spec.rb CHANGED
@@ -21,95 +21,135 @@ require 'spec_helper'
21
21
  describe 'Server' do
22
22
 
23
23
  describe Thrift::BaseServer do
24
+ before(:each) do
25
+ @processor = double("Processor")
26
+ @serverTrans = double("ServerTransport")
27
+ @trans = double("BaseTransport")
28
+ @prot = double("BaseProtocol")
29
+ @server = described_class.new(@processor, @serverTrans, @trans, @prot)
30
+ end
31
+
24
32
  it "should default to BaseTransportFactory and BinaryProtocolFactory when not specified" do
25
- server = Thrift::BaseServer.new(mock("Processor"), mock("BaseServerTransport"))
26
- server.instance_variable_get(:'@transport_factory').should be_an_instance_of(Thrift::BaseTransportFactory)
27
- server.instance_variable_get(:'@protocol_factory').should be_an_instance_of(Thrift::BinaryProtocolFactory)
33
+ @server = Thrift::BaseServer.new(double("Processor"), double("BaseServerTransport"))
34
+ expect(@server.instance_variable_get(:'@transport_factory')).to be_an_instance_of(Thrift::BaseTransportFactory)
35
+ expect(@server.instance_variable_get(:'@protocol_factory')).to be_an_instance_of(Thrift::BinaryProtocolFactory)
28
36
  end
29
37
 
30
- # serve is a noop, so can't test that
38
+ it "should not serve" do
39
+ expect { @server.serve()}.to raise_error(NotImplementedError)
40
+ end
41
+
42
+ it "should provide a reasonable to_s" do
43
+ expect(@serverTrans).to receive(:to_s).once.and_return("serverTrans")
44
+ expect(@trans).to receive(:to_s).once.and_return("trans")
45
+ expect(@prot).to receive(:to_s).once.and_return("prot")
46
+ expect(@server.to_s).to eq("server(prot(trans(serverTrans)))")
47
+ end
31
48
  end
32
49
 
33
50
  describe Thrift::SimpleServer do
34
51
  before(:each) do
35
- @processor = mock("Processor")
36
- @serverTrans = mock("ServerTransport")
37
- @trans = mock("BaseTransport")
38
- @prot = mock("BaseProtocol")
39
- @client = mock("Client")
52
+ @processor = double("Processor")
53
+ @serverTrans = double("ServerTransport")
54
+ @trans = double("BaseTransport")
55
+ @prot = double("BaseProtocol")
56
+ @client = double("Client")
40
57
  @server = described_class.new(@processor, @serverTrans, @trans, @prot)
41
58
  end
42
59
 
60
+ it "should provide a reasonable to_s" do
61
+ expect(@serverTrans).to receive(:to_s).once.and_return("serverTrans")
62
+ expect(@trans).to receive(:to_s).once.and_return("trans")
63
+ expect(@prot).to receive(:to_s).once.and_return("prot")
64
+ expect(@server.to_s).to eq("simple(server(prot(trans(serverTrans))))")
65
+ end
66
+
43
67
  it "should serve in the main thread" do
44
- @serverTrans.should_receive(:listen).ordered
45
- @serverTrans.should_receive(:accept).exactly(3).times.and_return(@client)
46
- @trans.should_receive(:get_transport).exactly(3).times.with(@client).and_return(@trans)
47
- @prot.should_receive(:get_protocol).exactly(3).times.with(@trans).and_return(@prot)
68
+ expect(@serverTrans).to receive(:listen).ordered
69
+ expect(@serverTrans).to receive(:accept).exactly(3).times.and_return(@client)
70
+ expect(@trans).to receive(:get_transport).exactly(3).times.with(@client).and_return(@trans)
71
+ expect(@prot).to receive(:get_protocol).exactly(3).times.with(@trans).and_return(@prot)
48
72
  x = 0
49
- @processor.should_receive(:process).exactly(3).times.with(@prot, @prot).and_return do
73
+ expect(@processor).to receive(:process).exactly(3).times.with(@prot, @prot) do
50
74
  case (x += 1)
51
75
  when 1 then raise Thrift::TransportException
52
76
  when 2 then raise Thrift::ProtocolException
53
77
  when 3 then throw :stop
54
78
  end
55
79
  end
56
- @trans.should_receive(:close).exactly(3).times
57
- @serverTrans.should_receive(:close).ordered
58
- lambda { @server.serve }.should throw_symbol(:stop)
80
+ expect(@trans).to receive(:close).exactly(3).times
81
+ expect(@serverTrans).to receive(:close).ordered
82
+ expect { @server.serve }.to throw_symbol(:stop)
59
83
  end
60
84
  end
61
85
 
62
86
  describe Thrift::ThreadedServer do
63
87
  before(:each) do
64
- @processor = mock("Processor")
65
- @serverTrans = mock("ServerTransport")
66
- @trans = mock("BaseTransport")
67
- @prot = mock("BaseProtocol")
68
- @client = mock("Client")
88
+ @processor = double("Processor")
89
+ @serverTrans = double("ServerTransport")
90
+ @trans = double("BaseTransport")
91
+ @prot = double("BaseProtocol")
92
+ @client = double("Client")
69
93
  @server = described_class.new(@processor, @serverTrans, @trans, @prot)
70
94
  end
71
95
 
96
+ it "should provide a reasonable to_s" do
97
+ expect(@serverTrans).to receive(:to_s).once.and_return("serverTrans")
98
+ expect(@trans).to receive(:to_s).once.and_return("trans")
99
+ expect(@prot).to receive(:to_s).once.and_return("prot")
100
+ expect(@server.to_s).to eq("threaded(server(prot(trans(serverTrans))))")
101
+ end
102
+
72
103
  it "should serve using threads" do
73
- @serverTrans.should_receive(:listen).ordered
74
- @serverTrans.should_receive(:accept).exactly(3).times.and_return(@client)
75
- @trans.should_receive(:get_transport).exactly(3).times.with(@client).and_return(@trans)
76
- @prot.should_receive(:get_protocol).exactly(3).times.with(@trans).and_return(@prot)
77
- Thread.should_receive(:new).with(@prot, @trans).exactly(3).times.and_yield(@prot, @trans)
104
+ expect(@serverTrans).to receive(:listen).ordered
105
+ expect(@serverTrans).to receive(:accept).exactly(3).times.and_return(@client)
106
+ expect(@trans).to receive(:get_transport).exactly(3).times.with(@client).and_return(@trans)
107
+ expect(@prot).to receive(:get_protocol).exactly(3).times.with(@trans).and_return(@prot)
108
+ expect(Thread).to receive(:new).with(@prot, @trans).exactly(3).times.and_yield(@prot, @trans)
78
109
  x = 0
79
- @processor.should_receive(:process).exactly(3).times.with(@prot, @prot).and_return do
110
+ expect(@processor).to receive(:process).exactly(3).times.with(@prot, @prot) do
80
111
  case (x += 1)
81
112
  when 1 then raise Thrift::TransportException
82
113
  when 2 then raise Thrift::ProtocolException
83
114
  when 3 then throw :stop
84
115
  end
85
116
  end
86
- @trans.should_receive(:close).exactly(3).times
87
- @serverTrans.should_receive(:close).ordered
88
- lambda { @server.serve }.should throw_symbol(:stop)
117
+ expect(@trans).to receive(:close).exactly(3).times
118
+ expect(@serverTrans).to receive(:close).ordered
119
+ expect { @server.serve }.to throw_symbol(:stop)
89
120
  end
90
121
  end
91
122
 
92
123
  describe Thrift::ThreadPoolServer do
93
124
  before(:each) do
94
- @processor = mock("Processor")
95
- @server_trans = mock("ServerTransport")
96
- @trans = mock("BaseTransport")
97
- @prot = mock("BaseProtocol")
98
- @client = mock("Client")
125
+ @processor = double("Processor")
126
+ @server_trans = double("ServerTransport")
127
+ @trans = double("BaseTransport")
128
+ @prot = double("BaseProtocol")
129
+ @client = double("Client")
99
130
  @server = described_class.new(@processor, @server_trans, @trans, @prot)
131
+ sleep(0.15)
100
132
  end
101
133
 
134
+ it "should provide a reasonable to_s" do
135
+ expect(@server_trans).to receive(:to_s).once.and_return("server_trans")
136
+ expect(@trans).to receive(:to_s).once.and_return("trans")
137
+ expect(@prot).to receive(:to_s).once.and_return("prot")
138
+ expect(@server.to_s).to eq("threadpool(server(prot(trans(server_trans))))")
139
+ end
140
+
102
141
  it "should serve inside a thread" do
103
142
  exception_q = @server.instance_variable_get(:@exception_q)
104
- described_class.any_instance.should_receive(:serve) do
143
+ expect_any_instance_of(described_class).to receive(:serve) do
105
144
  exception_q.push(StandardError.new('ERROR'))
106
145
  end
107
146
  expect { @server.rescuable_serve }.to(raise_error('ERROR'))
147
+ sleep(0.15)
108
148
  end
109
149
 
110
150
  it "should avoid running the server twice when retrying rescuable_serve" do
111
151
  exception_q = @server.instance_variable_get(:@exception_q)
112
- described_class.any_instance.should_receive(:serve) do
152
+ expect_any_instance_of(described_class).to receive(:serve) do
113
153
  exception_q.push(StandardError.new('ERROR1'))
114
154
  exception_q.push(StandardError.new('ERROR2'))
115
155
  end
@@ -118,29 +158,29 @@ describe 'Server' do
118
158
  end
119
159
 
120
160
  it "should serve using a thread pool" do
121
- thread_q = mock("SizedQueue")
122
- exception_q = mock("Queue")
161
+ thread_q = double("SizedQueue")
162
+ exception_q = double("Queue")
123
163
  @server.instance_variable_set(:@thread_q, thread_q)
124
164
  @server.instance_variable_set(:@exception_q, exception_q)
125
- @server_trans.should_receive(:listen).ordered
126
- thread_q.should_receive(:push).with(:token)
127
- thread_q.should_receive(:pop)
128
- Thread.should_receive(:new).and_yield
129
- @server_trans.should_receive(:accept).exactly(3).times.and_return(@client)
130
- @trans.should_receive(:get_transport).exactly(3).times.and_return(@trans)
131
- @prot.should_receive(:get_protocol).exactly(3).times.and_return(@prot)
165
+ expect(@server_trans).to receive(:listen).ordered
166
+ expect(thread_q).to receive(:push).with(:token)
167
+ expect(thread_q).to receive(:pop)
168
+ expect(Thread).to receive(:new).and_yield
169
+ expect(@server_trans).to receive(:accept).exactly(3).times.and_return(@client)
170
+ expect(@trans).to receive(:get_transport).exactly(3).times.and_return(@trans)
171
+ expect(@prot).to receive(:get_protocol).exactly(3).times.and_return(@prot)
132
172
  x = 0
133
173
  error = RuntimeError.new("Stopped")
134
- @processor.should_receive(:process).exactly(3).times.with(@prot, @prot).and_return do
174
+ expect(@processor).to receive(:process).exactly(3).times.with(@prot, @prot) do
135
175
  case (x += 1)
136
176
  when 1 then raise Thrift::TransportException
137
177
  when 2 then raise Thrift::ProtocolException
138
178
  when 3 then raise error
139
179
  end
140
180
  end
141
- @trans.should_receive(:close).exactly(3).times
142
- exception_q.should_receive(:push).with(error).and_throw(:stop)
143
- @server_trans.should_receive(:close)
181
+ expect(@trans).to receive(:close).exactly(3).times
182
+ expect(exception_q).to receive(:push).with(error).and_throw(:stop)
183
+ expect(@server_trans).to receive(:close)
144
184
  expect { @server.serve }.to(throw_symbol(:stop))
145
185
  end
146
186
  end
data/spec/socket_spec.rb CHANGED
@@ -25,37 +25,44 @@ describe 'Socket' do
25
25
  describe Thrift::Socket do
26
26
  before(:each) do
27
27
  @socket = Thrift::Socket.new
28
- @handle = mock("Handle", :closed? => false)
29
- @handle.stub!(:close)
30
- @handle.stub!(:connect_nonblock)
31
- @handle.stub!(:setsockopt)
32
- ::Socket.stub!(:new).and_return(@handle)
28
+ @handle = double("Handle", :closed? => false)
29
+ allow(@handle).to receive(:close)
30
+ allow(@handle).to receive(:connect_nonblock)
31
+ allow(@handle).to receive(:setsockopt)
32
+ allow(::Socket).to receive(:new).and_return(@handle)
33
33
  end
34
34
 
35
35
  it_should_behave_like "a socket"
36
36
 
37
37
  it "should raise a TransportException when it cannot open a socket" do
38
- ::Socket.should_receive(:new).and_raise(StandardError)
39
- lambda { @socket.open }.should raise_error(Thrift::TransportException) { |e| e.type.should == Thrift::TransportException::NOT_OPEN }
38
+ expect(::Socket).to receive(:getaddrinfo).with("localhost", 9090, nil, ::Socket::SOCK_STREAM).and_return([[]])
39
+ expect { @socket.open }.to raise_error(Thrift::TransportException) { |e| expect(e.type).to eq(Thrift::TransportException::NOT_OPEN) }
40
40
  end
41
41
 
42
42
  it "should open a ::Socket with default args" do
43
- ::Socket.should_receive(:new).and_return(mock("Handle", :connect_nonblock => true, :setsockopt => nil))
44
- ::Socket.should_receive(:getaddrinfo).with("localhost", 9090, nil, ::Socket::SOCK_STREAM).and_return([[]])
45
- ::Socket.should_receive(:sockaddr_in)
43
+ expect(::Socket).to receive(:new).and_return(double("Handle", :connect_nonblock => true, :setsockopt => nil))
44
+ expect(::Socket).to receive(:getaddrinfo).with("localhost", 9090, nil, ::Socket::SOCK_STREAM).and_return([[]])
45
+ expect(::Socket).to receive(:sockaddr_in)
46
+ @socket.to_s == "socket(localhost:9090)"
46
47
  @socket.open
47
48
  end
48
49
 
49
50
  it "should accept host/port options" do
50
- ::Socket.should_receive(:new).and_return(mock("Handle", :connect_nonblock => true, :setsockopt => nil))
51
- ::Socket.should_receive(:getaddrinfo).with("my.domain", 1234, nil, ::Socket::SOCK_STREAM).and_return([[]])
52
- ::Socket.should_receive(:sockaddr_in)
53
- Thrift::Socket.new('my.domain', 1234).open
51
+ expect(::Socket).to receive(:new).and_return(double("Handle", :connect_nonblock => true, :setsockopt => nil))
52
+ expect(::Socket).to receive(:getaddrinfo).with("my.domain", 1234, nil, ::Socket::SOCK_STREAM).and_return([[]])
53
+ expect(::Socket).to receive(:sockaddr_in)
54
+ @socket = Thrift::Socket.new('my.domain', 1234).open
55
+ @socket.to_s == "socket(my.domain:1234)"
54
56
  end
55
57
 
56
58
  it "should accept an optional timeout" do
57
- ::Socket.stub!(:new)
58
- Thrift::Socket.new('localhost', 8080, 5).timeout.should == 5
59
+ allow(::Socket).to receive(:new)
60
+ expect(Thrift::Socket.new('localhost', 8080, 5).timeout).to eq(5)
61
+ end
62
+
63
+ it "should provide a reasonable to_s" do
64
+ allow(::Socket).to receive(:new)
65
+ expect(Thrift::Socket.new('myhost', 8090).to_s).to eq("socket(myhost:8090)")
59
66
  end
60
67
  end
61
68
  end