コード例 #1
1
        public void Init()
        {
            var serverCredentials = new SslServerCredentials(new[] { new KeyCertificatePair(File.ReadAllText(TestCredentials.ServerCertChainPath), File.ReadAllText(TestCredentials.ServerPrivateKeyPath)) });
            server = new Server
            {
                Services = { TestService.BindService(new TestServiceImpl()) },
                Ports = { { Host, ServerPort.PickUnused, serverCredentials } }
            };
            server.Start();

            var options = new List<ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };

            var asyncAuthInterceptor = new AsyncAuthInterceptor(async (authUri, metadata) =>
            {
                await Task.Delay(100);  // make sure the operation is asynchronous.
                metadata.Add("authorization", "SECRET_TOKEN");
            });

            var clientCredentials = ChannelCredentials.Create(
                new SslCredentials(File.ReadAllText(TestCredentials.ClientCertAuthorityPath)),
                new MetadataCredentials(asyncAuthInterceptor));
            channel = new Channel(Host, server.Ports.Single().BoundPort, clientCredentials, options);
            client = TestService.NewClient(channel);
        }
コード例 #2
0
        public static async Task RunCancelAfterFirstResponseAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running cancel_after_first_response");

            var cts = new CancellationTokenSource();

            using (var call = client.FullDuplexCall(cancellationToken: cts.Token))
            {
                await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
                {
                    ResponseType       = PayloadType.COMPRESSABLE,
                    ResponseParameters = { new ResponseParameters {
                                               Size = 31415
                                           } },
                    Payload = CreateZerosPayload(27182)
                });

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(31415, call.ResponseStream.Current.Payload.Body.Length);

                cts.Cancel();

                var ex = Assert.Throws <RpcException>(async() => await call.ResponseStream.MoveNext());
                Assert.AreEqual(StatusCode.Cancelled, ex.Status.StatusCode);
            }
            Console.WriteLine("Passed!");
        }
コード例 #3
0
        public static void RunCancelAfterBegin(TestService.ITestServiceClient client)
        {
            Task.Run(async() =>
            {
                Console.WriteLine("running cancel_after_begin");

                var cts = new CancellationTokenSource();
                using (var call = client.StreamingInputCall(cancellationToken: cts.Token))
                {
                    // TODO(jtattermusch): we need this to ensure call has been initiated once we cancel it.
                    await Task.Delay(1000);
                    cts.Cancel();

                    try
                    {
                        var response = await call.Result;
                        Assert.Fail();
                    }
                    catch (RpcException e)
                    {
                        Assert.AreEqual(StatusCode.Cancelled, e.Status.StatusCode);
                    }
                }
                Console.WriteLine("Passed!");
            }).Wait();
        }
コード例 #4
0
        public static void RunServerStreaming(TestService.ITestServiceClient client)
        {
            Task.Run(async() =>
            {
                Console.WriteLine("running server_streaming");

                var bodySizes = new List <int> {
                    31415, 9, 2653, 58979
                };

                var request = StreamingOutputCallRequest.CreateBuilder()
                              .SetResponseType(PayloadType.COMPRESSABLE)
                              .AddRangeResponseParameters(bodySizes.ConvertAll(
                                                              (size) => ResponseParameters.CreateBuilder().SetSize(size).Build()))
                              .Build();

                using (var call = client.StreamingOutputCall(request))
                {
                    var responseList = await call.ResponseStream.ToList();
                    foreach (var res in responseList)
                    {
                        Assert.AreEqual(PayloadType.COMPRESSABLE, res.Payload.Type);
                    }
                    CollectionAssert.AreEqual(bodySizes, responseList.ConvertAll((item) => item.Payload.Body.Length));
                }
                Console.WriteLine("Passed!");
            }).Wait();
        }
