Exemplo n.º 1
0
        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>();
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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>();
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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 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");
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        private async Task SendResponse <T>(T data, TestHttpClient.Entry entry) where T : IMessage
        {
            var dataResponse = new InvokeResponse
            {
                Data = Any.Pack(data),
            };

            var streamContent = await GrpcUtils.CreateResponseContent(dataResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 11
0
        private async Task SendResponse <T>(T data, TestHttpClient.Entry entry, JsonSerializerOptions options = null)
        {
            var dataAny      = TypeConverters.ToAny(data, options);
            var dataResponse = new InvokeResponse();

            dataResponse.Data = dataAny;

            var streamContent = await GrpcUtils.CreateResponseContent(dataResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 12
0
        private async void SendResponse <T>(T data, TestHttpClient.Entry entry, JsonSerializerOptions options = null)
        {
            var dataAny      = ProtobufUtils.ConvertToAnyAsync(data, options);
            var dataResponse = new InvokeServiceResponseEnvelope();

            dataResponse.Data = dataAny;

            var streamContent = await GrpcUtils.CreateResponseContent(dataResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 13
0
        private async void SendResponseWithState <T>(T state, TestHttpClient.Entry entry)
        {
            var stateData     = TypeConverters.ToJsonByteString(state);
            var stateResponse = new GetStateResponse();

            stateResponse.Data = stateData;
            stateResponse.Etag = "test";

            var streamContent = await GrpcUtils.CreateResponseContent(stateResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
        private async void SendResponseWithState <T>(T state, TestHttpClient.Entry entry)
        {
            var stateAny      = ProtobufUtils.ConvertToAnyAsync(state);
            var stateResponse = new GetStateResponseEnvelope();

            stateResponse.Data = stateAny;
            stateResponse.Etag = "test";

            var streamContent = await GrpcUtils.CreateResponseContent(stateResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 15
0
        private async Task SendResponseWithState <T>(T state, TestHttpClient.Entry entry)
        {
            var stateData     = TypeConverters.ToJsonByteString(state, new JsonSerializerOptions(JsonSerializerDefaults.Web));
            var stateResponse = new GetStateResponse
            {
                Data = stateData,
                Etag = "test",
            };

            var streamContent = await GrpcUtils.CreateResponseContent(stateResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 16
0
        private async void SendResponseWithBulkState(string key, string state, TestHttpClient.Entry entry)
        {
            var stateDate    = TypeConverters.ToJsonByteString(state);
            var bulkResponse = new Autogenerated.GetBulkStateResponse();

            bulkResponse.Items.Add(new Autogenerated.BulkStateItem()
            {
                Key  = key,
                Data = ByteString.CopyFromUtf8(state)
            });

            var streamContent = await GrpcUtils.CreateResponseContent(bulkResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 17
0
        private async Task SendBulkResponseWithSecrets(Dictionary <string, string> secrets, TestHttpClient.Entry entry)
        {
            var getBulkSecretResponse = new Autogenerated.GetBulkSecretResponse();

            foreach (var secret in secrets)
            {
                var secretsResponse = new Autogenerated.SecretResponse();
                secretsResponse.Secrets[secret.Key] = secret.Value;
                getBulkSecretResponse.Data.Add(secret.Key, secretsResponse);
            }

            var streamContent = await GrpcUtils.CreateResponseContent(getBulkSecretResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 18
0
        private async Task SendBulkResponseWithSecrets(Dictionary <string, string> secrets, TestHttpClient.Entry entry)
        {
            var getBulkSecretResponse = new Autogenerated.GetBulkSecretResponse();

            foreach (var secret in secrets)
            {
                var secretsResponse = new Autogenerated.SecretResponse();
                secretsResponse.Secrets[secret.Key] = secret.Value;
                // Bulk secret response is `MapField<string, MapField<string, string>>`. The outer key (string) must be ignored by `DaprSecretStoreConfigurationProvider`.
                getBulkSecretResponse.Data.Add("IgnoredKey" + secret.Key, secretsResponse);
            }

            var streamContent = await GrpcUtils.CreateResponseContent(getBulkSecretResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 19
0
        private async void SendResponseWithState <T>(T state, TestHttpClient.Entry entry, string etag = null)
        {
            var stateDate     = TypeConverters.ToJsonByteString(state);
            var stateResponse = new Autogenerated.GetStateResponse();

            stateResponse.Data = stateDate;

            if (etag != null)
            {
                stateResponse.Etag = etag;
            }

            var streamContent = await GrpcUtils.CreateResponseContent(stateResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 20
0
        private async void SendResponseWithState <T>(T state, TestHttpClient.Entry entry, string etag = null)
        {
            var stateAny      = ProtobufUtils.ConvertToAnyAsync(state);
            var stateResponse = new Autogenerated.GetStateResponseEnvelope();

            stateResponse.Data = stateAny;

            if (etag != null)
            {
                stateResponse.Etag = etag;
            }

            var streamContent = await GrpcUtils.CreateResponseContent(stateResponse);

            var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

            entry.Completion.SetResult(response);
        }
Exemplo n.º 21
0
        public async Task DeleteStateAsync_ThrowsForNonSuccess()
        {
            // Configure Client
            var httpClient = new TestHttpClient();
            var daprClient = new DaprClientBuilder()
                             .UseGrpcChannelOptions(new GrpcChannelOptions {
                HttpClient = httpClient
            })
                             .Build();

            var task = daprClient.DeleteStateAsync("testStore", "test");

            // 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>();
        }
Exemplo n.º 22
0
        public async Task GetStateAsync_WrapsRpcException()
        {
            // 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 response = GrpcUtils.CreateResponse(HttpStatusCode.NotAcceptable);

            entry.Completion.SetResult(response);

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

            Assert.IsType <RpcException>(ex.InnerException);
        }
Exemplo n.º 23
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);
        }
Exemplo n.º 24
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);
            });
        }