thrift 0.9.1 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +6 -14
  2. data/{README → README.md} +0 -0
  3. data/ext/binary_protocol_accelerated.c +12 -12
  4. data/ext/compact_protocol.c +4 -2
  5. data/ext/constants.h +3 -0
  6. data/ext/extconf.rb +3 -1
  7. data/ext/memory_buffer.c +1 -1
  8. data/ext/strlcpy.h +7 -3
  9. data/ext/struct.c +27 -4
  10. data/ext/thrift_native.c +6 -0
  11. data/lib/thrift.rb +8 -5
  12. data/lib/thrift/client.rb +13 -4
  13. data/lib/thrift/multiplexed_processor.rb +76 -0
  14. data/lib/thrift/processor.rb +24 -6
  15. data/lib/thrift/protocol/base_protocol.rb +13 -3
  16. data/lib/thrift/protocol/binary_protocol.rb +8 -1
  17. data/lib/thrift/protocol/binary_protocol_accelerated.rb +8 -0
  18. data/lib/thrift/protocol/compact_protocol.rb +10 -1
  19. data/lib/thrift/protocol/json_protocol.rb +23 -6
  20. data/lib/thrift/protocol/multiplexed_protocol.rb +44 -0
  21. data/lib/thrift/protocol/protocol_decorator.rb +194 -0
  22. data/lib/thrift/server/base_server.rb +8 -2
  23. data/lib/thrift/server/simple_server.rb +5 -1
  24. data/lib/thrift/server/thread_pool_server.rb +5 -1
  25. data/lib/thrift/server/threaded_server.rb +5 -1
  26. data/lib/thrift/transport/base_server_transport.rb +1 -1
  27. data/lib/thrift/transport/base_transport.rb +8 -0
  28. data/lib/thrift/transport/buffered_transport.rb +9 -1
  29. data/lib/thrift/transport/framed_transport.rb +9 -1
  30. data/lib/thrift/transport/http_client_transport.rb +5 -0
  31. data/lib/thrift/transport/io_stream_transport.rb +4 -1
  32. data/lib/thrift/transport/memory_buffer_transport.rb +4 -0
  33. data/lib/thrift/transport/server_socket.rb +6 -1
  34. data/lib/thrift/transport/socket.rb +21 -17
  35. data/lib/thrift/transport/ssl_server_socket.rb +41 -0
  36. data/lib/thrift/transport/ssl_socket.rb +51 -0
  37. data/lib/thrift/transport/unix_server_socket.rb +5 -1
  38. data/lib/thrift/transport/unix_socket.rb +5 -1
  39. data/lib/thrift/union.rb +3 -6
  40. data/spec/BaseService.thrift +27 -0
  41. data/spec/ExtendedService.thrift +25 -0
  42. data/spec/Referenced.thrift +44 -0
  43. data/spec/ThriftNamespacedSpec.thrift +53 -0
  44. data/spec/base_protocol_spec.rb +79 -71
  45. data/spec/base_transport_spec.rb +155 -117
  46. data/spec/binary_protocol_accelerated_spec.rb +6 -2
  47. data/spec/binary_protocol_spec.rb +16 -8
  48. data/spec/binary_protocol_spec_shared.rb +75 -72
  49. data/spec/bytes_spec.rb +38 -38
  50. data/spec/client_spec.rb +41 -42
  51. data/spec/compact_protocol_spec.rb +32 -17
  52. data/spec/exception_spec.rb +54 -54
  53. data/spec/flat_spec.rb +62 -0
  54. data/spec/http_client_spec.rb +52 -33
  55. data/spec/json_protocol_spec.rb +170 -131
  56. data/spec/namespaced_spec.rb +67 -0
  57. data/spec/nonblocking_server_spec.rb +16 -16
  58. data/spec/processor_spec.rb +26 -26
  59. data/spec/serializer_spec.rb +20 -20
  60. data/spec/server_socket_spec.rb +27 -22
  61. data/spec/server_spec.rb +91 -51
  62. data/spec/socket_spec.rb +23 -16
  63. data/spec/socket_spec_shared.rb +31 -31
  64. data/spec/spec_helper.rb +4 -1
  65. data/spec/ssl_server_socket_spec.rb +34 -0
  66. data/spec/ssl_socket_spec.rb +78 -0
  67. data/spec/struct_nested_containers_spec.rb +24 -24
  68. data/spec/struct_spec.rb +120 -120
  69. data/spec/thin_http_server_spec.rb +19 -18
  70. data/spec/types_spec.rb +56 -53
  71. data/spec/union_spec.rb +51 -40
  72. data/spec/unix_socket_spec.rb +43 -34
  73. metadata +189 -123
  74. data/CHANGELOG +0 -1
