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.
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
@@ -26,6 +26,12 @@ module Thrift
26
26
  @protocol_factory = protocol_factory ? protocol_factory : Thrift::BinaryProtocolFactory.new
27
27
  end
28
28
 
29
- def serve; nil; end
29
+ def serve
30
+ raise NotImplementedError
31
+ end
32
+
33
+ def to_s
34
+ "server(#{@protocol_factory.to_s}(#{@transport_factory.to_s}(#{@server_transport.to_s})))"
35
+ end
30
36
  end
31
- end
37
+ end
@@ -39,5 +39,9 @@ module Thrift
39
39
  @server_transport.close
40
40
  end
41
41
  end
42
+
43
+ def to_s
44
+ "simple(#{super.to_s})"
45
+ end
42
46
  end
43
- end
47
+ end
@@ -71,5 +71,9 @@ module Thrift
71
71
  @server_transport.close
72
72
  end
73
73
  end
74
+
75
+ def to_s
76
+ "threadpool(#{super.to_s})"
77
+ end
74
78
  end
75
- end
79
+ end
@@ -43,5 +43,9 @@ module Thrift
43
43
  @server_transport.close
44
44
  end
45
45
  end
46
+
47
+ def to_s
48
+ "threaded(#{super.to_s})"
49
+ end
46
50
  end
47
- end
51
+ end
@@ -34,4 +34,4 @@ module Thrift
34
34
  raise NotImplementedError
35
35
  end
36
36
  end
37
- end
37
+ end
@@ -99,11 +99,19 @@ module Thrift
99
99
  alias_method :<<, :write
100
100
 
101
101
  def flush; end
102
+
103
+ def to_s
104
+ "base"
105
+ end
102
106
  end
103
107
 
104
108
  class BaseTransportFactory
105
109
  def get_transport(trans)
106
110
  return trans
107
111
  end
112
+
113
+ def to_s
114
+ "base"
115
+ end
108
116
  end
109
117
  end
@@ -104,11 +104,19 @@ module Thrift
104
104
 
105
105
  @transport.flush
106
106
  end
107
+
108
+ def to_s
109
+ "buffered(#{@transport.to_s})"
110
+ end
107
111
  end
108
112
 
109
113
  class BufferedTransportFactory < BaseTransportFactory
110
114
  def get_transport(transport)
111
115
  return BufferedTransport.new(transport)
112
116
  end
117
+
118
+ def to_s
119
+ "buffered"
120
+ end
113
121
  end
114
- end
122
+ end
@@ -99,6 +99,10 @@ module Thrift
99
99
  @wbuf = Bytes.empty_byte_buffer
100
100
  end
101
101
 
102
+ def to_s
103
+ "framed(#{@transport.to_s})"
104
+ end
105
+
102
106
  private
103
107
 
104
108
  def read_frame
@@ -113,5 +117,9 @@ module Thrift
113
117
  def get_transport(transport)
114
118
  return FramedTransport.new(transport)
115
119
  end
120
+
121
+ def to_s
122
+ "framed"
123
+ end
116
124
  end
117
- end
125
+ end
@@ -50,7 +50,12 @@ module Thrift
50
50
  data = resp.body
51
51
  data = Bytes.force_binary_encoding(data)
52
52
  @inbuf = StringIO.new data
53
+ ensure
53
54
  @outbuf = Bytes.empty_byte_buffer
54
55
  end
56
+
57
+ def to_s
58
+ "@{self.url}"
59
+ end
55
60
  end
56
61
  end
@@ -35,5 +35,8 @@ module Thrift
35
35
  def write(buf); @output.write(Bytes.force_binary_encoding(buf)) end
36
36
  def close; @input.close; @output.close end
37
37
  def to_io; @input end # we're assuming this is used in a IO.select for reading
38
+ def to_s
39
+ "iostream(input=#{@input.to_s},output=#{@output.to_s})"
40
+ end
38
41
  end
