diff options
author | Jun Mukai <mukai@google.com> | 2016-04-06 17:11:14 -0700 |
---|---|---|
committer | Jun Mukai <mukai@google.com> | 2016-04-07 13:13:30 -0700 |
commit | c0862859bec404dd6e74788b07a9f06d59b3d2f1 (patch) | |
tree | 7966c6668efa729a62738ebf5f76eeb952aacef4 /src | |
parent | cac9ba4f2268b5bbb8e404d953633d6062a4ffa7 (diff) |
ruby: Add test case for referring external package
The new spec uses existing EchoDuplicate service in
grpc.testing.duplicate, which refers grpc.testing.Empty,
and verifies if the plugin generates this correctly as
Grpc::Testing::Empty.
Diffstat (limited to 'src')
-rw-r--r-- | src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb | 28 | ||||
-rw-r--r-- | src/ruby/spec/pb/duplicate/codegen_spec.rb | 71 |
2 files changed, 99 insertions, 0 deletions
diff --git a/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb b/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb new file mode 100644 index 0000000000..9f6e7e0e42 --- /dev/null +++ b/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb @@ -0,0 +1,28 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# Source: src/proto/grpc/testing/duplicate/echo_duplicate.proto for package 'grpc.testing.duplicate' + +require 'grpc' +require 'src/proto/grpc/testing/duplicate/echo_duplicate' + +module Grpc + module Testing + module Duplicate + module EchoTestService + + # TODO: add proto service documentation here + class Service + + include GRPC::GenericService + + self.marshal_class_method = :encode + self.unmarshal_class_method = :decode + self.service_name = 'grpc.testing.duplicate.EchoTestService' + + rpc :Echo, Grpc::Testing::EchoRequest, Grpc::Testing::EchoResponse + end + + Stub = Service.rpc_stub_class + end + end + end +end diff --git a/src/ruby/spec/pb/duplicate/codegen_spec.rb b/src/ruby/spec/pb/duplicate/codegen_spec.rb new file mode 100644 index 0000000000..54c136c510 --- /dev/null +++ b/src/ruby/spec/pb/duplicate/codegen_spec.rb @@ -0,0 +1,71 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +require 'open3' +require 'tmpdir' + +def can_run_codegen_check + system('which grpc_ruby_plugin') && system('which protoc') +end + +describe 'Ping protobuf code generation' do + if !can_run_codegen_check + skip 'protoc || grpc_ruby_plugin missing, cannot verify ping code-gen' + else + it 'should have the same content as created by code generation' do + root_dir = File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..') + + # Get the current content + service_path = File.join(root_dir, 'src', 'ruby', 'pb', 'grpc', + 'testing', 'duplicate', + 'echo_duplicate_services.rb') + want = nil + File.open(service_path) { |f| want = f.read } + + # Regenerate it + plugin, = Open3.capture2('which', 'grpc_ruby_plugin') + plugin = plugin.strip + got = nil + Dir.mktmpdir do |tmp_dir| + gen_out = File.join(tmp_dir, 'src', 'proto', 'grpc', 'testing', + 'duplicate', 'echo_duplicate_services.rb') + pid = spawn( + 'protoc', + '-I.', + 'src/proto/grpc/testing/duplicate/echo_duplicate.proto', + "--grpc_out=#{tmp_dir}", + "--plugin=protoc-gen-grpc=#{plugin}", + chdir: root_dir) + Process.wait(pid) + File.open(gen_out) { |f| got = f.read } + end + expect(got).to eq(want) + end + end +end |