diff options
Diffstat (limited to 'src/csharp/Grpc.IntegrationTesting/InteropClient.cs')
-rw-r--r-- | src/csharp/Grpc.IntegrationTesting/InteropClient.cs | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs index 6b92d3c660..20ecd60c30 100644 --- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs +++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs @@ -39,14 +39,25 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using Google.ProtocolBuffers; using grpc.testing; +using Grpc.Auth; using Grpc.Core; using Grpc.Core.Utils; using NUnit.Framework; +using Newtonsoft.Json.Linq; +using System.Threading; + +using Google.Apis.Auth.OAuth2; +using System.Security.Cryptography.X509Certificates; namespace Grpc.IntegrationTesting { public class InteropClient { + private const string ServiceAccountUser = "155450119199-3psnrh1sdr3d8cpj1v46naggf81mhdnk@developer.gserviceaccount.com"; + private const string ComputeEngineUser = "155450119199-r5aaqa2vqoa9g5mv2m6s3m1l293rlmel@developer.gserviceaccount.com"; + private const string AuthScope = "https://www.googleapis.com/auth/xapi.zoo"; + private const string AuthScopeResponse = "xapi.zoo"; + private class ClientOptions { public bool help; @@ -115,7 +126,18 @@ namespace Grpc.IntegrationTesting using (Channel channel = new Channel(addr, credentials, channelArgs)) { - TestServiceGrpc.ITestServiceClient client = new TestServiceGrpc.TestServiceClientStub(channel); + var stubConfig = StubConfiguration.Default; + if (options.testCase == "service_account_creds") + { + var credential = GoogleCredential.GetApplicationDefault(); + if (credential.IsCreateScopedRequired) + { + credential = credential.CreateScoped(new[] { AuthScope }); + } + stubConfig = new StubConfiguration(OAuth2InterceptorFactory.Create(credential)); + } + + TestServiceGrpc.ITestServiceClient client = new TestServiceGrpc.TestServiceClientStub(channel, stubConfig); RunTestCase(options.testCase, client); } @@ -144,6 +166,9 @@ namespace Grpc.IntegrationTesting case "empty_stream": RunEmptyStream(client); break; + case "service_account_creds": + RunServiceAccountCreds(client); + break; case "benchmark_empty_unary": RunBenchmarkEmptyUnary(client); break; @@ -287,6 +312,26 @@ namespace Grpc.IntegrationTesting Console.WriteLine("Passed!"); } + public static void RunServiceAccountCreds(TestServiceGrpc.ITestServiceClient client) + { + Console.WriteLine("running service_account_creds"); + var request = SimpleRequest.CreateBuilder() + .SetResponseType(PayloadType.COMPRESSABLE) + .SetResponseSize(314159) + .SetPayload(CreateZerosPayload(271828)) + .SetFillUsername(true) + .SetFillOauthScope(true) + .Build(); + + var response = client.UnaryCall(request); + + Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type); + Assert.AreEqual(314159, response.Payload.Body.Length); + Assert.AreEqual(AuthScopeResponse, response.OauthScope); + Assert.AreEqual(ServiceAccountUser, response.Username); + Console.WriteLine("Passed!"); + } + // This is not an official interop test, but it's useful. public static void RunBenchmarkEmptyUnary(TestServiceGrpc.ITestServiceClient client) { |