diff --git a/spannerlib/wrappers/spannerlib-ruby/spannerlib-ruby.gemspec b/spannerlib/wrappers/spannerlib-ruby/spannerlib-ruby.gemspec index 06c1c1af..4bf46615 100644 --- a/spannerlib/wrappers/spannerlib-ruby/spannerlib-ruby.gemspec +++ b/spannerlib/wrappers/spannerlib-ruby/spannerlib-ruby.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.files = Dir.chdir(File.expand_path(__dir__)) do files = [] # prefer git-tracked files when available (local dev), but also pick up built files present on disk (CI) - files += `git ls-files -z`.split("\x0") if system("git rev-parse --is-inside-work-tree > /dev/null 2>&1") + files += `git ls-files -z`.split("\x0") if system("git rev-parse --is-inside-work-tree > #{File::NULL} 2>&1") # include any built native libs (CI places them under lib/spannerlib/) files += Dir.glob("lib/spannerlib/**/*").select { |f| File.file?(f) } diff --git a/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib_ruby_spec.rb b/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib_ruby_spec.rb index dfb73aa3..1835afe6 100644 --- a/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib_ruby_spec.rb +++ b/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib_ruby_spec.rb @@ -21,6 +21,7 @@ require "google/cloud/spanner/v1/spanner" require "timeout" require "tmpdir" +require "socket" require_relative "mock_server/statement_result" require_relative "../lib/spannerlib/ffi" @@ -94,7 +95,15 @@ def self.wait_for_port if File.exist?($port_file) content = File.read($port_file).strip - return content.to_i unless content.empty? + unless content.empty? + port = content.to_i + begin + Socket.tcp("127.0.0.1", port, connect_timeout: 0.1) { nil } + return port + rescue SystemCallError + # Server not yet fully listening + end + end end raise "Mock server exited unexpectedly!" if Process.waitpid($server_pid, Process::WNOHANG) @@ -170,7 +179,7 @@ def find_transaction_options(requests) before do self.class.ensure_server_running! File.binwrite($mock_msg_file, Marshal.dump({})) - File.write($mock_req_file, "") + File.binwrite($mock_req_file, "") @dsn = "127.0.0.1:#{$server_port}/projects/p/instances/i/databases/d?useplaintext=true" @pool_id = SpannerLib.create_pool(@dsn)