コード例 #1
0
        public async Task InvokeBindingAsync_WrapsJsonException()
        {
            await using var client = TestClient.CreateForDaprClient();

            var response = new Autogen.Grpc.v1.InvokeBindingResponse();
            var bytes    = JsonSerializer.SerializeToUtf8Bytes <Widget>(new Widget()
            {
                Color = "red",
            }, client.InnerClient.JsonSerializerOptions);

            response.Data = ByteString.CopyFrom(bytes.Take(10).ToArray()); // trim it to make invalid JSON blob

            var request = await client.CaptureGrpcRequestAsync(async daprClient =>
            {
                return(await daprClient.InvokeBindingAsync <InvokeRequest, Widget>("test", "test", new InvokeRequest()
                {
                    RequestParameter = "Hello "
                }));
            });

            var envelope = await request.GetRequestEnvelopeAsync <InvokeBindingRequest>();

            var ex = await Assert.ThrowsAsync <DaprException>(async() =>
            {
                await request.CompleteWithMessageAsync(response);
            });

            Assert.IsType <JsonException>(ex.InnerException);
        }
コード例 #2
0
        public async Task InvokeBindingAsync_WithRequest_ValidateRequest()
        {
            await using var client = TestClient.CreateForDaprClient();

            var payload = new InvokeRequest()
            {
                RequestParameter = "Hello "
            };
            var bindingRequest = new BindingRequest("test", "create")
            {
                Data     = JsonSerializer.SerializeToUtf8Bytes(payload, client.InnerClient.JsonSerializerOptions),
                Metadata =
                {
                    { "key1", "value1" },
                    { "key2", "value2" }
                }
            };

            var request = await client.CaptureGrpcRequestAsync(async daprClient =>
            {
                return(await daprClient.InvokeBindingAsync(bindingRequest));
            });

            var gRpcResponse = new Autogen.Grpc.v1.InvokeBindingResponse()
            {
                Data = ByteString.CopyFrom(JsonSerializer.SerializeToUtf8Bytes(new Widget()
                {
                    Color = "red",
                }, client.InnerClient.JsonSerializerOptions)),
                Metadata =
                {
                    { "anotherkey", "anothervalue" },
                }
            };
            var response = await request.CompleteWithMessageAsync(gRpcResponse);

            var envelope = await request.GetRequestEnvelopeAsync <InvokeBindingRequest>();

            envelope.Name.Should().Be("test");
            envelope.Metadata.Count.Should().Be(2);
            envelope.Metadata.Keys.Contains("key1").Should().BeTrue();
            envelope.Metadata.Keys.Contains("key2").Should().BeTrue();
            envelope.Metadata["key1"].Should().Be("value1");
            envelope.Metadata["key2"].Should().Be("value2");

            var json            = envelope.Data.ToStringUtf8();
            var typeFromRequest = JsonSerializer.Deserialize <InvokeRequest>(json, client.InnerClient.JsonSerializerOptions);

            typeFromRequest.RequestParameter.Should().Be("Hello ");

            Assert.Same(bindingRequest, response.Request);
            Assert.Equal("red", JsonSerializer.Deserialize <Widget>(response.Data.Span, client.InnerClient.JsonSerializerOptions).Color);
            Assert.Collection(
                response.Metadata,
                kvp =>
            {
                Assert.Equal("anotherkey", kvp.Key);
                Assert.Equal("anothervalue", kvp.Value);
            });
        }
コード例 #3
0
        public async Task InvokeBindingAsync_WrapsJsonException()
        {
            var httpClient = new TestHttpClient();
            var daprClient = new DaprClientBuilder()
                             .UseGrpcChannelOptions(new GrpcChannelOptions {
                HttpClient = httpClient
            })
                             .Build();

            var response = new Autogen.Grpc.v1.InvokeBindingResponse();
            var bytes    = JsonSerializer.SerializeToUtf8Bytes <Widget>(new Widget()
            {
                Color = "red",
            }, new JsonSerializerOptions(JsonSerializerDefaults.Web));

            response.Data = ByteString.CopyFrom(bytes.Take(10).ToArray()); // trim it to make invalid JSON blog

            var task = daprClient.InvokeBindingAsync <InvokeRequest, Widget>("test", "test", new InvokeRequest()
            {
                RequestParameter = "Hello "
            });

            httpClient.Requests.TryDequeue(out var entry).Should().BeTrue();
            var request = await GrpcUtils.GetRequestFromRequestMessageAsync <InvokeBindingRequest>(entry.Request);

            var streamContent = await GrpcUtils.CreateResponseContent(response);

            entry.Completion.SetResult(GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent));

            var ex = await Assert.ThrowsAsync <DaprException>(async() =>
            {
                await task;
            });

            Assert.IsType <JsonException>(ex.InnerException);
        }
コード例 #4
0
        public async Task InvokeBindingAsync_WithRequest_ValidateRequest()
        {
            // Configure Client
            var httpClient = new TestHttpClient();
            var daprClient = new DaprClientBuilder()
                             .UseGrpcChannelOptions(new GrpcChannelOptions {
                HttpClient = httpClient
            })
                             .Build();

            var payload = new InvokeRequest()
            {
                RequestParameter = "Hello "
            };
            var request = new BindingRequest("test", "create")
            {
                Data     = JsonSerializer.SerializeToUtf8Bytes(payload, daprClient.JsonSerializerOptions),
                Metadata =
                {
                    { "key1", "value1" },
                    { "key2", "value2" }
                }
            };

            var task = daprClient.InvokeBindingAsync(request);

            // Get Request and validate
            httpClient.Requests.TryDequeue(out var entry).Should().BeTrue();

            var gRpcRequest = await GrpcUtils.GetRequestFromRequestMessageAsync <InvokeBindingRequest>(entry.Request);

            gRpcRequest.Name.Should().Be("test");
            gRpcRequest.Metadata.Count.Should().Be(2);
            gRpcRequest.Metadata.Keys.Contains("key1").Should().BeTrue();
            gRpcRequest.Metadata.Keys.Contains("key2").Should().BeTrue();
            gRpcRequest.Metadata["key1"].Should().Be("value1");
            gRpcRequest.Metadata["key2"].Should().Be("value2");

            var json            = gRpcRequest.Data.ToStringUtf8();
            var typeFromRequest = JsonSerializer.Deserialize <InvokeRequest>(json, daprClient.JsonSerializerOptions);

            typeFromRequest.RequestParameter.Should().Be("Hello ");

            var gRpcResponse = new Autogen.Grpc.v1.InvokeBindingResponse()
            {
                Data = ByteString.CopyFrom(JsonSerializer.SerializeToUtf8Bytes(new Widget()
                {
                    Color = "red",
                }, daprClient.JsonSerializerOptions)),
                Metadata =
                {
                    { "anotherkey", "anothervalue" },
                }
            };
            var streamContent = await GrpcUtils.CreateResponseContent(gRpcResponse);

            entry.Completion.SetResult(GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent));

            var response = await task;

            Assert.Same(request, response.Request);
            Assert.Equal("red", JsonSerializer.Deserialize <Widget>(response.Data.Span, daprClient.JsonSerializerOptions).Color);
            Assert.Collection(
                response.Metadata,
                kvp =>
            {
                Assert.Equal("anotherkey", kvp.Key);
                Assert.Equal("anothervalue", kvp.Value);
            });
        }