39
- end
42
+ end
@@ -121,5 +121,9 @@ module Thrift
121
121
  end
122
122
  out.join(" ")
123
123
  end
124
+
125
+ def to_s
126
+ "memory"
127
+ end
124
128
  end
125
129
  end
@@ -59,5 +59,10 @@ module Thrift
59
59
  end
60
60
 
61
61
  alias to_io handle
62
+
63
+ def to_s
64
+ "socket(#{@host}:#{@port})"
65
+ end
66
+
62
67
  end
63
- end
68
+ end
@@ -33,26 +33,28 @@ module Thrift
33
33
  attr_accessor :handle, :timeout
34
34
 
35
35
  def open
36
- begin
37
- addrinfo = ::Socket::getaddrinfo(@host, @port, nil, ::Socket::SOCK_STREAM).first
38
- @handle = ::Socket.new(addrinfo[4], ::Socket::SOCK_STREAM, 0)
39
- @handle.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1)
40
- sockaddr = ::Socket.sockaddr_in(addrinfo[1], addrinfo[3])
36
+ for addrinfo in ::Socket::getaddrinfo(@host, @port, nil, ::Socket::SOCK_STREAM) do
41
37
  begin
42
- @handle.connect_nonblock(sockaddr)
43
- rescue Errno::EINPROGRESS
44
- unless IO.select(nil, [ @handle ], nil, @timeout)
45
- raise TransportException.new(TransportException::NOT_OPEN, "Connection timeout to #{@desc}")
46
- end
38
+ socket = ::Socket.new(addrinfo[4], ::Socket::SOCK_STREAM, 0)
39
+ socket.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1)
40
+ sockaddr = ::Socket.sockaddr_in(addrinfo[1], addrinfo[3])
47
41
  begin
48
- @handle.connect_nonblock(sockaddr)
49
- rescue Errno::EISCONN
42
+ socket.connect_nonblock(sockaddr)
43
+ rescue Errno::EINPROGRESS
44
+ unless IO.select(nil, [ socket ], nil, @timeout)
45
+ next
46
+ end
47
+ begin
48
+ socket.connect_nonblock(sockaddr)
49
+ rescue Errno::EISCONN
50
+ end
50
51
  end
52
+ return @handle = socket
53
+ rescue StandardError => e
54
+ next
51
55
  end
52
- @handle
53
- rescue StandardError => e
54
- raise TransportException.new(TransportException::NOT_OPEN, "Could not connect to #{@desc}: #{e}")
55
56
  end
57
+ raise TransportException.new(TransportException::NOT_OPEN, "Could not connect to #{@desc}: #{e}")
56
58
  end
57
59
 
58
60
  def open?
@@ -132,8 +134,10 @@ module Thrift
132
134
  @handle = nil
133
135
  end
134
136
 
135
- def to_io
136
- @handle
137
+ alias to_io handle
138
+
139
+ def to_s
140
+ "socket(#{@host}:#{@port})"
137
141
  end
138
142
  end
139
143
  end
