grpc 0.13.0.pre1.1-universal-darwin

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 (95) 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.bundle +0 -0
  48. data/src/ruby/lib/grpc/2.1/grpc_c.bundle +0 -0
  49. data/src/ruby/lib/grpc/2.2/grpc_c.bundle +0 -0
  50. data/src/ruby/lib/grpc/2.3/grpc_c.bundle +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/logconfig.rb +59 -0
  61. data/src/ruby/lib/grpc/notifier.rb +60 -0
  62. data/src/ruby/lib/grpc/version.rb +33 -0
  63. data/src/ruby/pb/README.md +42 -0
  64. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  65. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  66. data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
  67. data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
  68. data/src/ruby/pb/test/client.rb +469 -0
  69. data/src/ruby/pb/test/proto/empty.rb +15 -0
  70. data/src/ruby/pb/test/proto/messages.rb +80 -0
  71. data/src/ruby/pb/test/proto/test.rb +14 -0
  72. data/src/ruby/pb/test/proto/test_services.rb +64 -0
  73. data/src/ruby/pb/test/server.rb +253 -0
  74. data/src/ruby/spec/call_credentials_spec.rb +57 -0
  75. data/src/ruby/spec/call_spec.rb +163 -0
  76. data/src/ruby/spec/channel_credentials_spec.rb +97 -0
  77. data/src/ruby/spec/channel_spec.rb +177 -0
  78. data/src/ruby/spec/client_server_spec.rb +475 -0
  79. data/src/ruby/spec/completion_queue_spec.rb +42 -0
  80. data/src/ruby/spec/generic/active_call_spec.rb +373 -0
  81. data/src/ruby/spec/generic/client_stub_spec.rb +476 -0
  82. data/src/ruby/spec/generic/rpc_desc_spec.rb +331 -0
  83. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +138 -0
  84. data/src/ruby/spec/generic/rpc_server_spec.rb +576 -0
  85. data/src/ruby/spec/generic/service_spec.rb +345 -0
  86. data/src/ruby/spec/pb/health/checker_spec.rb +232 -0
  87. data/src/ruby/spec/server_credentials_spec.rb +94 -0
  88. data/src/ruby/spec/server_spec.rb +209 -0
  89. data/src/ruby/spec/spec_helper.rb +69 -0
  90. data/src/ruby/spec/testdata/README +1 -0
  91. data/src/ruby/spec/testdata/ca.pem +15 -0
  92. data/src/ruby/spec/testdata/server1.key +16 -0
  93. data/src/ruby/spec/testdata/server1.pem +16 -0
  94. data/src/ruby/spec/time_consts_spec.rb +89 -0
  95. metadata +319 -0