コード例 #5
0
        public void Init()
        {
            var rootCert    = File.ReadAllText(TestCredentials.ClientCertAuthorityPath);
            var keyCertPair = new KeyCertificatePair(
                File.ReadAllText(TestCredentials.ServerCertChainPath),
                File.ReadAllText(TestCredentials.ServerPrivateKeyPath));

            var serverCredentials = new SslServerCredentials(new[] { keyCertPair }, rootCert, true);
            var clientCredentials = new SslCredentials(rootCert, keyCertPair);

            server = new Server
            {
                Services = { TestService.BindService(new TestServiceImpl()) },
                Ports    = { { Host, ServerPort.PickUnused, serverCredentials } }
            };
            server.Start();

            var options = new List <ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };

            channel = new Channel(Host, server.Ports.Single().BoundPort, clientCredentials, options);
            client  = TestService.NewClient(channel);
        }
コード例 #6
0
        public void Init()
        {
            var rootCert = File.ReadAllText(TestCredentials.ClientCertAuthorityPath);
            var keyCertPair = new KeyCertificatePair(
                File.ReadAllText(TestCredentials.ServerCertChainPath),
                File.ReadAllText(TestCredentials.ServerPrivateKeyPath));

            var serverCredentials = new SslServerCredentials(new[] { keyCertPair }, rootCert, true);
            var clientCredentials = new SslCredentials(rootCert, keyCertPair);

            server = new Server
            {
                Services = { TestService.BindService(new TestServiceImpl()) },
                Ports = { { Host, ServerPort.PickUnused, serverCredentials } }
            };
            server.Start();

            var options = new List<ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };

            channel = new Channel(Host, server.Ports.Single().BoundPort, clientCredentials, options);
            client = TestService.NewClient(channel);
        }
コード例 #7
0
        public void Init()
        {
            var serverCredentials = new SslServerCredentials(new[] { new KeyCertificatePair(File.ReadAllText(TestCredentials.ServerCertChainPath), File.ReadAllText(TestCredentials.ServerPrivateKeyPath)) });

            server = new Server
            {
                Services = { TestService.BindService(new TestServiceImpl()) },
                Ports    = { { Host, ServerPort.PickUnused, serverCredentials } }
            };
            server.Start();

            var options = new List <ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };

            var asyncAuthInterceptor = new AsyncAuthInterceptor(async(authUri, metadata) =>
            {
                await Task.Delay(100);  // make sure the operation is asynchronous.
                metadata.Add("authorization", "SECRET_TOKEN");
            });

            var clientCredentials = ChannelCredentials.Create(
                new SslCredentials(File.ReadAllText(TestCredentials.ClientCertAuthorityPath)),
                CallCredentials.FromInterceptor(asyncAuthInterceptor));

            channel = new Channel(Host, server.Ports.Single().BoundPort, clientCredentials, options);
            client  = TestService.NewClient(channel);
        }
コード例 #8
0
        public static async Task RunServerStreamingAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running server_streaming");

            var bodySizes = new List <int> {
                31415, 9, 2653, 58979
            };

            var request = new StreamingOutputCallRequest
            {
                ResponseType       = PayloadType.COMPRESSABLE,
                ResponseParameters = { bodySizes.ConvertAll((size) => new ResponseParameters {
                        Size = size
                    }) }
            };

            using (var call = client.StreamingOutputCall(request))
            {
                var responseList = await call.ResponseStream.ToListAsync();

                foreach (var res in responseList)
                {
                    Assert.AreEqual(PayloadType.COMPRESSABLE, res.Payload.Type);
                }
                CollectionAssert.AreEqual(bodySizes, responseList.ConvertAll((item) => item.Payload.Body.Length));
            }
            Console.WriteLine("Passed!");
        }
