thrift 0.9.3.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/ext/compact_protocol.c +1 -0
  3. data/ext/struct.c +14 -1
  4. data/ext/thrift_native.c +17 -0
  5. data/lib/thrift/processor.rb +10 -3
  6. data/lib/thrift/protocol/base_protocol.rb +11 -3
  7. data/lib/thrift/protocol/binary_protocol.rb +8 -1
  8. data/lib/thrift/protocol/binary_protocol_accelerated.rb +8 -0
  9. data/lib/thrift/protocol/compact_protocol.rb +8 -0
  10. data/lib/thrift/protocol/json_protocol.rb +21 -4
  11. data/lib/thrift/protocol/multiplexed_protocol.rb +5 -1
  12. data/lib/thrift/server/base_server.rb +8 -2
  13. data/lib/thrift/server/simple_server.rb +5 -1
  14. data/lib/thrift/server/thread_pool_server.rb +5 -1
  15. data/lib/thrift/server/threaded_server.rb +5 -1
  16. data/lib/thrift/transport/base_server_transport.rb +1 -1
  17. data/lib/thrift/transport/base_transport.rb +8 -0
  18. data/lib/thrift/transport/buffered_transport.rb +9 -1
  19. data/lib/thrift/transport/framed_transport.rb +9 -1
  20. data/lib/thrift/transport/http_client_transport.rb +7 -0
  21. data/lib/thrift/transport/io_stream_transport.rb +4 -1
  22. data/lib/thrift/transport/memory_buffer_transport.rb +4 -0
  23. data/lib/thrift/transport/server_socket.rb +6 -1
  24. data/lib/thrift/transport/socket.rb +21 -17
  25. data/lib/thrift/transport/ssl_server_socket.rb +41 -0
  26. data/lib/thrift/transport/ssl_socket.rb +51 -0
  27. data/lib/thrift/transport/unix_server_socket.rb +5 -1
  28. data/lib/thrift/transport/unix_socket.rb +5 -1
  29. data/lib/thrift.rb +6 -4
  30. data/spec/base_protocol_spec.rb +79 -71
  31. data/spec/base_transport_spec.rb +155 -117
  32. data/spec/binary_protocol_accelerated_spec.rb +6 -2
  33. data/spec/binary_protocol_spec.rb +16 -8
  34. data/spec/binary_protocol_spec_shared.rb +75 -72
  35. data/spec/bytes_spec.rb +38 -38
  36. data/spec/client_spec.rb +41 -42
  37. data/spec/compact_protocol_spec.rb +32 -17
  38. data/spec/exception_spec.rb +54 -54
  39. data/spec/flat_spec.rb +5 -5
  40. data/spec/http_client_spec.rb +74 -33
  41. data/spec/json_protocol_spec.rb +170 -131
  42. data/spec/namespaced_spec.rb +5 -5
  43. data/spec/nonblocking_server_spec.rb +16 -16
  44. data/spec/processor_spec.rb +26 -26
  45. data/spec/serializer_spec.rb +20 -20
  46. data/spec/server_socket_spec.rb +27 -22
  47. data/spec/server_spec.rb +91 -51
  48. data/spec/socket_spec.rb +23 -16
  49. data/spec/socket_spec_shared.rb +31 -31
  50. data/spec/spec_helper.rb +6 -1
  51. data/spec/ssl_server_socket_spec.rb +34 -0
  52. data/spec/ssl_socket_spec.rb +78 -0
  53. data/spec/struct_nested_containers_spec.rb +24 -24
  54. data/spec/struct_spec.rb +120 -120
  55. data/spec/thin_http_server_spec.rb +18 -18
  56. data/spec/types_spec.rb +56 -53
  57. data/spec/union_spec.rb +47 -41
  58. data/spec/unix_socket_spec.rb +43 -34
  59. metadata +198 -148
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