public async Task GetStateAndEtagAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var metadata = new Dictionary <string, string> { { "partitionKey", "mypartition" } }; var task = daprClient.GetStateAsync <Widget>("testStore", "test", metadata: metadata); // Get Request & Validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <Autogenerated.GetStateRequest>(entry.Request); request.StoreName.Should().Be("testStore"); request.Key.Should().Be("test"); request.Metadata.Should().BeEquivalentTo(metadata); // Create Response & Respond await SendResponseWithState <Widget>(null, entry); // Get response and validate var state = await task; state.Should().BeNull(); }
public async Task SetStateAsync_ThrowsForNonSuccess() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var widget = new Widget() { Size = "small", Color = "yellow", }; var task = daprClient.SaveStateAsync("testStore", "test", widget); // Create Response & Respond httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var response = GrpcUtils.CreateResponse(HttpStatusCode.NotAcceptable); entry.Completion.SetResult(response); var ex = await Assert.ThrowsAsync <DaprException>(async() => await task); Assert.IsType <RpcException>(ex.InnerException); }
public async Task SaveStateAsync_CanSaveState() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var widget = new Widget() { Size = "small", Color = "yellow", }; var task = daprClient.SaveStateAsync("testStore", "test", widget); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <Autogenerated.SaveStateRequest>(entry.Request); request.StoreName.Should().Be("testStore"); request.States.Count.Should().Be(1); var state = request.States[0]; state.Key.Should().Be("test"); var stateJson = state.Value.ToStringUtf8(); var stateFromRequest = JsonSerializer.Deserialize <Widget>(stateJson); stateFromRequest.Size.Should().Be(widget.Size); stateFromRequest.Color.Should().Be(widget.Color); }
public async Task InvokeBindingAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var metadata = new Dictionary <string, string>(); metadata.Add("key1", "value1"); metadata.Add("key2", "value2"); var invokeRequest = new InvokeRequest() { RequestParameter = "Hello " }; var task = daprClient.InvokeBindingAsync <InvokeRequest>("test", invokeRequest, metadata); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var envelope = await GrpcUtils.GetEnvelopeFromRequestMessageAsync <InvokeBindingEnvelope>(entry.Request); 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.Value.ToStringUtf8(); var typeFromRequest = JsonSerializer.Deserialize <InvokeRequest>(json); typeFromRequest.RequestParameter.Should().Be("Hello "); }
public async Task GetBulkStateAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var metadata = new Dictionary <string, string> { { "partitionKey", "mypartition" } }; var key = "test"; var task = daprClient.GetBulkStateAsync("testStore", new List <string>() { key }, null, metadata: metadata); // Create Response & Validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <Autogenerated.GetBulkStateRequest>(entry.Request); request.StoreName.Should().Be("testStore"); request.Metadata.Should().BeEquivalentTo(metadata); }
private async Task SendEmptyResponse(TestHttpClient.Entry entry, HttpStatusCode code = HttpStatusCode.OK) { var response = new Autogenerated.GetSecretResponse(); var streamContent = await GrpcUtils.CreateResponseContent(response); entry.Completion.SetResult(GrpcUtils.CreateResponse(code, streamContent)); }
public async Task GetSecretAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var metadata = new Dictionary <string, string>(); metadata.Add("key1", "value1"); metadata.Add("key2", "value2"); var task = daprClient.GetSecretAsync("testStore", "test_key", metadata); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <Autogenerated.GetSecretRequest>(entry.Request); request.StoreName.Should().Be("testStore"); request.Key.Should().Be("test_key"); request.Metadata.Count.Should().Be(2); request.Metadata.Keys.Contains("key1").Should().BeTrue(); request.Metadata.Keys.Contains("key2").Should().BeTrue(); request.Metadata["key1"].Should().Be("value1"); request.Metadata["key2"].Should().Be("value2"); }
public async Task InvokeMethodAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var httpOptions = HttpInvocationOptions .UsingPost() .WithQueryParam("key1", "value1") .WithQueryParam("key2", "value2"); var task = daprClient.InvokeMethodAsync <Response>("app1", "mymethod", httpOptions); // 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"); }
public async Task InvokeMethodAsync_CanInvokeMethodWithNoReturnTypeAndData_ThrowsErrorNonSuccess() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var task = daprClient.InvokeMethodAsync <InvokeRequest>("test", "test", new InvokeRequest() { RequestParameter = "Hello " }); // 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"); var json = envelope.Data.Value.ToStringUtf8(); var typeFromRequest = JsonSerializer.Deserialize <InvokeRequest>(json); typeFromRequest.RequestParameter.Should().Be("Hello "); // Create Response & Respond var response = GrpcUtils.CreateResponse(HttpStatusCode.NotAcceptable); entry.Completion.SetResult(response); //validate response await FluentActions.Awaiting(async() => await task).Should().ThrowAsync <RpcException>(); }
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!"); }
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); }
public async Task InvokeMethodAsync_CanInvokeMethodWithReturnTypeNoData_ThrowsExceptionNonSuccess() { // 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 response = GrpcUtils.CreateResponse(HttpStatusCode.NotAcceptable); entry.Completion.SetResult(response); //validate response await FluentActions.Awaiting(async() => await task).Should().ThrowAsync <RpcException>(); }
public async Task ExecuteStateTransactionAsync_ThrowsForNonSuccess() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var widget1 = new Widget() { Size = "small", Color = "yellow", }; var state1 = new StateTransactionRequest("stateKey1", JsonSerializer.SerializeToUtf8Bytes(widget1), StateOperationType.Upsert); var states = new List <StateTransactionRequest>(); states.Add(state1); var task = daprClient.ExecuteStateTransactionAsync("testStore", states); // Create Response & Respond httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var response = GrpcUtils.CreateResponse(HttpStatusCode.NotAcceptable); entry.Completion.SetResult(response); await FluentActions.Awaiting(async() => await task).Should().ThrowAsync <RpcException>(); }
public async Task TryDeleteStateAsync_ValidateOptions( ConsistencyMode consistencyMode, ConcurrencyMode concurrencyMode, StateConsistency expectedConsistency, StateConcurrency expectedConcurrency) { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var stateOptions = new StateOptions { Concurrency = concurrencyMode, Consistency = consistencyMode }; var task = daprClient.TryDeleteStateAsync("testStore", "test", "Test_Etag", stateOptions); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <Autogenerated.DeleteStateRequest>(entry.Request); request.StoreName.Should().Be("testStore"); request.Key.Should().Be("test"); request.Etag.Should().Be("Test_Etag"); request.Options.Concurrency.Should().Be(expectedConcurrency); request.Options.Consistency.Should().Be(expectedConsistency); }
// [Test] // Integration Test public async Task Can_call_external_secure_service_using_remote_certificate() { try { // File.WriteAllBytes("grpc.crt", "https://todoworld.servicestack.net/grpc.crt".GetBytesFromUrl()); // var cert = new X509Certificate2("grpc.crt"); var cert = new X509Certificate2("https://todoworld.servicestack.net/grpc.crt".GetBytesFromUrl()); var client = new GrpcServiceClient("https://todoworld.servicestack.net:50051", cert, GrpcUtils.AllowSelfSignedCertificatesFrom("todoworld.servicestack.net")); var response = await client.GetAsync(new Hello { Name = "gRPC SSL C# 50051" }); response.Result.Print(); client = new GrpcServiceClient("https://todoworld.servicestack.net:5051", cert, GrpcUtils.AllowSelfSignedCertificatesFrom("todoworld.servicestack.net")); response = await client.GetAsync(new Hello { Name = "gRPC SSL C# 5051" }); response.Result.Print(); } catch (Exception e) { Console.WriteLine(e); throw; } }
public void AddDaprSecretStore_DuplicateSecret_ReportsError() { var httpClient = new TestHttpClient() { Handler = async(entry) => { var secrets = new Dictionary <string, string>() { { "secretName", "secret" }, { "SecretName", "secret" } }; var secretResponse = new Autogenerated.GetSecretResponse(); secretResponse.Data.Add(secrets); var streamContent = await GrpcUtils.CreateResponseContent(secretResponse); var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent); entry.Completion.SetResult(response); } }; var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var ex = Assert.Throws <InvalidOperationException>(() => { var config = CreateBuilder() .AddDaprSecretStore("store", new DaprSecretDescriptor[] { new DaprSecretDescriptor("secretName") }, daprClient) .Build(); }); Assert.Contains("Please remove any duplicates from your secret store.", ex.Message); }
public async Task Triggering_all_validators_returns_right_ErrorCode_from_Headers() { var client = GetClient(); try { var response = await client.PostTriggerValidatorsAsync(new TriggerValidators(), GrpcUtils.ToHeaders(new { CreditCard = "NotCreditCard", Email = "NotEmail", Empty = "NotEmpty", Equal = "NotEqual", ExclusiveBetween = 1, GreaterThan = 1, GreaterThanOrEqual = 1, InclusiveBetween = 1, Length = "Length", LessThan = 20, LessThanOrEqual = 20, NotEmpty = "", NotEqual = "NotEqual", Null = "NotNull", RegularExpression = "FOO", ScalePrecision = 123.456m })); Assert.Fail("Should throw"); } catch (WebServiceException ex) { //ex.ResponseStatus.PrintDump(); AssertTriggerValidatorsResponse(ex); } }
public async Task PublishEventAsync_CanPublishTopicWithNoContent_WithMetadata() { var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var metadata = new Dictionary <string, string> { { "key1", "value1" }, { "key2", "value2" } }; var task = daprClient.PublishEventAsync(TestPubsubName, "test", metadata); httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <PublishEventRequest>(entry.Request); var jsonFromRequest = request.Data.ToStringUtf8(); request.PubsubName.Should().Be(TestPubsubName); request.Topic.Should().Be("test"); jsonFromRequest.Should().Be("\"\""); request.Metadata.Count.Should().Be(2); request.Metadata.Keys.Contains("key1").Should().BeTrue(); request.Metadata.Keys.Contains("key2").Should().BeTrue(); request.Metadata["key1"].Should().Be("value1"); request.Metadata["key2"].Should().Be("value2"); }
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!"); }
public async Task PublishEventAsync_CanPublishTopicWithData() { var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var publishData = new PublishData() { PublishObjectParameter = "testparam" }; var task = daprClient.PublishEventAsync <PublishData>(TestPubsubName, "test", publishData); httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <PublishEventRequest>(entry.Request); var jsonFromRequest = request.Data.ToStringUtf8(); request.PubsubName.Should().Be(TestPubsubName); request.Topic.Should().Be("test"); jsonFromRequest.Should().Be(JsonSerializer.Serialize(publishData)); request.Metadata.Count.Should().Be(0); }
public void LoadSecrets_FromSecretStoreThatCanReturnsMultipleValues() { // Configure Client var httpClient = new TestHttpClient() { Handler = async(entry) => { var secrets = new Dictionary <string, string>() { { "first_secret", "secret1" }, { "second_secret", "secret2" } }; var secretResponse = new Autogenerated.GetSecretResponse(); secretResponse.Data.Add(secrets); var streamContent = await GrpcUtils.CreateResponseContent(secretResponse); var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent); entry.Completion.SetResult(response); } }; var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var config = CreateBuilder() .AddDaprSecretStore("store", new DaprSecretDescriptor[] { new DaprSecretDescriptor("secretName") }, daprClient) .Build(); config["first_secret"].Should().Be("secret1"); config["second_secret"].Should().Be("secret2"); }
public async Task InvokeMethodAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var metadata = new Dictionary <string, string>(); metadata.Add("key1", "value1"); metadata.Add("key2", "value2"); var task = daprClient.InvokeMethodAsync <InvokedResponse>("test", "test", metadata); // 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"); 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"); }
public async Task GetStateAsync_ValidateRequest(ConsistencyMode consistencyMode, StateConsistency expectedConsistencyMode) { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var task = daprClient.GetStateAsync <Widget>("testStore", "test", consistencyMode); // Get Request & Validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <Autogenerated.GetStateRequest>(entry.Request); request.StoreName.Should().Be("testStore"); request.Key.Should().Be("test"); request.Consistency.Should().Be(expectedConsistencyMode); // Create Response & Respond SendResponseWithState <Widget>(null, entry); // Get response and validate var state = await task; state.Should().BeNull(); }
public async Task InvokeMethodAsync_WithNoReturnTypeAndData_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 task = daprClient.InvokeMethodAsync <InvokeRequest, InvokedResponse>("test", "test", invokeRequest); // 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"); var json = envelope.Data.Value.ToStringUtf8(); json.Should().Be(JsonSerializer.Serialize(invokeRequest, jsonOptions)); }
public async Task GetStateAsync_WrapsJsonException() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); // Create Response & Respond var task = daprClient.GetStateAsync <Widget>("testStore", "test"); httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var stateResponse = new Autogenerated.GetStateResponse() { // Totally NOT valid JSON Data = ByteString.CopyFrom(0x5b, 0x7b, 0x5b, 0x7b), }; var streamContent = await GrpcUtils.CreateResponseContent(stateResponse); var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent); entry.Completion.SetResult(response); var ex = await Assert.ThrowsAsync <DaprException>(async() => await task); Assert.IsType <JsonException>(ex.InnerException); }
public async Task InvokeMethodAsync_CanInvokeMethodWithReturnTypeAndData_EmptyResponseReturnsNull() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var task = daprClient.InvokeMethodAsync <InvokeRequest, InvokedResponse>("test", "test", new InvokeRequest() { RequestParameter = "Hello " }); // 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"); var json = envelope.Data.Value.ToStringUtf8(); var typeFromRequest = JsonSerializer.Deserialize <InvokeRequest>(json); typeFromRequest.RequestParameter.Should().Be("Hello "); // Create Response & Respond SendResponse <InvokedResponse>(null, entry); // Validate Response. var invokedResponse = await task; invokedResponse.Should().BeNull(); }
public async Task InvokeBindingAsync_ValidateRequest() { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var invokeRequest = new InvokeRequest() { RequestParameter = "Hello " }; var task = daprClient.InvokeBindingAsync <InvokeRequest>("test", "create", invokeRequest); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <InvokeBindingRequest>(entry.Request); request.Name.Should().Be("test"); request.Metadata.Count.Should().Be(0); var json = request.Data.ToStringUtf8(); var typeFromRequest = JsonSerializer.Deserialize <InvokeRequest>(json, daprClient.JsonSerializerOptions); typeFromRequest.RequestParameter.Should().Be("Hello "); }
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 TrySaveStateAsync_ValidateOptions( ConsistencyMode consistencyMode, ConcurrencyMode concurrencyMode, StateConsistency expectedConsistency, StateConcurrency expectedConcurrency) { // Configure Client var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var widget = new Widget() { Size = "small", Color = "yellow", }; var stateOptions = new StateOptions { Concurrency = concurrencyMode, Consistency = consistencyMode }; var metadata = new Dictionary <string, string> { { "key1", "value1" }, { "key2", "value2" } }; var task = daprClient.TrySaveStateAsync("testStore", "test", widget, "Test_Etag", stateOptions, metadata); // Get Request and validate httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync <Autogenerated.SaveStateRequest>(entry.Request); request.StoreName.Should().Be("testStore"); request.States.Count.Should().Be(1); var state = request.States[0]; state.Key.Should().Be("test"); state.Etag.Should().Be("Test_Etag"); state.Metadata.Count.Should().Be(2); state.Metadata.Keys.Contains("key1").Should().BeTrue(); state.Metadata.Keys.Contains("key2").Should().BeTrue(); state.Metadata["key1"].Should().Be("value1"); state.Metadata["key2"].Should().Be("value2"); state.Options.Concurrency.Should().Be(expectedConcurrency); state.Options.Consistency.Should().Be(expectedConsistency); var stateJson = state.Value.ToStringUtf8(); var stateFromRequest = JsonSerializer.Deserialize <Widget>(stateJson); stateFromRequest.Size.Should().Be(widget.Size); stateFromRequest.Color.Should().Be(widget.Color); }
private async Task SendResponseWithSecrets(Dictionary <string, string> secrets, TestHttpClient.Entry entry) { var secretResponse = new Autogenerated.GetSecretResponse(); secretResponse.Data.Add(secrets); var streamContent = await GrpcUtils.CreateResponseContent(secretResponse); var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent); entry.Completion.SetResult(response); }