grpc 0.13.0.pre1.1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/etc/roots.pem +5114 -0
  3. data/grpc_c.32.ruby +0 -0
  4. data/grpc_c.64.ruby +0 -0
  5. data/src/ruby/bin/apis/google/protobuf/empty.rb +44 -0
  6. data/src/ruby/bin/apis/pubsub_demo.rb +256 -0
  7. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +174 -0
  8. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +103 -0
  9. data/src/ruby/bin/grpc_ruby_interop_client +33 -0
  10. data/src/ruby/bin/grpc_ruby_interop_server +33 -0
  11. data/src/ruby/bin/interop/interop_client.rb +51 -0
  12. data/src/ruby/bin/interop/interop_server.rb +50 -0
  13. data/src/ruby/bin/math.rb +32 -0
  14. data/src/ruby/bin/math_client.rb +147 -0
  15. data/src/ruby/bin/math_server.rb +206 -0
  16. data/src/ruby/bin/math_services.rb +27 -0
  17. data/src/ruby/bin/noproto_client.rb +108 -0
  18. data/src/ruby/bin/noproto_server.rb +112 -0
  19. data/src/ruby/ext/grpc/extconf.rb +129 -0
  20. data/src/ruby/ext/grpc/rb_byte_buffer.c +70 -0
  21. data/src/ruby/ext/grpc/rb_byte_buffer.h +47 -0
  22. data/src/ruby/ext/grpc/rb_call.c +908 -0
  23. data/src/ruby/ext/grpc/rb_call.h +66 -0
  24. data/src/ruby/ext/grpc/rb_call_credentials.c +319 -0
  25. data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
  26. data/src/ruby/ext/grpc/rb_channel.c +432 -0
  27. data/src/ruby/ext/grpc/rb_channel.h +47 -0
  28. data/src/ruby/ext/grpc/rb_channel_args.c +169 -0
  29. data/src/ruby/ext/grpc/rb_channel_args.h +53 -0
  30. data/src/ruby/ext/grpc/rb_channel_credentials.c +268 -0
  31. data/src/ruby/ext/grpc/rb_channel_credentials.h +47 -0
  32. data/src/ruby/ext/grpc/rb_completion_queue.c +183 -0
  33. data/src/ruby/ext/grpc/rb_completion_queue.h +55 -0
  34. data/src/ruby/ext/grpc/rb_event_thread.c +158 -0
  35. data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
  36. data/src/ruby/ext/grpc/rb_grpc.c +336 -0
  37. data/src/ruby/ext/grpc/rb_grpc.h +85 -0
  38. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
  39. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
  40. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  41. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  42. data/src/ruby/ext/grpc/rb_server.c +400 -0
  43. data/src/ruby/ext/grpc/rb_server.h +47 -0
  44. data/src/ruby/ext/grpc/rb_server_credentials.c +284 -0
  45. data/src/ruby/ext/grpc/rb_server_credentials.h +47 -0
  46. data/src/ruby/lib/grpc.rb +44 -0
  47. data/src/ruby/lib/grpc/2.0/grpc_c.so +0 -0
  48. data/src/ruby/lib/grpc/2.1/grpc_c.so +0 -0
  49. data/src/ruby/lib/grpc/2.2/grpc_c.so +0 -0
  50. data/src/ruby/lib/grpc/2.3/grpc_c.so +0 -0
  51. data/src/ruby/lib/grpc/core/time_consts.rb +71 -0
  52. data/src/ruby/lib/grpc/errors.rb +62 -0
  53. data/src/ruby/lib/grpc/generic/active_call.rb +488 -0
  54. data/src/ruby/lib/grpc/generic/bidi_call.rb +218 -0
  55. data/src/ruby/lib/grpc/generic/client_stub.rb +471 -0
  56. data/src/ruby/lib/grpc/generic/rpc_desc.rb +147 -0
  57. data/src/ruby/lib/grpc/generic/rpc_server.rb +504 -0
  58. data/src/ruby/lib/grpc/generic/service.rb +234 -0
  59. data/src/ruby/lib/grpc/grpc.rb +34 -0
  60. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  61. data/src/ruby/lib/grpc/logconfig.rb +59 -0
  62. data/src/ruby/lib/grpc/notifier.rb +60 -0
  63. data/src/ruby/lib/grpc/version.rb +33 -0
  64. data/src/ruby/pb/README.md +42 -0
  65. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  66. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  67. data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
  68. data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
  69. data/src/ruby/pb/test/client.rb +469 -0
  70. data/src/ruby/pb/test/proto/empty.rb +15 -0
  71. data/src/ruby/pb/test/proto/messages.rb +80 -0
  72. data/src/ruby/pb/test/proto/test.rb +14 -0
  73. data/src/ruby/pb/test/proto/test_services.rb +64 -0
  74. data/src/ruby/pb/test/server.rb +253 -0
  75. data/src/ruby/spec/call_credentials_spec.rb +57 -0
  76. data/src/ruby/spec/call_spec.rb +163 -0
  77. data/src/ruby/spec/channel_credentials_spec.rb +97 -0
  78. data/src/ruby/spec/channel_spec.rb +177 -0
  79. data/src/ruby/spec/client_server_spec.rb +475 -0
  80. data/src/ruby/spec/completion_queue_spec.rb +42 -0
  81. data/src/ruby/spec/generic/active_call_spec.rb +373 -0
  82. data/src/ruby/spec/generic/client_stub_spec.rb +476 -0
  83. data/src/ruby/spec/generic/rpc_desc_spec.rb +331 -0
  84. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +138 -0
  85. data/src/ruby/spec/generic/rpc_server_spec.rb +576 -0
  86. data/src/ruby/spec/generic/service_spec.rb +345 -0
  87. data/src/ruby/spec/pb/health/checker_spec.rb +232 -0
  88. data/src/ruby/spec/server_credentials_spec.rb +94 -0
  89. data/src/ruby/spec/server_spec.rb +209 -0
  90. data/src/ruby/spec/spec_helper.rb +69 -0
  91. data/src/ruby/spec/testdata/README +1 -0
  92. data/src/ruby/spec/testdata/ca.pem +15 -0
  93. data/src/ruby/spec/testdata/server1.key +16 -0
  94. data/src/ruby/spec/testdata/server1.pem +16 -0
  95. data/src/ruby/spec/time_consts_spec.rb +89 -0
  96. metadata +320 -0
