upfluence-thrift 1.0.11 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +5 -5
  2. data/lib/thrift.rb +6 -4
  3. data/lib/thrift/client.rb +31 -1
  4. data/lib/thrift/definition.rb +64 -0
  5. data/lib/thrift/exceptions.rb +5 -5
  6. data/lib/thrift/middleware.rb +50 -0
  7. data/lib/thrift/processor.rb +3 -3
  8. data/lib/thrift/protocol/json_protocol.rb +6 -6
  9. data/lib/thrift/server/rack_application.rb +30 -19
  10. data/lib/thrift/struct.rb +10 -10
  11. data/lib/thrift/transport/base_transport.rb +9 -7
  12. data/lib/thrift/transport/server_socket.rb +6 -6
  13. data/lib/thrift/types.rb +4 -4
  14. data/lib/thrift/types/known/any.rb +179 -0
  15. data/lib/thrift/types/known/any_constants.rb +17 -0
  16. data/lib/thrift/types/known/any_types.rb +43 -0
  17. data/lib/thrift/types/known/duration.rb +27 -0
  18. data/lib/thrift/types/known/duration_constants.rb +17 -0
  19. data/lib/thrift/types/known/duration_types.rb +43 -0
  20. data/lib/thrift/types/known/timestamp.rb +31 -0
  21. data/lib/thrift/types/known/timestamp_constants.rb +17 -0
  22. data/lib/thrift/types/known/timestamp_types.rb +43 -0
  23. data/lib/thrift/types/value.rb +114 -0
  24. data/lib/thrift/types/value_constants.rb +15 -0
  25. data/lib/thrift/types/value_types.rb +213 -0
  26. data/spec/binary_protocol_spec_shared.rb +57 -60
  27. data/spec/client_spec.rb +2 -2
  28. data/spec/compact_protocol_spec.rb +26 -20
  29. data/spec/http_client_spec.rb +7 -20
  30. data/spec/nonblocking_server_spec.rb +1 -1
  31. data/spec/processor_spec.rb +1 -1
  32. data/spec/rack_application_spec.rb +1 -1
  33. data/spec/struct_spec.rb +2 -2
  34. data/spec/types/known/any_spec.rb +44 -0
  35. data/spec/types/known/duration_spec.rb +20 -0
  36. data/spec/types/known/timestamp_spec.rb +17 -0
  37. data/spec/types/value_spec.rb +43 -0
  38. data/spec/types_spec.rb +2 -2
  39. metadata +50 -87
  40. data/benchmark/gen-rb/benchmark_constants.rb +0 -11
  41. data/benchmark/gen-rb/benchmark_service.rb +0 -80
  42. data/benchmark/gen-rb/benchmark_types.rb +0 -10
  43. data/spec/gen-rb/base/base_service.rb +0 -80
  44. data/spec/gen-rb/base/base_service_constants.rb +0 -11
  45. data/spec/gen-rb/base/base_service_types.rb +0 -26
  46. data/spec/gen-rb/extended/extended_service.rb +0 -78
  47. data/spec/gen-rb/extended/extended_service_constants.rb +0 -11
  48. data/spec/gen-rb/extended/extended_service_types.rb +0 -12
  49. data/spec/gen-rb/flat/namespaced_nonblocking_service.rb +0 -272
  50. data/spec/gen-rb/flat/referenced_constants.rb +0 -11
  51. data/spec/gen-rb/flat/referenced_types.rb +0 -17
  52. data/spec/gen-rb/flat/thrift_namespaced_spec_constants.rb +0 -11
  53. data/spec/gen-rb/flat/thrift_namespaced_spec_types.rb +0 -28
  54. data/spec/gen-rb/namespaced_spec_namespace/namespaced_nonblocking_service.rb +0 -272
  55. data/spec/gen-rb/namespaced_spec_namespace/thrift_namespaced_spec_constants.rb +0 -11
  56. data/spec/gen-rb/namespaced_spec_namespace/thrift_namespaced_spec_types.rb +0 -28
  57. data/spec/gen-rb/nonblocking_service.rb +0 -272
  58. data/spec/gen-rb/other_namespace/referenced_constants.rb +0 -11
  59. data/spec/gen-rb/other_namespace/referenced_types.rb +0 -17
  60. data/spec/gen-rb/thrift_spec_constants.rb +0 -11
  61. data/spec/gen-rb/thrift_spec_types.rb +0 -538
  62. data/test/debug_proto/gen-rb/debug_proto_test_constants.rb +0 -274
  63. data/test/debug_proto/gen-rb/debug_proto_test_types.rb +0 -761
  64. data/test/debug_proto/gen-rb/empty_service.rb +0 -24
  65. data/test/debug_proto/gen-rb/inherited.rb +0 -79
  66. data/test/debug_proto/gen-rb/reverse_order_service.rb +0 -82
  67. data/test/debug_proto/gen-rb/service_for_exception_with_a_map.rb +0 -81
  68. data/test/debug_proto/gen-rb/srv.rb +0 -330
