Exemplo n.º 1
0
        public async Task InvokeMethodAsync_CanInvokeMethodWithReturnTypeAndData()
        {
            // Configure Client
            var httpClient = new TestHttpClient();
            var daprClient = new DaprClientBuilder()
                             .UseGrpcChannelOptions(new GrpcChannelOptions {
                HttpClient = httpClient
            })
                             .Build();

            var task = daprClient.InvokeMethodAsync <InvokedResponse>("test", "test");

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

            envelope.Id.Should().Be("test");
            envelope.Method.Should().Be("test");

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

            SendResponse(data, entry);

            // Validate Response
            var invokedResponse = await task;

            invokedResponse.Name.Should().Be("Look, I was invoked!");
        }
Exemplo n.º 2
0
        public async Task InvokeMethodAsync_WithReturnTypeAndData_UsesConfiguredJsonSerializerOptions()
        {
            var httpClient  = new TestHttpClient();
            var jsonOptions = new JsonSerializerOptions {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
            };

            var invokeClient  = new InvokeHttpClient(httpClient, jsonOptions);
            var invokeRequest = new InvokeRequest()
            {
                RequestParameter = "Hello "
            };
            var invokedResponse = new InvokedResponse {
                Name = "Look, I was invoked!"
            };

            var task = invokeClient.InvokeMethodAsync <InvokeRequest, InvokedResponse>("test", "test", invokeRequest);

            httpClient.Requests.TryDequeue(out var entry).Should().BeTrue();

            (await entry.Request.Content.ReadAsStringAsync()).Should().Be(JsonSerializer.Serialize(invokeRequest, jsonOptions));

            entry.RespondWithJson(invokedResponse, jsonOptions);

            var response = await task;

            response.Name.Should().Be(invokedResponse.Name);
        }
Exemplo n.º 3
0
        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 InvokeRequest()
            {
                RequestParameter = "Hello "
            };
            var invokedResponse = new InvokedResponse {
                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 <InvokeRequest, InvokedResponse>("test", "test", 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("test");
            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));

            SendResponse(invokedResponse, entry, jsonOptions);
            var response = await task;

            response.Name.Should().Be(invokedResponse.Name);
        }
Exemplo n.º 4
0
        public async Task InvokeMethodAsync_WithReturnTypeAndData_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 InvokeRequest()
            {
                RequestParameter = "Hello "
            };
            var invokedResponse = new InvokedResponse {
                Name = "Look, I was invoked!"
            };

            var task = daprClient.InvokeMethodAsync <InvokeRequest, InvokedResponse>("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.ContentTypeApplicationJson);

            var json = envelope.Message.Data.Value.ToStringUtf8();

            json.Should().Be(JsonSerializer.Serialize(invokeRequest, jsonOptions));

            SendResponse(invokedResponse, entry, jsonOptions);
            var response = await task;

            response.Name.Should().Be(invokedResponse.Name);
        }
Exemplo n.º 5
0
        public async Task InvokeMethodAsync_CanInvokeMethodWithNoReturnTypeAndData()
        {
            // Configure Client
            var httpClient = new TestHttpClient();
            var daprClient = new DaprClientBuilder()
                             .UseGrpcChannelOptions(new GrpcChannelOptions {
                HttpClient = httpClient
            })
                             .Build();

            InvokeRequest invokeRequest = new InvokeRequest()
            {
                RequestParameter = "Hello "
            };
            var task = daprClient.InvokeMethodAsync <InvokeRequest>("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.ContentTypeApplicationJson);

            var json            = envelope.Message.Data.Value.ToStringUtf8();
            var typeFromRequest = JsonSerializer.Deserialize <InvokeRequest>(json);

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

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

            SendResponse(response, entry);

            FluentActions.Awaiting(async() => await task).Should().NotThrow();
        }