public async Task SayHelloServerStreamingTest()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            var cts           = new CancellationTokenSource();
            var hasMessages   = false;
            var callCancelled = false;

            // Act
            using var call = client.SayHelloServerStreaming(new HelloRequest { Name = "Joe" }, cancellationToken: cts.Token);
            try
            {
                await foreach (var message in call.ResponseStream.ReadAllAsync())
                {
                    hasMessages = true;
                    cts.Cancel();
                }
            }
            catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled)
            {
                callCancelled = true;
            }

            // Assert
            Assert.IsTrue(hasMessages);
            Assert.IsTrue(callCancelled);
        }
예제 #2
0
        public async Task SayHelloBidirectionStreamingTest()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            var names    = new[] { "James", "Jo", "Lee" };
            var messages = new List <string>();

            // Act
            using (var call = client.SayHelloBidirectionalStreaming())
            {
                foreach (var name in names)
                {
                    await call.RequestStream.WriteAsync(new HelloRequest { Name = name });

                    Assert.IsTrue(await call.ResponseStream.MoveNext());
                    messages.Add(call.ResponseStream.Current.Message);
                }

                await call.RequestStream.CompleteAsync();
            }

            // Assert
            Assert.AreEqual(1, messages.Count);
            Assert.AreEqual("Hello James", messages[0]);
        }
예제 #3
0
        public async Task ClientStreamingTest_Success()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            var        names = new[] { "James", "Jo", "Lee" };
            HelloReply response;

            // Act
            using (var call = client.SayHelloClientStreaming())
            {
                foreach (var name in names)
                {
                    await call.RequestStream.WriteAsync(new HelloRequest { Name = name }).DefaultTimeout();

                    await Task.Delay(50);
                }
                await call.RequestStream.CompleteAsync().DefaultTimeout();

                response = await call.ResponseAsync.DefaultTimeout();
            }

            // Assert
            Assert.AreEqual("Hello James, Jo, Lee", response.Message);
        }
예제 #4
0
        public async Task BidirectionStreamingTest_Error()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            // Act
            var ex = await ExceptionAssert.ThrowsAsync <RpcException>(async() =>
            {
                var names = new[] { "James", "Jo", "Lee" };

                using (var call = client.SayHelloBidirectionalStreamingError())
                {
                    foreach (var name in names)
                    {
                        await call.RequestStream.WriteAsync(new HelloRequest {
                            Name = name
                        }).DefaultTimeout();

                        Assert.IsTrue(await call.ResponseStream.MoveNext().DefaultTimeout());
                    }

                    await call.RequestStream.CompleteAsync().DefaultTimeout();

                    Assert.IsFalse(await call.ResponseStream.MoveNext().DefaultTimeout());
                }
            }).DefaultTimeout();

            // Assert
            Assert.AreEqual(StatusCode.NotFound, ex.StatusCode);
        }
예제 #5
0
        private static async Task Main(string[] args)
        {
            var sw = new Stopwatch();

            if (args.Length < 1)
            {
                Console.Out.WriteLine("Usage: dotnet run --project FlowControlTest.Client server_host:port");
                return;
            }

            var channel = new Channel(args[0],
                                      ChannelCredentials.Insecure);
            var client = new Tester.TesterClient(channel);

            var call = client.StreamData();

            for (var i = 0; i < 1000000; ++i)
            {
                sw.Start();
                await call.RequestStream.WriteAsync(new TestRequest
                {
                    Data = new string('a', 10000)
                });

                sw.Stop();
                Console.Out.WriteLine("Sent request {0} in {1}s", i, sw.Elapsed);
                sw.Reset();
            }

            await call.RequestStream.CompleteAsync();

            await call.ResponseAsync;

            await channel.ShutdownAsync();
        }
예제 #6
0
        public async Task ClientStreamingTest_Error()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            // Act
            using var call = client.SayHelloClientStreamingError();

            var ex = await ExceptionAssert.ThrowsAsync <InvalidOperationException>(async() =>
            {
                var names = new[] { "James", "Jo", "Lee" };

                {
                    foreach (var name in names)
                    {
                        await call.RequestStream.WriteAsync(new HelloRequest {
                            Name = name
                        }).DefaultTimeout();
                        await Task.Delay(50);
                    }
                }
            }).DefaultTimeout();

            // Assert
            Assert.AreEqual(StatusCode.NotFound, call.GetStatus().StatusCode);
        }
예제 #7
0
        public IActionResult Index()
        {
            using var channel = GrpcChannel.ForAddress("https://localhost:5001");
            var client = new Tester.TesterClient(channel);
            var reply  = client.GetTests(
                new TestRequest {
                OrderBy = "1"
            });

            return(View());
        }
        public async Task SayHelloUnaryTest()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            // Act
            var response = await client.SayHelloUnaryAsync(new HelloRequest { Name = "Joe" });

            // Assert
            Assert.AreEqual("Hello Joe", response.Message);
        }