@@ -0,0 +1,15 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: test/proto/empty.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ Google::Protobuf::DescriptorPool.generated_pool.build do
7
+ add_message "grpc.testing.Empty" do
8
+ end
9
+ end
10
+
11
+ module Grpc
12
+ module Testing
13
+ Empty = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.Empty").msgclass
14
+ end
15
+ end
@@ -0,0 +1,80 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: test/proto/messages.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ Google::Protobuf::DescriptorPool.generated_pool.build do
7
+ add_message "grpc.testing.Payload" do
8
+ optional :type, :enum, 1, "grpc.testing.PayloadType"
9
+ optional :body, :bytes, 2
10
+ end
11
+ add_message "grpc.testing.EchoStatus" do
12
+ optional :code, :int32, 1
13
+ optional :message, :string, 2
14
+ end
15
+ add_message "grpc.testing.SimpleRequest" do
16
+ optional :response_type, :enum, 1, "grpc.testing.PayloadType"
17
+ optional :response_size, :int32, 2
18
+ optional :payload, :message, 3, "grpc.testing.Payload"
19
+ optional :fill_username, :bool, 4
20
+ optional :fill_oauth_scope, :bool, 5
21
+ optional :response_compression, :enum, 6, "grpc.testing.CompressionType"
22
+ optional :response_status, :message, 7, "grpc.testing.EchoStatus"
23
+ end
24
+ add_message "grpc.testing.SimpleResponse" do
25
+ optional :payload, :message, 1, "grpc.testing.Payload"
26
+ optional :username, :string, 2
27
+ optional :oauth_scope, :string, 3
28
+ end
29
+ add_message "grpc.testing.StreamingInputCallRequest" do
30
+ optional :payload, :message, 1, "grpc.testing.Payload"
31
+ end
32
+ add_message "grpc.testing.StreamingInputCallResponse" do
33
+ optional :aggregated_payload_size, :int32, 1
34
+ end
35
+ add_message "grpc.testing.ResponseParameters" do
36
+ optional :size, :int32, 1
37
+ optional :interval_us, :int32, 2
38
+ end
39
+ add_message "grpc.testing.StreamingOutputCallRequest" do
40
+ optional :response_type, :enum, 1, "grpc.testing.PayloadType"
41
+ repeated :response_parameters, :message, 2, "grpc.testing.ResponseParameters"
42
+ optional :payload, :message, 3, "grpc.testing.Payload"
43
+ optional :response_compression, :enum, 6, "grpc.testing.CompressionType"
44
+ optional :response_status, :message, 7, "grpc.testing.EchoStatus"
45
+ end
46
+ add_message "grpc.testing.StreamingOutputCallResponse" do
47
+ optional :payload, :message, 1, "grpc.testing.Payload"
48
+ end
49
+ add_message "grpc.testing.ReconnectInfo" do
50
+ optional :passed, :bool, 1
51
+ repeated :backoff_ms, :int32, 2
52
+ end
53
+ add_enum "grpc.testing.PayloadType" do
54
+ value :COMPRESSABLE, 0
55
+ value :UNCOMPRESSABLE, 1
56
+ value :RANDOM, 2
57
+ end
58
+ add_enum "grpc.testing.CompressionType" do
59
+ value :NONE, 0
60
+ value :GZIP, 1
61
+ value :DEFLATE, 2
62
+ end
63
+ end
64
+
65
+ module Grpc
66
+ module Testing
67
+ Payload = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.Payload").msgclass
68
+ EchoStatus = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.EchoStatus").msgclass
69
+ SimpleRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.SimpleRequest").msgclass
70
+ SimpleResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.SimpleResponse").msgclass
71
+ StreamingInputCallRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.StreamingInputCallRequest").msgclass
72
+ StreamingInputCallResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.StreamingInputCallResponse").msgclass
73
+ ResponseParameters = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.ResponseParameters").msgclass
74
+ StreamingOutputCallRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.StreamingOutputCallRequest").msgclass
75
+ StreamingOutputCallResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.StreamingOutputCallResponse").msgclass
76
+ ReconnectInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.ReconnectInfo").msgclass
77
+ PayloadType = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.PayloadType").enummodule
78
+ CompressionType = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.CompressionType").enummodule
79
+ end
80
+ end
@@ -0,0 +1,14 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: test/proto/test.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ require 'test/proto/empty'
7
+ require 'test/proto/messages'
8
+ Google::Protobuf::DescriptorPool.generated_pool.build do
9
+ end
10
+
11
+ module Grpc
12
+ module Testing
13
+ end
14
+ end
@@ -0,0 +1,64 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: test/proto/test.proto for package 'grpc.testing'
3
+
4
+ require 'grpc'
5
+ require 'test/proto/test'
6
+
7
+ module Grpc
8
+ module Testing
9
+ module TestService
10
+
11
+ # TODO: add proto service documentation here
12
+ class Service
13
+
14
+ include GRPC::GenericService
15
+
16
+ self.marshal_class_method = :encode
17
+ self.unmarshal_class_method = :decode
18
+ self.service_name = 'grpc.testing.TestService'
19
+
20
+ rpc :EmptyCall, Empty, Empty
21
+ rpc :UnaryCall, SimpleRequest, SimpleResponse
22
+ rpc :StreamingOutputCall, StreamingOutputCallRequest, stream(StreamingOutputCallResponse)
23
+ rpc :StreamingInputCall, stream(StreamingInputCallRequest), StreamingInputCallResponse
24
+ rpc :FullDuplexCall, stream(StreamingOutputCallRequest), stream(StreamingOutputCallResponse)
25
+ rpc :HalfDuplexCall, stream(StreamingOutputCallRequest), stream(StreamingOutputCallResponse)
26
+ end
27
+
28
+ Stub = Service.rpc_stub_class
29
+ end
30
+ module UnimplementedService
31
+
32
+ # TODO: add proto service documentation here
33
+ class Service
34
+
35
+ include GRPC::GenericService
36
+
37
+ self.marshal_class_method = :encode
38
+ self.unmarshal_class_method = :decode
39
+ self.service_name = 'grpc.testing.UnimplementedService'
40
+
41
+ rpc :UnimplementedCall, Empty, Empty
42
+ end
43
+
44
+ Stub = Service.rpc_stub_class
45
+ end
46
+ module ReconnectService
47
+
48
+ # TODO: add proto service documentation here
49
+ class Service
50
+
51
+ include GRPC::GenericService
52
+
53
+ self.marshal_class_method = :encode
54
+ self.unmarshal_class_method = :decode
55
+ self.service_name = 'grpc.testing.ReconnectService'
56
+
57
+ rpc :Start, Empty, Empty
58
+ rpc :Stop, Empty, ReconnectInfo
59
+ end
60
+
61
+ Stub = Service.rpc_stub_class
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,253 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2015, Google Inc.
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions are
8
+ # met:
9
+ #
10
+ # * Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # * Redistributions in binary form must reproduce the above
13
+ # copyright notice, this list of conditions and the following disclaimer
14
+ # in the documentation and/or other materials provided with the
15
+ # distribution.
16
+ # * Neither the name of Google Inc. nor the names of its
17
+ # contributors may be used to endorse or promote products derived from
18
+ # this software without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ # interop_server is a Testing app that runs a gRPC interop testing server.
33
+ #
34
+ # It helps validate interoperation b/w gRPC in different environments
35
+ #
36
+ # Helps validate interoperation b/w different gRPC implementations.
37
+ #
38
+ # Usage: $ path/to/interop_server.rb --port
39
+
40
+ this_dir = File.expand_path(File.dirname(__FILE__))
41
+ lib_dir = File.join(File.dirname(File.dirname(this_dir)), 'lib')
42
+ pb_dir = File.dirname(File.dirname(this_dir))
43
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
44
+ $LOAD_PATH.unshift(pb_dir) unless $LOAD_PATH.include?(pb_dir)
45
+ $LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir)
46
+
47
+ require 'forwardable'
48
+ require 'logger'
49
+ require 'optparse'
50
+
51
+ require 'grpc'
52
+
53
+ require 'test/proto/empty'
54
+ require 'test/proto/messages'
55
+ require 'test/proto/test_services'
56
+
57
+ # DebugIsTruncated extends the default Logger to truncate debug messages
58
+ class DebugIsTruncated < Logger
59
+ def debug(s)
60
+ super(truncate(s, 1024))
61
+ end
62
+
63
+ # Truncates a given +text+ after a given <tt>length</tt> if +text+ is longer than <tt>length</tt>:
64
+ #
65
+ # 'Once upon a time in a world far far away'.truncate(27)
66
+ # # => "Once upon a time in a wo..."
67
+ #
68
+ # Pass a string or regexp <tt>:separator</tt> to truncate +text+ at a natural break:
69
+ #
70
+ # 'Once upon a time in a world far far away'.truncate(27, separator: ' ')
71
+ # # => "Once upon a time in a..."
72
+ #
73
+ # 'Once upon a time in a world far far away'.truncate(27, separator: /\s/)
74
+ # # => "Once upon a time in a..."
75
+ #
76
+ # The last characters will be replaced with the <tt>:omission</tt> string (defaults to "...")
77
+ # for a total length not exceeding <tt>length</tt>:
78
+ #
79
+ # 'And they found that many people were sleeping better.'.truncate(25, omission: '... (continued)')
80
+ # # => "And they f... (continued)"
81
+ def truncate(s, truncate_at, options = {})
82
+ return s unless s.length > truncate_at
83
+ omission = options[:omission] || '...'
84
+ with_extra_room = truncate_at - omission.length
85
+ stop = \
86
+ if options[:separator]
87
+ rindex(options[:separator], with_extra_room) || with_extra_room
88
+ else
89
+ with_extra_room
90
+ end
91
+ "#{s[0, stop]}#{omission}"
92
+ end
93
+ end
94
+
95
+ # RubyLogger defines a logger for gRPC based on the standard ruby logger.
96
+ module RubyLogger
97
+ def logger
98
+ LOGGER
99
+ end
100
+
101
+ LOGGER = DebugIsTruncated.new(STDOUT)
102
+ LOGGER.level = Logger::WARN
103
+ end
104
+
105
+ # GRPC is the general RPC module
106
+ module GRPC
107
+ # Inject the noop #logger if no module-level logger method has been injected.
108
+ extend RubyLogger
109
+ end
110
+
111
+ # loads the certificates by the test server.
112
+ def load_test_certs
113
+ this_dir = File.expand_path(File.dirname(__FILE__))
114
+ data_dir = File.join(File.dirname(File.dirname(this_dir)), 'spec/testdata')
115
+ files = ['ca.pem', 'server1.key', 'server1.pem']
116
+ files.map { |f| File.open(File.join(data_dir, f)).read }
117
+ end
118
+
119
+ # creates a ServerCredentials from the test certificates.
120
+ def test_server_creds
121
+ certs = load_test_certs
122
+ GRPC::Core::ServerCredentials.new(
123
+ nil, [{private_key: certs[1], cert_chain: certs[2]}], false)
124
+ end
125
+
126
+ # produces a string of null chars (\0) of length l.
127
+ def nulls(l)
128
+ fail 'requires #{l} to be +ve' if l < 0
129
+ [].pack('x' * l).force_encoding('ascii-8bit')
130
+ end
131
+
132
+ # A EnumeratorQueue wraps a Queue yielding the items added to it via each_item.
133
+ class EnumeratorQueue
134
+ extend Forwardable
135
+ def_delegators :@q, :push
136
+
137
+ def initialize(sentinel)
138
+ @q = Queue.new
139
+ @sentinel = sentinel
140
+ end
141
+
142
+ def each_item
143
+ return enum_for(:each_item) unless block_given?
144
+ loop do
145
+ r = @q.pop
146
+ break if r.equal?(@sentinel)
147
+ fail r if r.is_a? Exception
148
+ yield r
149
+ end
150
+ end
151
+ end
152
+
153
+ # A runnable implementation of the schema-specified testing service, with each
154
+ # service method implemented as required by the interop testing spec.
155
+ class TestTarget < Grpc::Testing::TestService::Service
156
+ include Grpc::Testing
157
+ include Grpc::Testing::PayloadType
158
+
159
+ def empty_call(_empty, _call)
160
+ Empty.new
161
+ end
162
+
163
+ def unary_call(simple_req, _call)
164
+ req_size = simple_req.response_size
165
+ SimpleResponse.new(payload: Payload.new(type: :COMPRESSABLE,
166
+ body: nulls(req_size)))
167
+ end
168
+
169
+ def streaming_input_call(call)
170
+ sizes = call.each_remote_read.map { |x| x.payload.body.length }
171
+ sum = sizes.inject(0) { |s, x| s + x }
172
+ StreamingInputCallResponse.new(aggregated_payload_size: sum)
173
+ end
174
+
175
+ def streaming_output_call(req, _call)
176
+ cls = StreamingOutputCallResponse
177
+ req.response_parameters.map do |p|
178
+ cls.new(payload: Payload.new(type: req.response_type,
179
+ body: nulls(p.size)))
180
+ end
181
+ end
182
+
183
+ def full_duplex_call(reqs)
184
+ # reqs is a lazy Enumerator of the requests sent by the client.
185
+ q = EnumeratorQueue.new(self)
186
+ cls = StreamingOutputCallResponse
187
+ Thread.new do
188
+ begin
189
+ GRPC.logger.info('interop-server: started receiving')
190
+ reqs.each do |req|
191
+ resp_size = req.response_parameters[0].size
192
+ GRPC.logger.info("read a req, response size is #{resp_size}")
193
+ resp = cls.new(payload: Payload.new(type: req.response_type,
194
+ body: nulls(resp_size)))
195
+ q.push(resp)
196
+ end
197
+ GRPC.logger.info('interop-server: finished receiving')
198
+ q.push(self)
199
+ rescue StandardError => e
200
+ GRPC.logger.info('interop-server: failed')
201
+ GRPC.logger.warn(e)
202
+ q.push(e) # share the exception with the enumerator
203
+ end
204
+ end
205
+ q.each_item
206
+ end
207
+
208
+ def half_duplex_call(reqs)
209
+ # TODO: update with unique behaviour of the half_duplex_call if that's
210
+ # ever required by any of the tests.
211
+ full_duplex_call(reqs)
212
+ end
213
+ end
214
+
215
+ # validates the the command line options, returning them as a Hash.
216
+ def parse_options
217
+ options = {
218
+ 'port' => nil,
219
+ 'secure' => false
220
+ }
221
+ OptionParser.new do |opts|
222
+ opts.banner = 'Usage: --port port'
223
+ opts.on('--port PORT', 'server port') do |v|
224
+ options['port'] = v
225
+ end
226
+ opts.on('--use_tls USE_TLS', ['false', 'true'],
227
+ 'require a secure connection?') do |v|
228
+ options['secure'] = v == 'true'
229
+ end
230
+ end.parse!
231
+
232
+ if options['port'].nil?
233
+ fail(OptionParser::MissingArgument, 'please specify --port')
234
+ end
235
+ options
236
+ end
237
+
238
+ def main
239
+ opts = parse_options
240
+ host = "0.0.0.0:#{opts['port']}"
241
+ s = GRPC::RpcServer.new
242
+ if opts['secure']
243
+ s.add_http2_port(host, test_server_creds)
244
+ GRPC.logger.info("... running securely on #{host}")
245
+ else
246
+ s.add_http2_port(host, :this_port_is_insecure)
247
+ GRPC.logger.info("... running insecurely on #{host}")
248
+ end
249
+ s.handle(TestTarget)
250
+ s.run_till_terminated
251
+ end
252
+
253
+ main
@@ -0,0 +1,57 @@
1
+ # Copyright 2015, Google Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are
6
+ # met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above
11
+ # copyright notice, this list of conditions and the following disclaimer
12
+ # in the documentation and/or other materials provided with the
13
+ # distribution.
14
+ # * Neither the name of Google Inc. nor the names of its
15
+ # contributors may be used to endorse or promote products derived from
16
+ # this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ require 'grpc'
31
+
32
+ describe GRPC::Core::CallCredentials do
33
+ CallCredentials = GRPC::Core::CallCredentials
34
+
35
+ let(:auth_proc) { proc { { 'plugin_key' => 'plugin_value' } } }
36
+
37
+ describe '#new' do
38
+ it 'can successfully create a CallCredentials from a proc' do
39
+ expect { CallCredentials.new(auth_proc) }.not_to raise_error
40
+ end
41
+ end
42
+
43
+ describe '#compose' do
44
+ it 'can compose with another CallCredentials' do
45
+ creds1 = CallCredentials.new(auth_proc)
46
+ creds2 = CallCredentials.new(auth_proc)
47
+ expect { creds1.compose creds2 }.not_to raise_error
48
+ end
49
+
50
+ it 'can compose with multiple CallCredentials' do
51
+ creds1 = CallCredentials.new(auth_proc)
52
+ creds2 = CallCredentials.new(auth_proc)
53
+ creds3 = CallCredentials.new(auth_proc)
54
+ expect { creds1.compose(creds2, creds3) }.not_to raise_error
55
+ end
56
+ end
57
+ end