コード例 #9
0
        public static void RunCancelAfterFirstResponse(TestService.ITestServiceClient client)
        {
            Task.Run(async() =>
            {
                Console.WriteLine("running cancel_after_first_response");

                var cts = new CancellationTokenSource();
                using (var call = client.FullDuplexCall(cancellationToken: cts.Token))
                {
                    await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
                                                        .SetResponseType(PayloadType.COMPRESSABLE)
                                                        .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(31415))
                                                        .SetPayload(CreateZerosPayload(27182)).Build());

                    Assert.IsTrue(await call.ResponseStream.MoveNext());
                    Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                    Assert.AreEqual(31415, call.ResponseStream.Current.Payload.Body.Length);

                    cts.Cancel();

                    try
                    {
                        await call.ResponseStream.MoveNext();
                        Assert.Fail();
                    }
                    catch (RpcException e)
                    {
                        Assert.AreEqual(StatusCode.Cancelled, e.Status.StatusCode);
                    }
                }
                Console.WriteLine("Passed!");
            }).Wait();
        }
コード例 #10
0
        public static void RunEmptyUnary(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running empty_unary");
            var response = client.EmptyCall(new Empty());

            Assert.IsNotNull(response);
            Console.WriteLine("Passed!");
        }
コード例 #11
0
        public void MetadataCredentials_PerCall()
        {
            channel = new Channel(Host, server.Ports.Single().BoundPort, TestCredentials.CreateSslCredentials(), options);
            client  = TestService.NewClient(channel);

            var callCredentials = CallCredentials.FromInterceptor(asyncAuthInterceptor);

            client.UnaryCall(new SimpleRequest {
            }, new CallOptions(credentials: callCredentials));
        }
コード例 #12
0
        public void MetadataCredentials()
        {
            var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(),
                                                               CallCredentials.FromInterceptor(asyncAuthInterceptor));

            channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options);
            client  = TestService.NewClient(channel);

            client.UnaryCall(new SimpleRequest {
            });
        }
コード例 #13
0
ファイル: InteropClient.cs プロジェクト: varung/grpc
        public static void RunPingPong(TestService.ITestServiceClient client)
        {
            Task.Run(async() =>
            {
                Console.WriteLine("running ping_pong");

                var call = client.FullDuplexCall();

                StreamingOutputCallResponse response;

                await call.RequestStream.Write(StreamingOutputCallRequest.CreateBuilder()
                                               .SetResponseType(PayloadType.COMPRESSABLE)
                                               .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(31415))
                                               .SetPayload(CreateZerosPayload(27182)).Build());

                response = await call.ResponseStream.ReadNext();
                Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
                Assert.AreEqual(31415, response.Payload.Body.Length);

                await call.RequestStream.Write(StreamingOutputCallRequest.CreateBuilder()
                                               .SetResponseType(PayloadType.COMPRESSABLE)
                                               .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(9))
                                               .SetPayload(CreateZerosPayload(8)).Build());

                response = await call.ResponseStream.ReadNext();
                Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
                Assert.AreEqual(9, response.Payload.Body.Length);

                await call.RequestStream.Write(StreamingOutputCallRequest.CreateBuilder()
                                               .SetResponseType(PayloadType.COMPRESSABLE)
                                               .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(2653))
                                               .SetPayload(CreateZerosPayload(1828)).Build());

                response = await call.ResponseStream.ReadNext();
                Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
                Assert.AreEqual(2653, response.Payload.Body.Length);

                await call.RequestStream.Write(StreamingOutputCallRequest.CreateBuilder()
                                               .SetResponseType(PayloadType.COMPRESSABLE)
                                               .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(58979))
                                               .SetPayload(CreateZerosPayload(45904)).Build());

                response = await call.ResponseStream.ReadNext();
                Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
                Assert.AreEqual(58979, response.Payload.Body.Length);

                await call.RequestStream.Close();

                response = await call.ResponseStream.ReadNext();
                Assert.AreEqual(null, response);

                Console.WriteLine("Passed!");
            }).Wait();
        }