@@ -0,0 +1,206 @@
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
+ # Sample gRPC Ruby server that implements the Math::Calc service and helps
33
+ # validate GRPC::RpcServer as GRPC implementation using proto2 serialization.
34
+ #
35
+ # Usage: $ path/to/math_server.rb
36
+
37
+ this_dir = File.expand_path(File.dirname(__FILE__))
38
+ lib_dir = File.join(File.dirname(this_dir), 'lib')
39
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
40
+ $LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir)
41
+
42
+ require 'forwardable'
43
+ require 'grpc'
44
+ require 'logger'
45
+ require 'math_services'
46
+ require 'optparse'
47
+
48
+ # RubyLogger defines a logger for gRPC based on the standard ruby logger.
49
+ module RubyLogger
50
+ def logger
51
+ LOGGER
52
+ end
53
+
54
+ LOGGER = Logger.new(STDOUT)
55
+ end
56
+
57
+ # GRPC is the general RPC module
58
+ module GRPC
59
+ # Inject the noop #logger if no module-level logger method has been injected.
60
+ extend RubyLogger
61
+ end
62
+
63
+ # Holds state for a fibonacci series
64
+ class Fibber
65
+ def initialize(limit)
66
+ fail "bad limit: got #{limit}, want limit > 0" if limit < 1
67
+ @limit = limit
68
+ end
69
+
70
+ def generator
71
+ return enum_for(:generator) unless block_given?
72
+ idx, current, previous = 0, 1, 1
73
+ until idx == @limit
74
+ if idx.zero? || idx == 1
75
+ yield Math::Num.new(num: 1)
76
+ idx += 1
77
+ next
78
+ end
79
+ tmp = current
80
+ current = previous + current
81
+ previous = tmp
82
+ yield Math::Num.new(num: current)
83
+ idx += 1
84
+ end
85
+ end
86
+ end
87
+
88
+ # A EnumeratorQueue wraps a Queue to yield the items added to it.
89
+ class EnumeratorQueue
90
+ extend Forwardable
91
+ def_delegators :@q, :push
92
+
93
+ def initialize(sentinel)
94
+ @q = Queue.new
95
+ @sentinel = sentinel
96
+ end
97
+
98
+ def each_item
99
+ return enum_for(:each_item) unless block_given?
100
+ loop do
101
+ r = @q.pop
102
+ break if r.equal?(@sentinel)
103
+ fail r if r.is_a? Exception
104
+ yield r
105
+ end
106
+ end
107
+ end
108
+
109
+ # The Math::Math:: module occurs because the service has the same name as its
110
+ # package. That practice should be avoided by defining real services.
111
+ class Calculator < Math::Math::Service
112
+ def div(div_args, _call)
113
+ if div_args.divisor.zero?
114
+ # To send non-OK status handlers raise a StatusError with the code and
115
+ # and detail they want sent as a Status.
116
+ fail GRPC::StatusError.new(GRPC::Status::INVALID_ARGUMENT,
117
+ 'divisor cannot be 0')
118
+ end
119
+
120
+ Math::DivReply.new(quotient: div_args.dividend / div_args.divisor,
121
+ remainder: div_args.dividend % div_args.divisor)
122
+ end
123
+
124
+ def sum(call)
125
+ # the requests are accesible as the Enumerator call#each_request
126
+ nums = call.each_remote_read.collect(&:num)
127
+ sum = nums.inject { |s, x| s + x }
128
+ Math::Num.new(num: sum)
129
+ end
130
+
131
+ def fib(fib_args, _call)
132
+ if fib_args.limit < 1
133
+ fail StatusError.new(Status::INVALID_ARGUMENT, 'limit must be >= 0')
134
+ end
135
+
136
+ # return an Enumerator of Nums
137
+ Fibber.new(fib_args.limit).generator
138
+ # just return the generator, GRPC::GenericServer sends each actual response
139
+ end
140
+
141
+ def div_many(requests)
142
+ # requests is an lazy Enumerator of the requests sent by the client.
143
+ q = EnumeratorQueue.new(self)
144
+ t = Thread.new do
145
+ begin
146
+ requests.each do |req|
147
+ GRPC.logger.info("read #{req.inspect}")
148
+ resp = Math::DivReply.new(quotient: req.dividend / req.divisor,
149
+ remainder: req.dividend % req.divisor)
150
+ q.push(resp)
151
+ Thread.pass # let the internal Bidi threads run
152
+ end
153
+ GRPC.logger.info('finished reads')
154
+ q.push(self)
155
+ rescue StandardError => e
156
+ q.push(e) # share the exception with the enumerator
157
+ raise e
158
+ end
159
+ end
160
+ t.priority = -2 # hint that the div_many thread should not be favoured
161
+ q.each_item
162
+ end
163
+ end
164
+
165
+ def load_test_certs
166
+ this_dir = File.expand_path(File.dirname(__FILE__))
167
+ data_dir = File.join(File.dirname(this_dir), 'spec/testdata')
168
+ files = ['ca.pem', 'server1.key', 'server1.pem']
169
+ files.map { |f| File.open(File.join(data_dir, f)).read }
170
+ end
171
+
172
+ def test_server_creds
173
+ certs = load_test_certs
174
+ GRPC::Core::ServerCredentials.new(
175
+ nil, [{ private_key: certs[1], cert_chain: certs[2] }], false)
176
+ end
177
+
178
+ def main
179
+ options = {
180
+ 'host' => 'localhost:7071',
181
+ 'secure' => false
182
+ }
183
+ OptionParser.new do |opts|
184
+ opts.banner = 'Usage: [--host <hostname>:<port>] [--secure|-s]'
185
+ opts.on('--host HOST', '<hostname>:<port>') do |v|
186
+ options['host'] = v
187
+ end
188
+ opts.on('-s', '--secure', 'access using test creds') do |v|
189
+ options['secure'] = v
190
+ end
191
+ end.parse!
192
+
193
+ s = GRPC::RpcServer.new
194
+ if options['secure']
195
+ s.add_http2_port(options['host'], test_server_creds)
196
+ GRPC.logger.info("... running securely on #{options['host']}")
197
+ else
198
+ s.add_http2_port(options['host'], :this_port_is_insecure)
199
+ GRPC.logger.info("... running insecurely on #{options['host']}")
200
+ end
201
+
202
+ s.handle(Calculator)
203
+ s.run_till_terminated
204
+ end
205
+
206
+ main
@@ -0,0 +1,27 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: math.proto for package 'math'
3
+
4
+ require 'grpc'
5
+ require 'math'
6
+
7
+ module Math
8
+ module Math
9
+
10
+ # TODO: add proto service documentation here
11
+ class Service
12
+
13
+ include GRPC::GenericService
14
+
15
+ self.marshal_class_method = :encode
16
+ self.unmarshal_class_method = :decode
17
+ self.service_name = 'math.Math'
18
+
19
+ rpc :Div, DivArgs, DivReply
20
+ rpc :DivMany, stream(DivArgs), stream(DivReply)
21
+ rpc :Fib, FibArgs, stream(Num)
22
+ rpc :Sum, stream(Num), Num
23
+ end
24
+
25
+ Stub = Service.rpc_stub_class
26
+ end
27
+ end
@@ -0,0 +1,108 @@
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
+ # Sample app that helps validate RpcServer without protobuf serialization.
33
+ #
34
+ # Usage: $ ruby -S path/to/noproto_client.rb
35
+
36
+ this_dir = File.expand_path(File.dirname(__FILE__))
37
+ lib_dir = File.join(File.dirname(this_dir), 'lib')
38
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
39
+
40
+ require 'grpc'
41
+ require 'optparse'
42
+
43
+ # a simple non-protobuf message class.
44
+ class NoProtoMsg
45
+ def self.marshal(_o)
46
+ ''
47
+ end
48
+
49
+ def self.unmarshal(_o)
50
+ NoProtoMsg.new
51
+ end
52
+ end
53
+
54
+ # service the uses the non-protobuf message class.
55
+ class NoProtoService
56
+ include GRPC::GenericService
57
+ rpc :AnRPC, NoProtoMsg, NoProtoMsg
58
+ end
59
+
60
+ NoProtoStub = NoProtoService.rpc_stub_class
61
+
62
+ def load_test_certs
63
+ this_dir = File.expand_path(File.dirname(__FILE__))
64
+ data_dir = File.join(File.dirname(this_dir), 'spec/testdata')
65
+ files = ['ca.pem', 'server1.key', 'server1.pem']
66
+ files.map { |f| File.open(File.join(data_dir, f)).read }
67
+ end
68
+
69
+ def test_creds
70
+ certs = load_test_certs
71
+ GRPC::Core::ChannelCredentials.new(certs[0])
72
+ end
73
+
74
+ def main
75
+ options = {
76
+ 'host' => 'localhost:7071',
77
+ 'secure' => false
78
+ }
79
+ OptionParser.new do |opts|
80
+ opts.banner = 'Usage: [--host <hostname>:<port>] [--secure|-s]'
81
+ opts.on('--host HOST', '<hostname>:<port>') do |v|
82
+ options['host'] = v
83
+ end
84
+ opts.on('-s', '--secure', 'access using test creds') do |v|
85
+ options['secure'] = v
86
+ end
87
+ end.parse!
88
+
89
+ if options['secure']
90
+ stub_opts = {
91
+ :creds => test_creds,
92
+ GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.fr'
93
+ }
94
+ p stub_opts
95
+ p options['host']
96
+ stub = NoProtoStub.new(options['host'], **stub_opts)
97
+ GRPC.logger.info("... connecting securely on #{options['host']}")
98
+ else
99
+ stub = NoProtoStub.new(options['host'])
100
+ GRPC.logger.info("... connecting insecurely on #{options['host']}")
101
+ end
102
+
103
+ GRPC.logger.info('sending a NoProto rpc')
104
+ resp = stub.an_rpc(NoProtoMsg.new)
105
+ GRPC.logger.info("got a response: #{resp}")
106
+ end
107
+
108
+ main
@@ -0,0 +1,112 @@
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
+ # Sample app that helps validate RpcServer without protobuf serialization.
33
+ #
34
+ # Usage: $ path/to/noproto_server.rb
35
+
36
+ this_dir = File.expand_path(File.dirname(__FILE__))
37
+ lib_dir = File.join(File.dirname(this_dir), 'lib')
38
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
39
+
40
+ require 'grpc'
41
+ require 'optparse'
42
+
43
+ # a simple non-protobuf message class.
44
+ class NoProtoMsg
45
+ def self.marshal(_o)
46
+ ''
47
+ end
48
+
49
+ def self.unmarshal(_o)
50
+ NoProtoMsg.new
51
+ end
52
+ end
53
+
54
+ # service the uses the non-protobuf message class.
55
+ class NoProtoService
56
+ include GRPC::GenericService
57
+ rpc :AnRPC, NoProtoMsg, NoProtoMsg
58
+ end
59
+
60
+ # an implementation of the non-protobuf service.
61
+ class NoProto < NoProtoService
62
+ def initialize(_default_var = 'ignored')
63
+ end
64
+
65
+ def an_rpc(req, _call)
66
+ GRPC.logger.info('echo service received a request')
67
+ req
68
+ end
69
+ end
70
+
71
+ def load_test_certs
72
+ this_dir = File.expand_path(File.dirname(__FILE__))
73
+ data_dir = File.join(File.dirname(this_dir), 'spec/testdata')
74
+ files = ['ca.pem', 'server1.key', 'server1.pem']
75
+ files.map { |f| File.open(File.join(data_dir, f)).read }
76
+ end
77
+
78
+ def test_server_creds
79
+ certs = load_test_certs
80
+ GRPC::Core::ServerCredentials.new(
81
+ nil, [{ private_key: certs[1], cert_chain: certs[2] }], false)
82
+ end
83
+
84
+ def main
85
+ options = {
86
+ 'host' => 'localhost:9090',
87
+ 'secure' => false
88
+ }
89
+ OptionParser.new do |opts|
90
+ opts.banner = 'Usage: [--host <hostname>:<port>] [--secure|-s]'
91
+ opts.on('--host HOST', '<hostname>:<port>') do |v|
92
+ options['host'] = v
93
+ end
94
+ opts.on('-s', '--secure', 'access using test creds') do |v|
95
+ options['secure'] = v
96
+ end
97
+ end.parse!
98
+
99
+ s = GRPC::RpcServer.new
100
+ if options['secure']
101
+ s.add_http2_port(options['host'], test_server_creds)
102
+ GRPC.logger.info("... running securely on #{options['host']}")
103
+ else
104
+ s.add_http2_port(options['host'], :this_port_is_insecure)
105
+ GRPC.logger.info("... running insecurely on #{options['host']}")
106
+ end
107
+
108
+ s.handle(NoProto)
109
+ s.run_till_terminated
110
+ end
111
+
112
+ main