Merge pull request #2934 from tbetbetbe/grpc-ruby-add-more-auth-interop-tests

Adds the remaining ruby interop tests
diff --git a/src/ruby/bin/interop/interop_client.rb b/src/ruby/bin/interop/interop_client.rb
index 9d753a8..78ae217 100755
--- a/src/ruby/bin/interop/interop_client.rb
+++ b/src/ruby/bin/interop/interop_client.rb
@@ -110,6 +110,14 @@
       end
     end
 
+    if opts.test_case == 'oauth2_auth_token'
+      auth_creds = Google::Auth.get_application_default(opts.oauth_scope)
+      kw = auth_creds.updater_proc.call({})  # gives as an auth token
+
+      # use a metadata update proc that just adds the auth token.
+      stub_opts[:update_metadata] = proc { |md| md.merge(kw) }
+    end
+
     if opts.test_case == 'jwt_token_creds'  # don't use a scope
       auth_creds = Google::Auth.get_application_default
       stub_opts[:update_metadata] = auth_creds.updater_proc
@@ -228,6 +236,33 @@
     p 'OK: compute_engine_creds'
   end
 
+  def oauth2_auth_token
+    resp = perform_large_unary(fill_username: true,
+                               fill_oauth_scope: true)
+    json_key = File.read(ENV[AUTH_ENV])
+    wanted_email = MultiJson.load(json_key)['client_email']
+    assert_equal(wanted_email, resp.username,
+                 "#{__callee__}: incorrect username")
+    assert(@args.oauth_scope.include?(resp.oauth_scope),
+           "#{__callee__}: incorrect oauth_scope")
+    p "OK: #{__callee__}"
+  end
+
+  def per_rpc_creds
+    auth_creds = Google::Auth.get_application_default(@args.oauth_scope)
+    kw = auth_creds.updater_proc.call({})
+    resp = perform_large_unary(fill_username: true,
+                               fill_oauth_scope: true,
+                               **kw)
+    json_key = File.read(ENV[AUTH_ENV])
+    wanted_email = MultiJson.load(json_key)['client_email']
+    assert_equal(wanted_email, resp.username,
+                 "#{__callee__}: incorrect username")
+    assert(@args.oauth_scope.include?(resp.oauth_scope),
+           "#{__callee__}: incorrect oauth_scope")
+    p "OK: #{__callee__}"
+  end
+
   def client_streaming
     msg_sizes = [27_182, 8, 1828, 45_904]
     wanted_aggregate_size = 74_922
@@ -276,6 +311,18 @@
     p "OK: #{__callee__}"
   end
 
+  def empty_stream
+    ppp = PingPongPlayer.new([])
+    resps = @stub.full_duplex_call(ppp.each_item)
+    count = 0
+    resps.each do
+      |r| ppp.queue.push(r)
+      count += 1
+    end
+    assert_equal(0, count, 'too many responses, expect 0')
+    p 'OK: empty_stream'
+  end
+
   def cancel_after_begin
     msg_sizes = [27_182, 8, 1828, 45_904]
     reqs = msg_sizes.map do |x|
@@ -311,7 +358,7 @@
 
   private
 
-  def perform_large_unary(fill_username: false, fill_oauth_scope: false)
+  def perform_large_unary(fill_username: false, fill_oauth_scope: false, **kw)
     req_size, wanted_response_size = 271_828, 314_159
     payload = Payload.new(type: :COMPRESSABLE, body: nulls(req_size))
     req = SimpleRequest.new(response_type: :COMPRESSABLE,
@@ -319,7 +366,7 @@
                             payload: payload)
     req.fill_username = fill_username
     req.fill_oauth_scope = fill_oauth_scope
-    resp = @stub.unary_call(req)
+    resp = @stub.unary_call(req, **kw)
     assert_equal(:COMPRESSABLE, resp.payload.type,
                  'large_unary: payload had the wrong type')
     assert_equal(wanted_response_size, resp.payload.body.length,