예제 #9
0
        public async Task UnaryTest_Error()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            // Act
            var ex = await ExceptionAssert.ThrowsAsync <RpcException>(() => client.SayHelloUnaryErrorAsync(new HelloRequest {
                Name = "Joe"
            }).ResponseAsync).DefaultTimeout();

            // Assert
            Assert.AreEqual(StatusCode.NotFound, ex.StatusCode);
        }
예제 #10
0
        public async Task ServerStreamingTest_Throw()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            // Act
            using var call = client.SayHelloServerStreamingError(new HelloRequest { Name = "Joe" });

            // Assert
            Assert.IsTrue(await call.ResponseStream.MoveNext().DefaultTimeout());

            var ex = await ExceptionAssert.ThrowsAsync <RpcException>(() => call.ResponseStream.MoveNext()).DefaultTimeout();

            Assert.AreEqual(StatusCode.NotFound, ex.StatusCode);
        }
예제 #11
0
        public async Task SayHelloClientStreamingTest()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            var        names = new[] { "James", "Jo", "Lee" };
            HelloReply response;

            // Act
            using var call = client.SayHelloClientStreaming();
            foreach (var name in names)
            {
                await call.RequestStream.WriteAsync(new HelloRequest { Name = name });
            }
            await call.RequestStream.CompleteAsync();

            response = await call;

            // Assert
            Assert.Equal("Hello James, Jo, Lee", response.Message);
        }
예제 #12
0
        public async Task ClientStreamingTest_Error()
        {
            // Arrange
            var client = new Tester.TesterClient(Channel);

            // Act
            using var call = client.SayHelloClientStreamingError();

            var ex = await ExceptionAssert.ThrowsAsync <Exception>(async() =>
            {
                while (true)
                {
                    await call.RequestStream.WriteAsync(new HelloRequest {
                        Name = "Name!"
                    }).DefaultTimeout();
                    await Task.Delay(50);
                }
            }).DefaultTimeout();

            // Assert
            Assert.IsTrue(ex is InvalidOperationException || ex is RpcException);
            Assert.AreEqual(StatusCode.NotFound, call.GetStatus().StatusCode);
        }
예제 #13
0
 public Worker(Tester.TesterClient client, IGreetRepository greetRepository)
 {
     _client          = client;
     _greetRepository = greetRepository;
 }
예제 #14
0
        public TestingClientService(Tester.TesterClient client, Channel channel)
        {
            _client = client;

            ClientChannel = channel;
        }
예제 #15
0
        static async Task Main(string[] args)
        {
            var consumerConfig = new ConsumerConfig
            {
                GroupId          = $"dbserver1.dbo.Person.{Guid.NewGuid():N}.group.id",
                BootstrapServers = "192.168.110.241:9092",
                AutoOffsetReset  = AutoOffsetReset.Earliest,
            };


            using (var c = new ConsumerBuilder <string, string>(consumerConfig).Build())
            {
                c.Subscribe("dbserver1.dbo.Person");
                try
                {
                    while (true)
                    {
                        try
                        {
                            var      cr = c.Consume();
                            var      a  = JsonSerializer.Serialize(cr.Message);
                            Mensagem b  = null;

                            if (cr.Message.Value != null)
                            {
                                b = JsonSerializer.Deserialize <Mensagem>(cr.Message?.Value);
                            }

                            var chave  = JsonSerializer.Deserialize <KeyIndentification>(cr.Key);
                            var offset = cr.TopicPartitionOffset;


                            if (b == null)
                            {
                                Console.WriteLine($"DELETADO - {chave.payload.Id}");
                            }
                            else
                            {
                                if (b.payload?.after != null && b.payload?.before == null)
                                {
                                    using var channel = GrpcChannel.ForAddress("https://localhost:5001");
                                    var tester   = new Tester.TesterClient(channel);
                                    var response = await tester.SalvarUsuarioAsync(
                                        new ModeloRequest
                                    {
                                        Endereco = b.payload?.after.Address,
                                        Id       = b.payload.after.Id,
                                        IntNull  = new Random().Next(1, 10) % 2 == 0 ? b.payload?.after.Id : (int?)null,
                                        Nome     = b.payload?.after.Name,
                                        Telefone = b.payload?.after.Phone,
                                        Obj      = new OutroModelo {
                                            Texto = "texto"
                                        }
                                    }
                                        );

                                    Console.WriteLine($"INCLUSÃO - ID:{b.payload?.after.Id}\nNOME:{b.payload?.after.Name}\nENDERECO:{b.payload?.after.Address}\nTELEFONE:{b.payload?.after.Phone}");
                                }
                                else
                                {
                                    if (b.payload?.after == null)
                                    {
                                        Console.WriteLine($"ALTERAÇÃO - ID:{b.payload?.before.Id}\nNOME:{b.payload?.before.Name}\nENDERECO:{b.payload?.before.Address}\nTELEFONE:{b.payload?.before.Phone}");
                                    }
                                    else
                                    {
                                        Console.WriteLine($"ALTERAÇÃO - ID:{b.payload?.after.Id}\nNOME:{b.payload?.after.Name}\nENDERECO:{b.payload?.after.Address}\nTELEFONE:{b.payload?.after.Phone}");
                                    }
                                }
                            }

                            Console.WriteLine("======================================================== \n");
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                            throw e;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }