thrift 0.11.0.0 → 0.14.2

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 (82) hide show
  1. checksums.yaml +5 -5
  2. data/lib/thrift/protocol/base_protocol.rb +11 -3
  3. data/lib/thrift/protocol/binary_protocol.rb +8 -1
  4. data/lib/thrift/protocol/binary_protocol_accelerated.rb +8 -0
  5. data/lib/thrift/protocol/compact_protocol.rb +8 -0
  6. data/lib/thrift/protocol/json_protocol.rb +8 -0
  7. data/lib/thrift/protocol/multiplexed_protocol.rb +5 -1
  8. data/lib/thrift/server/base_server.rb +8 -2
  9. data/lib/thrift/server/simple_server.rb +5 -1
  10. data/lib/thrift/server/thread_pool_server.rb +5 -1
  11. data/lib/thrift/server/threaded_server.rb +5 -1
  12. data/lib/thrift/transport/base_server_transport.rb +1 -1
  13. data/lib/thrift/transport/base_transport.rb +8 -0
  14. data/lib/thrift/transport/buffered_transport.rb +9 -1
  15. data/lib/thrift/transport/framed_transport.rb +9 -1
  16. data/lib/thrift/transport/http_client_transport.rb +6 -0
  17. data/lib/thrift/transport/io_stream_transport.rb +4 -1
  18. data/lib/thrift/transport/memory_buffer_transport.rb +4 -0
  19. data/lib/thrift/transport/server_socket.rb +6 -1
  20. data/lib/thrift/transport/socket.rb +4 -2
  21. data/lib/thrift/transport/ssl_server_socket.rb +4 -0
  22. data/lib/thrift/transport/ssl_socket.rb +4 -0
  23. data/lib/thrift/transport/unix_server_socket.rb +5 -1
  24. data/lib/thrift/transport/unix_socket.rb +5 -1
  25. data/spec/base_protocol_spec.rb +79 -71
  26. data/spec/base_transport_spec.rb +155 -117
  27. data/spec/binary_protocol_accelerated_spec.rb +6 -2
  28. data/spec/binary_protocol_spec.rb +16 -8
  29. data/spec/binary_protocol_spec_shared.rb +73 -70
  30. data/spec/bytes_spec.rb +38 -38
  31. data/spec/client_spec.rb +41 -42
  32. data/spec/compact_protocol_spec.rb +23 -8
  33. data/spec/exception_spec.rb +54 -54
  34. data/spec/flat_spec.rb +5 -5
  35. data/spec/http_client_spec.rb +64 -38
  36. data/spec/json_protocol_spec.rb +146 -138
  37. data/spec/namespaced_spec.rb +5 -5
  38. data/spec/nonblocking_server_spec.rb +16 -16
  39. data/spec/processor_spec.rb +26 -26
  40. data/spec/serializer_spec.rb +20 -20
  41. data/spec/server_socket_spec.rb +27 -22
  42. data/spec/server_spec.rb +91 -52
  43. data/spec/socket_spec.rb +23 -16
  44. data/spec/socket_spec_shared.rb +31 -31
  45. data/spec/ssl_server_socket_spec.rb +34 -0
  46. data/spec/ssl_socket_spec.rb +26 -22
  47. data/spec/struct_nested_containers_spec.rb +24 -24
  48. data/spec/struct_spec.rb +120 -120
  49. data/spec/thin_http_server_spec.rb +18 -18
  50. data/spec/types_spec.rb +56 -53
  51. data/spec/union_spec.rb +42 -43
  52. data/spec/unix_socket_spec.rb +43 -34
  53. metadata +138 -158
  54. data/benchmark/gen-rb/benchmark_constants.rb +0 -11
  55. data/benchmark/gen-rb/benchmark_service.rb +0 -80
  56. data/benchmark/gen-rb/benchmark_types.rb +0 -10
  57. data/spec/gen-rb/base/base_service.rb +0 -80
  58. data/spec/gen-rb/base/base_service_constants.rb +0 -11
  59. data/spec/gen-rb/base/base_service_types.rb +0 -26
  60. data/spec/gen-rb/extended/extended_service.rb +0 -78
  61. data/spec/gen-rb/extended/extended_service_constants.rb +0 -11
  62. data/spec/gen-rb/extended/extended_service_types.rb +0 -12
  63. data/spec/gen-rb/flat/namespaced_nonblocking_service.rb +0 -272
  64. data/spec/gen-rb/flat/referenced_constants.rb +0 -11
  65. data/spec/gen-rb/flat/referenced_types.rb +0 -17
  66. data/spec/gen-rb/flat/thrift_namespaced_spec_constants.rb +0 -11
  67. data/spec/gen-rb/flat/thrift_namespaced_spec_types.rb +0 -28
  68. data/spec/gen-rb/namespaced_spec_namespace/namespaced_nonblocking_service.rb +0 -272
  69. data/spec/gen-rb/namespaced_spec_namespace/thrift_namespaced_spec_constants.rb +0 -11
  70. data/spec/gen-rb/namespaced_spec_namespace/thrift_namespaced_spec_types.rb +0 -28
  71. data/spec/gen-rb/nonblocking_service.rb +0 -272
  72. data/spec/gen-rb/other_namespace/referenced_constants.rb +0 -11
  73. data/spec/gen-rb/other_namespace/referenced_types.rb +0 -17
  74. data/spec/gen-rb/thrift_spec_constants.rb +0 -11
  75. data/spec/gen-rb/thrift_spec_types.rb +0 -538
  76. data/test/debug_proto/gen-rb/debug_proto_test_constants.rb +0 -278
  77. data/test/debug_proto/gen-rb/debug_proto_test_types.rb +0 -781
  78. data/test/debug_proto/gen-rb/empty_service.rb +0 -28
  79. data/test/debug_proto/gen-rb/inherited.rb +0 -83
  80. data/test/debug_proto/gen-rb/reverse_order_service.rb +0 -86
  81. data/test/debug_proto/gen-rb/service_for_exception_with_a_map.rb +0 -85
  82. data/test/debug_proto/gen-rb/srv.rb +0 -395
data/spec/struct_spec.rb CHANGED
@@ -25,7 +25,7 @@ describe 'Struct' do
25
25
  it "should iterate over all fields properly" do
26
26
  fields = {}
27
27
  SpecNamespace::Foo.new.each_field { |fid,field_info| fields[fid] = field_info }
28
- fields.should == SpecNamespace::Foo::FIELDS
28
+ expect(fields).to eq(SpecNamespace::Foo::FIELDS)
29
29
  end
30
30
 
31
31
  it "should initialize all fields to defaults" do
@@ -39,19 +39,19 @@ describe 'Struct' do
39
39
  end
40
40
 
41
41
  def validate_default_arguments(object)
42
- object.simple.should == 53
43
- object.words.should == "words"
44
- object.hello.should == SpecNamespace::Hello.new(:greeting => 'hello, world!')
45
- object.ints.should == [1, 2, 2, 3]
46
- object.complex.should be_nil
47
- object.shorts.should == Set.new([5, 17, 239])
42
+ expect(object.simple).to eq(53)
43
+ expect(object.words).to eq("words")
44
+ expect(object.hello).to eq(SpecNamespace::Hello.new(:greeting => 'hello, world!'))
45
+ expect(object.ints).to eq([1, 2, 2, 3])
46
+ expect(object.complex).to be_nil
47
+ expect(object.shorts).to eq(Set.new([5, 17, 239]))
48
48
  end
49
49
 
50
50
  it "should not share default values between instances" do
51
51
  begin
52
52
  struct = SpecNamespace::Foo.new
53
53
  struct.ints << 17
54
- SpecNamespace::Foo.new.ints.should == [1,2,2,3]
54
+ expect(SpecNamespace::Foo.new.ints).to eq([1,2,2,3])
55
55
  ensure
56
56
  # ensure no leakage to other tests
57
57
  SpecNamespace::Foo::FIELDS[4][:default] = [1,2,2,3]
@@ -60,48 +60,48 @@ describe 'Struct' do
60
60
 
61
61
  it "should properly initialize boolean values" do
62
62
  struct = SpecNamespace::BoolStruct.new(:yesno => false)
63
- struct.yesno.should be_false
63
+ expect(struct.yesno).to be_falsey
64
64
  end
65
65
 
66
66
  it "should have proper == semantics" do
67
- SpecNamespace::Foo.new.should_not == SpecNamespace::Hello.new
68
- SpecNamespace::Foo.new.should == SpecNamespace::Foo.new
69
- SpecNamespace::Foo.new(:simple => 52).should_not == SpecNamespace::Foo.new
67
+ expect(SpecNamespace::Foo.new).not_to eq(SpecNamespace::Hello.new)
68
+ expect(SpecNamespace::Foo.new).to eq(SpecNamespace::Foo.new)
69
+ expect(SpecNamespace::Foo.new(:simple => 52)).not_to eq(SpecNamespace::Foo.new)
70
70
  end
71
71
 
72
72
  it "should print enum value names in inspect" do
73
- SpecNamespace::StructWithSomeEnum.new(:some_enum => SpecNamespace::SomeEnum::ONE).inspect.should == "<SpecNamespace::StructWithSomeEnum some_enum:ONE (0)>"
73
+ expect(SpecNamespace::StructWithSomeEnum.new(:some_enum => SpecNamespace::SomeEnum::ONE).inspect).to eq("<SpecNamespace::StructWithSomeEnum some_enum:ONE (0)>")
74
74
 
