|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Aspire.Hosting.ApplicationModel;
using Aspire.Hosting.Utils;
namespace Aspire.Hosting.DevTunnels.Tests;
public class DevTunnelResourceBuilderExtensionsTests
{
[Fact]
public async Task WithReference_InjectsServiceDiscoveryEnvironmentVariablesWhenReferencingOtherResourcesViaTheTunnel()
{
using var builder = TestDistributedApplicationBuilder.Create();
var target = builder.AddProject<ProjectA>("target")
.WithHttpsEndpoint();
var tunnel = builder.AddDevTunnel("tunnel")
.WithReference(target);
var consumer = builder.AddResource(new TestResource("consumer"))
.WithReference(target, tunnel);
var tunnelPort = tunnel.Resource.Ports.FirstOrDefault();
Assert.NotNull(tunnelPort);
tunnelPort.TunnelEndpointAnnotation.AllocatedEndpoint = new(tunnelPort.TunnelEndpointAnnotation, "test123.devtunnels.ms", 443);
tunnelPort.TunnelEndpointAllocatedTcs.SetResult();
var values = await consumer.Resource.GetEnvironmentVariableValuesAsync();
var expectedKey = $"services__target__https__0";
Assert.Contains(expectedKey, values.Keys);
var expectedValue = "https://test123.devtunnels.ms:443";
Assert.Equal(expectedValue, values[expectedKey]);
}
[Fact]
public void AddDevTunnel_WithAnonymousAccess_SetsAllowAnonymousOption()
{
using var builder = TestDistributedApplicationBuilder.Create();
var tunnel = builder.AddDevTunnel("tunnel")
.WithAnonymousAccess();
Assert.True(tunnel.Resource.Options.AllowAnonymous);
}
[Fact]
public void AddDevTunnel_WithSpecificTunnelId_SetsTunnelIdProperty()
{
using var builder = TestDistributedApplicationBuilder.Create();
var tunnel = builder.AddDevTunnel("tunnel", "custom-id");
Assert.Equal("custom-id", tunnel.Resource.TunnelId);
}
[Fact]
public void WithReference_WithAnonymousAccess_SetsPortAllowAnonymousOption()
{
using var builder = TestDistributedApplicationBuilder.Create();
var target = builder.AddProject<ProjectA>("target")
.WithHttpsEndpoint();
var tunnel = builder.AddDevTunnel("tunnel")
.WithReference(target, allowAnonymous: true);
Assert.Single(tunnel.Resource.Ports);
var port = tunnel.Resource.Ports.First();
Assert.True(port.Options.AllowAnonymous);
}
private sealed class ProjectA : IProjectMetadata
{
public string ProjectPath => "projectA";
public LaunchSettings LaunchSettings { get; } = new();
}
private sealed class TestResource(string name) : Resource(name), IResourceWithEnvironment
{
}
}
|