@@ -0,0 +1,31 @@
1
+ require 'thrift/types/known/timestamp_types'
2
+
3
+ module Thrift
4
+ module Types
5
+ module Known
6
+ module Timestamp
7
+ class << self
8
+ def from_time(v)
9
+ Timestamp.from_time(v)
10
+ end
11
+
12
+ def now
13
+ from_time(Time.now)
14
+ end
15
+ end
16
+
17
+ class Timestamp
18
+ class << self
19
+ def from_time(v)
20
+ Timestamp.new(seconds: v.to_i, nanos: v.nsec)
21
+ end
22
+ end
23
+
24
+ def to_time
25
+ Time.at(seconds, nanos, :nsec)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (2.3.0-upfluence)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift'
8
+ require 'timestamp_types'
9
+
10
+ module Thrift
11
+ module Types
12
+ module Known
13
+ module Timestamp
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,43 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (2.3.0-upfluence)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift'
8
+
9
+ module Thrift
10
+ module Types
11
+ module Known
12
+ module Timestamp
13
+ class Timestamp; end
14
+
15
+ class Timestamp
16
+ include ::Thrift::Struct, ::Thrift::Struct_Union
17
+
18
+ NAME = 'Timestamp'.freeze
19
+ NAMESPACE = 'types.known.timestamp'.freeze
20
+
21
+ THRIFT_FIELD_INDEX_SECONDS = 1
22
+ THRIFT_FIELD_INDEX_NANOS = 2
23
+
24
+ FIELDS = {
25
+ THRIFT_FIELD_INDEX_SECONDS => {type: ::Thrift::Types::I64, name: 'seconds'},
26
+ THRIFT_FIELD_INDEX_NANOS => {type: ::Thrift::Types::I32, name: 'nanos'}
27
+ }
28
+
29
+ def struct_fields; FIELDS; end
30
+
31
+ def validate
32
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field seconds is unset!') unless @seconds
33
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field nanos is unset!') unless @nanos
34
+ end
35
+
36
+ ::Thrift::Struct.generate_accessors self
37
+ ::Thrift.register_struct_type self
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,114 @@
1
+ require 'thrift/types/value_types'
2
+
3
+ module Thrift
4
+ module Types
5
+ module Value
6
+ class ListValue
7
+ def to_array
8
+ values.map(&:to_object)
9
+ end
10
+
11
+ class << self
12
+ def from_array(v)
13
+ ListValue.new(values: v.map { |vv| Value.from_object(vv) })
14
+ end
15
+ end
16
+ end
17
+
18
+ class MapValue
19
+ def to_hash
20
+ entries.reduce({}) do |acc, e|
21
+ acc.merge(e.key.to_object => e.value.to_object)
22
+ end
23
+ end
24
+
25
+ class << self
26
+ def from_hash(v)
27
+ MapValue.new(
28
+ entries: v.reduce([]) do |acc, (k, vv)|
29
+ acc + [
30
+ MapEntry.new(
31
+ key: Value.from_object(k),
32
+ value: Value.from_object(vv)
33
+ )
34
+ ]
35
+ end
36
+ )
37
+ end
38
+ end
39
+ end
40
+
41
+ class StructValue
42
+ def to_hash
43
+ fields.reduce({}) do |acc, (k, v)|
44
+ acc.merge(k => v.to_object)
45
+ end
46
+ end
47
+
48
+ class << self
49
+ def from_object(v)
50
+ StructValue.new(
51
+ fields: v.instance_variables.reduce({}) do |acc, k|
52
+ acc.merge(
53
+ k.to_s[1..-1] => Value.from_object(v.instance_variable_get(k))
54
+ )
55
+ end
56
+ )
57
+ end
58
+ end
59
+ end
60
+
61
+ class << self
62
+ def from_object(v)
63
+ Value.from_object(v)
64
+ end
65
+ end
66
+
67
+ class Value
68
+ def to_object
69
+ case get_value.class
70
+ when NullValue
71
+ nil
72
+ when ListValue
73
+ list_value.to_array
74
+ when MapValue
75
+ map_value.to_hash
76
+ when StructValue
77
+ struct_value.to_hash
78
+ else
79
+ get_value
80
+ end
81
+ end
82
+
83
+ class << self
84
+ def from_object(v)
85
+ case v
86
+ when NilClass
87
+ Value.new(null_value: NullValue.new)
88
+ when Symbol
89
+ Value.new(string_value: v.to_s)
90
+ when String
91
+ if v.encoding.eql?(Encoding::UTF_8) && v.valid_encoding?
92
+ Value.new(string_value: v)
93
+ else
94
+ Value.new(binary_value: v)
95
+ end
96
+ when Integer
97
+ Value.new(integer_value: v)
98
+ when Float
99
+ Value.new(double_value: v)
100
+ when TrueClass, FalseClass
101
+ Value.new(bool_value: v)
102
+ when Array
103
+ Value.new(list_value: ListValue.from_array(v))
104
+ when Hash
105
+ Value.new(map_value: MapValue.from_hash(v))
106
+ else
107
+ Value.new(struct_value: StructValue.from_object(v))
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,15 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (2.3.0-upfluence)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift'
8
+ require 'value_types'
9
+
10
+ module Thrift
11
+ module Types
12
+ module Value
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,213 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (2.3.0-upfluence)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift'
8
+
9
+ module Thrift
10
+ module Types
11
+ module Value
12
+ class NullValue; end
13
+
14
+ class ListValue; end
15
+
16
+ class MapEntry; end
17
+
18
+ class MapValue; end
19
+
20
+ class StructValue; end
21
+
22
+ class Value < ::Thrift::Union; end
23
+
24
+ class NullValue
25
+ include ::Thrift::Struct, ::Thrift::Struct_Union
26
+
27
+ NAME = 'NullValue'.freeze
28
+ NAMESPACE = 'types.value'.freeze
29
+
30
+
31
+ FIELDS = {
32
+
33
+ }
34
+
35
+ def struct_fields; FIELDS; end
36
+
37
+ def validate
38
+ end
39
+
40
+ ::Thrift::Struct.generate_accessors self
41
+ ::Thrift.register_struct_type self
42
+ end
43
+
44
+ class ListValue
45
+ include ::Thrift::Struct, ::Thrift::Struct_Union
46
+
47
+ NAME = 'ListValue'.freeze
48
+ NAMESPACE = 'types.value'.freeze
49
+
50
+ THRIFT_FIELD_INDEX_VALUES = 1
51
+
52
+ FIELDS = {
53
+ THRIFT_FIELD_INDEX_VALUES => {type: ::Thrift::Types::LIST, name: 'values', element: {type: ::Thrift::Types::STRUCT, class: ::Thrift::Types::Value::Value}}
54
+ }
55
+
56
+ def struct_fields; FIELDS; end
57
+
58
+ def validate
59
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field values is unset!') unless @values
60
+ end
61
+
62
+ ::Thrift::Struct.generate_accessors self
63
+ ::Thrift.register_struct_type self
64
+ end
65
+
66
+ class MapEntry
67
+ include ::Thrift::Struct, ::Thrift::Struct_Union
68
+
69
+ NAME = 'MapEntry'.freeze
70
+ NAMESPACE = 'types.value'.freeze
71
+
72
+ THRIFT_FIELD_INDEX_KEY = 1
73
+ THRIFT_FIELD_INDEX_VALUE = 2
74
+
75
+ FIELDS = {
76
+ THRIFT_FIELD_INDEX_KEY => {type: ::Thrift::Types::STRUCT, name: 'key', class: ::Thrift::Types::Value::Value},
77
+ THRIFT_FIELD_INDEX_VALUE => {type: ::Thrift::Types::STRUCT, name: 'value', class: ::Thrift::Types::Value::Value}
78
+ }
79
+
80
+ def struct_fields; FIELDS; end
81
+
82
+ def validate
83
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field key is unset!') unless @key
84
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field value is unset!') unless @value
85
+ end
86
+
87
+ ::Thrift::Struct.generate_accessors self
88
+ ::Thrift.register_struct_type self
89
+ end
90
+
91
+ class MapValue
92
+ include ::Thrift::Struct, ::Thrift::Struct_Union
93
+
94
+ NAME = 'MapValue'.freeze
95
+ NAMESPACE = 'types.value'.freeze
96
+
97
+ THRIFT_FIELD_INDEX_ENTRIES = 1
98
+
99
+ FIELDS = {
100
+ THRIFT_FIELD_INDEX_ENTRIES => {type: ::Thrift::Types::LIST, name: 'entries', element: {type: ::Thrift::Types::STRUCT, class: ::Thrift::Types::Value::MapEntry}}
101
+ }
102
+
103
+ def struct_fields; FIELDS; end
104
+
105
+ def validate
106
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field entries is unset!') unless @entries
107
+ end
108
+
109
+ ::Thrift::Struct.generate_accessors self
110
+ ::Thrift.register_struct_type self
111
+ end
112
+
113
+ class StructValue
114
+ include ::Thrift::Struct, ::Thrift::Struct_Union
115
+
116
+ NAME = 'StructValue'.freeze
117
+ NAMESPACE = 'types.value'.freeze
118
+
119
+ THRIFT_FIELD_INDEX_FIELDS = 1
120
+
121
+ FIELDS = {
122
+ THRIFT_FIELD_INDEX_FIELDS => {type: ::Thrift::Types::MAP, name: 'fields', key: {type: ::Thrift::Types::STRING}, value: {type: ::Thrift::Types::STRUCT, class: ::Thrift::Types::Value::Value}}
123
+ }
124
+
125
+ def struct_fields; FIELDS; end
126
+
127
+ def validate
128
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field fields is unset!') unless @fields
129
+ end
130
+
131
+ ::Thrift::Struct.generate_accessors self
132
+ ::Thrift.register_struct_type self
133
+ end
134
+
135
+ class Value < ::Thrift::Union
136
+ include ::Thrift::Struct_Union
137
+
138
+ NAME = 'Value'.freeze
139
+ NAMESPACE = 'types.value'.freeze
140
+
141
+ class << self
142
+ def null_value(val)
143
+ Value.new(:null_value, val)
144
+ end
145
+
146
+ def string_value(val)
147
+ Value.new(:string_value, val)
148
+ end
149
+
150
+ def binary_value(val)
151
+ Value.new(:binary_value, val)
152
+ end
153
+
154
+ def integer_value(val)
155
+ Value.new(:integer_value, val)
156
+ end
157
+
158
+ def double_value(val)
159
+ Value.new(:double_value, val)
160
+ end
161
+
162
+ def bool_value(val)
163
+ Value.new(:bool_value, val)
164
+ end
165
+
166
+ def list_value(val)
167
+ Value.new(:list_value, val)
168
+ end
169
+
170
+ def map_value(val)
171
+ Value.new(:map_value, val)
172
+ end
173
+
174
+ def struct_value(val)
175
+ Value.new(:struct_value, val)
176
+ end
177
+ end
178
+
179
+ THRIFT_FIELD_INDEX_NULL_VALUE = 1
180
+ THRIFT_FIELD_INDEX_STRING_VALUE = 2
181
+ THRIFT_FIELD_INDEX_BINARY_VALUE = 3
182
+ THRIFT_FIELD_INDEX_INTEGER_VALUE = 4
183
+ THRIFT_FIELD_INDEX_DOUBLE_VALUE = 5
184
+ THRIFT_FIELD_INDEX_BOOL_VALUE = 6
185
+ THRIFT_FIELD_INDEX_LIST_VALUE = 7
186
+ THRIFT_FIELD_INDEX_MAP_VALUE = 8
187
+ THRIFT_FIELD_INDEX_STRUCT_VALUE = 9
188
+
189
+ FIELDS = {
190
+ THRIFT_FIELD_INDEX_NULL_VALUE => {type: ::Thrift::Types::STRUCT, name: 'null_value', class: ::Thrift::Types::Value::NullValue},
191
+ THRIFT_FIELD_INDEX_STRING_VALUE => {type: ::Thrift::Types::STRING, name: 'string_value'},
192
+ THRIFT_FIELD_INDEX_BINARY_VALUE => {type: ::Thrift::Types::STRING, name: 'binary_value', binary: true},
193
+ THRIFT_FIELD_INDEX_INTEGER_VALUE => {type: ::Thrift::Types::I64, name: 'integer_value'},
194
+ THRIFT_FIELD_INDEX_DOUBLE_VALUE => {type: ::Thrift::Types::DOUBLE, name: 'double_value'},
195
+ THRIFT_FIELD_INDEX_BOOL_VALUE => {type: ::Thrift::Types::BOOL, name: 'bool_value'},
196
+ THRIFT_FIELD_INDEX_LIST_VALUE => {type: ::Thrift::Types::STRUCT, name: 'list_value', class: ::Thrift::Types::Value::ListValue},
197
+ THRIFT_FIELD_INDEX_MAP_VALUE => {type: ::Thrift::Types::STRUCT, name: 'map_value', class: ::Thrift::Types::Value::MapValue},
198
+ THRIFT_FIELD_INDEX_STRUCT_VALUE => {type: ::Thrift::Types::STRUCT, name: 'struct_value', class: ::Thrift::Types::Value::StructValue}
199
+ }
200
+
201
+ def struct_fields; FIELDS; end
202
+
203
+ def validate
204
+ raise(StandardError, 'Union fields are not set.') if get_set_field.nil? || get_value.nil?
205
+ end
206
+
207
+ ::Thrift::Union.generate_accessors self
208
+ ::Thrift.register_struct_type self
209
+ end
210
+
211
+ end
212
+ end
213
+ end
@@ -38,25 +38,25 @@ shared_examples_for 'a binary protocol' do
38
38
 