@@ -19,27 +19,28 @@
19
19
 
20
20
  require 'spec_helper'
21
21
  require 'rack/test'
22
+ require 'thrift/server/thin_http_server'
22
23
 
23
24
  describe Thrift::ThinHTTPServer do
24
25
 
25
- let(:processor) { mock('processor') }
26
+ let(:processor) { double('processor') }
26
27
 
27
28
  describe "#initialize" do
28
29
 
29
30
  context "when using the defaults" do
30
31
 
31
32
  it "binds to port 80, with host 0.0.0.0, a path of '/'" do
32
- 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))
33
34
  Thrift::ThinHTTPServer.new(processor)
34
35
  end
35
36
 
36
37
  it 'creates a ThinHTTPServer::RackApplicationContext' do
37
- 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)
38
39
  Thrift::ThinHTTPServer.new(processor)
39
40
  end
40
41
 
41
42
  it "uses the BinaryProtocolFactory" do
42
- Thrift::BinaryProtocolFactory.should_receive(:new)
43
+ expect(Thrift::BinaryProtocolFactory).to receive(:new)
43
44
  Thrift::ThinHTTPServer.new(processor)
44
45
  end
45
46
 
@@ -51,7 +52,7 @@ describe Thrift::ThinHTTPServer do
51
52
  ip = "192.168.0.1"
52
53
  port = 3000
53
54
  path = "/thin"
54
- 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))
55
56
  Thrift::ThinHTTPServer.new(processor,
56
57
  :ip => ip,
57
58
  :port => port,
@@ -59,7 +60,7 @@ describe Thrift::ThinHTTPServer do
59
60
  end
60
61
 
61
62
  it 'creates a ThinHTTPServer::RackApplicationContext with a different protocol factory' do
62
- 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)
63
64
  Thrift::ThinHTTPServer.new(processor,
64
65
  :protocol_factory => Thrift::JsonProtocolFactory.new)
65
66
  end
@@ -71,12 +72,12 @@ describe Thrift::ThinHTTPServer do
71
72
  describe "#serve" do
72
73
 
73
74
  it 'starts the Thin server' do
74
- underlying_thin_server = mock('thin server', :start => true)
75
- 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)
76
77
 
77
78
  thin_thrift_server = Thrift::ThinHTTPServer.new(processor)
78
79
 
79
- underlying_thin_server.should_receive(:start)
80
+ expect(underlying_thin_server).to receive(:start)
80
81
  thin_thrift_server.serve
81
82
  end
82
83
  end
@@ -86,8 +87,8 @@ end
86
87
  describe Thrift::ThinHTTPServer::RackApplication do
87
88
  include Rack::Test::Methods
88
89
 
89
- let(:processor) { mock('processor') }
90
- let(:protocol_factory) { mock('protocol factory') }
90
+ let(:processor) { double('processor') }
91
+ let(:protocol_factory) { double('protocol factory') }
91
92
 
92
93
  def app
93
94
  Thrift::ThinHTTPServer::RackApplication.for("/", processor, protocol_factory)
@@ -98,13 +99,13 @@ describe Thrift::ThinHTTPServer::RackApplication do
98
99
  it 'receives a non-POST' do
99
100
  header('Content-Type', "application/x-thrift")
100
101
  get "/"
101
- last_response.status.should be 404
102
+ expect(last_response.status).to be 404
102
103
  end
103
104
 
104
105
  it 'receives a header other than application/x-thrift' do
105
106
  header('Content-Type', "application/json")
106
107
  post "/"
107
- last_response.status.should be 404
108
+ expect(last_response.status).to be 404
108
109
  end
109
110
 
110
111
  end
@@ -112,26 +113,26 @@ describe Thrift::ThinHTTPServer::RackApplication do
112
113
  context "200 response" do
113
114
 
114
115
  before do
115
- protocol_factory.stub(:get_protocol)
116
- processor.stub(:process)
116
+ allow(protocol_factory).to receive(:get_protocol)
117
+ allow(processor).to receive(:process)
117
118
  end
118
119
 
119
120
  it 'creates an IOStreamTransport' do
120
121
  header('Content-Type', "application/x-thrift")
121
- 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))
122
123
  post "/"
