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/ruby/spec | |
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/ruby/spec')
-rw-r--r-- | src/ruby/spec/pb/duplicate/codegen_spec.rb | 71 |
1 files changed, 71 insertions, 0 deletions
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 |