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); }
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); }); }
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); }
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); }); }