| File: AzureWebPubSubEmulatorFunctionalTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Azure.Tests\Aspire.Hosting.Azure.Tests.csproj (Aspire.Hosting.Azure.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Net.WebSockets; using System.Text; using Aspire.Hosting.Utils; using Aspire.TestUtilities; using Azure; using Azure.Core; using Azure.Messaging.WebPubSub; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Aspire.Hosting.Azure.Tests; public class AzureWebPubSubEmulatorFunctionalTests(ITestOutputHelper testOutputHelper) { [Fact] [RequiresFeature(TestFeature.ContainerRuntime)] public async Task RunAsEmulatorSupportsWebPubSubServiceClient() { using var builder = TestDistributedApplicationBuilder.Create(testOutputHelper); var webPubSub = builder.AddAzureWebPubSub("webpubsub").RunAsEmulator(); var hub = webPubSub.AddHub("chat-resource", "chat"); await using var app = builder.Build(); using var startCts = new CancellationTokenSource(TimeSpan.FromMinutes(3)); await app.StartAsync(startCts.Token); using var readyCts = new CancellationTokenSource(TimeSpan.FromMinutes(3)); await app.ResourceNotifications.WaitForResourceHealthyAsync(webPubSub.Resource.Name, readyCts.Token); using var messagingCts = new CancellationTokenSource(TimeSpan.FromSeconds(30)); var clientBuilder = Host.CreateApplicationBuilder(); clientBuilder.Configuration["ConnectionStrings:chat-resource"] = await hub.Resource.ConnectionStringExpression.GetValueAsync(messagingCts.Token); clientBuilder.AddAzureWebPubSubServiceClient("chat-resource"); using var clientHost = clientBuilder.Build(); var client = clientHost.Services.GetRequiredService<WebPubSubServiceClient>(); Assert.Equal("chat", client.Hub); using var socket = new ClientWebSocket(); await socket.ConnectAsync(client.GetClientAccessUri(), messagingCts.Token); using var content = RequestContent.Create(BinaryData.FromString("Hello from Aspire")); await client.SendToAllAsync(content, ContentType.TextPlain, context: new RequestContext { CancellationToken = messagingCts.Token }); var buffer = new byte[1024]; var result = await socket.ReceiveAsync(buffer, messagingCts.Token); Assert.Equal(WebSocketMessageType.Text, result.MessageType); Assert.True(result.EndOfMessage); Assert.Equal("Hello from Aspire", Encoding.UTF8.GetString(buffer, 0, result.Count)); } }