75
- SpecNamespace::StructWithEnumMap.new(:my_map => {SpecNamespace::SomeEnum::ONE => [SpecNamespace::SomeEnum::TWO]}).inspect.should == "<SpecNamespace::StructWithEnumMap my_map:{ONE (0): [TWO (1)]}>"
75
+ expect(SpecNamespace::StructWithEnumMap.new(:my_map => {SpecNamespace::SomeEnum::ONE => [SpecNamespace::SomeEnum::TWO]}).inspect).to eq("<SpecNamespace::StructWithEnumMap my_map:{ONE (0): [TWO (1)]}>")
76
76
  end
77
77
 
78
78
  it "should pretty print binary fields" do
79
- SpecNamespace::Foo2.new(:my_binary => "\001\002\003").inspect.should == "<SpecNamespace::Foo2 my_binary:010203>"
79
+ expect(SpecNamespace::Foo2.new(:my_binary => "\001\002\003").inspect).to eq("<SpecNamespace::Foo2 my_binary:010203>")
80
80
  end
81
81
 
82
82
  it "should offer field? methods" do
83
- SpecNamespace::Foo.new.opt_string?.should be_false
84
- SpecNamespace::Foo.new(:simple => 52).simple?.should be_true
85
- SpecNamespace::Foo.new(:my_bool => false).my_bool?.should be_true
86
- SpecNamespace::Foo.new(:my_bool => true).my_bool?.should be_true
83
+ expect(SpecNamespace::Foo.new.opt_string?).to be_falsey
84
+ expect(SpecNamespace::Foo.new(:simple => 52).simple?).to be_truthy
85
+ expect(SpecNamespace::Foo.new(:my_bool => false).my_bool?).to be_truthy
86
+ expect(SpecNamespace::Foo.new(:my_bool => true).my_bool?).to be_truthy
87
87
  end
88
88
 
89
89
  it "should be comparable" do
90
90
  s1 = SpecNamespace::StructWithSomeEnum.new(:some_enum => SpecNamespace::SomeEnum::ONE)
91
91
  s2 = SpecNamespace::StructWithSomeEnum.new(:some_enum => SpecNamespace::SomeEnum::TWO)
92
92
 
93
- (s1 <=> s2).should == -1
94
- (s2 <=> s1).should == 1
95
- (s1 <=> s1).should == 0
96
- (s1 <=> SpecNamespace::StructWithSomeEnum.new()).should == -1
93
+ expect(s1 <=> s2).to eq(-1)
94
+ expect(s2 <=> s1).to eq(1)
95
+ expect(s1 <=> s1).to eq(0)
96
+ expect(s1 <=> SpecNamespace::StructWithSomeEnum.new()).to eq(-1)
97
97
  end
98
98
 
99
99
  it "should read itself off the wire" do
100
100
  struct = SpecNamespace::Foo.new
