thrift 0.9.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +6 -14
- data/{README → README.md} +0 -0
- data/ext/binary_protocol_accelerated.c +12 -12
- data/ext/compact_protocol.c +4 -2
- data/ext/constants.h +3 -0
- data/ext/extconf.rb +3 -1
- data/ext/memory_buffer.c +1 -1
- data/ext/strlcpy.h +7 -3
- data/ext/struct.c +27 -4
- data/ext/thrift_native.c +6 -0
- data/lib/thrift.rb +8 -5
- data/lib/thrift/client.rb +13 -4
- data/lib/thrift/multiplexed_processor.rb +76 -0
- data/lib/thrift/processor.rb +24 -6
- data/lib/thrift/protocol/base_protocol.rb +13 -3
- data/lib/thrift/protocol/binary_protocol.rb +8 -1
- data/lib/thrift/protocol/binary_protocol_accelerated.rb +8 -0
- data/lib/thrift/protocol/compact_protocol.rb +10 -1
- data/lib/thrift/protocol/json_protocol.rb +23 -6
- data/lib/thrift/protocol/multiplexed_protocol.rb +44 -0
- data/lib/thrift/protocol/protocol_decorator.rb +194 -0
- data/lib/thrift/server/base_server.rb +8 -2
- data/lib/thrift/server/simple_server.rb +5 -1
- data/lib/thrift/server/thread_pool_server.rb +5 -1
- data/lib/thrift/server/threaded_server.rb +5 -1
- data/lib/thrift/transport/base_server_transport.rb +1 -1
- data/lib/thrift/transport/base_transport.rb +8 -0
- data/lib/thrift/transport/buffered_transport.rb +9 -1
- data/lib/thrift/transport/framed_transport.rb +9 -1
- data/lib/thrift/transport/http_client_transport.rb +5 -0
- data/lib/thrift/transport/io_stream_transport.rb +4 -1
- data/lib/thrift/transport/memory_buffer_transport.rb +4 -0
- data/lib/thrift/transport/server_socket.rb +6 -1
- data/lib/thrift/transport/socket.rb +21 -17
- data/lib/thrift/transport/ssl_server_socket.rb +41 -0
- data/lib/thrift/transport/ssl_socket.rb +51 -0
- data/lib/thrift/transport/unix_server_socket.rb +5 -1
- data/lib/thrift/transport/unix_socket.rb +5 -1
- data/lib/thrift/union.rb +3 -6
- data/spec/BaseService.thrift +27 -0
- data/spec/ExtendedService.thrift +25 -0
- data/spec/Referenced.thrift +44 -0
- data/spec/ThriftNamespacedSpec.thrift +53 -0
- data/spec/base_protocol_spec.rb +79 -71
- data/spec/base_transport_spec.rb +155 -117
- data/spec/binary_protocol_accelerated_spec.rb +6 -2
- data/spec/binary_protocol_spec.rb +16 -8
- data/spec/binary_protocol_spec_shared.rb +75 -72
- data/spec/bytes_spec.rb +38 -38
- data/spec/client_spec.rb +41 -42
- data/spec/compact_protocol_spec.rb +32 -17
- data/spec/exception_spec.rb +54 -54
- data/spec/flat_spec.rb +62 -0
- data/spec/http_client_spec.rb +52 -33
- data/spec/json_protocol_spec.rb +170 -131
- data/spec/namespaced_spec.rb +67 -0
- data/spec/nonblocking_server_spec.rb +16 -16
- data/spec/processor_spec.rb +26 -26
- data/spec/serializer_spec.rb +20 -20
- data/spec/server_socket_spec.rb +27 -22
- data/spec/server_spec.rb +91 -51
- data/spec/socket_spec.rb +23 -16
- data/spec/socket_spec_shared.rb +31 -31
- data/spec/spec_helper.rb +4 -1
- data/spec/ssl_server_socket_spec.rb +34 -0
- data/spec/ssl_socket_spec.rb +78 -0
- data/spec/struct_nested_containers_spec.rb +24 -24
- data/spec/struct_spec.rb +120 -120
- data/spec/thin_http_server_spec.rb +19 -18
- data/spec/types_spec.rb +56 -53
- data/spec/union_spec.rb +51 -40
- data/spec/unix_socket_spec.rb +43 -34
- metadata +189 -123
- 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) {
|
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.
|
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.
|
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.
|
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.
|
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.
|
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 =
|
75
|
-
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.
|
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) {
|
90
|
-
let(: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.
|
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.
|
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.
|
116
|
-
processor.
|
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.
|
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.
|
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
|
135
|
+
expect(last_response.ok?).to be_truthy
|
135
136
|
end
|
136
137
|
|
137
138
|
end
|
data/spec/types_spec.rb
CHANGED
@@ -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).
|
35
|
-
Thrift.type_name(Thrift::Types::VOID).
|
36
|
-
Thrift.type_name(Thrift::Types::LIST).
|
37
|
-
Thrift.type_name(42).
|
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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
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
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
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
|
-
|
85
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
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
|
-
|
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 =
|
101
|
-
|
102
|
-
msg =
|
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
|
-
|
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
|
-
|
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
|
-
|
115
|
+
expect { Thrift.check_type([{1 => nil}], field, :foo) }.to raise_error(Thrift::TypeError, msg)
|
113
116
|
end
|
114
117
|
end
|
115
118
|
end
|
data/spec/union_spec.rb
CHANGED
@@ -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.
|
28
|
-
union.get_value.
|
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.
|
35
|
-
union.get_value.
|
36
|
-
union.integer32.
|
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.
|
42
|
-
union.integer32.
|
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
|
-
|
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.
|
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.
|
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.
|
75
|
+
expect(union.get_set_field).to eq(:integer32)
|
65
76
|
union.some_characters = "blah!"
|
66
|
-
union.get_set_field.
|
67
|
-
union.get_value.
|
68
|
-
|
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.
|
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.
|
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.
|
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.
|
92
|
-
union.get_value.
|
93
|
-
|
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.
|
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.
|
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
|
-
|
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
|
-
|
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.
|
131
|
-
|
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
|
-
|
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.
|
160
|
+
expect(swu2).not_to eq(swu)
|
150
161
|
|
151
162
|
swu2.read(proto)
|
152
|
-
swu2.
|
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.
|
158
|
-
union.get_value.
|
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
|
-
|
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.
|
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.
|
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
|
173
|
-
SpecNamespace::My_union.new(:some_enum => SpecNamespace::SomeEnum::ONE).some_enum
|
174
|
-
SpecNamespace::My_union.new(:im_true => false).im_true
|
175
|
-
SpecNamespace::My_union.new(:im_true => true).im_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.
|
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]).
|
209
|
+
expect(objs[y] <=> objs[x]).to eq(relationships[y][x])
|
199
210
|
end
|
200
211
|
end
|
201
212
|
end
|