39
39
  it "should make strict_write readable" do
40
40
  @prot.strict_write.should eql(true)
41
- end
41
+ end
42
42
 
43
43
  it "should write the message header" do
44
44
  @prot.write_message_begin('testMessage', Thrift::MessageTypes::CALL, 17)
45
45
  @trans.read(@trans.available).should == [protocol_class.const_get(:VERSION_1) | Thrift::MessageTypes::CALL, "testMessage".size, "testMessage", 17].pack("NNa11N")
46
46
  end
47
-
47
+
48
48
  it "should write the message header without version when writes are not strict" do
49
49
  @prot = protocol_class.new(@trans, true, false) # no strict write
50
50
  @prot.write_message_begin('testMessage', Thrift::MessageTypes::CALL, 17)
51
51
  @trans.read(@trans.available).should == "\000\000\000\vtestMessage\001\000\000\000\021"
52
52
  end
53
-
53
+
54
54
  it "should write the message header with a version when writes are strict" do
55
55
  @prot = protocol_class.new(@trans) # strict write
56
56
  @prot.write_message_begin('testMessage', Thrift::MessageTypes::CALL, 17)
57
57
  @trans.read(@trans.available).should == "\200\001\000\001\000\000\000\vtestMessage\000\000\000\021"
58
58
  end