コード例 #14
0
        private void RunTestCase(string testCase, TestService.ITestServiceClient client)
        {
            switch (testCase)
            {
            case "empty_unary":
                RunEmptyUnary(client);
                break;

            case "large_unary":
                RunLargeUnary(client);
                break;

            case "client_streaming":
                RunClientStreaming(client);
                break;

            case "server_streaming":
                RunServerStreaming(client);
                break;

            case "ping_pong":
                RunPingPong(client);
                break;

            case "empty_stream":
                RunEmptyStream(client);
                break;

            case "service_account_creds":
                RunServiceAccountCreds(client);
                break;

            case "compute_engine_creds":
                RunComputeEngineCreds(client);
                break;

            case "cancel_after_begin":
                RunCancelAfterBegin(client);
                break;

            case "cancel_after_first_response":
                RunCancelAfterFirstResponse(client);
                break;

            case "benchmark_empty_unary":
                RunBenchmarkEmptyUnary(client);
                break;

            default:
                throw new ArgumentException("Unknown test case " + testCase);
            }
        }
コード例 #15
0
        public static async Task RunEmptyStreamAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running empty_stream");
            using (var call = client.FullDuplexCall())
            {
                await call.RequestStream.CompleteAsync();

                var responseList = await call.ResponseStream.ToListAsync();

                Assert.AreEqual(0, responseList.Count);
            }
            Console.WriteLine("Passed!");
        }
コード例 #16
0
        public static async Task RunCustomMetadataAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running custom_metadata");
            {
                // step 1: test unary call
                var request = new SimpleRequest
                {
                    ResponseType = PayloadType.COMPRESSABLE,
                    ResponseSize = 314159,
                    Payload      = CreateZerosPayload(271828)
                };

                var call = client.UnaryCallAsync(request, headers: CreateTestMetadata());
                await call.ResponseAsync;

                var responseHeaders  = await call.ResponseHeadersAsync;
                var responseTrailers = call.GetTrailers();

                Assert.AreEqual("test_initial_metadata_value", responseHeaders.First((entry) => entry.Key == "x-grpc-test-echo-initial").Value);
                CollectionAssert.AreEqual(new byte[] { 0xab, 0xab, 0xab }, responseTrailers.First((entry) => entry.Key == "x-grpc-test-echo-trailing-bin").ValueBytes);
            }

            {
                // step 2: test full duplex call
                var request = new StreamingOutputCallRequest
                {
                    ResponseType       = PayloadType.COMPRESSABLE,
                    ResponseParameters = { new ResponseParameters {
                                               Size = 31415
                                           } },
                    Payload = CreateZerosPayload(27182)
                };

                var call            = client.FullDuplexCall(headers: CreateTestMetadata());
                var responseHeaders = await call.ResponseHeadersAsync;

                await call.RequestStream.WriteAsync(request);

                await call.RequestStream.CompleteAsync();

                await call.ResponseStream.ToListAsync();

                var responseTrailers = call.GetTrailers();

                Assert.AreEqual("test_initial_metadata_value", responseHeaders.First((entry) => entry.Key == "x-grpc-test-echo-initial").Value);
                CollectionAssert.AreEqual(new byte[] { 0xab, 0xab, 0xab }, responseTrailers.First((entry) => entry.Key == "x-grpc-test-echo-trailing-bin").ValueBytes);
            }

            Console.WriteLine("Passed!");
        }
コード例 #17
0
        public void Init()
        {
            server = new Server();
            server.AddServiceDefinition(TestService.BindService(new TestServiceImpl()));
            int port = server.AddPort(host, Server.PickUnusedPort, TestCredentials.CreateTestServerCredentials());
            server.Start();

            var options = new List<ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };
            channel = new Channel(host, port, TestCredentials.CreateTestClientCredentials(true), options);
            client = TestService.NewClient(channel);
        }
コード例 #18
0
ファイル: InteropClient.cs プロジェクト: varung/grpc
        public static void RunEmptyStream(TestService.ITestServiceClient client)
        {
            Task.Run(async() =>
            {
                Console.WriteLine("running empty_stream");
                var call = client.FullDuplexCall();
                await call.Close();

                var responseList = await call.ResponseStream.ToList();
                Assert.AreEqual(0, responseList.Count);

                Console.WriteLine("Passed!");
            }).Wait();
        }
