コード例 #1
0
        public void InvokeMethodGrpcAsync_CanInvokeMethodWithNoReturnTypeAndData()
        {
            var request = new Request()
            {
                RequestParameter = "Hello "
            };
            var client = new MockClient();
            var data   = new Response()
            {
                Name = "Look, I was invoked!"
            };
            var invokeResponse = new InvokeResponse
            {
                Data = Any.Pack(data),
            };

            var response =
                client.Call <InvokeResponse>()
                .SetResponse(invokeResponse)
                .Build();

            client.Mock
            .Setup(m => m.InvokeServiceAsync(It.IsAny <Autogen.Grpc.v1.InvokeServiceRequest>(), It.IsAny <CallOptions>()))
            .Returns(response);

            FluentActions.Awaiting(async() => await client.DaprClient.InvokeMethodGrpcAsync <Request>("test", "test", request)).Should().NotThrow();
        }
コード例 #2
0
        public async Task InvokeMethodGrpcAsync_CanInvokeMethodWithReturnTypeNoData()
        {
            await using var client = TestClient.CreateForDaprClient(c =>
            {
                c.UseJsonSerializationOptions(this.jsonSerializerOptions);
            });

            var request = await client.CaptureGrpcRequestAsync(async daprClient =>
            {
                return(await daprClient.InvokeMethodGrpcAsync <Response>("test", "test"));
            });

            // Get Request and validate
            var envelope = await request.GetRequestEnvelopeAsync <InvokeServiceRequest>();

            envelope.Id.Should().Be("test");
            envelope.Message.Method.Should().Be("test");
            envelope.Message.ContentType.Should().Be(string.Empty);

            // Create Response & Respond
            var data = new Response()
            {
                Name = "Look, I was invoked!"
            };
            var response = new Autogen.Grpc.v1.InvokeResponse()
            {
                Data = Any.Pack(data),
            };

            // Validate Response
            var invokedResponse = await request.CompleteWithMessageAsync(response);

            invokedResponse.Name.Should().Be("Look, I was invoked!");
        }
コード例 #3
0
        public async Task InvokeMethodGrpcAsync_CanInvokeMethodWithReturnTypeAndData()
        {
            // Configure Client
            var httpClient = new TestHttpClient();
            var daprClient = CreateTestClientGrpc(httpClient);

            var task = daprClient.InvokeMethodGrpcAsync <Request, Response>("test", "test", new Request()
            {
                RequestParameter = "Hello "
            });

            // Get Request and validate
            httpClient.Requests.TryDequeue(out var entry).Should().BeTrue();
            var envelope = await GrpcUtils.GetRequestFromRequestMessageAsync <InvokeServiceRequest>(entry.Request);

            envelope.Id.Should().Be("test");
            envelope.Message.Method.Should().Be("test");
            envelope.Message.ContentType.Should().Be(Constants.ContentTypeApplicationGrpc);

            // Create Response & Respond
            var data = new Response()
            {
                Name = "Look, I was invoked!"
            };

            await SendResponse(data, entry);

            // Validate Response
            var invokedResponse = await task;

            invokedResponse.Name.Should().Be("Look, I was invoked!");
        }
コード例 #4
0
        public async Task InvokeMethodGrpcAsync_WithReturnTypeAndData()
        {
            // Configure Client
            var httpClient = new TestHttpClient();
            var daprClient = CreateTestClientGrpc(httpClient);

            var invokeRequest = new Request()
            {
                RequestParameter = "Hello "
            };
            var invokedResponse = new Response {
                Name = "Look, I was invoked!"
            };

            var task = daprClient.InvokeMethodGrpcAsync <Request, Response>("test", "test", invokeRequest);

            // Get Request and validate
            httpClient.Requests.TryDequeue(out var entry).Should().BeTrue();
            var envelope = await GrpcUtils.GetRequestFromRequestMessageAsync <InvokeServiceRequest>(entry.Request);

            envelope.Id.Should().Be("test");
            envelope.Message.Method.Should().Be("test");
            envelope.Message.ContentType.Should().Be(Constants.ContentTypeApplicationGrpc);

            var actual = envelope.Message.Data.Unpack <Request>();

            Assert.Equal(invokeRequest.RequestParameter, actual.RequestParameter);

            await SendResponse(invokedResponse, entry);

            var response = await task;

            response.Name.Should().Be(invokedResponse.Name);
        }
コード例 #5
0
        public async Task InvokeMethodGrpcAsync_WithReturnTypeAndData()
        {
            await using var client = TestClient.CreateForDaprClient(c =>
            {
                c.UseJsonSerializationOptions(this.jsonSerializerOptions);
            });

            var invokeRequest = new Request()
            {
                RequestParameter = "Hello "
            };
            var invokeResponse = new Response {
                Name = "Look, I was invoked!"
            };
            var request = await client.CaptureGrpcRequestAsync(async daprClient =>
            {
                return(await daprClient.InvokeMethodGrpcAsync <Request, Response>("test", "test", invokeRequest));
            });

            // Get Request and validate
            var envelope = await request.GetRequestEnvelopeAsync <InvokeServiceRequest>();

            envelope.Id.Should().Be("test");
            envelope.Message.Method.Should().Be("test");
            envelope.Message.ContentType.Should().Be(Constants.ContentTypeApplicationGrpc);

            var actual = envelope.Message.Data.Unpack <Request>();

            Assert.Equal(invokeRequest.RequestParameter, actual.RequestParameter);

            // Create Response & Respond
            var data = new Response()
            {
                Name = "Look, I was invoked!"
            };
            var response = new Autogen.Grpc.v1.InvokeResponse()
            {
                Data = Any.Pack(data),
            };

            // Validate Response
            var invokedResponse = await request.CompleteWithMessageAsync(response);

            invokeResponse.Name.Should().Be(invokeResponse.Name);
        }
コード例 #6
0
        public async Task InvokeMethodGrpcAsync_CanInvokeMethodWithNoReturnTypeAndData_ThrowsErrorNonSuccess()
        {
            var client = new MockClient();
            var data   = new Response()
            {
                Name = "Look, I was invoked!"
            };
            var invokeResponse = new InvokeResponse
            {
                Data = Any.Pack(data),
            };

            var response =
                client.Call <InvokeResponse>()
                .SetResponse(invokeResponse)
                .Build();


            const string     rpcExceptionMessage = "RPC exception";
            const StatusCode rpcStatusCode       = StatusCode.Unavailable;
            const string     rpcStatusDetail     = "Non success";

            var rpcStatus    = new Status(rpcStatusCode, rpcStatusDetail);
            var rpcException = new RpcException(rpcStatus, new Metadata(), rpcExceptionMessage);

            // Setup the mock client to throw an Rpc Exception with the expected details info
            client.Mock
            .Setup(m => m.InvokeServiceAsync(It.IsAny <Autogen.Grpc.v1.InvokeServiceRequest>(), It.IsAny <CallOptions>()))
            .Throws(rpcException);

            var ex = await Assert.ThrowsAsync <InvocationException>(async() =>
            {
                await client.DaprClient.InvokeMethodGrpcAsync <Request>("test", "test", new Request()
                {
                    RequestParameter = "Hello "
                });
            });

            Assert.Same(rpcException, ex.InnerException);
        }