123
124
  end
124
125
 
125
126
  it 'fetches the right protocol based on the Transport' do
126
127
  header('Content-Type', "application/x-thrift")
127
- 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))
128
129
  post "/"
129
130
  end
130
131
 
131
132
  it 'status code 200' do
132
133
  header('Content-Type', "application/x-thrift")
133
134
  post "/"
134
- last_response.ok?.should be_true
135
+ expect(last_response.ok?).to be_truthy
135
136
  end
136
137
 
137
138
  end
@@ -31,85 +31,88 @@ describe Thrift::Types do
31
31
 
32
32
  context 'type checking' do
33
33
  it "should return the proper name for each type" do
34
- Thrift.type_name(Thrift::Types::I16).should == "Types::I16"
35
- Thrift.type_name(Thrift::Types::VOID).should == "Types::VOID"
36
- Thrift.type_name(Thrift::Types::LIST).should == "Types::LIST"
37
- Thrift.type_name(42).should be_nil
34
+ expect(Thrift.type_name(Thrift::Types::I16)).to eq("Types::I16")
35
+ expect(Thrift.type_name(Thrift::Types::VOID)).to eq("Types::VOID")
36
+ expect(Thrift.type_name(Thrift::Types::LIST)).to eq("Types::LIST")
37
+ expect(Thrift.type_name(42)).to be_nil
38
38
  end
39
39
 
40
40
  it "should check types properly" do
41
41
  # lambda { Thrift.check_type(nil, Thrift::Types::STOP) }.should raise_error(Thrift::TypeError)
42
- lambda { Thrift.check_type(3, {:type => Thrift::Types::STOP}, :foo) }.should raise_error(Thrift::TypeError)
43
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::VOID}, :foo) }.should_not raise_error(Thrift::TypeError)
44
- lambda { Thrift.check_type(3, {:type => Thrift::Types::VOID}, :foo) }.should raise_error(Thrift::TypeError)
45
- lambda { Thrift.check_type(true, {:type => Thrift::Types::BOOL}, :foo) }.should_not raise_error(Thrift::TypeError)
46
- lambda { Thrift.check_type(3, {:type => Thrift::Types::BOOL}, :foo) }.should raise_error(Thrift::TypeError)
47
- lambda { Thrift.check_type(42, {:type => Thrift::Types::BYTE}, :foo) }.should_not raise_error(Thrift::TypeError)
48
- lambda { Thrift.check_type(42, {:type => Thrift::Types::I16}, :foo) }.should_not raise_error(Thrift::TypeError)
49
- lambda { Thrift.check_type(42, {:type => Thrift::Types::I32}, :foo) }.should_not raise_error(Thrift::TypeError)
50
- lambda { Thrift.check_type(42, {:type => Thrift::Types::I64}, :foo) }.should_not raise_error(Thrift::TypeError)
51
- lambda { Thrift.check_type(3.14, {:type => Thrift::Types::I32}, :foo) }.should raise_error(Thrift::TypeError)
52
- lambda { Thrift.check_type(3.14, {:type => Thrift::Types::DOUBLE}, :foo) }.should_not raise_error(Thrift::TypeError)
53
- lambda { Thrift.check_type(3, {:type => Thrift::Types::DOUBLE}, :foo) }.should raise_error(Thrift::TypeError)
54
- lambda { Thrift.check_type("3", {:type => Thrift::Types::STRING}, :foo) }.should_not raise_error(Thrift::TypeError)
55
- lambda { Thrift.check_type(3, {:type => Thrift::Types::STRING}, :foo) }.should raise_error(Thrift::TypeError)
42
+ expect { Thrift.check_type(3, {:type => Thrift::Types::STOP}, :foo) }.to raise_error(Thrift::TypeError)
43
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::VOID}, :foo) }.not_to raise_error
44
+ expect { Thrift.check_type(3, {:type => Thrift::Types::VOID}, :foo) }.to raise_error(Thrift::TypeError)
45
+ expect { Thrift.check_type(true, {:type => Thrift::Types::BOOL}, :foo) }.not_to raise_error
46
+ expect { Thrift.check_type(3, {:type => Thrift::Types::BOOL}, :foo) }.to raise_error(Thrift::TypeError)
47
+ expect { Thrift.check_type(42, {:type => Thrift::Types::BYTE}, :foo) }.not_to raise_error
48
+ expect { Thrift.check_type(42, {:type => Thrift::Types::I16}, :foo) }.not_to raise_error
49
+ expect { Thrift.check_type(42, {:type => Thrift::Types::I32}, :foo) }.not_to raise_error
50
+ expect { Thrift.check_type(42, {:type => Thrift::Types::I64}, :foo) }.not_to raise_error
51
+ expect { Thrift.check_type(3.14, {:type => Thrift::Types::I32}, :foo) }.to raise_error(Thrift::TypeError)
52
+ expect { Thrift.check_type(3.14, {:type => Thrift::Types::DOUBLE}, :foo) }.not_to raise_error
53
+ expect { Thrift.check_type(3, {:type => Thrift::Types::DOUBLE}, :foo) }.to raise_error(Thrift::TypeError)
54
+ expect { Thrift.check_type("3", {:type => Thrift::Types::STRING}, :foo) }.not_to raise_error
55
+ expect { Thrift.check_type(3, {:type => Thrift::Types::STRING}, :foo) }.to raise_error(Thrift::TypeError)
56
56
  hello = SpecNamespace::Hello.new
57
- lambda { Thrift.check_type(hello, {:type => Thrift::Types::STRUCT, :class => SpecNamespace::Hello}, :foo) }.should_not raise_error(Thrift::TypeError)
58
- lambda { Thrift.check_type("foo", {:type => Thrift::Types::STRUCT}, :foo) }.should raise_error(Thrift::TypeError)
59
- lambda { Thrift.check_type({:foo => 1}, {:type => Thrift::Types::MAP}, :foo) }.should_not raise_error(Thrift::TypeError)
60
- lambda { Thrift.check_type([1], {:type => Thrift::Types::MAP}, :foo) }.should raise_error(Thrift::TypeError)
61
- lambda { Thrift.check_type([1], {:type => Thrift::Types::LIST}, :foo) }.should_not raise_error(Thrift::TypeError)
62
- lambda { Thrift.check_type({:foo => 1}, {:type => Thrift::Types::LIST}, :foo) }.should raise_error(Thrift::TypeError)
63
- lambda { Thrift.check_type(Set.new([1,2]), {:type => Thrift::Types::SET}, :foo) }.should_not raise_error(Thrift::TypeError)
64
- lambda { Thrift.check_type([1,2], {:type => Thrift::Types::SET}, :foo) }.should raise_error(Thrift::TypeError)
65
- lambda { Thrift.check_type({:foo => true}, {:type => Thrift::Types::SET}, :foo) }.should raise_error(Thrift::TypeError)
57
+ expect { Thrift.check_type(hello, {:type => Thrift::Types::STRUCT, :class => SpecNamespace::Hello}, :foo) }.not_to raise_error
58
+ expect { Thrift.check_type("foo", {:type => Thrift::Types::STRUCT}, :foo) }.to raise_error(Thrift::TypeError)
59
+ field = {:type => Thrift::Types::MAP, :key => {:type => Thrift::Types::I32}, :value => {:type => Thrift::Types::STRING}}
60
+ expect { Thrift.check_type({1 => "one"}, field, :foo) }.not_to raise_error
61
+ expect { Thrift.check_type([1], field, :foo) }.to raise_error(Thrift::TypeError)
62
+ field = {:type => Thrift::Types::LIST, :element => {:type => Thrift::Types::I32}}
63
+ expect { Thrift.check_type([1], field, :foo) }.not_to raise_error
64
+ expect { Thrift.check_type({:foo => 1}, field, :foo) }.to raise_error(Thrift::TypeError)
65
+ field = {:type => Thrift::Types::SET, :element => {:type => Thrift::Types::I32}}
66
+ expect { Thrift.check_type(Set.new([1,2]), field, :foo) }.not_to raise_error
67
+ expect { Thrift.check_type([1,2], field, :foo) }.to raise_error(Thrift::TypeError)
68
+ expect { Thrift.check_type({:foo => true}, field, :foo) }.to raise_error(Thrift::TypeError)
66
69
  end
67
70
 
68
71
  it "should error out if nil is passed and skip_types is false" do