コード例 #19
0
        public static void RunLargeUnary(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running large_unary");
            var request = SimpleRequest.CreateBuilder()
                          .SetResponseType(PayloadType.COMPRESSABLE)
                          .SetResponseSize(314159)
                          .SetPayload(CreateZerosPayload(271828))
                          .Build();

            var response = client.UnaryCall(request);

            Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
            Assert.AreEqual(314159, response.Payload.Body.Length);
            Console.WriteLine("Passed!");
        }
コード例 #20
0
        public static void RunLargeUnary(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running large_unary");
            var request = new SimpleRequest
            {
                ResponseType = PayloadType.COMPRESSABLE,
                ResponseSize = 314159,
                Payload      = CreateZerosPayload(271828)
            };
            var response = client.UnaryCall(request);

            Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
            Assert.AreEqual(314159, response.Payload.Body.Length);
            Console.WriteLine("Passed!");
        }
コード例 #21
0
        public static async Task RunPingPongAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running ping_pong");

            using (var call = client.FullDuplexCall())
            {
                await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
                                                    .SetResponseType(PayloadType.COMPRESSABLE)
                                                    .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(31415))
                                                    .SetPayload(CreateZerosPayload(27182)).Build());

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(31415, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
                                                    .SetResponseType(PayloadType.COMPRESSABLE)
                                                    .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(9))
                                                    .SetPayload(CreateZerosPayload(8)).Build());

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(9, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
                                                    .SetResponseType(PayloadType.COMPRESSABLE)
                                                    .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(2653))
                                                    .SetPayload(CreateZerosPayload(1828)).Build());

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(2653, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
                                                    .SetResponseType(PayloadType.COMPRESSABLE)
                                                    .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(58979))
                                                    .SetPayload(CreateZerosPayload(45904)).Build());

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(58979, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.CompleteAsync();

                Assert.IsFalse(await call.ResponseStream.MoveNext());
            }
            Console.WriteLine("Passed!");
        }
コード例 #22
0
        public void Init()
        {
            server = new Server();
            server.AddServiceDefinition(TestService.BindService(new TestServiceImpl()));
            int port = server.AddListeningPort(host, Server.PickUnusedPort, TestCredentials.CreateTestServerCredentials());

            server.Start();

            var options = new List <ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };

            channel = new Channel(host, port, TestCredentials.CreateTestClientCredentials(true), options);
            client  = TestService.NewClient(channel);
        }
コード例 #23
0
        public void Init()
        {
            GrpcEnvironment.Initialize();

            server = new Server();
            server.AddServiceDefinition(TestService.BindService(new TestServiceImpl()));
            int port = server.AddListeningPort(host, Server.PickUnusedPort, TestCredentials.CreateTestServerCredentials());

            server.Start();

            var channelArgs = ChannelArgs.CreateBuilder()
                              .AddString(ChannelArgs.SslTargetNameOverrideKey, TestCredentials.DefaultHostOverride).Build();

            channel = new Channel(host + ":" + port, TestCredentials.CreateTestClientCredentials(true), channelArgs);
            client  = TestService.NewStub(channel);
        }
コード例 #24
0
        public static async Task RunClientStreamingAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running client_streaming");

            var bodySizes = new List <int> {
                27182, 8, 1828, 45904
            }.ConvertAll((size) => StreamingInputCallRequest.CreateBuilder().SetPayload(CreateZerosPayload(size)).Build());

            using (var call = client.StreamingInputCall())
            {
                await call.RequestStream.WriteAllAsync(bodySizes);

                var response = await call.ResponseAsync;
                Assert.AreEqual(74922, response.AggregatedPayloadSize);
            }
            Console.WriteLine("Passed!");
        }
コード例 #25
0
        public void Init()
        {
            server = new Server
            {
                Services = { TestService.BindService(new TestServiceImpl()) },
                Ports = { { Host, ServerPort.PickUnused, TestCredentials.CreateSslServerCredentials() } }
            };
            server.Start();

            var options = new List<ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };
            int port = server.Ports.Single().BoundPort;
            channel = new Channel(Host, port, TestCredentials.CreateSslCredentials(), options);
            client = TestService.NewClient(channel);
        }