@@ -0,0 +1,41 @@
1
+ # encoding: ascii-8bit
2
+ #
3
+ # Licensed to the Apache Software Foundation (ASF) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The ASF licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+ #
20
+
21
+ require 'socket'
22
+
23
+ module Thrift
24
+ class SSLServerSocket < ServerSocket
25
+ def initialize(host_or_port, port = nil, ssl_context = nil)
26
+ super(host_or_port, port)
27
+ @ssl_context = ssl_context
28
+ end
29
+
30
+ attr_accessor :ssl_context
31
+
32
+ def listen
33
+ socket = TCPServer.new(@host, @port)
34
+ @handle = OpenSSL::SSL::SSLServer.new(socket, @ssl_context)
35
+ end
36
+
37
+ def to_s
38
+ "ssl(#{super.to_s})"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: ascii-8bit
2
+ #
3
+ # Licensed to the Apache Software Foundation (ASF) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The ASF licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Thrift
21
+ class SSLSocket < Socket
22
+ def initialize(host='localhost', port=9090, timeout=nil, ssl_context=nil)
23
+ super(host, port, timeout)
24
+ @ssl_context = ssl_context
25
+ end
26
+
27
+ attr_accessor :ssl_context
28
+
29
+ def open
30
+ socket = super
31
+ @handle = OpenSSL::SSL::SSLSocket.new(socket, @ssl_context)
32
+ begin
33
+ @handle.connect_nonblock
34
+ @handle.post_connection_check(@host)
35
+ @handle
36
+ rescue IO::WaitReadable
37
+ IO.select([ @handle ], nil, nil, @timeout)
38
+ retry
39
+ rescue IO::WaitWritable
40
+ IO.select(nil, [ @handle ], nil, @timeout)
41
+ retry
42
+ rescue StandardError => e
43
+ raise TransportException.new(TransportException::NOT_OPEN, "Could not connect to #{@desc}: #{e}")
44
+ end
45
+ end
46
+
47
+ def to_s
48
+ "ssl(#{super.to_s})"
49
+ end
50
+ end
51
+ end
@@ -56,5 +56,9 @@ module Thrift
56
56
  end
57
57
 
58
58
  alias to_io handle
59
+
60
+ def to_s
61
+ "domain(#{@path})"
62
+ end
59
63
  end
60
- end
64
+ end
@@ -36,5 +36,9 @@ module Thrift
36
36
  raise TransportException.new(TransportException::NOT_OPEN, "Could not open UNIX socket at #{@path}")
37
37
  end
38
38
  end
39
+
40
+ def to_s
41
+ "domain(#{@path})"
42
+ end
39
43
  end
40
- end
44
+ end
@@ -87,12 +87,9 @@ module Thrift
87
87
  end
88
88
 
89
89
  def ==(other)
90
- other != nil && @setfield == other.get_set_field && @value == other.get_value
91
- end
92
-
93
- def eql?(other)
94
- self.class == other.class && self == other
90
+ other.equal?(self) || other.instance_of?(self.class) && @setfield == other.get_set_field && @value == other.get_value
95
91
  end
92
+ alias_method :eql?, :==
96
93
 
97
94
  def hash
98
95
  [self.class.name, @setfield, @value].hash
@@ -176,4 +173,4 @@ module Thrift
176
173
  end
177
174
  end
178
175
  end
179
- end
176
+ end
@@ -0,0 +1,27 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+ #
18
+
19
+ namespace rb Base
20
+
21
+ struct Hello {
22
+ 1: string greeting = "hello world"
23
+ }
24
+
25
+ service BaseService {
26
+ Hello greeting(1:bool english)
27
+ }
@@ -0,0 +1,25 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+ #
18
+
19
+ namespace rb Extended
20
+
21
+ include "BaseService.thrift"
22
+
23
+ service ExtendedService extends BaseService.BaseService {
24
+ void ping()
25
+ }
@@ -0,0 +1,44 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ #
21
+ # Licensed to the Apache Software Foundation (ASF) under one
22
+ # or more contributor license agreements. See the NOTICE file
23
+ # distributed with this work for additional information
24
+ # regarding copyright ownership. The ASF licenses this file
25
+ # to you under the Apache License, Version 2.0 (the
26
+ # "License"); you may not use this file except in compliance
27
+ # with the License. You may obtain a copy of the License at
28
+ #
29
+ # http://www.apache.org/licenses/LICENSE-2.0
30
+ #
31
+ # Unless required by applicable law or agreed to in writing,
32
+ # software distributed under the License is distributed on an
33
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
34
+ # KIND, either express or implied. See the License for the
35
+ # specific language governing permissions and limitations
36
+ # under the License.
37
+ #
38
+
39
+ namespace rb OtherNamespace
40
+
41
+ enum SomeEnum {
42
+ ONE
43
+ TWO
44
+ }