59
-
59
+
60
60
 
61
61
  # message footer is a noop
62
62
 
@@ -64,44 +64,44 @@ shared_examples_for 'a binary protocol' do
64
64
  @prot.write_field_begin('foo', Thrift::Types::DOUBLE, 3)
65
65
  @trans.read(@trans.available).should == [Thrift::Types::DOUBLE, 3].pack("cn")
66
66
  end
67
-
67
+
68
68
  # field footer is a noop
69
-
69
+
70
70
  it "should write the STOP field" do
71
71
  @prot.write_field_stop
72
72
  @trans.read(1).should == "\000"
73
73
  end
74
-
74
+
75
75
  it "should write the map header" do
76
76
  @prot.write_map_begin(Thrift::Types::STRING, Thrift::Types::LIST, 17)
77
77
  @trans.read(@trans.available).should == [Thrift::Types::STRING, Thrift::Types::LIST, 17].pack("ccN");
78
78
  end
79
-
79
+
80
80
  # map footer is a noop
81
-
81
+
82
82
  it "should write the list header" do
83
83
  @prot.write_list_begin(Thrift::Types::I16, 42)
84
84
  @trans.read(@trans.available).should == [Thrift::Types::I16, 42].pack("cN")
85
85
  end
86
-
86
+
87
87
  # list footer is a noop
