blob: 1a17d4577578f089006c6504496c57cd8a4ca7ed [file] [log] [blame]
Tim Emiola3acf05a2015-01-13 07:55:34 -08001#!/usr/bin/env ruby
2
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003# Copyright 2015 gRPC authors.
nnoble097ef9b2014-12-01 17:06:10 -08004#
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
nnoble097ef9b2014-12-01 17:06:10 -08008#
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009# http://www.apache.org/licenses/LICENSE-2.0
nnoble097ef9b2014-12-01 17:06:10 -080010#
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
nnoble097ef9b2014-12-01 17:06:10 -080016
nnoble097ef9b2014-12-01 17:06:10 -080017# Sample app that helps validate RpcServer without protobuf serialization.
18#
19# Usage: $ ruby -S path/to/noproto_client.rb
20
21this_dir = File.expand_path(File.dirname(__FILE__))
22lib_dir = File.join(File.dirname(this_dir), 'lib')
23$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
24
25require 'grpc'
temiola0f0a6bc2015-01-07 18:43:40 -080026require 'optparse'
nnoble097ef9b2014-12-01 17:06:10 -080027
Tim Emiolae2860c52015-01-16 02:58:41 -080028# a simple non-protobuf message class.
temiola0f0a6bc2015-01-07 18:43:40 -080029class NoProtoMsg
Tim Emiolae2860c52015-01-16 02:58:41 -080030 def self.marshal(_o)
nnoble097ef9b2014-12-01 17:06:10 -080031 ''
32 end
33
Tim Emiolae2860c52015-01-16 02:58:41 -080034 def self.unmarshal(_o)
temiola0f0a6bc2015-01-07 18:43:40 -080035 NoProtoMsg.new
nnoble097ef9b2014-12-01 17:06:10 -080036 end
37end
38
Tim Emiolae2860c52015-01-16 02:58:41 -080039# service the uses the non-protobuf message class.
temiola0f0a6bc2015-01-07 18:43:40 -080040class NoProtoService
nnoble097ef9b2014-12-01 17:06:10 -080041 include GRPC::GenericService
temiola0f0a6bc2015-01-07 18:43:40 -080042 rpc :AnRPC, NoProtoMsg, NoProtoMsg
nnoble097ef9b2014-12-01 17:06:10 -080043end
44
temiola0f0a6bc2015-01-07 18:43:40 -080045NoProtoStub = NoProtoService.rpc_stub_class
46
47def load_test_certs
48 this_dir = File.expand_path(File.dirname(__FILE__))
49 data_dir = File.join(File.dirname(this_dir), 'spec/testdata')
50 files = ['ca.pem', 'server1.key', 'server1.pem']
51 files.map { |f| File.open(File.join(data_dir, f)).read }
52end
53
54def test_creds
55 certs = load_test_certs
Tim Emiola43a7e4e2015-10-28 00:17:14 -070056 GRPC::Core::ChannelCredentials.new(certs[0])
temiola0f0a6bc2015-01-07 18:43:40 -080057end
nnoble097ef9b2014-12-01 17:06:10 -080058
59def main
temiola0f0a6bc2015-01-07 18:43:40 -080060 options = {
61 'host' => 'localhost:7071',
62 'secure' => false
63 }
64 OptionParser.new do |opts|
65 opts.banner = 'Usage: [--host <hostname>:<port>] [--secure|-s]'
66 opts.on('--host HOST', '<hostname>:<port>') do |v|
67 options['host'] = v
68 end
69 opts.on('-s', '--secure', 'access using test creds') do |v|
Tim Emiolae2860c52015-01-16 02:58:41 -080070 options['secure'] = v
temiola0f0a6bc2015-01-07 18:43:40 -080071 end
72 end.parse!
73
74 if options['secure']
75 stub_opts = {
76 :creds => test_creds,
Julien Boeuf597a4f22015-02-23 15:57:14 -080077 GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.fr'
temiola0f0a6bc2015-01-07 18:43:40 -080078 }
79 p stub_opts
80 p options['host']
81 stub = NoProtoStub.new(options['host'], **stub_opts)
Nick Gauthierf233d962015-05-20 14:02:50 -040082 GRPC.logger.info("... connecting securely on #{options['host']}")
temiola0f0a6bc2015-01-07 18:43:40 -080083 else
84 stub = NoProtoStub.new(options['host'])
Nick Gauthierf233d962015-05-20 14:02:50 -040085 GRPC.logger.info("... connecting insecurely on #{options['host']}")
temiola0f0a6bc2015-01-07 18:43:40 -080086 end
87
Nick Gauthierf233d962015-05-20 14:02:50 -040088 GRPC.logger.info('sending a NoProto rpc')
temiola0f0a6bc2015-01-07 18:43:40 -080089 resp = stub.an_rpc(NoProtoMsg.new)
Nick Gauthierf233d962015-05-20 14:02:50 -040090 GRPC.logger.info("got a response: #{resp}")
nnoble097ef9b2014-12-01 17:06:10 -080091end
92
Craig Tiller190d3602015-02-18 09:23:38 -080093main