コード例 #26
0
        public static async Task RunCancelAfterBeginAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running cancel_after_begin");

            var cts = new CancellationTokenSource();

            using (var call = client.StreamingInputCall(cancellationToken: cts.Token))
            {
                // TODO(jtattermusch): we need this to ensure call has been initiated once we cancel it.
                await Task.Delay(1000);

                cts.Cancel();

                var ex = Assert.Throws <RpcException>(async() => await call.ResponseAsync);
                Assert.AreEqual(StatusCode.Cancelled, ex.Status.StatusCode);
            }
            Console.WriteLine("Passed!");
        }
コード例 #27
0
        public void Init()
        {
            server = new Server
            {
                Services = { TestService.BindService(new TestServiceImpl()) },
                Ports    = { { Host, ServerPort.PickUnused, TestCredentials.CreateTestServerCredentials() } }
            };
            server.Start();

            var options = new List <ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };
            int port = server.Ports.Single().BoundPort;

            channel = new Channel(Host, port, TestCredentials.CreateTestClientCredentials(true), options);
            client  = TestService.NewClient(channel);
        }
コード例 #28
0
        public static void RunComputeEngineCreds(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running compute_engine_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(ComputeEngineUser, response.Username);
            Console.WriteLine("Passed!");
        }
コード例 #29
0
        public static async Task RunTimeoutOnSleepingServerAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running timeout_on_sleeping_server");

            var deadline = DateTime.UtcNow.AddMilliseconds(1);

            using (var call = client.FullDuplexCall(deadline: deadline))
            {
                try
                {
                    await call.RequestStream.WriteAsync(new StreamingOutputCallRequest { Payload = CreateZerosPayload(27182) });
                }
                catch (InvalidOperationException)
                {
                    // Deadline was reached before write has started. Eat the exception and continue.
                }

                var ex = Assert.Throws <RpcException>(async() => await call.ResponseStream.MoveNext());
                Assert.AreEqual(StatusCode.DeadlineExceeded, ex.Status.StatusCode);
            }
            Console.WriteLine("Passed!");
        }
コード例 #30
0
        public static async Task RunStatusCodeAndMessageAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running status_code_and_message");
            var echoStatus = new EchoStatus
            {
                Code    = 2,
                Message = "test status message"
            };

            {
                // step 1: test unary call
                var request = new SimpleRequest {
                    ResponseStatus = echoStatus
                };

                var e = Assert.Throws <RpcException>(() => client.UnaryCall(request));
                Assert.AreEqual(StatusCode.Unknown, e.Status.StatusCode);
                Assert.AreEqual(echoStatus.Message, e.Status.Detail);
            }

            {
                // step 2: test full duplex call
                var request = new StreamingOutputCallRequest {
                    ResponseStatus = echoStatus
                };

                var call = client.FullDuplexCall();
                await call.RequestStream.WriteAsync(request);

                await call.RequestStream.CompleteAsync();

                var e = Assert.Throws <RpcException>(async() => await call.ResponseStream.ToListAsync());
                Assert.AreEqual(StatusCode.Unknown, e.Status.StatusCode);
                Assert.AreEqual(echoStatus.Message, e.Status.Detail);
            }

            Console.WriteLine("Passed!");
        }
コード例 #31
0
        public void MetadataCredentials_PerCall()
        {
            channel = new Channel(Host, server.Ports.Single().BoundPort, TestCredentials.CreateSslCredentials(), options);
            client = TestService.NewClient(channel);

            var callCredentials = CallCredentials.FromInterceptor(asyncAuthInterceptor);
            client.UnaryCall(new SimpleRequest { }, new CallOptions(credentials: callCredentials));
        }