69
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::BOOL}, :foo, false) }.should raise_error(Thrift::TypeError)
70
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::BYTE}, :foo, false) }.should raise_error(Thrift::TypeError)
71
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::I16}, :foo, false) }.should raise_error(Thrift::TypeError)
72
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::I32}, :foo, false) }.should raise_error(Thrift::TypeError)
73
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::I64}, :foo, false) }.should raise_error(Thrift::TypeError)
74
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::DOUBLE}, :foo, false) }.should raise_error(Thrift::TypeError)
75
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::STRING}, :foo, false) }.should raise_error(Thrift::TypeError)
76
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::STRUCT}, :foo, false) }.should raise_error(Thrift::TypeError)
77
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::LIST}, :foo, false) }.should raise_error(Thrift::TypeError)
78
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::SET}, :foo, false) }.should raise_error(Thrift::TypeError)
79
- lambda { Thrift.check_type(nil, {:type => Thrift::Types::MAP}, :foo, false) }.should raise_error(Thrift::TypeError)
72
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::BOOL}, :foo, false) }.to raise_error(Thrift::TypeError)
73
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::BYTE}, :foo, false) }.to raise_error(Thrift::TypeError)
74
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::I16}, :foo, false) }.to raise_error(Thrift::TypeError)
75
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::I32}, :foo, false) }.to raise_error(Thrift::TypeError)
76
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::I64}, :foo, false) }.to raise_error(Thrift::TypeError)
77
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::DOUBLE}, :foo, false) }.to raise_error(Thrift::TypeError)
78
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::STRING}, :foo, false) }.to raise_error(Thrift::TypeError)
79
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::STRUCT}, :foo, false) }.to raise_error(Thrift::TypeError)
80
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::LIST}, :foo, false) }.to raise_error(Thrift::TypeError)
81
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::SET}, :foo, false) }.to raise_error(Thrift::TypeError)
82
+ expect { Thrift.check_type(nil, {:type => Thrift::Types::MAP}, :foo, false) }.to raise_error(Thrift::TypeError)
80
83
  end
81
84
 
82
85
  it "should check element types on containers" do
83
86
  field = {:type => Thrift::Types::LIST, :element => {:type => Thrift::Types::I32}}
84
- lambda { Thrift.check_type([1, 2], field, :foo) }.should_not raise_error(Thrift::TypeError)
85
- lambda { Thrift.check_type([1, nil, 2], field, :foo) }.should raise_error(Thrift::TypeError)
87
+ expect { Thrift.check_type([1, 2], field, :foo) }.not_to raise_error
88
+ expect { Thrift.check_type([1, nil, 2], field, :foo) }.to raise_error(Thrift::TypeError)
86
89
  field = {:type => Thrift::Types::MAP, :key => {:type => Thrift::Types::I32}, :value => {:type => Thrift::Types::STRING}}
87
- lambda { Thrift.check_type({1 => "one", 2 => "two"}, field, :foo) }.should_not raise_error(Thrift::TypeError)
88
- lambda { Thrift.check_type({1 => "one", nil => "nil"}, field, :foo) }.should raise_error(Thrift::TypeError)
89
- lambda { Thrift.check_type({1 => nil, 2 => "two"}, field, :foo) }.should raise_error(Thrift::TypeError)
90
+ expect { Thrift.check_type({1 => "one", 2 => "two"}, field, :foo) }.not_to raise_error
91
+ expect { Thrift.check_type({1 => "one", nil => "nil"}, field, :foo) }.to raise_error(Thrift::TypeError)
92
+ expect { Thrift.check_type({1 => nil, 2 => "two"}, field, :foo) }.to raise_error(Thrift::TypeError)
90
93
  field = {:type => Thrift::Types::SET, :element => {:type => Thrift::Types::I32}}
91
- lambda { Thrift.check_type(Set.new([1, 2]), field, :foo) }.should_not raise_error(Thrift::TypeError)
92
- lambda { Thrift.check_type(Set.new([1, nil, 2]), field, :foo) }.should raise_error(Thrift::TypeError)
93
- lambda { Thrift.check_type(Set.new([1, 2.3, 2]), field, :foo) }.should raise_error(Thrift::TypeError)
94
+ expect { Thrift.check_type(Set.new([1, 2]), field, :foo) }.not_to raise_error
95
+ expect { Thrift.check_type(Set.new([1, nil, 2]), field, :foo) }.to raise_error(Thrift::TypeError)
96
+ expect { Thrift.check_type(Set.new([1, 2.3, 2]), field, :foo) }.to raise_error(Thrift::TypeError)
94
97
 
95
98
  field = {:type => Thrift::Types::STRUCT, :class => SpecNamespace::Hello}
96
- lambda { Thrift.check_type(SpecNamespace::BoolStruct, field, :foo) }.should raise_error(Thrift::TypeError)
99
+ expect { Thrift.check_type(SpecNamespace::BoolStruct, field, :foo) }.to raise_error(Thrift::TypeError)
97
100
  end