88
-
88
+
89
89
  it "should write the set header" do
90
90
  @prot.write_set_begin(Thrift::Types::I16, 42)
91
91
  @trans.read(@trans.available).should == [Thrift::Types::I16, 42].pack("cN")
92
92
  end
93
-
93
+
94
94
  it "should write a bool" do
95
95
  @prot.write_bool(true)
96
96
  @prot.write_bool(false)
97
97
  @trans.read(@trans.available).should == "\001\000"
98
98
  end
99
-
99
+
100
100
  it "should treat a nil bool as false" do
101
101
  @prot.write_bool(nil)
102
102
  @trans.read(1).should == "\000"
103
103
  end
104
-
104
+
105
105
  it "should write a byte" do
106
106
  # byte is small enough, let's check -128..127
107
107
  (-128..127).each do |i|
@@ -117,11 +117,11 @@ shared_examples_for 'a binary protocol' do
117
117
  # and lastly, a Bignum is going to error out
118
118
  lambda { @prot.write_byte(2**65) }.should raise_error(RangeError)
119
119
  end
120
-
120
+
121
121
  it "should error gracefully when trying to write a nil byte" do
122
122
  lambda { @prot.write_byte(nil) }.should raise_error
123
123
  end
124
-
124
+
125
125
  it "should write an i16" do
