public void InvokeMethodAsync_HeadersSpecifiedByUser_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var headers = new Dictionary <string, string>(); headers.Add("Authorization", "Bearer foo"); headers.Add("X-Custom", "bar"); var httpExtension = new Http.HTTPExtension() { Verb = HTTPVerb.Post, Headers = headers }; var task = daprClient.InvokeMethodAsync <Response>("app1", "mymethod", httpExtension); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); entry.Request.Headers.Authorization.Scheme.Should().Be("Bearer"); entry.Request.Headers.Authorization.Parameter.Should().Be("foo"); entry.Request.Headers.GetValues("X-Custom").FirstOrDefault().Should().Be("bar"); }
public async Task InvokeMethodAsync_WithReturnTypeAndData_WithNonDefaultVerb_WithQueryString_UsesConfiguredJsonSerializerOptions() { // Configure Client var httpClient = new TestHttpClient(); var jsonOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .UseJsonSerializationOptions(jsonOptions) .Build(); var invokeRequest = new Request() { RequestParameter = "Hello " }; var invokedResponse = new Response { Name = "Look, I was invoked!" }; Dictionary <string, string> queryString = new Dictionary <string, string>(); queryString.Add("key1", "value1"); var httpExtension = new Http.HTTPExtension() { Verb = HTTPVerb.Put, QueryString = queryString }; var task = daprClient.InvokeMethodAsync <Request, Response>("test", "test1", invokeRequest, httpExtension); // 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("test1"); envelope.Message.ContentType.Should().Be(Constants.ContentTypeApplicationJson); envelope.Message.HttpExtension.Verb.Should().Be(Autogen.Grpc.v1.HTTPExtension.Types.Verb.Put); envelope.Message.HttpExtension.Querystring.Count.Should().Be(1); envelope.Message.HttpExtension.Querystring.ContainsKey("key1").Should().BeTrue(); envelope.Message.HttpExtension.Querystring["key1"].Should().Be("value1"); var json = envelope.Message.Data.Value.ToStringUtf8(); json.Should().Be(JsonSerializer.Serialize(invokeRequest, jsonOptions)); await SendResponse(invokedResponse, entry, jsonOptions); var response = await task; response.Name.Should().Be(invokedResponse.Name); }
public async Task InvokeMethodAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var queryString = new Dictionary <string, string>(); queryString.Add("key1", "value1"); queryString.Add("key2", "value2"); var httpExtension = new Http.HTTPExtension() { Verb = HTTPVerb.Post, QueryString = queryString }; var task = daprClient.InvokeMethodAsync <Response>("app1", "mymethod", httpExtension); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var envelope = await GrpcUtils.GetRequestFromRequestMessageAsync <InvokeServiceRequest>(entry.Request); envelope.Id.Should().Be("app1"); envelope.Message.Method.Should().Be("mymethod"); envelope.Message.ContentType.Should().Be(Constants.ContentTypeApplicationJson); envelope.Message.HttpExtension.Verb.Should().Be(Autogen.Grpc.v1.HTTPExtension.Types.Verb.Post); envelope.Message.HttpExtension.Querystring.Count.Should().Be(2); envelope.Message.HttpExtension.Querystring.ContainsKey("key1").Should().BeTrue(); envelope.Message.HttpExtension.Querystring.ContainsKey("key2").Should().BeTrue(); envelope.Message.HttpExtension.Querystring["key1"].Should().Be("value1"); envelope.Message.HttpExtension.Querystring["key2"].Should().Be("value2"); }