コード例 #32
0
        public void Init()
        {
            GrpcEnvironment.Initialize();

            server = new Server();
            server.AddServiceDefinition(TestService.BindService(new TestServiceImpl()));
            int port = server.AddListeningPort(host, Server.PickUnusedPort, TestCredentials.CreateTestServerCredentials());
            server.Start();

            var channelArgs = ChannelArgs.CreateBuilder()
                .AddString(ChannelArgs.SslTargetNameOverrideKey, TestCredentials.DefaultHostOverride).Build();

            channel = new Channel(host + ":" + port, TestCredentials.CreateTestClientCredentials(true), channelArgs);
            client = TestService.NewStub(channel);
        }
コード例 #33
0
 // This is not an official interop test, but it's useful.
 public static void RunBenchmarkEmptyUnary(TestService.ITestServiceClient client)
 {
     BenchmarkUtil.RunBenchmark(10000, 10000,
                                () => { client.EmptyCall(new Empty()); });
 }
コード例 #34
0
        public static async Task RunPingPongAsync(TestService.ITestServiceClient client)
        {
            Console.WriteLine("running ping_pong");

            using (var call = client.FullDuplexCall())
            {
                await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
                {
                    ResponseType       = PayloadType.COMPRESSABLE,
                    ResponseParameters = { new ResponseParameters {
                                               Size = 31415
                                           } },
                    Payload = CreateZerosPayload(27182)
                });

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(31415, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
                {
                    ResponseType       = PayloadType.COMPRESSABLE,
                    ResponseParameters = { new ResponseParameters {
                                               Size = 9
                                           } },
                    Payload = CreateZerosPayload(8)
                });

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(9, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
                {
                    ResponseType       = PayloadType.COMPRESSABLE,
                    ResponseParameters = { new ResponseParameters {
                                               Size = 2653
                                           } },
                    Payload = CreateZerosPayload(1828)
                });

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(2653, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
                {
                    ResponseType       = PayloadType.COMPRESSABLE,
                    ResponseParameters = { new ResponseParameters {
                                               Size = 58979
                                           } },
                    Payload = CreateZerosPayload(45904)
                });

                Assert.IsTrue(await call.ResponseStream.MoveNext());
                Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
                Assert.AreEqual(58979, call.ResponseStream.Current.Payload.Body.Length);

                await call.RequestStream.CompleteAsync();

                Assert.IsFalse(await call.ResponseStream.MoveNext());
            }
            Console.WriteLine("Passed!");
        }
コード例 #35
0
        public void MetadataCredentials()
        {
            var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(),
                CallCredentials.FromInterceptor(asyncAuthInterceptor));
            channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options);
            client = TestService.NewClient(channel);

            client.UnaryCall(new SimpleRequest {});
        }
コード例 #36
0
ファイル: SslCredentialsTest.cs プロジェクト: rootusr/grpc
        public void Init()
        {
            var rootCert = File.ReadAllText(TestCredentials.ClientCertAuthorityPath);
            var keyCertPair = new KeyCertificatePair(
                File.ReadAllText(TestCredentials.ServerCertChainPath),
                File.ReadAllText(TestCredentials.ServerPrivateKeyPath));

            var serverCredentials = new SslServerCredentials(new[] { keyCertPair }, rootCert);
            var clientCredentials = new SslCredentials(rootCert, keyCertPair);

            server = new Server();
            server.AddServiceDefinition(TestService.BindService(new TestServiceImpl()));
            int port = server.AddPort(host, Server.PickUnusedPort, serverCredentials);
            server.Start();

            var options = new List<ChannelOption>
            {
                new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
            };

            channel = new Channel(host, port, clientCredentials, options);
            client = TestService.NewClient(channel);
        }
コード例 #37
0
 // This is not an official interop test, but it's useful.
 public static void RunBenchmarkEmptyUnary(TestService.ITestServiceClient client)
 {
     BenchmarkUtil.RunBenchmark(10000, 10000,
                                () => { client.EmptyCall(Empty.DefaultInstance); });
 }