126
126
  # try a random scattering of values
127
127
  # include the signed i16 minimum/maximum
@@ -130,17 +130,17 @@ shared_examples_for 'a binary protocol' do
130
130
  end
131
131
  # and try something out of signed range, it should clip
132
132
  @prot.write_i16(2**15 + 5)
133
-
133
+
134
134
  @trans.read(@trans.available).should == "\200\000\374\000\000\021\000\000\330\360\006\273\177\377\200\005"
135
-
135
+
136
136
  # a Bignum should error
137
137
  # lambda { @prot.write_i16(2**65) }.should raise_error(RangeError)
138
138
  end
139
-
139
+
140
140
  it "should error gracefully when trying to write a nil i16" do
141
141
  lambda { @prot.write_i16(nil) }.should raise_error
142
142
  end
143
-
143
+
144
144
  it "should write an i32" do
145
145
  # try a random scattering of values
146
146
  # include the signed i32 minimum/maximum
@@ -150,14 +150,14 @@ shared_examples_for 'a binary protocol' do
150
150
  # try something out of signed range, it should clip
151
151
  @trans.read(@trans.available).should == "\200\000\000\000" + "\377\376\037\r" + "\377\377\366\034" + "\377\377\377\375" + "\000\000\000\000" + "\000#\340\203" + "\000\0000+" + "\177\377\377\377"
152
152
  [2 ** 31 + 5, 2 ** 65 + 5].each do |i|
153
- lambda { @prot.write_i32(i) }.should raise_error(RangeError)
153
+ lambda { @prot.write_i32(i) }.should raise_error(RangeError)
154
154
  end
155
155
  end
156
-
156
+
157
157
  it "should error gracefully when trying to write a nil i32" do
158
158
  lambda { @prot.write_i32(nil) }.should raise_error
159
159
  end
160
-
160
+
161
161
  it "should write an i64" do
162
162
  # try a random scattering of values
163
163
  # try the signed i64 minimum/maximum
@@ -176,11 +176,11 @@ shared_examples_for 'a binary protocol' do
176
176
  "\177\377\377\377\377\377\377\377"].join("")
177
177
  lambda { @prot.write_i64(2 ** 65 + 5) }.should raise_error(RangeError)
178
178
  end
179
-
179
+
180
180
  it "should error gracefully when trying to write a nil i64" do
181
181
  lambda { @prot.write_i64(nil) }.should raise_error
182
182
  end
183
-
183
+
184
184
  it "should write a double" do
185
185
  # try a random scattering of values, including min/max
186
186
  values = [Float::MIN,-1231.15325, -123123.23, -23.23515123, 0, 12351.1325, 523.23, Float::MAX]
@@ -189,7 +189,7 @@ shared_examples_for 'a binary protocol' do
189
189
  @trans.read(@trans.available).should == [f].pack("G")
190
190
  end
191
191
  end
192
-
192
+
193
193
  it "should error gracefully when trying to write a nil double" do
194
194
  lambda { @prot.write_double(nil) }.should raise_error
195
195
  end
@@ -246,28 +246,28 @@ shared_examples_for 'a binary protocol' do
246
246
  it "should error gracefully when trying to write a nil string" do
247
247
  lambda { @prot.write_string(nil) }.should raise_error
248
248
  end
249
-
249
+
250
250
  it "should write the message header without version when writes are not strict" do
251
251
  @prot = protocol_class.new(@trans, true, false) # no strict write
252
252
  @prot.write_message_begin('testMessage', Thrift::MessageTypes::CALL, 17)
253
253
  @trans.read(@trans.available).should == "\000\000\000\vtestMessage\001\000\000\000\021"
254
254
  end
255
-
255
+
256
256
  it "should write the message header with a version when writes are strict" do
257
257
  @prot = protocol_class.new(@trans) # strict write
258
258
  @prot.write_message_begin('testMessage', Thrift::MessageTypes::CALL, 17)
259
259
  @trans.read(@trans.available).should == "\200\001\000\001\000\000\000\vtestMessage\000\000\000\021"
260
260
  end
261
-
261
+
262
262
  # message footer is a noop
263
-
263
+
264
264
  it "should read a field header" do
265
265
  @trans.write([Thrift::Types::STRING, 3].pack("cn"))
266
266
  @prot.read_field_begin.should == [nil, Thrift::Types::STRING, 3]
267
267
  end
268
-
268
+
269
269
  # field footer is a noop
270
-
270
+
271
271
  it "should read a stop field" do
272
272
  @trans.write([Thrift::Types::STOP].pack("c"));
273
273
  @prot.read_field_begin.should == [nil, Thrift::Types::STOP, 0]
@@ -277,36 +277,36 @@ shared_examples_for 'a binary protocol' do
277
277
  @trans.write([Thrift::Types::DOUBLE, Thrift::Types::I64, 42].pack("ccN"))
278
278
  @prot.read_map_begin.should == [Thrift::Types::DOUBLE, Thrift::Types::I64, 42]
279
279
  end
280
-
280
+
281
281
  # map footer is a noop
282
-
282
+
283
283
  it "should read a list header" do
284
284
  @trans.write([Thrift::Types::STRING, 17].pack("cN"))
285
285
  @prot.read_list_begin.should == [Thrift::Types::STRING, 17]
286
286
  end
287
-
287
+
288
288
  # list footer is a noop
289
-
289
+
290
290
  it "should read a set header" do
291
291
  @trans.write([Thrift::Types::STRING, 17].pack("cN"))
292
292
  @prot.read_set_begin.should == [Thrift::Types::STRING, 17]
293
293
  end
294
-
294
+
295
295
  # set footer is a noop
296
-
296
+
297
297
  it "should read a bool" do
298
298
  @trans.write("\001\000");
299
299
  @prot.read_bool.should == true
300
300
  @prot.read_bool.should == false
301
301
  end
302
-
302
+
303
303
  it "should read a byte" do
304
304
  [-128, -57, -3, 0, 17, 24, 127].each do |i|
305
305
  @trans.write([i].pack("c"))
306
306
  @prot.read_byte.should == i
307
307
  end
308
308
  end
309
-
309
+
310
310
  it "should read an i16" do
311
311
  # try a scattering of values, including min/max
312
312
  [-2**15, -5237, -353, 0, 1527, 2234, 2**15-1].each do |i|