98
101
 
99
102
  it "should give the Thrift::TypeError a readable message" do
100
- msg = "Expected Types::STRING, received Fixnum for field foo"
101
- lambda { Thrift.check_type(3, {:type => Thrift::Types::STRING}, :foo) }.should raise_error(Thrift::TypeError, msg)
102
- msg = "Expected Types::STRING, received Fixnum for field foo.element"
103
+ msg = /Expected Types::STRING, received (Integer|Fixnum) for field foo/
104
+ expect { Thrift.check_type(3, {:type => Thrift::Types::STRING}, :foo) }.to raise_error(Thrift::TypeError, msg)
105
+ msg = /Expected Types::STRING, received (Integer|Fixnum) for field foo.element/
103
106
  field = {:type => Thrift::Types::LIST, :element => {:type => Thrift::Types::STRING}}
104
- lambda { Thrift.check_type([3], field, :foo) }.should raise_error(Thrift::TypeError, msg)
107
+ expect { Thrift.check_type([3], field, :foo) }.to raise_error(Thrift::TypeError, msg)
105
108
  msg = "Expected Types::I32, received NilClass for field foo.element.key"
106
109
  field = {:type => Thrift::Types::LIST,
107
110
  :element => {:type => Thrift::Types::MAP,
108
111
  :key => {:type => Thrift::Types::I32},
109
112
  :value => {:type => Thrift::Types::I32}}}
110
- lambda { Thrift.check_type([{nil => 3}], field, :foo) }.should raise_error(Thrift::TypeError, msg)
113
+ expect { Thrift.check_type([{nil => 3}], field, :foo) }.to raise_error(Thrift::TypeError, msg)
111
114
  msg = "Expected Types::I32, received NilClass for field foo.element.value"
112
- lambda { Thrift.check_type([{1 => nil}], field, :foo) }.should raise_error(Thrift::TypeError, msg)
115
+ expect { Thrift.check_type([{1 => nil}], field, :foo) }.to raise_error(Thrift::TypeError, msg)
113
116
  end
114
117
  end
115
118
  end
@@ -24,73 +24,84 @@ describe 'Union' do
24
24
  describe Thrift::Union do
25
25
  it "should return nil value in unset union" do
26
26
  union = SpecNamespace::My_union.new
27
- union.get_set_field.should == nil
28
- union.get_value.should == nil
27
+ expect(union.get_set_field).to eq(nil)
28
+ expect(union.get_value).to eq(nil)
29
29
  end
30
30
 
31
31
  it "should set a field and be accessible through get_value and the named field accessor" do
32
32
  union = SpecNamespace::My_union.new
33
33
  union.integer32 = 25
34
- union.get_set_field.should == :integer32
35
- union.get_value.should == 25
36
- union.integer32.should == 25
34
+ expect(union.get_set_field).to eq(:integer32)
35
+ expect(union.get_value).to eq(25)
36
+ expect(union.integer32).to eq(25)
37
37
  end
38
38
 
39
39
  it "should work correctly when instantiated with static field constructors" do
40
40
  union = SpecNamespace::My_union.integer32(5)
41
- union.get_set_field.should == :integer32
42
- union.integer32.should == 5
41
+ expect(union.get_set_field).to eq(:integer32)
42
+ expect(union.integer32).to eq(5)
43
43
  end
44
44
 
45
45
  it "should raise for wrong set field" do
46
46
  union = SpecNamespace::My_union.new
47
47
  union.integer32 = 25
48
- lambda { union.some_characters }.should raise_error(RuntimeError, "some_characters is not union's set field.")
48
+ expect { union.some_characters }.to raise_error(RuntimeError, "some_characters is not union's set field.")
49
+ end
50
+
51
+ it "should raise for wrong set field when hash initialized and type checking is off" do
52
+ Thrift.type_checking = false
53
+ union = SpecNamespace::My_union.new({incorrect_field: :incorrect})
54
+ expect { Thrift::Serializer.new.serialize(union) }.to raise_error(RuntimeError, "set_field is not valid for this union!")
49
55
  end
50
56
 
51
57
  it "should not be equal to nil" do
52
58
  union = SpecNamespace::My_union.new
53
- union.should_not == nil
59
+ expect(union).not_to eq(nil)
60
+ end
61
+
62
+ it "should not be equal with an empty String" do
63
+ union = SpecNamespace::My_union.new
64
+ expect(union).not_to eq('')
54
65
  end
