thrift 0.9.3.0 → 0.18.1
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 +7 -0
- data/ext/compact_protocol.c +1 -0
- data/ext/struct.c +14 -1
- data/ext/thrift_native.c +17 -0
- data/lib/thrift/client.rb +10 -2
- data/lib/thrift/processor.rb +10 -3
- data/lib/thrift/protocol/base_protocol.rb +11 -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 +8 -0
- data/lib/thrift/protocol/json_protocol.rb +21 -4
- data/lib/thrift/protocol/multiplexed_protocol.rb +5 -1
- 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 +7 -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.rb +6 -4
- 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 +43 -42
- data/spec/compact_protocol_spec.rb +32 -17
- data/spec/exception_spec.rb +54 -54
- data/spec/flat_spec.rb +5 -5
- data/spec/http_client_spec.rb +74 -33
- data/spec/json_protocol_spec.rb +170 -131
- data/spec/namespaced_spec.rb +5 -5
- 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 +6 -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 +18 -18
- data/spec/types_spec.rb +56 -53
- data/spec/union_spec.rb +47 -41
- data/spec/unix_socket_spec.rb +43 -34
- metadata +195 -146
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,78 +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)
|
54
60
|
end
|
55
61
|
|
56
62
|
it "should not be equal with an empty String" do
|
57
63
|
union = SpecNamespace::My_union.new
|
58
|
-
union.
|
64
|
+
expect(union).not_to eq('')
|
59
65
|
end
|
60
66
|
|
61
67
|
it "should not equate two different unions, i32 vs. string" do
|
62
68
|
union = SpecNamespace::My_union.new(:integer32, 25)
|
63
69
|
other_union = SpecNamespace::My_union.new(:some_characters, "blah!")
|
64
|
-
union.
|
70
|
+
expect(union).not_to eq(other_union)
|
65
71
|
end
|
66
72
|
|
67
73
|
it "should properly reset setfield and setvalue" do
|
68
74
|
union = SpecNamespace::My_union.new(:integer32, 25)
|
69
|
-
union.get_set_field.
|
75
|
+
expect(union.get_set_field).to eq(:integer32)
|
70
76
|
union.some_characters = "blah!"
|
71
|
-
union.get_set_field.
|
72
|
-
union.get_value.
|
73
|
-
|
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.")
|
74
80
|
end
|
75
81
|
|
76
82
|
it "should not equate two different unions with different values" do
|
77
83
|
union = SpecNamespace::My_union.new(:integer32, 25)
|
78
84
|
other_union = SpecNamespace::My_union.new(:integer32, 400)
|
79
|
-
union.
|
85
|
+
expect(union).not_to eq(other_union)
|
80
86
|
end
|
81
87
|
|
82
88
|
it "should not equate two different unions with different fields" do
|
83
89
|
union = SpecNamespace::My_union.new(:integer32, 25)
|
84
90
|
other_union = SpecNamespace::My_union.new(:other_i32, 25)
|
85
|
-
union.
|
91
|
+
expect(union).not_to eq(other_union)
|
86
92
|
end
|
87
93
|
|
88
94
|
it "should inspect properly" do
|
89
95
|
union = SpecNamespace::My_union.new(:integer32, 25)
|
90
|
-
union.inspect.
|
96
|
+
expect(union.inspect).to eq("<SpecNamespace::My_union integer32: 25>")
|
91
97
|
end
|
92
98
|
|
93
99
|
it "should not allow setting with instance_variable_set" do
|
94
100
|
union = SpecNamespace::My_union.new(:integer32, 27)
|
95
101
|
union.instance_variable_set(:@some_characters, "hallo!")
|
96
|
-
union.get_set_field.
|
97
|
-
union.get_value.
|
98
|
-
|
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.")
|
99
105
|
end
|
100
106
|
|
101
107
|
it "should serialize to binary correctly" do
|
@@ -107,7 +113,7 @@ describe 'Union' do
|
|
107
113
|
|
108
114
|
other_union = SpecNamespace::My_union.new(:integer32, 25)
|
109
115
|
other_union.read(proto)
|
110
|
-
other_union.
|
116
|
+
expect(other_union).to eq(union)
|
111
117
|
end
|
112
118
|
|
113
119
|
it "should serialize to json correctly" do
|
@@ -119,24 +125,24 @@ describe 'Union' do
|
|
119
125
|
|
120
126
|
other_union = SpecNamespace::My_union.new(:integer32, 25)
|
121
127
|
other_union.read(proto)
|
122
|
-
other_union.
|
128
|
+
expect(other_union).to eq(union)
|
123
129
|
end
|
124
130
|
|
125
131
|
it "should raise when validating unset union" do
|
126
132
|
union = SpecNamespace::My_union.new
|
127
|
-
|
133
|
+
expect { union.validate }.to raise_error(StandardError, "Union fields are not set.")
|
128
134
|
|
129
135
|
other_union = SpecNamespace::My_union.new(:integer32, 1)
|
130
|
-
|
136
|
+
expect { other_union.validate }.not_to raise_error
|
131
137
|
end
|
132
138
|
|
133
139
|
it "should validate an enum field properly" do
|
134
140
|
union = SpecNamespace::TestUnion.new(:enum_field, 3)
|
135
|
-
union.get_set_field.
|
136
|
-
|
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!")
|
137
143
|
|
138
144
|
other_union = SpecNamespace::TestUnion.new(:enum_field, 1)
|
139
|
-
|
145
|
+
expect { other_union.validate }.not_to raise_error
|
140
146
|
end
|
141
147
|
|
142
148
|
it "should properly serialize and match structs with a union" do
|
@@ -151,37 +157,37 @@ describe 'Union' do
|
|
151
157
|
other_union = SpecNamespace::My_union.new(:some_characters, "hello there")
|
152
158
|
swu2 = SpecNamespace::Struct_with_union.new(:fun_union => other_union)
|
153
159
|
|
154
|
-
swu2.
|
160
|
+
expect(swu2).not_to eq(swu)
|
155
161
|
|
156
162
|
swu2.read(proto)
|
157
|
-
swu2.
|
163
|
+
expect(swu2).to eq(swu)
|
158
164
|
end
|
159
165
|
|
160
166
|
it "should support old style constructor" do
|
161
167
|
union = SpecNamespace::My_union.new(:integer32 => 26)
|
162
|
-
union.get_set_field.
|
163
|
-
union.get_value.
|
168
|
+
expect(union.get_set_field).to eq(:integer32)
|
169
|
+
expect(union.get_value).to eq(26)
|
164
170
|
end
|
165
171
|
|
166
172
|
it "should not throw an error when inspected and unset" do
|
167
|
-
|
173
|
+
expect{SpecNamespace::TestUnion.new().inspect}.not_to raise_error
|
168
174
|
end
|
169
175
|
|
170
176
|
it "should print enum value name when inspected" do
|
171
|
-
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)>")
|
172
178
|
|
173
|
-
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)]}>")
|
174
180
|
end
|
175
181
|
|
176
182
|
it "should offer field? methods" do
|
177
|
-
SpecNamespace::My_union.new.some_enum
|
178
|
-
SpecNamespace::My_union.new(:some_enum => SpecNamespace::SomeEnum::ONE).some_enum
|
179
|
-
SpecNamespace::My_union.new(:im_true => false).im_true
|
180
|
-
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
|
181
187
|
end
|
182
188
|
|
183
189
|
it "should pretty print binary fields" do
|
184
|
-
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>")
|
185
191
|
end
|
186
192
|
|
187
193
|
it "should be comparable" do
|
@@ -200,7 +206,7 @@ describe 'Union' do
|
|
200
206
|
for y in 0..3
|
201
207
|
for x in 0..3
|
202
208
|
# puts "#{objs[y].inspect} <=> #{objs[x].inspect} should == #{relationships[y][x]}"
|
203
|
-
(objs[y] <=> objs[x]).
|
209
|
+
expect(objs[y] <=> objs[x]).to eq(relationships[y][x])
|
204
210
|
end
|
205
211
|
end
|
206
212
|
end
|
data/spec/unix_socket_spec.rb
CHANGED
@@ -26,21 +26,26 @@ describe 'UNIXSocket' do
|
|
26
26
|
before(:each) do
|
27
27
|
@path = '/tmp/thrift_spec_socket'
|
28
28
|
@socket = Thrift::UNIXSocket.new(@path)
|
29
|
-
@handle =
|
30
|
-
@handle.
|
31
|
-
::UNIXSocket.
|
29
|
+
@handle = double("Handle", :closed? => false)
|
30
|
+
allow(@handle).to receive(:close)
|
31
|
+
allow(::UNIXSocket).to receive(:new).and_return(@handle)
|
32
32
|
end
|
33
33
|
|
34
34
|
it_should_behave_like "a socket"
|
35
35
|
|
36
36
|
it "should raise a TransportException when it cannot open a socket" do
|
37
|
-
::UNIXSocket.
|
38
|
-
|
37
|
+
expect(::UNIXSocket).to receive(:new).and_raise(StandardError)
|
38
|
+
expect { @socket.open }.to raise_error(Thrift::TransportException) { |e| expect(e.type).to eq(Thrift::TransportException::NOT_OPEN) }
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should accept an optional timeout" do
|
42
|
-
::UNIXSocket.
|
43
|
-
Thrift::UNIXSocket.new(@path, 5).timeout.
|
42
|
+
allow(::UNIXSocket).to receive(:new)
|
43
|
+
expect(Thrift::UNIXSocket.new(@path, 5).timeout).to eq(5)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should provide a reasonable to_s" do
|
47
|
+
allow(::UNIXSocket).to receive(:new)
|
48
|
+
expect(Thrift::UNIXSocket.new(@path).to_s).to eq("domain(#{@path})")
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
@@ -51,57 +56,61 @@ describe 'UNIXSocket' do
|
|
51
56
|
end
|
52
57
|
|
53
58
|
it "should create a handle when calling listen" do
|
54
|
-
UNIXServer.
|
59
|
+
expect(UNIXServer).to receive(:new).with(@path)
|
55
60
|
@socket.listen
|
56
61
|
end
|
57
62
|
|
58
63
|
it "should create a Thrift::UNIXSocket to wrap accepted sockets" do
|
59
|
-
handle =
|
60
|
-
UNIXServer.
|
64
|
+
handle = double("UNIXServer")
|
65
|
+
expect(UNIXServer).to receive(:new).with(@path).and_return(handle)
|
61
66
|
@socket.listen
|
62
|
-
sock =
|
63
|
-
handle.
|
64
|
-
trans =
|
65
|
-
Thrift::UNIXSocket.
|
66
|
-
trans.
|
67
|
-
@socket.accept.
|
67
|
+
sock = double("sock")
|
68
|
+
expect(handle).to receive(:accept).and_return(sock)
|
69
|
+
trans = double("UNIXSocket")
|
70
|
+
expect(Thrift::UNIXSocket).to receive(:new).and_return(trans)
|
71
|
+
expect(trans).to receive(:handle=).with(sock)
|
72
|
+
expect(@socket.accept).to eq(trans)
|
68
73
|
end
|
69
74
|
|
70
75
|
it "should close the handle when closed" do
|
71
|
-
handle =
|
72
|
-
UNIXServer.
|
76
|
+
handle = double("UNIXServer", :closed? => false)
|
77
|
+
expect(UNIXServer).to receive(:new).with(@path).and_return(handle)
|
73
78
|
@socket.listen
|
74
|
-
handle.
|
75
|
-
File.
|
79
|
+
expect(handle).to receive(:close)
|
80
|
+
allow(File).to receive(:delete)
|
76
81
|
@socket.close
|
77
82
|
end
|
78
83
|
|
79
84
|
it "should delete the socket when closed" do
|
80
|
-
handle =
|
81
|
-
UNIXServer.
|
85
|
+
handle = double("UNIXServer", :closed? => false)
|
86
|
+
expect(UNIXServer).to receive(:new).with(@path).and_return(handle)
|
82
87
|
@socket.listen
|
83
|
-
handle.
|
84
|
-
File.
|
88
|
+
allow(handle).to receive(:close)
|
89
|
+
expect(File).to receive(:delete).with(@path)
|
85
90
|
@socket.close
|
86
91
|
end
|
87
92
|
|
88
93
|
it "should return nil when accepting if there is no handle" do
|
89
|
-
@socket.accept.
|
94
|
+
expect(@socket.accept).to be_nil
|
90
95
|
end
|
91
96
|
|
92
97
|
it "should return true for closed? when appropriate" do
|
93
|
-
handle =
|
94
|
-
UNIXServer.
|
95
|
-
File.
|
98
|
+
handle = double("UNIXServer", :closed? => false)
|
99
|
+
allow(UNIXServer).to receive(:new).and_return(handle)
|
100
|
+
allow(File).to receive(:delete)
|
96
101
|
@socket.listen
|
97
|
-
@socket.
|
98
|
-
handle.
|
102
|
+
expect(@socket).not_to be_closed
|
103
|
+
allow(handle).to receive(:close)
|
99
104
|
@socket.close
|
100
|
-
@socket.
|
105
|
+
expect(@socket).to be_closed
|
101
106
|
@socket.listen
|
102
|
-
@socket.
|
103
|
-
handle.
|
104
|
-
@socket.
|
107
|
+
expect(@socket).not_to be_closed
|
108
|
+
allow(handle).to receive(:closed?).and_return(true)
|
109
|
+
expect(@socket).to be_closed
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should provide a reasonable to_s" do
|
113
|
+
expect(@socket.to_s).to eq("domain(#{@path})")
|
105
114
|
end
|
106
115
|
end
|
107
116
|
end
|