101
- prot = Thrift::BaseProtocol.new(mock("transport"))
102
- prot.should_receive(:read_struct_begin).twice
103
- prot.should_receive(:read_struct_end).twice
104
- prot.should_receive(:read_field_begin).and_return(
101
+ prot = Thrift::BaseProtocol.new(double("transport"))
102
+ expect(prot).to receive(:read_struct_begin).twice
103
+ expect(prot).to receive(:read_struct_end).twice
104
+ expect(prot).to receive(:read_field_begin).and_return(
105
105
  ['complex', Thrift::Types::MAP, 5], # Foo
106
106
  ['words', Thrift::Types::STRING, 2], # Foo
107
107
  ['hello', Thrift::Types::STRUCT, 3], # Foo
@@ -112,49 +112,49 @@ describe 'Struct' do
112
112
  ['shorts', Thrift::Types::SET, 6], # Foo
113
113
  [nil, Thrift::Types::STOP, 0] # Hello
114
114
  )
115
- prot.should_receive(:read_field_end).exactly(7).times
116
- prot.should_receive(:read_map_begin).and_return(
115
+ expect(prot).to receive(:read_field_end).exactly(7).times
116
+ expect(prot).to receive(:read_map_begin).and_return(
117
117
  [Thrift::Types::I32, Thrift::Types::MAP, 2], # complex
118
118
  [Thrift::Types::STRING, Thrift::Types::DOUBLE, 2], # complex/1/value
119
119
  [Thrift::Types::STRING, Thrift::Types::DOUBLE, 1] # complex/2/value
120
120
  )
121
- prot.should_receive(:read_map_end).exactly(3).times
122
- prot.should_receive(:read_list_begin).and_return([Thrift::Types::I32, 4])
123
- prot.should_receive(:read_list_end)
124
- prot.should_receive(:read_set_begin).and_return([Thrift::Types::I16, 2])
125
- prot.should_receive(:read_set_end)
126
- prot.should_receive(:read_i32).and_return(
121
+ expect(prot).to receive(:read_map_end).exactly(3).times
122
+ expect(prot).to receive(:read_list_begin).and_return([Thrift::Types::I32, 4])
123
+ expect(prot).to receive(:read_list_end)
124
+ expect(prot).to receive(:read_set_begin).and_return([Thrift::Types::I16, 2])
125
+ expect(prot).to receive(:read_set_end)
126
+ expect(prot).to receive(:read_i32).and_return(
127
127
  1, 14, # complex keys
128
128
  42, # simple
129
129
  4, 23, 4, 29 # ints
130
130
  )
131
- prot.should_receive(:read_string).and_return("pi", "e", "feigenbaum", "apple banana", "what's up?")
132
- prot.should_receive(:read_double).and_return(Math::PI, Math::E, 4.669201609)
133
- prot.should_receive(:read_i16).and_return(2, 3)
134
- prot.should_not_receive(:skip)
131
+ expect(prot).to receive(:read_string).and_return("pi", "e", "feigenbaum", "apple banana", "what's up?")
132
+ expect(prot).to receive(:read_double).and_return(Math::PI, Math::E, 4.669201609)
133
+ expect(prot).to receive(:read_i16).and_return(2, 3)
134
+ expect(prot).not_to receive(:skip)
135
135
  struct.read(prot)
136
136
 
137
- struct.simple.should == 42
138
- struct.complex.should == {1 => {"pi" => Math::PI, "e" => Math::E}, 14 => {"feigenbaum" => 4.669201609}}
139
- struct.hello.should == SpecNamespace::Hello.new(:greeting => "what's up?")
140
- struct.words.should == "apple banana"
141
- struct.ints.should == [4, 23, 4, 29]
142
- struct.shorts.should == Set.new([3, 2])
137
+ expect(struct.simple).to eq(42)
138
+ expect(struct.complex).to eq({1 => {"pi" => Math::PI, "e" => Math::E}, 14 => {"feigenbaum" => 4.669201609}})
139
+ expect(struct.hello).to eq(SpecNamespace::Hello.new(:greeting => "what's up?"))
140
+ expect(struct.words).to eq("apple banana")
141
+ expect(struct.ints).to eq([4, 23, 4, 29])
142
+ expect(struct.shorts).to eq(Set.new([3, 2]))
143
143
  end
144
144
 
145
145
  it "should serialize false boolean fields correctly" do
146
146
  b = SpecNamespace::BoolStruct.new(:yesno => false)
147
147
  prot = Thrift::BinaryProtocol.new(Thrift::MemoryBufferTransport.new)
148
- prot.should_receive(:write_bool).with(false)
148
+ expect(prot).to receive(:write_bool).with(false)
149
149
  b.write(prot)
150
150
  end
151
151
 
152
152
  it "should skip unexpected fields in structs and use default values" do
153
153
  struct = SpecNamespace::Foo.new
154
- prot = Thrift::BaseProtocol.new(mock("transport"))
155
- prot.should_receive(:read_struct_begin)
156
- prot.should_receive(:read_struct_end)
157
- prot.should_receive(:read_field_begin).and_return(
154
+ prot = Thrift::BaseProtocol.new(double("transport"))
155
+ expect(prot).to receive(:read_struct_begin)
156
+ expect(prot).to receive(:read_struct_end)
157
+ expect(prot).to receive(:read_field_begin).and_return(
158
158
  ['simple', Thrift::Types::I32, 1],
159
159
  ['complex', Thrift::Types::STRUCT, 5],
160
160
  ['thinz', Thrift::Types::MAP, 7],
@@ -162,55 +162,55 @@ describe 'Struct' do
162
162
  ['words', Thrift::Types::STRING, 2],
163
163
  [nil, Thrift::Types::STOP, 0]
164
164
  )
165
- prot.should_receive(:read_field_end).exactly(5).times
166
- prot.should_receive(:read_i32).and_return(42)
167
- prot.should_receive(:read_string).and_return("foobar")
168
- prot.should_receive(:skip).with(Thrift::Types::STRUCT)
169
- prot.should_receive(:skip).with(Thrift::Types::MAP)
165
+ expect(prot).to receive(:read_field_end).exactly(5).times
166
+ expect(prot).to receive(:read_i32).and_return(42)
167
+ expect(prot).to receive(:read_string).and_return("foobar")
168
+ expect(prot).to receive(:skip).with(Thrift::Types::STRUCT)
169
+ expect(prot).to receive(:skip).with(Thrift::Types::MAP)
170
170
  # prot.should_receive(:read_map_begin).and_return([Thrift::Types::I32, Thrift::Types::I32, 0])
171
171
  # prot.should_receive(:read_map_end)
172
- prot.should_receive(:skip).with(Thrift::Types::I32)
172
+ expect(prot).to receive(:skip).with(Thrift::Types::I32)
173
173
  struct.read(prot)
174
174
 
175
- struct.simple.should == 42
176
- struct.complex.should be_nil
177
- struct.words.should == "foobar"
178
- struct.hello.should == SpecNamespace::Hello.new(:greeting => 'hello, world!')
179
- struct.ints.should == [1, 2, 2, 3]
180
- struct.shorts.should == Set.new([5, 17, 239])
175
+ expect(struct.simple).to eq(42)
176
+ expect(struct.complex).to be_nil
177
+ expect(struct.words).to eq("foobar")
178
+ expect(struct.hello).to eq(SpecNamespace::Hello.new(:greeting => 'hello, world!'))
179
+ expect(struct.ints).to eq([1, 2, 2, 3])
180
+ expect(struct.shorts).to eq(Set.new([5, 17, 239]))
181
181
  end
182
182
 
183
183
  it "should write itself to the wire" do
184
- prot = Thrift::BaseProtocol.new(mock("transport")) #mock("Protocol")
185
- prot.should_receive(:write_struct_begin).with("SpecNamespace::Foo")
186
- prot.should_receive(:write_struct_begin).with("SpecNamespace::Hello")
187
- prot.should_receive(:write_struct_end).twice
188
- prot.should_receive(:write_field_begin).with('ints', Thrift::Types::LIST, 4)
189
- prot.should_receive(:write_i32).with(1)
190
- prot.should_receive(:write_i32).with(2).twice
191
- prot.should_receive(:write_i32).with(3)
192
- prot.should_receive(:write_field_begin).with('complex', Thrift::Types::MAP, 5)
193
- prot.should_receive(:write_i32).with(5)
194
- prot.should_receive(:write_string).with('foo')
195
- prot.should_receive(:write_double).with(1.23)
196
- prot.should_receive(:write_field_begin).with('shorts', Thrift::Types::SET, 6)
197
- prot.should_receive(:write_i16).with(5)
198
- prot.should_receive(:write_i16).with(17)
199
- prot.should_receive(:write_i16).with(239)
200
- prot.should_receive(:write_field_stop).twice
201
- prot.should_receive(:write_field_end).exactly(6).times
202
- prot.should_receive(:write_field_begin).with('simple', Thrift::Types::I32, 1)
203
- prot.should_receive(:write_i32).with(53)
204
- prot.should_receive(:write_field_begin).with('hello', Thrift::Types::STRUCT, 3)
205
- prot.should_receive(:write_field_begin).with('greeting', Thrift::Types::STRING, 1)
206
- prot.should_receive(:write_string).with('hello, world!')
207
- prot.should_receive(:write_map_begin).with(Thrift::Types::I32, Thrift::Types::MAP, 1)
208
- prot.should_receive(:write_map_begin).with(Thrift::Types::STRING, Thrift::Types::DOUBLE, 1)
209
- prot.should_receive(:write_map_end).twice
210
- prot.should_receive(:write_list_begin).with(Thrift::Types::I32, 4)
211
- prot.should_receive(:write_list_end)
212
- prot.should_receive(:write_set_begin).with(Thrift::Types::I16, 3)
213
- prot.should_receive(:write_set_end)
184
+ prot = Thrift::BaseProtocol.new(double("transport")) #mock("Protocol")
185
+ expect(prot).to receive(:write_struct_begin).with("SpecNamespace::Foo")
186
+ expect(prot).to receive(:write_struct_begin).with("SpecNamespace::Hello")
187
+ expect(prot).to receive(:write_struct_end).twice
188
+ expect(prot).to receive(:write_field_begin).with('ints', Thrift::Types::LIST, 4)
189
+ expect(prot).to receive(:write_i32).with(1)
190
+ expect(prot).to receive(:write_i32).with(2).twice
191
+ expect(prot).to receive(:write_i32).with(3)
192
+ expect(prot).to receive(:write_field_begin).with('complex', Thrift::Types::MAP, 5)
193
+ expect(prot).to receive(:write_i32).with(5)
194
+ expect(prot).to receive(:write_string).with('foo')
195
+ expect(prot).to receive(:write_double).with(1.23)
196
+ expect(prot).to receive(:write_field_begin).with('shorts', Thrift::Types::SET, 6)
197
+ expect(prot).to receive(:write_i16).with(5)
198
+ expect(prot).to receive(:write_i16).with(17)
199
+ expect(prot).to receive(:write_i16).with(239)
200
+ expect(prot).to receive(:write_field_stop).twice
201
+ expect(prot).to receive(:write_field_end).exactly(6).times
202
+ expect(prot).to receive(:write_field_begin).with('simple', Thrift::Types::I32, 1)
203
+ expect(prot).to receive(:write_i32).with(53)
204
+ expect(prot).to receive(:write_field_begin).with('hello', Thrift::Types::STRUCT, 3)
205
+ expect(prot).to receive(:write_field_begin).with('greeting', Thrift::Types::STRING, 1)
206
+ expect(prot).to receive(:write_string).with('hello, world!')
207
+ expect(prot).to receive(:write_map_begin).with(Thrift::Types::I32, Thrift::Types::MAP, 1)
208
+ expect(prot).to receive(:write_map_begin).with(Thrift::Types::STRING, Thrift::Types::DOUBLE, 1)
209
+ expect(prot).to receive(:write_map_end).twice
210
+ expect(prot).to receive(:write_list_begin).with(Thrift::Types::I32, 4)
211
+ expect(prot).to receive(:write_list_end)
212
+ expect(prot).to receive(:write_set_begin).with(Thrift::Types::I16, 3)
213
+ expect(prot).to receive(:write_set_end)
214
214
 
215
215
  struct = SpecNamespace::Foo.new
216
216
  struct.words = nil
@@ -221,50 +221,50 @@ describe 'Struct' do
221
221
  it "should raise an exception if presented with an unknown container" do
222
222
  # yeah this is silly, but I'm going for code coverage here
223
223
  struct = SpecNamespace::Foo.new
224
- lambda { struct.send :write_container, nil, nil, {:type => "foo"} }.should raise_error(StandardError, "Not a container type: foo")
224
+ expect { struct.send :write_container, nil, nil, {:type => "foo"} }.to raise_error(StandardError, "Not a container type: foo")
225
225
  end
226
226
 
227
227
  it "should support optional type-checking in Thrift::Struct.new" do
228
228
  Thrift.type_checking = true
229
229
  begin
230
- lambda { SpecNamespace::Hello.new(:greeting => 3) }.should raise_error(Thrift::TypeError, "Expected Types::STRING, received Fixnum for field greeting")
230
+ expect { SpecNamespace::Hello.new(:greeting => 3) }.to raise_error(Thrift::TypeError, /Expected Types::STRING, received (Integer|Fixnum) for field greeting/)
231
231
  ensure
232
232
  Thrift.type_checking = false
233
233
  end
234
- lambda { SpecNamespace::Hello.new(:greeting => 3) }.should_not raise_error(Thrift::TypeError)
234
+ expect { SpecNamespace::Hello.new(:greeting => 3) }.not_to raise_error
235
235
  end
236
236
 
237
237
  it "should support optional type-checking in field accessors" do
238
238
  Thrift.type_checking = true
239
239
  begin
240
240
  hello = SpecNamespace::Hello.new
241
- lambda { hello.greeting = 3 }.should raise_error(Thrift::TypeError, "Expected Types::STRING, received Fixnum for field greeting")
241
+ expect { hello.greeting = 3 }.to raise_error(Thrift::TypeError, /Expected Types::STRING, received (Integer|Fixnum) for field greeting/)
242
242
  ensure
243
243
  Thrift.type_checking = false
244
244
  end
245
- lambda { hello.greeting = 3 }.should_not raise_error(Thrift::TypeError)
245
+ expect { hello.greeting = 3 }.not_to raise_error
246
246
  end
247
247
 
248
248
  it "should raise an exception when unknown types are given to Thrift::Struct.new" do
249
- lambda { SpecNamespace::Hello.new(:fish => 'salmon') }.should raise_error(Exception, "Unknown key given to SpecNamespace::Hello.new: fish")
249
+ expect { SpecNamespace::Hello.new(:fish => 'salmon') }.to raise_error(Exception, "Unknown key given to SpecNamespace::Hello.new: fish")
250
250
  end
251
251
 
252
252
  it "should support `raise Xception, 'message'` for Exception structs" do
253
253
  begin
254
254
  raise SpecNamespace::Xception, "something happened"
255
255
  rescue Thrift::Exception => e
256
- e.message.should == "something happened"
257
- e.code.should == 1
256
+ expect(e.message).to eq("something happened")
257
+ expect(e.code).to eq(1)
258
258
  # ensure it gets serialized properly, this is the really important part
259
- prot = Thrift::BaseProtocol.new(mock("trans"))
260
- prot.should_receive(:write_struct_begin).with("SpecNamespace::Xception")
261
- prot.should_receive(:write_struct_end)
262
- prot.should_receive(:write_field_begin).with('message', Thrift::Types::STRING, 1)#, "something happened")
263
- prot.should_receive(:write_string).with("something happened")
264
- prot.should_receive(:write_field_begin).with('code', Thrift::Types::I32, 2)#, 1)
265
- prot.should_receive(:write_i32).with(1)
266
- prot.should_receive(:write_field_stop)
267
- prot.should_receive(:write_field_end).twice
259
+ prot = Thrift::BaseProtocol.new(double("trans"))
260
+ expect(prot).to receive(:write_struct_begin).with("SpecNamespace::Xception")
261
+ expect(prot).to receive(:write_struct_end)
262
+ expect(prot).to receive(:write_field_begin).with('message', Thrift::Types::STRING, 1)#, "something happened")
263
+ expect(prot).to receive(:write_string).with("something happened")
264
+ expect(prot).to receive(:write_field_begin).with('code', Thrift::Types::I32, 2)#, 1)
265
+ expect(prot).to receive(:write_i32).with(1)
266
+ expect(prot).to receive(:write_field_stop)
267
+ expect(prot).to receive(:write_field_end).twice
268
268
 
269
269
  e.write(prot)
270
270
  end
@@ -274,17 +274,17 @@ describe 'Struct' do
274
274
  begin
275
275
  raise SpecNamespace::Xception, :message => "something happened", :code => 5
276
276
  rescue Thrift::Exception => e
277
- e.message.should == "something happened"
278
- e.code.should == 5
279
- prot = Thrift::BaseProtocol.new(mock("trans"))
280
- prot.should_receive(:write_struct_begin).with("SpecNamespace::Xception")
281
- prot.should_receive(:write_struct_end)
282
- prot.should_receive(:write_field_begin).with('message', Thrift::Types::STRING, 1)
283
- prot.should_receive(:write_string).with("something happened")
284
- prot.should_receive(:write_field_begin).with('code', Thrift::Types::I32, 2)
285
- prot.should_receive(:write_i32).with(5)
286
- prot.should_receive(:write_field_stop)
287
- prot.should_receive(:write_field_end).twice
277
+ expect(e.message).to eq("something happened")
278
+ expect(e.code).to eq(5)
279
+ prot = Thrift::BaseProtocol.new(double("trans"))
280
+ expect(prot).to receive(:write_struct_begin).with("SpecNamespace::Xception")
281
+ expect(prot).to receive(:write_struct_end)
282
+ expect(prot).to receive(:write_field_begin).with('message', Thrift::Types::STRING, 1)
283
+ expect(prot).to receive(:write_string).with("something happened")
284
+ expect(prot).to receive(:write_field_begin).with('code', Thrift::Types::I32, 2)
285
+ expect(prot).to receive(:write_i32).with(5)
286
+ expect(prot).to receive(:write_field_stop)
287
+ expect(prot).to receive(:write_field_end).twice
288
288
 
289
289
  e.write(prot)
290
290
  end
@@ -23,24 +23,24 @@ require 'thrift/server/thin_http_server'
23
23
 
24
24
  describe Thrift::ThinHTTPServer do
25
25
 
26
- let(:processor) { mock('processor') }
26
+ let(:processor) { double('processor') }
27
27
 
28
28
  describe "#initialize" do
29
29
 
30
30
  context "when using the defaults" do
31
31
 
32
32
  it "binds to port 80, with host 0.0.0.0, a path of '/'" do
33
- Thin::Server.should_receive(:new).with('0.0.0.0', 80, an_instance_of(Rack::Builder))
33
+ expect(Thin::Server).to receive(:new).with('0.0.0.0', 80, an_instance_of(Rack::Builder))
34
34
  Thrift::ThinHTTPServer.new(processor)
35
35
  end
36
36
 
37
37
  it 'creates a ThinHTTPServer::RackApplicationContext' do
38
- Thrift::ThinHTTPServer::RackApplication.should_receive(:for).with("/", processor, an_instance_of(Thrift::BinaryProtocolFactory)).and_return(anything)
38
+ expect(Thrift::ThinHTTPServer::RackApplication).to receive(:for).with("/", processor, an_instance_of(Thrift::BinaryProtocolFactory)).and_return(anything)
39
39
  Thrift::ThinHTTPServer.new(processor)
40
40
  end
41
41
 
42
42
  it "uses the BinaryProtocolFactory" do
43
- Thrift::BinaryProtocolFactory.should_receive(:new)
43
+ expect(Thrift::BinaryProtocolFactory).to receive(:new)
44
44
  Thrift::ThinHTTPServer.new(processor)
45
45
  end
46
46
 
@@ -52,7 +52,7 @@ describe Thrift::ThinHTTPServer do
52
52
  ip = "192.168.0.1"
53
53
  port = 3000
54
54
  path = "/thin"
55
- Thin::Server.should_receive(:new).with(ip, port, an_instance_of(Rack::Builder))
55
+ expect(Thin::Server).to receive(:new).with(ip, port, an_instance_of(Rack::Builder))
56
56
  Thrift::ThinHTTPServer.new(processor,
57
57
  :ip => ip,
58
58
  :port => port,
@@ -60,7 +60,7 @@ describe Thrift::ThinHTTPServer do
60
60
  end
61
61
 
62
62
  it 'creates a ThinHTTPServer::RackApplicationContext with a different protocol factory' do
63
- Thrift::ThinHTTPServer::RackApplication.should_receive(:for).with("/", processor, an_instance_of(Thrift::JsonProtocolFactory)).and_return(anything)
63
+ expect(Thrift::ThinHTTPServer::RackApplication).to receive(:for).with("/", processor, an_instance_of(Thrift::JsonProtocolFactory)).and_return(anything)
64
64
  Thrift::ThinHTTPServer.new(processor,
65
65
  :protocol_factory => Thrift::JsonProtocolFactory.new)
66
66
  end
@@ -72,12 +72,12 @@ describe Thrift::ThinHTTPServer do
72
72
  describe "#serve" do
73
73
 
74
74
  it 'starts the Thin server' do
75
- underlying_thin_server = mock('thin server', :start => true)
76
- Thin::Server.stub(:new).and_return(underlying_thin_server)
75
+ underlying_thin_server = double('thin server', :start => true)
76
+ allow(Thin::Server).to receive(:new).and_return(underlying_thin_server)
77
77
 
78
78
  thin_thrift_server = Thrift::ThinHTTPServer.new(processor)
79
79
 
80
- underlying_thin_server.should_receive(:start)
80
+ expect(underlying_thin_server).to receive(:start)
81
81
  thin_thrift_server.serve
82
82
  end
83
83
  end
@@ -87,8 +87,8 @@ end
87
87
  describe Thrift::ThinHTTPServer::RackApplication do
88
88
  include Rack::Test::Methods
89
89
 
90
- let(:processor) { mock('processor') }
91
- let(:protocol_factory) { mock('protocol factory') }
90
+ let(:processor) { double('processor') }
91
+ let(:protocol_factory) { double('protocol factory') }
92
92
 
93
93
  def app
94
94
  Thrift::ThinHTTPServer::RackApplication.for("/", processor, protocol_factory)
@@ -99,13 +99,13 @@ describe Thrift::ThinHTTPServer::RackApplication do
99
99
  it 'receives a non-POST' do
100
100
  header('Content-Type', "application/x-thrift")
101
101
  get "/"
102
- last_response.status.should be 404
102
+ expect(last_response.status).to be 404
103
103
  end
104
104
 
105
105
  it 'receives a header other than application/x-thrift' do
106
106
  header('Content-Type', "application/json")
107
107
  post "/"
108
- last_response.status.should be 404
108
+ expect(last_response.status).to be 404
109
109
  end
110
110
 
111
111
  end
@@ -113,26 +113,26 @@ describe Thrift::ThinHTTPServer::RackApplication do
113
113
  context "200 response" do
114
114
 
115
115
  before do
116
- protocol_factory.stub(:get_protocol)
117
- processor.stub(:process)
116
+ allow(protocol_factory).to receive(:get_protocol)
117
+ allow(processor).to receive(:process)
118
118
  end
119
119
 
120
120
  it 'creates an IOStreamTransport' do
121
121
  header('Content-Type', "application/x-thrift")
122
- Thrift::IOStreamTransport.should_receive(:new).with(an_instance_of(Rack::Lint::InputWrapper), an_instance_of(Rack::Response))
122
+ expect(Thrift::IOStreamTransport).to receive(:new).with(an_instance_of(Rack::Lint::InputWrapper), an_instance_of(Rack::Response))
123
123
  post "/"
124
124
  end
125
125
 
126
126
  it 'fetches the right protocol based on the Transport' do
127
127
  header('Content-Type', "application/x-thrift")
128
- protocol_factory.should_receive(:get_protocol).with(an_instance_of(Thrift::IOStreamTransport))
128
+ expect(protocol_factory).to receive(:get_protocol).with(an_instance_of(Thrift::IOStreamTransport))
129
129
  post "/"
130
130
  end
131
131
 
132
132
  it 'status code 200' do
133
133
  header('Content-Type', "application/x-thrift")
134
134
  post "/"
135
- last_response.ok?.should be_true
135
+ expect(last_response.ok?).to be_truthy
136
136
  end
137
137
 
138
138
  end