55
66
 
56
67
  it "should not equate two different unions, i32 vs. string" do
57
68
  union = SpecNamespace::My_union.new(:integer32, 25)
58
69
  other_union = SpecNamespace::My_union.new(:some_characters, "blah!")
59
- union.should_not == other_union
70
+ expect(union).not_to eq(other_union)
60
71
  end
61
72
 
62
73
  it "should properly reset setfield and setvalue" do
63
74
  union = SpecNamespace::My_union.new(:integer32, 25)
64
- union.get_set_field.should == :integer32
75
+ expect(union.get_set_field).to eq(:integer32)
65
76
  union.some_characters = "blah!"
66
- union.get_set_field.should == :some_characters
67
- union.get_value.should == "blah!"
68
- lambda { union.integer32 }.should raise_error(RuntimeError, "integer32 is not union's set field.")
77
+ expect(union.get_set_field).to eq(:some_characters)
78
+ expect(union.get_value).to eq("blah!")
79
+ expect { union.integer32 }.to raise_error(RuntimeError, "integer32 is not union's set field.")
69
80
  end
70
81
 
71
82
  it "should not equate two different unions with different values" do
72
83
  union = SpecNamespace::My_union.new(:integer32, 25)
73
84
  other_union = SpecNamespace::My_union.new(:integer32, 400)
74
- union.should_not == other_union
85
+ expect(union).not_to eq(other_union)
75
86
  end
76
87
 
77
88
  it "should not equate two different unions with different fields" do
78
89
  union = SpecNamespace::My_union.new(:integer32, 25)
79
90
  other_union = SpecNamespace::My_union.new(:other_i32, 25)
80
- union.should_not == other_union
91
+ expect(union).not_to eq(other_union)
81
92
  end
82
93
 
83
94
  it "should inspect properly" do
84
95
  union = SpecNamespace::My_union.new(:integer32, 25)
85
- union.inspect.should == "<SpecNamespace::My_union integer32: 25>"
96
+ expect(union.inspect).to eq("<SpecNamespace::My_union integer32: 25>")
86
97
  end
87
98
 
88
99
  it "should not allow setting with instance_variable_set" do
89
100
  union = SpecNamespace::My_union.new(:integer32, 27)
90
101
  union.instance_variable_set(:@some_characters, "hallo!")
91
- union.get_set_field.should == :integer32
92
- union.get_value.should == 27
93
- lambda { union.some_characters }.should raise_error(RuntimeError, "some_characters is not union's set field.")
102
+ expect(union.get_set_field).to eq(:integer32)
103
+ expect(union.get_value).to eq(27)
104
+ expect { union.some_characters }.to raise_error(RuntimeError, "some_characters is not union's set field.")
94
105
  end
95
106
 
96
107
  it "should serialize to binary correctly" do
@@ -102,7 +113,7 @@ describe 'Union' do
102
113
 
103
114
  other_union = SpecNamespace::My_union.new(:integer32, 25)
104
115
  other_union.read(proto)
105
- other_union.should == union
116
+ expect(other_union).to eq(union)
106
117
  end
107
118
 
108
119
  it "should serialize to json correctly" do
@@ -114,24 +125,24 @@ describe 'Union' do
114
125
 
115
126
  other_union = SpecNamespace::My_union.new(:integer32, 25)
116
127
  other_union.read(proto)
117
- other_union.should == union
128
+ expect(other_union).to eq(union)
118
129
  end
119
130
 
120
131
  it "should raise when validating unset union" do
121
132
  union = SpecNamespace::My_union.new
122
- lambda { union.validate }.should raise_error(StandardError, "Union fields are not set.")
133
+ expect { union.validate }.to raise_error(StandardError, "Union fields are not set.")
123
134
 
124
135
  other_union = SpecNamespace::My_union.new(:integer32, 1)
125
- lambda { other_union.validate }.should_not raise_error(StandardError, "Union fields are not set.")
136
+ expect { other_union.validate }.not_to raise_error
126
137
  end
127
138
 
128
139
  it "should validate an enum field properly" do
129
140
  union = SpecNamespace::TestUnion.new(:enum_field, 3)
130
- union.get_set_field.should == :enum_field
131
- lambda { union.validate }.should raise_error(Thrift::ProtocolException, "Invalid value of field enum_field!")
141
+ expect(union.get_set_field).to eq(:enum_field)
142
+ expect { union.validate }.to raise_error(Thrift::ProtocolException, "Invalid value of field enum_field!")
132
143
 