@@ -314,7 +314,7 @@ shared_examples_for 'a binary protocol' do
314
314
  @prot.read_i16.should == i
315
315
  end
316
316
  end
317
-
317
+
318
318
  it "should read an i32" do
319
319
  # try a scattering of values, including min/max
320
320
  [-2**31, -235125, -6236, 0, 2351, 123123, 2**31-1].each do |i|
@@ -322,7 +322,7 @@ shared_examples_for 'a binary protocol' do
322
322
  @prot.read_i32.should == i
323
323
  end
324
324
  end
325
-
325
+
326
326
  it "should read an i64" do
327
327
  # try a scattering of values, including min/max
328
328
  [-2**63, -123512312, -6346, 0, 32, 2346322323, 2**63-1].each do |i|
@@ -330,7 +330,7 @@ shared_examples_for 'a binary protocol' do
330
330
  @prot.read_i64.should == i
331
331
  end
332
332
  end
333
-
333
+
334
334
  it "should read a double" do
335
335
  # try a random scattering of values, including min/max
336
336
  [Float::MIN, -231231.12351, -323.233513, 0, 123.2351235, 2351235.12351235, Float::MAX].each do |f|
@@ -383,23 +383,20 @@ shared_examples_for 'a binary protocol' do
383
383
 
384
384
  it "should perform a complete rpc with no args or return" do
385
385
  srv_test(
386
- proc {|client| client.send_voidMethod()},
387
- proc {|client| client.recv_voidMethod.should == nil}
386
+ proc {|client| client.voidMethod().should == nil },
388
387
  )
389
388
  end
390
389
 
391
390
  it "should perform a complete rpc with a primitive return type" do
392
391
  srv_test(
393
- proc {|client| client.send_primitiveMethod()},
394
- proc {|client| client.recv_primitiveMethod.should == 1}
392
+ proc {|client| client.primitiveMethod.should == 1}
395
393
  )
396
394
  end
397
395
 
398
396
  it "should perform a complete rpc with a struct return type" do
399
397
  srv_test(
400
- proc {|client| client.send_structMethod()},
401
398
  proc {|client|
402
- result = client.recv_structMethod
399
+ result = client.structMethod
403
400
  result.set_byte_map = nil
404
401
  result.map_byte_map = nil
405
402
  result.should == Fixtures::COMPACT_PROTOCOL_TEST_STRUCT
@@ -410,14 +407,14 @@ shared_examples_for 'a binary protocol' do
410
407
  def get_socket_connection
411
408
  server = Thrift::ServerSocket.new("localhost", 9090)
412
409
  server.listen
413
-
410
+
414
411
  clientside = Thrift::Socket.new("localhost", 9090)
415
412
  clientside.open
416
413
  serverside = server.accept
417
414
  [clientside, serverside, server]
418
415
  end
419
416
 
420
- def srv_test(firstblock, secondblock)
417
+ def srv_test(block)
421
418
  clientside, serverside, server = get_socket_connection
422
419
 
423
420
  clientproto = protocol_class.new(clientside)
@@ -425,29 +422,29 @@ shared_examples_for 'a binary protocol' do
425
422
 
426
423
  processor = Srv::Processor.new(SrvHandler.new)
427
424
 
428
- client = Srv::Client.new(clientproto, clientproto)
425
+ client = Srv::Client.new(clientproto)
426
+
427
+ t = Thread.new { processor.process(serverproto, serverproto) }
429
428
 
430
- # first block
431
- firstblock.call(client)
429
+ resp = block.call(client)
432
430
 
433
- processor.process(serverproto, serverproto)
431
+ t.join
434
432
 
435
- # second block
436
- secondblock.call(client)
433
+ resp
437
434
  ensure
438
435
  clientside.close
439
436
  serverside.close
440
437
  server.close
441
438
  end
442
439
 
443
- class SrvHandler
440
+ class SrvHandler
444
441
  def voidMethod()
445
442
  end
446
-
443
+
447
444
  def primitiveMethod
448
445
  1
449
446
  end
450
-
447
+
451
448
  def structMethod
452
449
  Fixtures::COMPACT_PROTOCOL_TEST_STRUCT
453
450
  end