// ------------------------------------------------------------ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. // ------------------------------------------------------------ namespace Dapr.Client.Test { using System; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Dapr.Client.Autogen.Grpc.v1; using FluentAssertions; using Grpc.Net.Client; using Xunit; public class PublishEventApiTest { const string TestPubsubName = "testpubsubname"; [Fact] 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(TestPubsubName, "test", publishData); httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync(entry.Request); var jsonFromRequest = request.Data.ToStringUtf8(); request.PubsubName.Should().Be(TestPubsubName); request.Topic.Should().Be("test"); jsonFromRequest.Should().Be(JsonSerializer.Serialize(publishData)); } [Fact] public async Task PublishEventAsync_CanPublishTopicWithNoContent() { var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .Build(); var task = daprClient.PublishEventAsync(TestPubsubName, "test"); httpClient.Requests.TryDequeue(out var entry).Should().BeTrue(); var request = await GrpcUtils.GetRequestFromRequestMessageAsync(entry.Request); var jsonFromRequest = request.Data.ToStringUtf8(); request.PubsubName.Should().Be(TestPubsubName); request.Topic.Should().Be("test"); jsonFromRequest.Should().Be("\"\""); } [Fact] public async Task PublishEventAsync_WithCancelledToken() { var httpClient = new TestHttpClient(); var daprClient = new DaprClientBuilder() .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient, ThrowOperationCanceledOnCancellation = true }) .Build(); var ctSource = new CancellationTokenSource(); CancellationToken ct = ctSource.Token; ctSource.Cancel(); await FluentActions.Awaiting(async () => await daprClient.PublishEventAsync(TestPubsubName, "test", cancellationToken: ct)) .Should().ThrowAsync(); } private class PublishData { public string PublishObjectParameter { get; set; } } } }