133
144
  other_union = SpecNamespace::TestUnion.new(:enum_field, 1)
134
- lambda { other_union.validate }.should_not raise_error(Thrift::ProtocolException, "Invalid value of field enum_field!")
145
+ expect { other_union.validate }.not_to raise_error
135
146
  end
136
147
 
137
148
  it "should properly serialize and match structs with a union" do
@@ -146,37 +157,37 @@ describe 'Union' do
146
157
  other_union = SpecNamespace::My_union.new(:some_characters, "hello there")
147
158
  swu2 = SpecNamespace::Struct_with_union.new(:fun_union => other_union)
148
159
 
149
- swu2.should_not == swu
160
+ expect(swu2).not_to eq(swu)
150
161
 
151
162
  swu2.read(proto)
152
- swu2.should == swu
163
+ expect(swu2).to eq(swu)
153
164
  end
154
165
 
155
166
  it "should support old style constructor" do
156
167
  union = SpecNamespace::My_union.new(:integer32 => 26)
157
- union.get_set_field.should == :integer32
158
- union.get_value.should == 26
168
+ expect(union.get_set_field).to eq(:integer32)
169
+ expect(union.get_value).to eq(26)
159
170
  end
160
171
 
161
172
  it "should not throw an error when inspected and unset" do
162
- lambda{SpecNamespace::TestUnion.new().inspect}.should_not raise_error
173
+ expect{SpecNamespace::TestUnion.new().inspect}.not_to raise_error
163
174
  end
164
175
 
165
176
  it "should print enum value name when inspected" do
166
- SpecNamespace::My_union.new(:some_enum => SpecNamespace::SomeEnum::ONE).inspect.should == "<SpecNamespace::My_union some_enum: ONE (0)>"
177
+ expect(SpecNamespace::My_union.new(:some_enum => SpecNamespace::SomeEnum::ONE).inspect).to eq("<SpecNamespace::My_union some_enum: ONE (0)>")
167
178
 
168
- SpecNamespace::My_union.new(:my_map => {SpecNamespace::SomeEnum::ONE => [SpecNamespace::SomeEnum::TWO]}).inspect.should == "<SpecNamespace::My_union my_map: {ONE (0): [TWO (1)]}>"
179
+ expect(SpecNamespace::My_union.new(:my_map => {SpecNamespace::SomeEnum::ONE => [SpecNamespace::SomeEnum::TWO]}).inspect).to eq("<SpecNamespace::My_union my_map: {ONE (0): [TWO (1)]}>")
169
180
  end
170
181
 
171
182
  it "should offer field? methods" do
172
- SpecNamespace::My_union.new.some_enum?.should be_false
173
- SpecNamespace::My_union.new(:some_enum => SpecNamespace::SomeEnum::ONE).some_enum?.should be_true
174
- SpecNamespace::My_union.new(:im_true => false).im_true?.should be_true
175
- SpecNamespace::My_union.new(:im_true => true).im_true?.should be_true
183
+ expect(SpecNamespace::My_union.new.some_enum?).to be_falsey
184
+ expect(SpecNamespace::My_union.new(:some_enum => SpecNamespace::SomeEnum::ONE).some_enum?).to be_truthy
185
+ expect(SpecNamespace::My_union.new(:im_true => false).im_true?).to be_truthy
186
+ expect(SpecNamespace::My_union.new(:im_true => true).im_true?).to be_truthy
176
187
  end
177
188
 
178
189
  it "should pretty print binary fields" do
179
- SpecNamespace::TestUnion.new(:binary_field => "\001\002\003").inspect.should == "<SpecNamespace::TestUnion binary_field: 010203>"
190
+ expect(SpecNamespace::TestUnion.new(:binary_field => "\001\002\003").inspect).to eq("<SpecNamespace::TestUnion binary_field: 010203>")
180
191
  end
181
192
 
182
193
  it "should be comparable" do
@@ -195,7 +206,7 @@ describe 'Union' do
195
206
  for y in 0..3
196
207
  for x in 0..3
197
208
  # puts "#{objs[y].inspect} <=> #{objs[x].inspect} should == #{relationships[y][x]}"
198
- (objs[y] <=> objs[x]).should == relationships[y][x]
209
+ expect(objs[y] <=> objs[x]).to eq(relationships[y][x])
199
210
  end
200
211
  end
201
212
  end