Implemented interface member:

property
Name
Aspire.Hosting.ApplicationModel.IResource.Name
4 overrides of Name
Aspire.Hosting.Azure.EventHubs (1)
Aspire.Hosting.Azure.PostgreSQL (1)
Aspire.Hosting.Azure.Redis (1)
Aspire.Hosting.Azure.Storage (1)
1 write to Name
Aspire.Hosting (1)
2561 references to Name
Aspire.Hosting (75)
Orchestrator\ParameterProcessor.cs (17)
197referencedParameters.TryAdd(parameter.Name, parameter);
227.LogWarning("Parameter resource {ResourceName} could not be initialized. Waiting for user input.", parameterResource.Name);
235.LogError(ex, "Failed to initialize parameter resource {ResourceName}.", parameterResource.Name);
492var message = string.Format(CultureInfo.CurrentCulture, InteractionStrings.DeleteParameterMessage, parameterResource.Name);
553return new ExecuteCommandResult { Success = true, Message = string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceSetParameter, parameterResource.Name) };
569logger.LogInformation("Parameter value deleted from deployment state for {ParameterName}.", parameterResource.Name);
572.LogInformation("Parameter resource {ResourceName} value has been deleted from user secrets.", parameterResource.Name);
576logger.LogInformation("Parameter value cleared for {ParameterName} (not deleted from user secrets).", parameterResource.Name);
579.LogInformation("Parameter resource {ResourceName} value has been cleared.", parameterResource.Name);
595logger.LogWarning(ex, "Failed to delete parameter {ParameterName} from deployment state.", parameterResource.Name);
596return CommandResults.Failure($"Failed to delete parameter '{parameterResource.Name}'.");
599return new ExecuteCommandResult { Success = true, Message = string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceDeletedParameter, parameterResource.Name) };
640.LogInformation("Parameter resource {ResourceName} has been resolved via {ResolutionSource}.", parameterResource.Name, resolutionSource);
653logger.LogInformation("Parameter value saved to deployment state for {ParameterName}.", parameterResource.Name);
657logger.LogWarning(ex, "Failed to save parameter {ParameterName} to deployment state.", parameterResource.Name);
914logger.LogInformation("Parameter value deleted from deployment state for {ParameterName}.", parameter.Name);
919logger.LogWarning(ex, "Failed to save parameter {ParameterName} to deployment state.", parameter.Name);
Aspire.Hosting.Azure (101)
AzureProvisioningController.cs (27)
1925var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{bicepResource.Name}", cancellationToken).ConfigureAwait(false);
2021await SetResourceLocationOverrideAsync(targetBicepResource.Name, intent.Location, cancellationToken).ConfigureAwait(false);
2256!notificationService.TryGetCurrentState(environmentResource.Name, out var environmentEvent) ||
2627var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
2632var outputs = ParseDeploymentStateJson(resource.Name, "Outputs", section.Data["Outputs"]?.GetValue<string>());
2645["scope"] = ParseDeploymentStateJson(resource.Name, "Scope", section.Data["Scope"]?.GetValue<string>())
2870var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{bicepResource.Name}", cancellationToken).ConfigureAwait(false);
2911=> resource.AzureResource is AzureBicepResource bicepResource ? bicepResource.Name : resource.Resource.Name;
2928var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{bicepResource.Name}", cancellationToken).ConfigureAwait(false);
2946$"Azure:Deployments:{bicepResource.Name}",
3049var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
3068_logger.LogInformation(ex, "Azure deployment {DeploymentId} was absent while collecting target resources for {ResourceName}.", deploymentId, resource.Name);
3264if (!notificationService.TryGetCurrentState(resource.Name, out var resourceEvent))
3518var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
3532_logger.LogDebug(ex, "Unable to parse cached outputs for resource {ResourceName} while checking for Azure drift.", resource.Name);
3586resource.Name,
3607resource.Name,
3620resource.Name,
3628resource.Name,
3637var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
3656_logger.LogDebug(ex, "Unable to parse persisted parameters while checking whether Azure resource {ResourceName} must be deleted for a location change.", resource.Name);
3692_logger.LogDebug(ex, "Unable to verify cached Azure resource state for {ResourceName} because no Azure credential is available.", resource.Name);
3699_logger.LogDebug(ex, "Unable to verify cached Azure resource state for {ResourceName} because the Azure resource probe failed.", resource.Name);
3712var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
3925TryGetPublishedTerminalDeploymentState(bicepResource.Name, out publishedTerminalState))
3939!IsResourceInState(bicepResource.Name, CancelingState))
3944var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{bicepResource.Name}").ConfigureAwait(false);
Provisioning\Provisioners\BicepProvisioner.cs (39)
51var stateSection = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
60logger.LogDebug("Cached deployment state for resource {ResourceName} is incomplete because provisioning state is {ProvisioningState}.", resource.Name, provisioningState);
69logger.LogDebug("Cached deployment state for resource {ResourceName} is incomplete because it is missing a checksum.", resource.Name);
75logger.LogDebug("Checksum mismatch for resource {ResourceName}. Expected cached checksum {ExpectedChecksum}, computed checksum {ActualChecksum}", resource.Name, configCheckSum, currentCheckSum);
79logger.LogDebug("Configuring resource {ResourceName} from existing deployment state.", resource.Name);
172var sectionName = $"Azure:Deployments:{resource.Name}";
204logger.LogDebug(ex, "Unable to reconcile cached deployment state for {ResourceName} because no Azure credential is available.", resource.Name);
209logger.LogDebug(ex, "Unable to reconcile cached deployment state for {ResourceName} because the Azure deployment probe failed.", resource.Name);
217logger.LogInformation("Cached Azure deployment {DeploymentId} for {ResourceName} no longer exists. Reprovisioning.", deploymentId, resource.Name);
239logger.LogInformation("Cached Azure deployment {DeploymentId} for {ResourceName} no longer exists after reconciliation started. Reprovisioning.", deploymentId, resource.Name);
252logger.LogDebug("Cached Azure deployment {DeploymentId} for {ResourceName} has provisioning state {ProvisioningState}. Reprovisioning.", deploymentId, resource.Name, deployment.ProvisioningState);
277logger.LogDebug(ex, "Unable to publish Azure deployment operation progress for cached deployment {DeploymentId} on {ResourceName}.", deploymentId, resource.Name);
281logger.LogDebug(ex, "Unable to publish Azure deployment operation progress for cached deployment {DeploymentId} on {ResourceName} because no Azure credential is available.", deploymentId, resource.Name);
296logger.LogDebug(ex, "Unable to continue reconciling cached Azure deployment {DeploymentId} for {ResourceName}.", deploymentId, resource.Name);
301logger.LogDebug(ex, "Unable to continue reconciling cached Azure deployment {DeploymentId} for {ResourceName} because no Azure credential is available.", deploymentId, resource.Name);
354if (!TryGetDeploymentStateJsonObject(stateSection, BicepUtilities.DeploymentStateParametersKey, resource.Name, out var parameters) ||
357logger.LogDebug("Cached deployment state for resource {ResourceName} cannot be reconciled because parameters or checksum are missing.", resource.Name);
368var scope = TryGetDeploymentStateJsonObject(stateSection, BicepUtilities.DeploymentStateScopeKey, resource.Name, out var cachedScope)
421throw new InvalidOperationException($"Azure deployment for {resource.Name} was canceled.");
430throw new InvalidOperationException($"Azure deployment for {resource.Name} failed.");
563logger.LogDebug("Setting parameters and scope for resource {ResourceName}", resource.Name);
581var deploymentName = ResourceNameHelpers.TruncateWithHash(resource.Name, 64 - deploymentSuffix.Length) + deploymentSuffix;
597resourceLogger.LogInformation("Deploying {Name} to {DeploymentTarget}", resource.Name, deploymentTargetName);
598logger.LogDebug("Starting deployment of resource {ResourceName} to {DeploymentTarget}", resource.Name, deploymentTargetName);
622var sectionName = $"Azure:Deployments:{resource.Name}";
679var sectionName = $"Azure:Deployments:{resource.Name}";
765resourceLogger.LogInformation("Deployment of {Name} to {DeploymentTarget} took {Elapsed}", resource.Name, deploymentTargetName, sw.Elapsed);
766logger.LogDebug("Deployment of resource {ResourceName} to {DeploymentTarget} completed in {Elapsed}", resource.Name, deploymentTargetName, sw.Elapsed);
787resourceLogger.LogError("Azure deployment of {Name} to {DeploymentTarget} completed with provisioning state {ProvisioningState}.", resource.Name, deploymentTargetName, provisioningState);
788throw new InvalidOperationException($"Deployment of {resource.Name} to {deploymentTargetName} failed with {provisioningState}");
797var sectionName = $"Azure:Deployments:{resource.Name}";
855var sectionName = $"Azure:Deployments:{resource.Name}";
867logger.LogDebug("Azure deployment {DeploymentId} for {ResourceName} is active, but cached state does not match the current deployment request.", deploymentId, resource.Name);
884logger.LogDebug(ex, "Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because the Azure deployment probe failed.", deploymentId, resource.Name);
889logger.LogDebug(ex, "Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because no Azure credential is available.", deploymentId, resource.Name);
898logger.LogDebug("Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because it could not be found.", deploymentId, resource.Name);
907logger.LogInformation("Azure deployment {DeploymentId} for {ResourceName} is already active. Waiting for the existing deployment to complete.", deploymentId, resource.Name);
920logger.LogDebug("Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because it disappeared while waiting.", deploymentId, resource.Name);
935logger.LogDebug("Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because provisioning state is {ProvisioningState}.", deploymentId, resource.Name, deployment.ProvisioningState);
Aspire.Hosting.Azure.AppConfiguration (3)
Aspire.Hosting.Azure.AppContainers (20)
Aspire.Hosting.Azure.AppService (13)
Aspire.Hosting.Azure.CognitiveServices (3)
Aspire.Hosting.Azure.ConnectorNamespace (29)
Aspire.Hosting.Azure.ContainerRegistry (1)
Aspire.Hosting.Azure.CosmosDB (18)
Aspire.Hosting.Azure.EntraId (13)
Aspire.Hosting.Azure.EntraId.Tests (14)
Aspire.Hosting.Azure.EventHubs (8)
Aspire.Hosting.Azure.FrontDoor (2)
Aspire.Hosting.Azure.Functions (3)
Aspire.Hosting.Azure.KeyVault (3)
Aspire.Hosting.Azure.Kubernetes (49)
AzureKubernetesEnvironmentResource.AksPipeline.cs (16)
51logger.LogInformation("Processing AKS environment '{Name}'", Name);
187.FirstOrDefault(p => p.Name == poolName && p.AksParent == environment);
214?? Name;
232$"Fetching AKS credentials for {Name}",
363.AcquireSectionAsync($"Azure:Deployments:{Name}", context.CancellationToken)
369$"No Azure deployment state was found for AKS environment '{Name}'. " +
388$"The Azure deployment state for AKS environment '{Name}' contains invalid outputs.",
395$"The Azure deployment state for AKS environment '{Name}' does not contain the deployed cluster identity.");
422$"The Azure deployment state for AKS environment '{Name}' contains an invalid scope.",
513$"Applying AGC ApplicationLoadBalancer CR for {lb.Name}",
532displaced, lb.Name, displaced);
539$"Could not resolve subnet ID for AGC load balancer '{lb.Name}'.");
544$"Cannot apply AGC ApplicationLoadBalancer CR for '{lb.Name}': " +
545$"kubeconfig was not set by aks-get-credentials-{Name}.");
641$"☸ ALB {lb.Name}",
651$"Failed to apply AGC ApplicationLoadBalancer for {lb.Name}: {ex.Message}",
Aspire.Hosting.Azure.Kubernetes.Tests (26)
AzureKubernetesEnvironmentExtensionsTests.cs (20)
31Assert.Equal("aks", aks.Resource.Name);
78Assert.Equal("gpu", gpuPool.Resource.Name);
343Assert.Equal("aks", aks.Resource.KubernetesEnvironment.Name);
545Assert.Equal("gpu", affinity.NodePool.Name);
563Assert.Equal("cpu", pool1.Resource.Name);
564Assert.Equal("gpu", pool2.Resource.Name);
576Assert.Equal("aks-acr", aks.Resource.DefaultContainerRegistry.Name);
647resource => resource.Name == "aks-kubelet-identity-roles-registry");
658var roleBicep = await File.ReadAllTextAsync(Path.Combine(workspace.Path, roles.Name, $"{roles.Name}.bicep"));
691resource => resource.Name == "aks-kubelet-identity-roles-final");
838var operatorBicep = await File.ReadAllTextAsync(Path.Combine(workspace.Path, operatorRole.Name, $"{operatorRole.Name}.bicep"));
842var registryRoleBicep = await File.ReadAllTextAsync(Path.Combine(workspace.Path, registryRole.Name, $"{registryRole.Name}.bicep"));
928var registryRoleBicep = await File.ReadAllTextAsync(Path.Combine(workspace.Path, registryRole.Name, $"{registryRole.Name}.bicep"));
930var networkRoleBicep = await File.ReadAllTextAsync(Path.Combine(workspace.Path, networkRole.Name, $"{networkRole.Name}.bicep"));
1090Assert.Equal("gpu", gpuPool.Resource.Name);
Aspire.Hosting.Azure.Kusto (14)
AzureKustoBuilderExtensions.cs (11)
71Tags = { { "aspire-resource-name", infrastructure.AspireResource.Name } }
128throw new DistributedApplicationException($"ConnectionStringAvailableEvent published for resource '{db.Name}', but the connection string was null.");
133var healthCheckKey = $"{kustoDatabase.Name}_check";
243throw new DistributedApplicationException($"ConnectionStringAvailableEvent published for resource '{resource.Name}', but the connection string was null.");
248var healthCheckKey = $"{resource.Name}_check";
259throw new DistributedApplicationException($"Connection string for Kusto resource '{server.Name}' is not set.");
386throw new DistributedApplicationException($"Connection string for Kusto resource '{resourceBuilder.Resource.Name}' is not set.");
389var result = launcher.TryLaunchKustoExplorer(title: "", resourceBuilder.Resource.Name, connectionString, requestText: "");
401throw new DistributedApplicationException($"Connection string for Kusto resource '{resourceBuilder.Resource.Name}' is not set.");
404var result = launcher.TryLaunchKustoWebExplorer(title: "", resourceBuilder.Resource.Name, connectionString, requestText: "");
415message: $"Could not automatically open Kusto Web Explorer for resource '{resourceBuilder.Resource.Name}'. Click [{connectionString}]({connectionString}) to manually open the Web Explorer.",
Aspire.Hosting.Azure.Kusto.Tests (8)
Aspire.Hosting.Azure.Network (23)
Aspire.Hosting.Azure.PostgreSQL (11)
Aspire.Hosting.Azure.Redis (13)
Aspire.Hosting.Azure.Sandboxes (51)
AzureSandboxContainerDeployment.cs (31)
67Description = $"Deploys compute resource '{resource.TargetResource.Name}' to ACA sandbox '{resource.Name}'.",
77Description = $"Deletes ACA sandbox deployment '{resource.Name}'.",
168$"Azure sandbox resource '{resource.TargetResource.Name}' in sandbox group '{resource.Parent.Name}' references resource '{dependency.Name}' in sandbox group '{producer.Parent.Name}', but cross-group sandbox references are not supported. Deploy both resources to the same sandbox group.");
192var expectedName = $"destroy-azure-{environment.Name}";
264resource.Name);
271resource.Name);
308resource.Name,
335resource.Name,
343var lifecycleTask = await context.ReportingStep.CreateTaskAsync($"Configuring lifecycle for {resource.Name}", context.CancellationToken).ConfigureAwait(false);
403stateSection.Data["ResourceName"] = resource.Name;
437resource.Name,
463resource.Name,
485resource.Name);
489$"The new Azure sandbox deployment '{resource.Name}' succeeded, but the previous generation could not be removed after a security-relevant endpoint change. The new deployment state was preserved, but the deployment is reported as failed so the older endpoint is not silently treated as secured.",
541resource.Name,
570["aspire-resource"] = resource.Name,
986throw new NotSupportedException($"Resource '{resource.TargetResource.Name}' cannot be deployed to Azure sandbox group '{resource.Parent.Name}' because it does not produce or reference a container image.");
1338var stableOwnerId = CreateStableOwnerId(appHostIdentity, environmentName, fallbackScope, resource.Name);
1344resource.Name,
1362var legacyOwnerId = CreateLegacyStableOwnerId(appHostIdentity, scope, resource.Name);
1368await DeleteRemoteDeploymentsByResourceLabelAsync(context, client, scope, ownerId, resource.Name, s_noExcludedIds, s_noExcludedIds, s_noExcludedIds, throwOnError: true).ConfigureAwait(false);
1381await DeleteRemoteDeploymentsByResourceLabelAsync(context, client, scope, pendingOwnerCleanupId, resource.Name, s_noExcludedIds, s_noExcludedIds, s_noExcludedIds, throwOnError: true).ConfigureAwait(false);
1383var stableOwnerIdForScope = CreateStableOwnerId(appHostIdentity, environmentName, scope, resource.Name);
1386await DeleteRemoteDeploymentsByResourceLabelAsync(context, client, scope, stableOwnerIdForScope, resource.Name, s_noExcludedIds, s_noExcludedIds, s_noExcludedIds, throwOnError: true).ConfigureAwait(false);
2100stateSection.Data["ResourceName"] ??= resource.Name;
2315throw new InvalidOperationException($"Azure resource '{resource.Name}' is missing required output '{name}'. Ensure Azure infrastructure provisioning completed successfully.");
2331$"Azure sandbox group '{sandboxGroup.Name}' returned an invalid resource ID '{resourceId}'.");
2362internal static string GetStateSectionName(AzureSandboxContainerResource resource) => $"{SandboxStateSectionPrefix}{resource.Name}";
2366internal static string GetDeployStepName(AzureSandboxContainerResource resource) => $"deploy-{resource.Name}";
2368private static string GetDestroyStepName(AzureSandboxContainerResource resource) => $"destroy-{resource.Name}";
Aspire.Hosting.Azure.ServiceBus (14)
Aspire.Hosting.Azure.SignalR (2)
Aspire.Hosting.Azure.Sql (12)
Aspire.Hosting.Azure.Storage (21)
Aspire.Hosting.Azure.Tests (452)
AzureAppServiceEnvironmentExtensionsTests.cs (10)
123var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
124var roles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "env-mi-roles-final-registry");
153Assert.Null(model.Resources.OfType<AzureUserAssignedIdentityResource>().SingleOrDefault(resource => resource.Name == "env-mi"));
154Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
174Assert.Same(identity.Resource, Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi"));
175Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
203var identityEast = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "east-mi");
204var identityWest = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "west-mi");
208var rolesEast = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "east-mi-roles-registry");
209var rolesWest = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "west-mi-roles-registry");
AzureBicepProvisionerTests.cs (35)
337AssertResourceGroupPropertyIsNull(services, resource.Name);
368var expectedName = ResourceNameHelpers.TruncateWithHash(resource.Name, 64 - suffix.Length) + suffix;
371Assert.Equal($"{environmentName}-control-plane-identity-roles-{environmentName}-kubelet-identity", resource.Name);
406AssertResourceGroupPropertyIsNull(services, resource.Name);
538AssertResourceGroupPropertyIsNull(services, resource.Name);
848Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
882Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
919Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1034Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1085Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1276Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1391Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1512var deploymentId = GetTestDeploymentId(resource.Name);
1530Assert.Equal(resource.Name, deploymentCollection.DeploymentName);
1534var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1547var deploymentId = GetTestDeploymentId(resource.Name);
1677var deploymentId = GetTestDeploymentId(resource.Name);
1694var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1709var deploymentId = GetTestDeploymentId(resource.Name);
1737var deploymentId = GetTestDeploymentId(resource.Name);
1749var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1761var deploymentId = GetTestDeploymentId(resource.Name);
1775var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1788var deploymentId = GetTestDeploymentId(resource.Name);
1804var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1817var deploymentId = GetTestDeploymentId(resource.Name);
1829Assert.Contains(resource.Name, exception.Message, StringComparison.Ordinal);
1830var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1842var deploymentId = GetTestDeploymentId(resource.Name);
1854Assert.Contains(resource.Name, exception.Message, StringComparison.Ordinal);
1855var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1859Assert.True(notificationService.TryGetCurrentState(resource.Name, out var resourceEvent));
1871var deploymentId = GetTestDeploymentId(resource.Name);
1888var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1946var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
AzureContainerAppEnvironmentExtensionsTests.cs (13)
276var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
277var roles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "env-mi-roles-final-registry");
305var roles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "env-mi-roles-registry");
348var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
374var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
400Assert.Null(model.Resources.OfType<AzureUserAssignedIdentityResource>().SingleOrDefault(resource => resource.Name == "env-mi"));
401Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
420Assert.Same(identity.Resource, Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi"));
421Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
448var identityEast = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "east-mi");
449var identityWest = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "west-mi");
453var rolesEast = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "east-mi-roles-registry");
454var rolesWest = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "west-mi-roles-registry");
AzureContainerAppsTests.cs (18)
430var identityName = $"{proj.Name}-identity";
431var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == identityName);
534var identityName = $"{proj.Name}-identity";
535var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == identityName);
1169var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-identity");
1170var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-roles-storage");
1213var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-identity");
1214var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-roles-cosmos");
1254var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-identity");
1255var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-roles-redis");
2043var env1Resource = Assert.Single(envResources, r => r.Name == "cae1");
2044var env2Resource = Assert.Single(envResources, r => r.Name == "cae2");
2094var env1Resource = Assert.Single(envResources, r => r.Name == "cae1");
2095var env2Resource = Assert.Single(envResources, r => r.Name == "cae2");
2405var env1Resource = Assert.Single(envResources, r => r.Name == "cae1");
2406var env2Resource = Assert.Single(envResources, r => r.Name == "cae2");
2914Assert.Contains("acr", defaultAcr.Name);
2936Assert.Equal("customregistry", acrResources[0].Name);
AzureCosmosDBEmulatorFunctionalTests.cs (17)
48await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
50await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
54await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
56await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
94await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
98hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await cosmos.Resource.ConnectionStringExpression.GetValueAsync(default);
99hb.AddAzureCosmosClient(db.Resource.Name);
100hb.AddCosmosDbContext<EFCoreCosmosDbContext>(db.Resource.Name, databaseName);
175await rns.WaitForResourceHealthyAsync(cosmos1.Resource.Name, cts.Token);
183[$"ConnectionStrings:{cosmos1.Resource.Name}"] = await cosmos1.Resource.ConnectionStringExpression.GetValueAsync(default)
186hb.AddAzureCosmosClient(cosmos1.Resource.Name);
223await rns.WaitForResourceHealthyAsync(cosmos2.Resource.Name, cts.Token);
232[$"ConnectionStrings:{cosmos2.Resource.Name}"] = await cosmos2.Resource.ConnectionStringExpression.GetValueAsync(default)
235hb.AddAzureCosmosClient(cosmos2.Resource.Name);
293await rns.WaitForResourceHealthyAsync(cosmos.Resource.Name, cts.Token);
297hb.Configuration[$"ConnectionStrings:{cosmos.Resource.Name}"] = await cosmos.Resource.ConnectionStringExpression.GetValueAsync(default);
298hb.AddAzureCosmosClient(cosmos.Resource.Name);
AzureEnvironmentResourceExtensionsTests.cs (155)
110ResourceName = environment.Name,
120Assert.True(notifications.TryGetCurrentState(directory.Resource.Name, out var directorySnapshot));
182ResourceName = environment.Name,
233? controller.DeleteAzureResourceAsync(model, directory.Resource.Name)
234: controller.ChangeResourceLocationAsync(model, directory.Resource.Name, CancellationToken.None));
307ResourceName = environment.Name,
655ResourceName = environmentResource.Name,
676Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
680Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
709ResourceName = environmentResource.Name,
792Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
865Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1026Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
1061Assert.True(notifications.TryGetCurrentState(postgres.Resource.Name, out var postgresEvent));
1069ResourceName = postgres.Resource.Name,
1150ResourceName = storage.Resource.Name,
1234ResourceName = storage.Resource.Name,
1503ResourceName = storage.Resource.Name,
1567ResourceName = storage.Resource.Name,
1628ResourceName = storage.Resource.Name,
1689ResourceName = storage.Resource.Name,
1703Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1739Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1816Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1824ResourceName = storage.Resource.Name,
1864var activeReprovisionTask = controller.ReprovisionResourceAsync(model, storage.Resource.Name, CancellationToken.None);
1882ResourceName = storage.Resource.Name,
1893Assert.Equal([storage.Resource.Name], testBicepProvisioner.ProvisionedResources);
1923var activeReprovisionTask = controller.ReprovisionResourceAsync(model, storage1.Resource.Name, CancellationToken.None);
1933ResourceName = storage2.Resource.Name,
1945ResourceName = storage2.Resource.Name,
1986Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2029ResourceName = storage.Resource.Name,
2041Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2113ResourceName = storage.Resource.Name,
2144Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2147Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2207ResourceName = keyVault.Resource.Name,
2226Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
2278ResourceName = storage.Resource.Name,
2289Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
2292Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2296Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2356ResourceName = storage.Resource.Name,
2370ResourceName = storage.Resource.Name,
2380Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2435ResourceName = storage.Resource.Name,
2453Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2458Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2499ResourceName = storage.Resource.Name,
2515Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2518Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2553ResourceName = storage.Resource.Name,
2564Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
2567Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2570Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2578Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out environmentEvent));
2581Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2613ResourceName = storage.Resource.Name,
2624Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
2627Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2636Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out environmentEvent));
2639Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2690ResourceName = storage.Resource.Name,
2704ResourceName = storage2.Resource.Name,
2767ResourceName = storage.Resource.Name,
2778Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2784ResourceName = storage.Resource.Name,
2795Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2798Assert.True(notifications.TryGetCurrentState(blobs.Resource.Name, out var blobsEvent));
2807Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2856await WaitForResourceStateAsync(notifications, storage2.Resource.Name, "Running");
2857Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var runningStorage2Event));
2865ResourceName = storage.Resource.Name,
2873Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2877Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2882Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out storage2Event));
2911ResourceName = storage.Resource.Name,
2964ResourceName = storage.Resource.Name,
2978ResourceName = storage2.Resource.Name,
3031ResourceName = storage.Resource.Name,
3044Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
3047Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
3056Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
3104ResourceName = storage.Resource.Name,
3157ResourceName = storage.Resource.Name,
3217ResourceName = visibleResource.Name,
3278ResourceName = storage.Resource.Name,
3348ResourceName = storage.Resource.Name,
3357Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
3409ResourceName = storage.Resource.Name,
3478ResourceName = storage.Resource.Name,
3535ResourceName = storage.Resource.Name,
3598ResourceName = storage.Resource.Name,
3669ResourceName = storage.Resource.Name,
3724ResourceName = environmentResource.Name,
3764ResourceName = environmentResource.Name,
3802Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
3838ResourceName = environmentResource.Name,
3855Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
3886ResourceName = environmentResource.Name,
3942ResourceName = environmentResource.Name,
4073var storage2 = model.Resources.OfType<AzureBicepResource>().Single(r => r.Name == "storage2");
4089ResourceName = storage2.Name,
4124var storage = model.Resources.OfType<AzureBicepResource>().Single(r => r.Name == "storage");
4168ResourceName = storage.Resource.Name,
4240ResourceName = keyVault.Resource.Name,
4253Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
4320ResourceName = keyVault.Resource.Name,
4357Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
4394ResourceName = postgres.Resource.Name,
4446ResourceName = storage.Resource.Name,
4492ResourceName = keyVault.Resource.Name,
4538ResourceName = storage.Resource.Name,
4564Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
4606ResourceName = storage.Resource.Name,
4650Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4659Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4703Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4706Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4762Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4765Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
4768Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
4805Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4808Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4845ResourceName = environmentResource.Name,
4897ResourceName = environmentResource.Name,
4944ResourceName = environmentResource.Name,
4992ResourceName = environmentResource.Name,
5002Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
5069Assert.True(notifications.TryGetCurrentState(storage.Name, out var storageEvent));
5072Assert.True(notifications.TryGetCurrentState(storageRoles.Name, out var storageRolesEvent));
5130ResourceName = storage.Resource.Name,
5140Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
5146Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
5170Assert.True(notifications.TryGetCurrentState(azureEnvironment.Name, out var environmentEvent));
5176Assert.Equal([storage.Resource.Name, storage2.Resource.Name], Assert.IsType<string[]>(failedResourcesProperty.Value));
5191Assert.Equal("azure-environment", resource.Name);
5205Assert.Equal("azure-environment", resource.Name);
5245Assert.Equal("azure-environment2", resource.Name);
5806_configuredResources.Add(resource.Name);
5817_provisionedResources.Add(resource.Name);
5818_provisionedLocations[resource.Name] = resource.Parameters.TryGetValue(AzureBicepResource.KnownParameters.Location, out var location)
5948_provisionedResources.Add(resource.Name);
5958resource.Outputs["blobEndpoint"] = $"https://{resource.Name}.blob.core.windows.net/";
6034var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
6112if (string.Equals(resource.Name, childResourceName, StringComparison.Ordinal))
6121if (string.Equals(resource.Name, parentResourceName, StringComparison.Ordinal) &&
6134_provisionedResources.Add(resource.Name);
6137resource.Outputs["id"] = $"/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.Test/resources/{resource.Name}";
6138resource.Outputs["name"] = resource.Name;
6139resource.Outputs["vaultUri"] = $"https://{resource.Name}.vault.azure.net/";
6140resource.Outputs["connectionString"] = $"Host={resource.Name}.postgres.database.azure.com";
6141resource.Outputs["hostName"] = $"{resource.Name}.postgres.database.azure.com";
AzureEventHubsExtensionsTests.cs (7)
48await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
49await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
53await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
55await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
78await app.ResourceNotifications.WaitForResourceHealthyAsync(eventHubns.Resource.Name, cts.Token);
130await app.ResourceNotifications.WaitForResourceHealthyAsync(eventHubns.Resource.Name, cts.Token);
294var ehRoles = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "eh-roles");
AzureFunctionsTests.cs (19)
154Assert.NotEqual(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, storageResources.Name);
155Assert.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, storageResources.Name);
173r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName));
175Assert.Equal("my-own-storage", storageResource.Name);
199r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName));
212Assert.NotEqual(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, resource.Name);
213Assert.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, resource.Name);
371r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName));
373Assert.Equal("my-own-storage", storageResource.Name);
493var container = Assert.Single(builder.Resources.OfType<ContainerResource>(), r => r.Name == "funcapp");
646var storage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcstorage634f8");
679var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-funcstorage634f8");
707var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-my-own-storage");
736var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-my-own-storage");
767var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-my-own-storage");
768var projRolesStorage2 = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp2-roles-funcstorage634f8");
1060.Where(r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName))
1086r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName));
1088Assert.Equal("my-custom-storage", storageResource.Name);
AzureResourcePreparerTests.cs (16)
117var roles = model.Resources.OfType<AzureRoleAssignmentResource>().OrderBy(resource => resource.Name).ToArray();
118Assert.Equal(["first-roles-second", "second-roles-first"], roles.Select(resource => resource.Name));
199var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "storage-roles");
245var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "storage-roles");
288Assert.DoesNotContain(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "dbsrv-roles");
342var roleAssignmentResource = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "api-roles-storage");
379.OrderBy(resource => resource.Name, StringComparer.Ordinal)];
392Assert.Equal("api-roles-keyvault", resource.Name);
398Assert.Equal("worker-roles-keyvault", resource.Name);
436.OrderBy(resource => resource.Name, StringComparer.Ordinal)];
449Assert.Equal("service-a-roles-signalr", resource.Name);
455Assert.Equal("service-b-roles-signalr", resource.Name);
464.OrderBy(resource => resource.Name, StringComparer.Ordinal),
486var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "storage-roles");
696var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "storage-roles");
752var roleAssignmentResource = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "api-roles-storage");
AzureServiceBusExtensionsTests.cs (12)
99await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
101await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
105await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
107await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
140await rns.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
141await rns.WaitForResourceHealthyAsync(serviceBus.Resource.Name, cts.Token);
649Assert.Equal("sb-sql-pwd", sqlServer.PasswordParameter.Name);
959var serviceBusSql = builder.Resources.OfType<ContainerResource>().Last(x => x.Name == "servicebus-mssql");
1087Assert.Equal("sb", serviceBus.Resource.Name);
1106var sbRoles = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "sb-roles");
1179await app.ResourceNotifications.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
1180await app.ResourceNotifications.WaitForResourceHealthyAsync(serviceBus.Resource.Name, cts.Token);
AzureStorageEmulatorFunctionalTests.cs (17)
51await rns.WaitForResourceAsync(storage.Resource.Name, KnownResourceStates.Running, cts.Token);
53await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
57await rns.WaitForResourceHealthyAsync(blobs.Resource.Name, cts.Token);
58await rns.WaitForResourceHealthyAsync(queues.Resource.Name, cts.Token);
59await rns.WaitForResourceHealthyAsync(tables.Resource.Name, cts.Token);
61await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
96await rns.WaitForResourceAsync(storage.Resource.Name, KnownResourceStates.Running, cts.Token);
98await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
102await rns.WaitForResourceHealthyAsync(blobContainer.Resource.Name, cts.Token);
104await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
139await rns.WaitForResourceAsync(storage.Resource.Name, KnownResourceStates.Running, cts.Token);
141await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
145await rns.WaitForResourceHealthyAsync(testQueue.Resource.Name, cts.Token);
147await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
193await rns.WaitForResourceHealthyAsync(storage.Resource.Name, cts.Token);
225await rns.WaitForResourceHealthyAsync(blobContainer.Resource.Name, cancellationToken: cts.Token);
265await rns.WaitForResourceHealthyAsync(queue.Resource.Name, cancellationToken: cts.Token);
AzureStorageExtensionsTests.cs (15)
475Assert.Equal("storage", storage.Resource.Name);
560Assert.Equal("storage", storage.Resource.Name);
648Assert.Equal("storage", storage.Resource.Name);
667var storageRoles = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "storage-roles");
779Assert.Equal("storage", storage.Resource.Name);
866Assert.Equal("storage-blobs", blobService.Resource.Name);
893Assert.Equal("storage-queues", queueService.Resource.Name);
910Assert.Equal("blobs", blobServices[0].Name);
927Assert.Equal("queues", queueServices[0].Name);
944Assert.Equal("datalake", dataLakeServices[0].Name);
968var defaultBlobService = Assert.Single(blobServices, r => r.Name == "storage-blobs");
969var customBlobService = Assert.Single(blobServices, r => r.Name == "blobs");
971Assert.Equal("blobs", customBlobs.Resource.Name);
992Assert.Equal("blobs", customBlobs.Resource.Name);
993Assert.Equal("storage-blobs", defaultBlobs.Resource.Name);
AzureWebPubSubExtensionsTests.cs (14)
35Assert.Equal(hubName, hub.Resource.Name);
63Assert.Equal("wps1", wps.Resource.Name);
108Assert.Equal("wps1", wps.Resource.Name);
138Assert.Equal("wps1", wps.Resource.Name);
164Assert.Equal("wps1", wps.Resource.Name);
265Assert.Equal("wps1", wps.Resource.Name);
281Assert.Equal("hub1", hub1.Resource.Name);
282Assert.Equal("resource2", hub2.Resource.Name);
283Assert.Equal("hub3", hub3.Resource.Name);
284Assert.Equal("hub4", hub4.Resource.Name);
309Assert.Equal("resource1", hub1.Resource.Name);
339Assert.Equal("wps1", wps.Resource.Name);
342var wpsRoles = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "wps1-roles");
395Assert.Equal("wps1", wps.Resource.Name);
ExistingAzureResourceExtensionsTests.cs (16)
38Assert.Equal("name", existingNameParameter.Name);
40Assert.Equal("resourceGroup", existingResourceGroupParameter.Name);
59Assert.Equal("name1", existingNameParameter.Name);
61Assert.Equal("resourceGroup1", existingResourceGroupParameter.Name);
77Assert.Equal("name", existingNameParameter.Name);
79Assert.Equal("resourceGroup", existingResourceGroupParameter.Name);
98Assert.Equal("name1", existingNameParameter.Name);
100Assert.Equal("resourceGroup1", existingResourceGroupParameter.Name);
136Assert.Equal("name", existingNameParameter.Name);
138Assert.Equal("resourceGroup", existingResourceGroupParameter.Name);
157Assert.Equal("name", existingNameParameter.Name);
159Assert.Equal("resourceGroup", existingResourceGroupParameter.Name);
161Assert.Equal("subscription", existingSubscriptionParameter.Name);
195Assert.Equal("name", existingNameParameter.Name);
198Assert.Equal("subscription", existingSubscriptionParameter.Name);
216Assert.Equal("name", existingNameParameter.Name);
Aspire.Hosting.Azure.WebPubSub (3)
Aspire.Hosting.Blazor (13)
Aspire.Hosting.Blazor.Tests (9)
Aspire.Hosting.Browsers.Tests (24)
BrowserLogsBuilderExtensionsTests.cs (23)
47Assert.Equal("web-browser-logs", browserLogsResource.Name);
48Assert.Equal(web.Resource.Name, browserLogsResource.ParentResource.Name);
55Assert.Equal(web.Resource.Name, parentRelationship.Resource.Name);
452Assert.Equal(browserLogsResource.Name, call.ResourceName);
708adminBrowserLogsResource.Name,
885app.Services.GetRequiredService<ResourceLoggerService>().WatchAsync(browserLogsResource.Name),
962browserLogsResource.Name,
1011browserLogsResource.Name,
1032browserLogsResource.Name,
1096browserLogsResource.Name,
1109browserLogsResource.Name,
1171browserLogsResource.Name,
1224browserLogsResource.Name,
1233browserLogsResource.Name,
1284browserLogsResource.Name,
1345browserLogsResource.Name,
1361browserLogsResource.Name,
1408browserLogsResource.Name,
1444browserLogsResource.Name,
1476browserLogsResource.Name,
1492browserLogsResource.Name,
1545browserLogsResource.Name,
1561browserLogsResource.Name,
Aspire.Hosting.CodeGeneration.Go.Tests (1)
Aspire.Hosting.CodeGeneration.Java.Tests (1)
Aspire.Hosting.CodeGeneration.Python.Tests (1)
Aspire.Hosting.CodeGeneration.Rust.Tests (1)
Aspire.Hosting.CodeGeneration.TypeScript.Tests (1)
Aspire.Hosting.Containers.Tests (4)
Aspire.Hosting.DevTunnels (13)
DevTunnelResourceBuilderExtensions.cs (9)
479ErrorMessage = $"The dev tunnel '{tunnelResource.Name}' has not been associated with '{endpointName}' on resource '{targetResource.Name}'. Use 'WithReference({targetResource.Name})' on the dev tunnel to expose this endpoint."
574throw new ArgumentException($"Target endpoint '{targetEndpoint.EndpointName}' on resource '{targetEndpoint.Resource.Name}' has already been added to dev tunnel '{tunnel.Name}'.", nameof(targetEndpoint));
600var portName = $"{tunnel.Name}-{targetResource.Name}-{targetEndpoint.EndpointName}";
731}, portResource.Name, false, description)).ConfigureAwait(false);
740var wasAvailable = notifications.TryGetCurrentState(portResource.Name, out var previous)
754}, portResource.Name, true, description)).ConfigureAwait(false);
802var previousPolicy = notifications.TryGetCurrentState(portResource.Name, out var current)
823if (notifications.TryGetCurrentState(portResource.Name, out var current)
842.PublishAsync(new ResourceStoppedEvent(portResource, services, new(portResource, portResource.Name, stoppedSnapshot!)),
Aspire.Hosting.DevTunnels.Tests (17)
DevTunnelResourceBuilderExtensionsTests.cs (13)
307await app.ResourceNotifications.WaitForResourceAsync(port.Name,
369await app.ResourceNotifications.WaitForResourceAsync(port.Name,
573ResourceName = port.Name,
625ResourceName = port.Name,
673ResourceName = port.Name,
770await app.ResourceNotifications.WaitForResourceAsync(tunnelPort.Name, KnownResourceStates.Finished, cts.Token);
779var completed = await app.ResourceNotifications.WaitForResourceAsync(tunnelPort.Name,
787await app.ResourceNotifications.WaitForResourceHealthyAsync(tunnel.Resource.Name, cts.Token);
802tunnelPort.Name,
808await app.ResourceNotifications.WaitForResourceHealthyAsync(tunnel.Resource.Name, cts.Token);
814await app.ResourceNotifications.WaitForResourceHealthyAsync(tunnelPort.Name, cts.Token);
844await app.ResourceNotifications.WaitForResourceAsync(port.Name, KnownResourceStates.Running).DefaultTimeout();
847Assert.True(notifications.TryGetCurrentState(port.Name, out var resourceEvent));
Aspire.Hosting.Docker (33)
DockerComposeEnvironmentResource.cs (26)
67Name = $"prepare-deployment-targets-{Name}",
68Description = $"Prepares Docker Compose deployment targets for {Name}.",
77Name = $"publish-{Name}",
78Description = $"Publishes the Docker Compose environment configuration for {Name}.",
117Name = $"prepare-{Name}",
118Description = $"Prepares the Docker Compose environment {Name} for deployment.",
128Name = $"docker-compose-up-{Name}",
131DependsOnSteps = [$"prepare-{Name}"]
138Name = $"destroy-compose-{Name}",
139Description = $"Confirms and destroys the Docker Compose environment {Name}.",
144var stateSection = await deploymentStateManager.AcquireSectionAsync($"DockerCompose:{Name}", ctx.CancellationToken).ConfigureAwait(false);
150$"No Docker Compose deployment state found for '{Name}'. Nothing to destroy.",
156await ConfirmDestroyAsync(ctx, Name).ConfigureAwait(false);
173new MarkdownString($"Running compose down for **{Name}** using **{runtime.Name}**"),
179new MarkdownString($"Compose shutdown complete for **{Name}** ({runtime.Name})"),
184ctx.Summary.Add("🗑️ Compose", Name);
196Name = $"docker-compose-down-{Name}",
244.RequiredBy($"docker-compose-up-{Name}")
440new MarkdownString($"Running compose up for **{Name}** using **{runtime.Name}**"),
452var stateSection = await deploymentStateManager.AcquireSectionAsync($"DockerCompose:{Name}", context.CancellationToken).ConfigureAwait(false);
459new MarkdownString($"Service **{Name}** is now running with Docker Compose locally (runtime: {runtime.Name})"),
486new MarkdownString($"Running compose down for **{Name}** using **{runtime.Name}**"),
497new MarkdownString($"Compose shutdown complete for **{Name}** ({runtime.Name})"),
597var environmentName = hostEnvironment?.EnvironmentName ?? environment.Name;
624return $"aspire-{environment.Name.ToLowerInvariant()}-{appHostSha[..8].ToLowerInvariant()}";
628return $"aspire-{environment.Name.ToLowerInvariant()}";
Aspire.Hosting.Docker.Tests (1)
Aspire.Hosting.Dotnet (4)
Aspire.Hosting.Dotnet.Tests (7)
Aspire.Hosting.DotnetTool.Tests (7)
Aspire.Hosting.EntityFrameworkCore (25)
EFResourceBuilderExtensions.cs (17)
303? $"{migrationResource.Name}-generate-migration-script"
307? $"{migrationResource.Name}-generate-migration-bundle"
335Description = $"Generate EF Core migration SQL script for {migrationResource.Name}",
344? Path.Combine(outputDir, migrationResource.Name + ".sql")
360? [WellKnownPipelineSteps.Publish, $"build-{migrationResource.Name}"]
379Description = $"Generate EF Core migration bundle for {migrationResource.Name}",
419if (StringComparer.Ordinal.Compare(sibling.Name, current.Name) >= 0)
424if (predecessor is null || StringComparer.Ordinal.Compare(sibling.Name, predecessor.Name) > 0)
438? $"{predecessor.Name}-generate-migration-bundle"
439: $"{predecessor.Name}-generate-migration-script";
461logger.LogInformation("Generating {Operation} for '{ResourceName}'...", operationName, migrationResource.Name);
473logger.LogInformation("{Operation} generated successfully for '{ResourceName}'.", operationName, migrationResource.Name);
477throw new InvalidOperationException($"Failed to generate {operationName} for '{migrationResource.Name}': {result.ErrorMessage}");
491return migrationResource.Name + (isWindowsBundle ? ".exe" : string.Empty);
726var toolName = $"ef-tool-{migrationResource.Name}";
Aspire.Hosting.EntityFrameworkCore.Tests (14)
Aspire.Hosting.Foundry (87)
HostedAgent\AzureHostedAgentResource.cs (11)
52Name = $"deploy-{Name}",
56ctx.ReportingStep.Log(LogLevel.Information, new MarkdownString($"Successfully deployed **{Name}** as Hosted Agent (version {version})"));
111throw new InvalidOperationException($"Container image for hosted agent '{Name}' could not be resolved.");
165throw new InvalidOperationException($"Project '{project.Name}' does not have a valid connection string.");
188Name,
195Name,
250context.Logger.LogWarning("Hosted agent '{Name}' version '{Version}' did not return an instance identity. The agent may not be able to access Foundry project storage.", Name, version.Version);
257context.Logger.LogWarning("Could not resolve the Microsoft Foundry resource ID for hosted agent '{Name}'. The agent identity '{PrincipalId}' may need the Foundry User role assigned manually.", Name, principalId);
283context.Logger.LogInformation("Assigned Foundry User role to hosted agent '{Name}' identity '{PrincipalId}'.", Name, principalId);
290Name,
529$"Unable to resolve environment variable '{environmentVariableName}' for Foundry hosted agent '{hostedAgent.Name}' from target resource '{resource.Name}'. " +
PromptAgent\AzurePromptAgentResource.cs (20)
72Name = $"deploy-{Name}-before-start",
73Description = $"Deploys prompt agent {Name} before the application starts.",
84Name = $"deploy-{Name}",
85Description = $"Deploys prompt agent {Name}.",
90new MarkdownString($"Successfully deployed **{Name}** as Prompt Agent (version {version.Version})"));
155$"Tool '{tool.Name}' belongs to project '{tool.Project.Name}' but agent '{Name}' " +
156$"belongs to project '{Project.Name}'. All tools must belong to the same project as the agent.");
164ReferenceExpression.Create($"{Project.Endpoint}/agents/{Name}");
168yield return new("AgentName", ReferenceExpression.Create($"{Name}"));
205throw new InvalidOperationException($"Project '{project.Name}' does not have a valid endpoint.");
223var retryMessage = $"Foundry project endpoint for '{project.Name}' is not ready yet. Retrying prompt agent deployment in {s_projectEndpointReadinessDelay.TotalSeconds:n0} seconds ({retry.AttemptNumber + 1}/{ProjectEndpointReadinessMaxRetryAttempts}).";
241Name,
349logger.LogInformation("Deploying prompt agent '{AgentName}' to Foundry project '{ProjectName}'...", Name, Project.Name);
354logger.LogInformation("Successfully deployed prompt agent '{AgentName}' (version {Version})", Name, version.Version);
378logger.LogError(ex, "Failed to deploy prompt agent '{AgentName}'", Name);
396Project.Name,
433var portalUrl = $"https://ai.azure.com/nextgen/r/{encodedSubscriptionId},{resourceGroupName},,{foundryAccountName},{projectName}/build/agents/{Name}/build";
Toolbox\FoundryToolboxResource.cs (21)
59Name = $"deploy-{Name}-before-start",
61? $"Validates existing Toolbox {Name} after the application starts."
62: $"Reconciles Toolbox {Name} after the application starts.",
72Name = $"deploy-{Name}",
74? $"Validates existing Toolbox {Name}."
75: $"Reconciles Toolbox {Name}.",
86? $"Successfully validated **{Name}** as an existing Foundry Toolbox (version {result.Version})"
87: $"Successfully reconciled **{Name}** as Foundry Toolbox (version {result.Version}, action {result.Action})"));
176: ReferenceExpression.Create($"{Parent.Endpoint}/toolboxes/{Name}/mcp?api-version={ApiVersion}");
195$"Toolbox '{Name}' already contains a tool named '{tool.Name}'.");
213Name,
221yield return new("Name", ReferenceExpression.Create($"{Name}"));
247.ValidateAsync(Name, Version, cancellationToken).ConfigureAwait(false);
271$"Foundry project '{Parent.Name}' did not resolve to an absolute HTTPS endpoint.");
368Name,
375Name,
397logger.LogError(ex, "Failed to validate existing Toolbox '{ToolboxName}'.", Name);
401logger.LogError(ex, "Failed to reconcile Toolbox '{ToolboxName}'.", Name);
422$"Toolbox '{Name}' did not resolve to an absolute HTTPS endpoint.");
448$"{Parent.Endpoint}/toolboxes/{Name}/versions/{version}/mcp?api-version={ApiVersion}");
462Parent.Name,
Aspire.Hosting.Foundry.Tests (19)
Aspire.Hosting.Garnet (1)
Aspire.Hosting.Garnet.Tests (10)
Aspire.Hosting.Go (4)
Aspire.Hosting.Java (33)
JavaDockerfileGenerator.cs (19)
304jarPath = NormalizeContextRelativePath(annotation.JarPath, resource.Name, appDirectory, "its JAR");
354$"Java application '{resource.Name}' cannot be published because its jarPath " +
451resource.Name,
573$"Java application '{resource.Name}' cannot be published because the OpenTelemetry agent " +
598$"The OpenTelemetry agent path '{authored}' configured on resource '{resource.Name}' " +
610$"The OpenTelemetry agent path '{authored}' configured on resource '{resource.Name}' " +
709? $"cp {ShellQuote(NormalizeContextRelativePath(artifact.RelativePath, resource.Name, appDirectory, "its JAR artifact"))} {ContainerArtifactPath}"
714? SelectQuarkusArtifactCommand(outputDirectory, outputGlob, resource.Name)
716? SelectNamedJarCommand(namedJar, ContainerArtifactPath, resource.Name)
717: SelectSingleJarCommand(outputGlob, ContainerArtifactPath, resource.Name);
741CacheId: $"aspire-java-{tool.ToString().ToLowerInvariant()}-{resource.Name.ToLowerInvariant()}",
1008$"Java application '{resource.Name}' cannot be published because its {wrapper} has no " +
1044$"Java application '{resource.Name}' cannot be published because its wrapper " +
1055$"Java application '{resource.Name}' cannot be published because the wrapper " +
1061$"Java application '{resource.Name}' cannot be published because there is no " +
1080$"Java application '{resource.Name}' cannot be published because its wrapper " +
1096$"Java application '{resource.Name}' cannot be published because its wrapper path " +
1153$"The Java application '{resource.Name}' cannot be published because no build tool was found. " +
1176$"The Java application '{resource.Name}' cannot be published because no build tool was found. " +
Aspire.Hosting.Java.Tests (4)
Aspire.Hosting.JavaScript (13)
JavaScriptHostingExtensions.cs (13)
1902builder.TryCreateResourceBuilder<ContainerResource>(resource.Name, out var containerBuilder))
1904var validationStepName = $"validate-javascript-dockerfile-run-script-{resource.Name}";
1917Description = $"Validates that JavaScript app '{resource.Name}' does not publish an ignored run script with an existing Dockerfile.",
1981$"JavaScript app resource '{resource.Name}' is configured to run script '{runScript.ScriptName}'{argsClause}, but publish is using the existing Dockerfile '{dockerfileBuildAnnotation.DockerfilePath}'. " +
2113resourceLogger.LogWarning("Could not find a node_modules directory in or above '{AppDirectory}' for resource '{ResourceName}'. Automatic HTTPS configuration won't be available. Ensure packages are installed before starting the app.", appDirectory, resource.Name);
2121var aspireConfigDir = Path.Join(nodeModulesDir, ".aspire", appHostId, resource.Name);
2149resourceLogger.LogWarning(ex, "Failed to generate Aspire Vite HTTPS config wrapper for resource '{ResourceName}'. Falling back to existing Vite config without Aspire modifications. Automatic HTTPS configuration won't be available", resource.Name);
2870$"Bun apps cannot be debugged through the Node dev-server debug path. '{resource.Name}' is a {nameof(BunAppResource)}; use {nameof(AddBunApp)}, which wires its own Bun debug support.");
2876$"Deno apps cannot be debugged through the Node dev-server debug path. '{resource.Name}' is a {nameof(DenoAppResource)}; use {nameof(AddDenoApp)}, which wires its own Deno debug support.");
2940var debuggerResourceName = $"{parentResource.Name}-browser";
2962$"Resource '{parentResource.Name}' does not have an HTTP or HTTPS endpoint. Browser debugging requires an endpoint to navigate to.");
3013var installerName = $"{resource.Resource.Name}-installer";
3081var installerName = $"{resource.Resource.Name}-installer";
Aspire.Hosting.JavaScript.Tests (29)
Aspire.Hosting.Kafka (2)
Aspire.Hosting.Kafka.Tests (8)
Aspire.Hosting.Keycloak.Tests (1)
Aspire.Hosting.Kubernetes (145)
CertManagerExtensions.cs (35)
333$"Gateway '{builder.Resource.Name}' is in Kubernetes environment '{gatewayEnvironment.Name}' but issuer " +
334$"'{issuer.Resource.Name}' belongs to cert-manager installation '{issuer.Resource.Parent.Name}' in environment " +
335$"'{issuerEnvironment.Name}'. cert-manager is per-cluster, so an issuer can only be used by gateways in the " +
341.WithGatewayAnnotation(ClusterIssuerAnnotationKey, issuer.Resource.Name);
358Name = $"cm-issuer-apply-{captured.Name}",
359Description = $"Applies cert-manager ClusterIssuer '{captured.Name}'",
387Name = $"cm-issuer-delete-{captured.Name}",
388Description = $"Deletes cert-manager ClusterIssuer '{captured.Name}'",
391Tags = [HelmDeploymentEngine.GetKubernetesDestroyTag(certManager.Parent.Name)]
413$"ClusterIssuer '{issuer.Name}' has no spec. Configure it with WithAcmeServer().");
419$"ClusterIssuer '{issuer.Name}' has no solvers configured. Add at least one " +
441$"Applying the EAB Secret for ClusterIssuer '{issuer.Name}' failed with exit code {result.ExitCode}. " +
448"Applying cert-manager ClusterIssuer '{IssuerName}'.", issuer.Name);
473$"kubectl apply for ClusterIssuer '{issuer.Name}' failed with exit code {result.ExitCode}: {errOut}");
477context.Logger.LogInformation("ClusterIssuer '{IssuerName}' applied.", issuer.Name);
490environment.Name);
495var k8sIssuerName = issuer.Name.ToKubernetesResourceName();
498"Deleting cert-manager ClusterIssuer '{IssuerName}'.", issuer.Name);
534issuer.Name,
540context.Logger.LogInformation("ClusterIssuer '{IssuerName}' deleted.", issuer.Name);
597?? throw new InvalidOperationException($"ClusterIssuer '{issuer.Name}' has no External Account Binding.");
601throw new InvalidOperationException($"The EAB HMAC parameter for ClusterIssuer '{issuer.Name}' has no value.");
720@namespace = string.IsNullOrEmpty(chartNamespace) ? chart.Namespace ?? chart.Name : chartNamespace;
728=> $"{issuer.Name.ToKubernetesResourceName()}-eab";
753var k8sIssuerName = issuer.Name.ToKubernetesResourceName();
775$"The EAB key identifier for ClusterIssuer '{issuer.Name}' must be a nonempty ASCII string.");
794$"Unknown issuer spec type '{issuer.Spec?.GetType().Name}' on issuer '{issuer.Name}'.");
827&& string.Equals(v.Format, issuer.Name, StringComparison.Ordinal))
846issuer.Name,
847certManager.Parent.Name,
848issuer.Name);
860sb.Append(" name: ").AppendLine(gateway.Name.ToKubernetesResourceName());
866$"Unknown solver type '{solver.GetType().Name}' on issuer '{issuer.Name}'.");
Deployment\HelmDeploymentEngine.cs (29)
136Name = $"check-helm-prereqs-{environment.Name}",
137Description = $"Verifies Helm CLI is available for {environment.Name}.",
149Name = $"prepare-{environment.Name}",
150Description = $"Prepares Helm chart values for {environment.Name}.",
155prepareStep.DependsOn($"check-helm-prereqs-{environment.Name}");
161Name = $"helm-deploy-{environment.Name}",
162Description = $"Deploys {environment.Name} to Kubernetes via Helm.",
166helmDeployStep.DependsOn($"prepare-{environment.Name}");
173Name = $"print-{environment.Name}-instructions",
174Description = $"Prints access instructions for {environment.Name}.",
178instructionsStep.DependsOn($"helm-deploy-{environment.Name}");
185Name = $"destroy-helm-{environment.Name}",
186Description = $"Confirms and destroys the Helm deployment for {environment.Name}.",
187Tags = [GetKubernetesDestroyTag(environment.Name)],
194environment.Name);
200var stateSection = await deploymentStateManager.AcquireSectionAsync($"Helm:{environment.Name}", ctx.CancellationToken).ConfigureAwait(false);
207$"No Helm deployment state found for '{environment.Name}'. Nothing to destroy.",
233Name = GetHelmUninstallStepName(environment.Name),
234Description = $"Uninstalls the Helm release for {environment.Name}.",
235Tags = [HelmUninstallTag, GetKubernetesDestroyTag(environment.Name)],
255new MarkdownString($"Preparing Helm chart values for **{environment.Name}**"),
269new MarkdownString($"Helm chart values prepared for **{environment.Name}**"),
364var overrideFilePath = Path.Combine(outputPath, GetDeployValuesFileName(environment.Name));
423new MarkdownString($"Deploying **{environment.Name}** to Kubernetes namespace **{@namespace}** as Helm release **{releaseName}**"),
453var deployValuesFilePath = Path.Combine(outputPath, GetDeployValuesFileName(environment.Name));
487var stateSection = await deploymentStateManager.AcquireSectionAsync($"Helm:{environment.Name}", context.CancellationToken).ConfigureAwait(false);
554var dashboardServiceName = environment.Dashboard.Resource.Name.ToKubernetesResourceName() + "-service";
559var dashboardDeploymentName = environment.Dashboard.Resource.Name.ToKubernetesResourceName();
663environment.Name);
KubernetesEnvironmentResource.cs (40)
241Name = $"prepare-deployment-targets-{Name}",
242Description = $"Prepares Kubernetes deployment targets for {Name}.",
253Name = $"publish-{Name}",
254Description = $"Publishes the Kubernetes environment configuration for {Name}.",
278Name = $"tls-bootstrap-{environment.Name}",
282tlsBootstrapStep.DependsOn($"helm-deploy-{environment.Name}");
294Name = $"tls-fqdn-discovery-{environment.Name}",
298fqdnDiscoveryStep.DependsOn($"helm-deploy-{environment.Name}");
302fqdnDiscoveryStep.DependsOn($"tls-bootstrap-{environment.Name}");
322Name = $"gateway-field-cleanup-{environment.Name}",
326cleanupStep.RequiredBy($"helm-deploy-{environment.Name}");
327cleanupStep.DependsOn($"prepare-{environment.Name}");
681var valueKey = parameter.Name.ToHelmValuesSectionName();
735ingressResource.Name);
745EndpointRoutingValidation.ThrowIfEndpointNotExternal(path.Endpoint, "Ingress", ingressResource.Name);
750EndpointRoutingValidation.ThrowIfEndpointNotExternal(defaultBackend.Endpoint, "Ingress", ingressResource.Name);
771Name = ingressResource.Name.ToKubernetesResourceName(),
777ingress.Spec.IngressClassName = await ResolveExpressionAsync(ingressResource.IngressClassName, ingressResource.Name, cancellationToken).ConfigureAwait(false);
782ingress.Metadata.Annotations[key] = await ResolveExpressionAsync(value, ingressResource.Name, cancellationToken).ConfigureAwait(false);
787ingressResource.Name,
820var backend = ResolveIngressBackend(pathRule.Endpoint, deploymentTargets, ingressResource.Name, logger);
842var defaultBackend = ResolveIngressBackend(ingressResource.DefaultBackend.Endpoint, deploymentTargets, ingressResource.Name, logger);
853SecretName = await ResolveExpressionAsync(tls.SecretName, ingressResource.Name, cancellationToken).ConfigureAwait(false),
908logger.LogWarning("Ingress '{IngressName}' produced no valid rules or default backend. Skipping.", ingressResource.Name);
976gatewayResource.Name);
984EndpointRoutingValidation.ThrowIfEndpointNotExternal(route.Endpoint, "Gateway", gatewayResource.Name);
1021claim.Metadata.Annotations[key] = await ResolveExpressionAsync(value, volumeResource.Name, cancellationToken).ConfigureAwait(false);
1039? await ResolveExpressionAsync(capacityExpression, volumeResource.Name, cancellationToken).ConfigureAwait(false)
1045claim.Spec.VolumeName = await ResolveExpressionAsync(volumeNameExpression, volumeResource.Name, cancellationToken).ConfigureAwait(false);
1074storageClassName = await ResolveExpressionAsync(storageClassExpression, volumeResource.Name, cancellationToken).ConfigureAwait(false);
1105$"Gateway '{gatewayResource.Name}' must have a GatewayClassName set via WithGatewayClass(). " +
1109var gatewayName = gatewayResource.Name.ToKubernetesResourceName();
1123gatewayResource.Name,
1130$"Gateway '{gatewayResource.Name}' configures {resolvedHostnames.Count} hostnames that would be inherited by a hostless route, " +
1136gateway.Spec.GatewayClassName = await ResolveExpressionAsync(gatewayResource.GatewayClassName, gatewayResource.Name, cancellationToken).ConfigureAwait(false);
1140gateway.Metadata.Annotations[key] = await ResolveExpressionAsync(value, gatewayResource.Name, cancellationToken).ConfigureAwait(false);
1157var resolvedSecretName = await ResolveExpressionAsync(tls.SecretName, gatewayResource.Name, cancellationToken).ConfigureAwait(false);
1238var backendRef = ResolveGatewayBackendRef(route.Endpoint, deploymentTargets, gatewayResource.Name, logger);
1447var gatewayName = gateway.Name.ToKubernetesResourceName();
1901var gatewayName = gateway.Name.ToKubernetesResourceName();
Aspire.Hosting.Kubernetes.Tests (19)
Aspire.Hosting.Maui (13)
Aspire.Hosting.Maui.Tests (17)
Aspire.Hosting.Milvus (2)
Aspire.Hosting.Milvus.Tests (10)
Aspire.Hosting.MongoDB (55)
ReplicaSet\MongoDBReplicaSetBuilderExtensions.cs (37)
115logger.LogCritical("Cannot initialize MongoDB replica set resource '{ResourceName}' because it does not have any members.", resource.Name);
144throw new DistributedApplicationException($"MongoDB replica set member '{memberWithoutTls.Name}' does not have TLS enabled, which is required for members of a replica set. Ensure an HTTPS/TLS certificate is available for the member, for example by trusting the ASP.NET Core developer certificate.");
150?? throw new DistributedApplicationException($"The connection string of MongoDB replica set member '{member.Name}' could not be resolved.")
157Internal: $"{m.Name}:{m.PrimaryEndpoint.TargetPort!.Value}",
162.ConfigureAwait(false) ?? throw new DistributedApplicationException($"The endpoint of MongoDB replica set member '{m.Name}' could not be resolved.")
181logger.LogInformation("Retrieving MongoDB replica set information ({ResourceName}) from member '{MemberName}'", resource.Name, memberConnection.Resource.Name);
210logger.LogInformation("MongoDB replica set member '{MemberName}' is not accepting connections yet", memberConnection.Resource.Name);
239throw new DistributedApplicationException($"Cannot remove {string.Join(", ", removedHosts.Select(h => $"'{h}'"))} from the existing MongoDB replica set '{rsResource.Name}': removing members from a replica set that has already been initialized is not supported yet. Add the member(s) back, or start over from an empty replica set by removing the data volumes of its members.");
249logger.LogInformation("MongoDB replica set resource '{ResourceName}' is already configured as declared — leaving it as it is", resource.Name);
254logger.LogInformation("Re-configuring MongoDB replica set resource '{ResourceName}' from member '{MemberName}' — last version {Version}", resource.Name, existing.Connection.Resource.Name, existing.Version);
260["_id"] = rsResource.Name,
297logger.LogInformation("Initializing MongoDB replica set resource '{ResourceName}'", resource.Name);
307["_id"] = rsResource.Name,
318["_id"] = rsResource.Name,
335logger.LogInformation("MongoDB replica set member '{MemberName}' stopped accepting connections before initialization completed", initialPrimary.Resource.Name);
354$"Failed to configure MongoDB replica set resource '{resource.Name}' after {MaxRetriesAttempt} attempts.{(lastConfigurationError is null ? "" : $" The last error reported by MongoDB was: {lastConfigurationError.Message}")}",
366logger.LogCritical(ex, "Failed to initialize MongoDB replica set resource '{ResourceName}'", resource.Name);
406throw new InvalidOperationException($"The MongoDB server resource '{member.Resource.Name}' is configured as a single-member replica set. Remove WithReplicaSet before adding it to the advanced replica set '{builder.Resource.Name}'. Migrating existing single-member data to an advanced replica set is not supported.");
411throw new InvalidOperationException($"The MongoDB replica set '{builder.Resource.Name}' already has the maximum of {MaxMembers} members that MongoDB allows a replica set to hold.");
420string.Equals(existingReplicaSetName, builder.Resource.Name, StringComparisons.ResourceName)
421? $"The MongoDB server resource '{member.Resource.Name}' has already been added as a member of the replica set '{builder.Resource.Name}'."
422: $"The MongoDB server resource '{member.Resource.Name}' is already a member of the replica set '{existingReplicaSetName}' and cannot also be a member of '{builder.Resource.Name}'.");
432$"The MongoDB server resource '{member.Resource.Name}' was given a key file of its own, which conflicts with the one shared by the members of the replica set '{builder.Resource.Name}'. Members are given the replica set's key file automatically, so remove the '{nameof(MongoDBBuilderExtensions.WithKeyFile)}' call on the member.");
446$"The MongoDB server resource '{member.Resource.Name}' was given an explicit user name that differs from the one of the replica set '{builder.Resource.Name}'. Members of a replica set share a single set of credentials: pass the user name to '{nameof(AddMongoDBReplicaSet)}' instead of to the individual members.");
452$"The MongoDB server resource '{member.Resource.Name}' was given an explicit password that differs from the one of the replica set '{builder.Resource.Name}'. Members of a replica set share a single set of credentials: pass the password to '{nameof(AddMongoDBReplicaSet)}' instead of to the individual members.");
455MongoDBBuilderExtensions.ConfigureReplicaSetMember(member, builder.Resource.Name);
495builder.Resource.StoppedMembers.Add(stopped.Name);
513builder.Resource.StoppedMembers.Remove(starting.Name);
535&& !builder.Resource.StoppedMembers.Contains(ready.Name)
Aspire.Hosting.MongoDB.Tests (51)
MongoDbFunctionalTests.cs (18)
56await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
58await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
62await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
64await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
90hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
92hb.AddMongoDBClient(db.Resource.Name);
132await app.ResourceNotifications.WaitForResourceHealthyAsync(mongodb.Resource.Name, cts.Token);
135await app.ResourceNotifications.WaitForResourceAsync(mongoExpress.Resource.Name, KnownResourceStates.Running, cts.Token);
176hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = connectionString;
179hb.AddMongoDBClient(db.Resource.Name);
240hb.Configuration[$"ConnectionStrings:{db1.Resource.Name}"] = await db1.Resource.ConnectionStringExpression.GetValueAsync(default);
242hb.AddMongoDBClient(db1.Resource.Name);
285hb.Configuration[$"ConnectionStrings:{db2.Resource.Name}"] = await db2.Resource.ConnectionStringExpression.GetValueAsync(default);
287hb.AddMongoDBClient(db2.Resource.Name);
406hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
408hb.AddMongoDBClient(db.Resource.Name);
496hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
498hb.AddMongoDBClient(db.Resource.Name);
ReplicaSet\MongoDbReplicaSetFunctionalTests.cs (12)
58await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo.Resource.Name, cts.Token);
59await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
95await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
142await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
179await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
221await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
223await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo1.Resource.Name, cts.Token);
224await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo2.Resource.Name, cts.Token);
225await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo3.Resource.Name, cts.Token);
315await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
383await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, secondPhaseCts.Token);
454await app.ResourceNotifications.WaitForResourceAsync(rs.Resource.Name, KnownResourceStates.FailedToStart, cts.Token);
SingleMemberReplicaSetFunctionalTests.cs (12)
51await app.ResourceNotifications.WaitForResourceHealthyAsync(database.Resource.Name, ready.Token);
93await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo.Resource.Name, cts.Token);
100await app.ResourceNotifications.WaitForResourceAsync(mongoExpress.Resource.Name, KnownResourceStates.Running, cts.Token);
160await app.ResourceNotifications.WaitForResourceAsync(mongo.Resource.Name,
162await app.ResourceNotifications.WaitForResourceAsync(consumer.Resource.Name, KnownResourceStates.Waiting, ready.Token);
166var completed = await app.ResourceNotifications.WaitForResourceAsync(consumer.Resource.Name,
196var running = await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo1.Resource.Name, ready.Token);
207await app.ResourceNotifications.WaitForResourceAsync(mongo1.Resource.Name, KnownResourceStates.Exited, restart.Token);
209await app.ResourceNotifications.WaitForResourceAsync(mongo1.Resource.Name, KnownResourceStates.Running, restart.Token);
210await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo1.Resource.Name, restart.Token);
217await app.ResourceNotifications.WaitForResourceAsync(mongo1.Resource.Name, KnownResourceStates.Exited, stop.Token);
226await app2.ResourceNotifications.WaitForResourceHealthyAsync(mongo2.Resource.Name, secondReady.Token);
Aspire.Hosting.MySql (7)
Aspire.Hosting.MySql.Tests (38)
MySqlFunctionalTests.cs (30)
51await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
53await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
57await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
59await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
93[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
96hb.AddMySqlDataSource(db.Resource.Name);
170[$"ConnectionStrings:{db1.Resource.Name}"] = await db1.Resource.ConnectionStringExpression.GetValueAsync(default)
173hb.AddMySqlDataSource(db1.Resource.Name);
240[$"ConnectionStrings:{db2.Resource.Name}"] = await db2.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
243hb.AddMySqlDataSource(db2.Resource.Name);
351[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
354hb.AddMySqlDataSource(db.Resource.Name);
435[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
438hb.AddMySqlDataSource(db.Resource.Name);
506[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
509hb.AddMySqlDbContext<TestDbContext>(db.Resource.Name);
664hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
666hb.AddMySqlDataSource(newDb.Resource.Name);
672await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
678resourceName: mysql.Resource.Name,
747hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
749hb.AddMySqlDataSource(newDb.Resource.Name);
755await app.ResourceNotifications.WaitForResourceHealthyAsync(mysql.Resource.Name, cts.Token);
807hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
808hb.AddKeyedMySqlDataSource(db.Resource.Name);
817await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
819var conn = host.Services.GetRequiredKeyedService<MySqlConnection>(db.Resource.Name);
850hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
851hb.AddMySqlDataSource(newDb.Resource.Name);
856await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
Aspire.Hosting.Nats (1)
Aspire.Hosting.Nats.Tests (16)
NatsFunctionalTests.cs (14)
37await app.WaitForTextAsync("Listening for client connections", nats.Resource.Name);
42hb.Configuration[$"ConnectionStrings:{nats.Resource.Name}"] = await nats.Resource.ConnectionStringExpression.GetValueAsync(default);
83await app.WaitForTextAsync("Listening for client connections", nats.Resource.Name);
89hb.Configuration[$"ConnectionStrings:{nats.Resource.Name}"] = connectionString;
126await app.WaitForTextAsync("Listening for client connections", nats.Resource.Name);
136hb.Configuration[$"ConnectionStrings:{nats.Resource.Name}"] = modifiedConnectionString;
189await app.WaitForTextAsync("Listening for client connections", nats1.Resource.Name);
195hb.Configuration[$"ConnectionStrings:{nats1.Resource.Name}"] = await nats1.Resource.ConnectionStringExpression.GetValueAsync(default);
238await app.WaitForTextAsync("Listening for client connections", nats2.Resource.Name);
244hb.Configuration[$"ConnectionStrings:{nats2.Resource.Name}"] = await nats2.Resource.ConnectionStringExpression.GetValueAsync(default);
349await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
351await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
355await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
357await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
Aspire.Hosting.OpenAI (1)
Aspire.Hosting.OpenAI.Tests (13)
OpenAIFunctionalTests.cs (8)
43await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
45await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
49await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
51await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
90await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
92await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
96await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
98await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
Aspire.Hosting.Oracle (1)
Aspire.Hosting.Oracle.Tests (14)
Aspire.Hosting.PostgreSQL (9)
Aspire.Hosting.PostgreSQL.Tests (44)
PostgresFunctionalTests.cs (37)
54await app.ResourceNotifications.WaitForResourceAsync(postgres.Resource.Name, KnownResourceStates.Running).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
57await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
63await app.ResourceNotifications.WaitForResourceHealthyAsync(postgres.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
66await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
88await app.WaitForTextAsync("Listening at", resourceName: adminBuilder.Resource.Name);
90var client = app.CreateHttpClient(adminBuilder.Resource.Name, "http");
121[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
124hb.AddNpgsqlDataSource(db.Resource.Name);
130await app.ResourceNotifications.WaitForResourceHealthyAsync(postgres.Resource.Name, cts.Token);
167var client = app.CreateHttpClient(pgWebBuilder.Resource.Name, "http");
169await app.ResourceNotifications.WaitForResourceHealthyAsync(pgWebBuilder.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
235await app.ResourceNotifications.WaitForResourceHealthyAsync(db1.Resource.Name, cts.Token);
244[$"ConnectionStrings:{db1.Resource.Name}"] = await db1.Resource.ConnectionStringExpression.GetValueAsync(default)
247hb.AddNpgsqlDataSource(db1.Resource.Name);
298await app.ResourceNotifications.WaitForResourceHealthyAsync(db2.Resource.Name, cts.Token);
307[$"ConnectionStrings:{db2.Resource.Name}"] = await db2.Resource.ConnectionStringExpression.GetValueAsync(default)
310hb.AddNpgsqlDataSource(db2.Resource.Name);
410[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
413hb.AddNpgsqlDataSource(db.Resource.Name);
419await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
494[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
497hb.AddNpgsqlDataSource(db.Resource.Name);
503await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
622hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
624hb.AddNpgsqlDataSource(newDb.Resource.Name);
630await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
636resourceName: postgres.Resource.Name,
671hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
673hb.AddNpgsqlDataSource(newDb.Resource.Name);
679await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
741hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
743hb.AddNpgsqlDataSource(newDb.Resource.Name);
749await app.ResourceNotifications.WaitForResourceHealthyAsync(postgres.Resource.Name, cts.Token);
801hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
802hb.AddKeyedNpgsqlDataSource(db.Resource.Name);
811await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
813var conn = host.Services.GetRequiredKeyedService<NpgsqlConnection>(db.Resource.Name);
Aspire.Hosting.Python (6)
Aspire.Hosting.Python.Tests (19)
AddPythonAppTests.cs (18)
161Assert.Equal("pythonProject", pythonProjectResource.Name);
200Assert.Equal("pythonProject", pythonProjectResource.Name);
243Assert.Equal("pythonProject", pythonProjectResource.Name);
739Assert.Equal("pythonProject-installer", installerResource.Name);
829Assert.Equal("pythonProject-installer", uvEnvironmentResource.Name);
848Assert.Equal("pythonProject-installer", installerResource.Name);
873Assert.Equal("pythonProject-installer", installerResource.Name);
904Assert.Equal("pythonProject-installer", installerResource.Name);
928Assert.Equal("python-script", resource.Name);
947Assert.Equal("flask-app", resource.Name);
966Assert.Equal("pytest", resource.Name);
989Assert.Equal("pythonProject", pythonProjectResource.Name);
2031Assert.Equal("pythonProject-installer", installerResource.Name);
2066Assert.Equal("pythonProject-installer", installerResource.Name);
2170Assert.Equal("pythonProject-venv-creator", venvCreatorResource.Name);
2198Assert.Equal("pythonProject-venv-creator", venvCreatorResource.Name);
2492Assert.Equal("pythonProject-installer", installerResource.Name);
2525Assert.Equal("pythonProject-installer", installerResource.Name);
Aspire.Hosting.Qdrant (1)
Aspire.Hosting.Qdrant.Tests (11)
Aspire.Hosting.RabbitMQ (3)
Aspire.Hosting.RabbitMQ.Tests (11)
Aspire.Hosting.Radius (99)
Publishing\RadiusDeploymentPipelineStep.cs (11)
495Name = $"deploy-radius-{_environment.Name}",
496Description = $"Deploy Radius environment '{_environment.Name}' via rad CLI",
499step.DependsOn($"publish-radius-{_environment.Name}");
518logger.LogInformation("rad CLI detected on PATH for environment '{EnvironmentName}'", _environment.Name);
538$"Deploying Radius environment '{_environment.Name}' via rad deploy...",
606logger.LogWarning("Cancellation requested — terminating rad deploy process for environment '{EnvironmentName}'", _environment.Name);
622logger.LogInformation("rad deploy exited with code {ExitCode} for environment '{EnvironmentName}'", exitCode, _environment.Name);
631logger.LogError("rad deploy failed for environment '{EnvironmentName}': {ErrorMessage}", _environment.Name, errorMessage);
638$"Radius deployment complete for '{_environment.Name}'",
643logger.LogError(ex, "Unexpected error during rad deploy for environment '{EnvironmentName}'", _environment.Name);
722parameters.Count, _environment.Name);
Publishing\RadiusInfrastructureBuilder.cs (34)
238var envIdentifier = BicepPostProcessor.SanitizeIdentifier(_environment.Name);
821if (!storeConstructs.TryGetValue(store.Name, out var construct))
1773construct.EnvironmentName = _environment.Name;
2003construct.EnvironmentName = _environment.Name;
2228$"workload without authentication: {reason}. The parameter '{passwordParameter.Name}' cannot be " +
2425$"Parameter '{userNameParameter.Name}' is used as both the user name and the password of " +
2491$"Parameter '{recipeUserName.Name}' is used as both the user name and the password of " +
2764$"Parameter '{userNameParameter.Name}' is used as both the user name and the password of " +
2964parameter.Name,
2999parameter.Name,
3354$"Resource '{resource.Name}' is deployed by a Radius recipe in a different environment than '{_environment.Name}', " +
4599$"Parameter '{parameter.Name}' is used as the credential of both '{existing.Owner.Name}' and '{owner.Name}', " +
4773if (_envParametersByName.TryGetValue(parameter.Name, out var existing))
4778var identifier = BicepPostProcessor.SanitizeIdentifier(parameter.Name);
4788if (_recipeParameters.TryGetValue(parameter.Name, out var recipeParameter))
4798_envParametersByName[parameter.Name] = provisioningParameter;
5424if (!_recipeParameters.TryGetValue(parameter.Name, out var provisioningParameter))
5437if (_envParametersByName.TryGetValue(parameter.Name, out var envParameter))
5442var identifier = BicepPostProcessor.SanitizeIdentifier(parameter.Name);
5451$"Recipe parameters bound to Aspire parameters '{existingName}' and '{parameter.Name}' both " +
5460_recipeParameters[parameter.Name] = provisioningParameter;
5461_recipeParameterIdentifiers[identifier] = parameter.Name;
5496new($"A recipe parameter on Radius environment '{_environment.Name}' references {cloud} provider " +
5522resourceType, _environment.Name);
5558var identifier = BicepPostProcessor.SanitizeIdentifier(store.Name);
5561StoreName = store.Name,
5579storeConstructs[store.Name] = construct;
5629$"Unknown secret-store consumer kind '{consumer.Kind}' for store '{consumer.Store.Name}'.");
5672if (storeConstructs.TryGetValue(store.Name, out var construct))
5682$"Environment '{_environment.Name}' references secret store '{store.Name}', but that store is not " +
5760if (!options.SealedSecretManifests.TryGetValue(store.Name, out var manifest))
5762manifest = SealedSecretManifest.ReadValidated(store.Name, manifestPath, defaultNamespace);
5763options.SealedSecretManifests[store.Name] = manifest;
Publishing\SealedSecretApplyStep.cs (11)
43Name = $"apply-sealed-secrets-{_environment.Name}",
44Description = $"Apply and await sealed secrets for '{_environment.Name}' before rad deploy",
47step.DependsOn($"publish-radius-{_environment.Name}");
49step.RequiredBy($"deploy-radius-{_environment.Name}");
105var manifestPath = ResolveManifestPath(storeOutputDir, store.Name, sourceManifestPath);
111var validated = SealedSecretManifest.ReadValidated(store.Name, manifestPath, defaultNamespace);
130ct => ApplyManifestAsync(validated.Content, applyNamespace, kubeContext, store.Name, metadata.Namespace, metadata.Name, manifestPath, logger, ct),
133() => CreateOperationTimeoutException(store.Name, metadata.Namespace, metadata.Name, "apply", store.MaterializationTimeout))
137store.Name, metadata.Namespace, metadata.Name, appliedGeneration, deadline, store.MaterializationTimeout, s_pollInterval,
152() => CreateOperationTimeoutException(store.Name, metadata.Namespace, metadata.Name, "verify", store.MaterializationTimeout))
159$"'{store.Name}' is missing the declared key(s) {string.Join(", ", missing.Select(k => $"'{k}'"))}. " +
Aspire.Hosting.Radius.Tests (11)
Aspire.Hosting.Redis (7)
Aspire.Hosting.Redis.Tests (60)
AddRedisTests.cs (13)
42Assert.Equal("myRedis", containerResource.Name);
70Assert.Equal("myRedis", containerResource.Name);
309Assert.Equal(insight.Name, managementUrl.Endpoint?.Resource.Name);
335Assert.Equal(commander.Name, managementUrl.Endpoint?.Resource.Name);
375Assert.Equal($"{redis1.Resource.Name}.dev.internal", item.Value);
385Assert.Equal(redis1.Resource.Name, item.Value);
397Assert.Equal($"{redis2.Resource.Name}.dev.internal", item.Value);
407Assert.Equal(redis2.Resource.Name, item.Value);
419Assert.Equal($"{redis3.Resource.Name}.dev.internal", item.Value);
429Assert.Equal(redis3.Resource.Name, item.Value);
571Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{redis.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
593Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{password}", config["REDIS_HOSTS"]);
618Assert.Equal($"myredis1:{redis1.Resource.Name}:6379:0:{redis1.Resource.PasswordParameter?.Value},myredis2:myredis2:6379:0:{redis2.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
RedisFunctionalTests.cs (44)
53await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
55await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
59await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
61await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
82await app.WaitForTextAsync("Redis Connection", resourceName: commanderBuilder.Resource.Name);
84var client = app.CreateHttpClient(commanderBuilder.Resource.Name, "http");
93var path = $"/apiv2/server/R:{redis.Resource.Name}:{endpoint.TargetPort}:0/info";
121commanderBuilder.Resource.Name,
129redis.Resource.Name,
167redis.Resource.Name,
179commanderBuilder.Resource.Name,
185redis.Resource.Name,
198redis.Resource.Name,
222[$"ConnectionStrings:{redis.Resource.Name}"] = await redis.Resource.GetConnectionStringAsync()
225hb.AddRedisClient(redis.Resource.Name);
255await app.ResourceNotifications.WaitForResourceHealthyAsync(redis.Resource.Name, cts.Token);
262[$"ConnectionStrings:{redis.Resource.Name}"] = $"{await redis.Resource.GetConnectionStringAsync()},allowAdmin=true"
265hb.AddRedisClient(redis.Resource.Name);
296await rns.WaitForResourceAsync(redisInsightBuilder.Resource.Name, KnownResourceStates.Running).WaitAsync(cts.Token);
298var client = app.CreateHttpClient(redisInsightBuilder.Resource.Name, "http");
314Assert.Equal(redis1.Resource.Name, db.Name);
315Assert.Equal($"{redis1.Resource.Name}.dev.internal", db.Host);
320Assert.Equal(redis2.Resource.Name, db.Name);
321Assert.Equal($"{redis2.Resource.Name}.dev.internal", db.Host);
326Assert.Equal(redis3.Resource.Name, db.Name);
327Assert.Equal($"{redis3.Resource.Name}.dev.internal", db.Host);
364[$"ConnectionStrings:{redis1.Resource.Name}"] = $"{await redis1.Resource.GetConnectionStringAsync()},allowAdmin=true"
367hb.AddRedisClient(redis1.Resource.Name);
401[$"ConnectionStrings:{redis2.Resource.Name}"] = await redis2.Resource.GetConnectionStringAsync()
404hb.AddRedisClient(redis2.Resource.Name);
447[$"ConnectionStrings:{redis1.Resource.Name}"] = $"{await redis1.Resource.GetConnectionStringAsync()},allowAdmin=true"
450hb.AddRedisClient(redis1.Resource.Name);
482[$"ConnectionStrings:{redis2.Resource.Name}"] = await redis2.Resource.GetConnectionStringAsync()
485hb.AddRedisClient(redis2.Resource.Name);
532[$"ConnectionStrings:{redis1.Resource.Name}"] = $"{await redis1.Resource.GetConnectionStringAsync()},allowAdmin=true"
535hb.AddRedisClient(redis1.Resource.Name);
563[$"ConnectionStrings:{redis2.Resource.Name}"] = await redis2.Resource.GetConnectionStringAsync()
566hb.AddRedisClient(redis2.Resource.Name);
631await rns.WaitForResourceAsync(redisInsightBuilder1.Resource.Name, KnownResourceStates.Running).WaitAsync(cts.Token);
635var httpClient = app.CreateHttpClient(redisInsightBuilder1.Resource.Name, "http");
666await rns.WaitForResourceAsync(redisInsightBuilder2.Resource.Name, KnownResourceStates.Running).WaitAsync(cts.Token);
670var httpClient = app.CreateHttpClient(redisInsightBuilder2.Resource.Name, "http");
787await app.ResourceNotifications.WaitForResourceHealthyAsync(redis.Resource.Name, cts.Token);
788await app.ResourceNotifications.WaitForResourceHealthyAsync(redisCommander.Name, cts.Token);
Aspire.Hosting.RemoteHost.Tests (4)
Aspire.Hosting.Rust (25)
RustDockerfileGenerator.cs (12)
75ValidateDockerfileValue(options.ManifestPath, "cargo manifest path", resource.Name);
76var containerManifestPath = ValidateManifestPath(options.ManifestPath, workingDirectory, resource.Name);
77var targetCacheId = BuildTargetCacheId(resource.Name, containerManifestPath, workingDirectory);
82.ReadAsync(workingDirectory, options.ManifestPath, resource.Name, ReadOnlyDictionary<string, string>.Empty, context.CancellationToken)
89resource.Name);
93ValidateDockerfileValue(target.Name, "resolved Cargo target executable name", resource.Name);
94ValidateDockerfileValue(target.ProfileDirectory, "resolved Cargo profile directory", resource.Name);
95ValidateDockerfileValue(target.Target, "resolved Cargo target triple directory", resource.Name);
106ValidateCargoArgumentsDoNotContainCredentials(cargoArgs, resource.Name);
110ValidateDockerfileValue(cargoArg, "cargo argument", resource.Name);
120ValidateDockerfileValue(buildImage, "Dockerfile build image", resource.Name);
121ValidateDockerfileValue(runtimeImage, "Dockerfile runtime image", resource.Name);
RustHostingExtensions.cs (13)
109$"Cargo arguments for resource '{resource.Name}' have not been resolved yet. " +
147if (!builder.TryCreateResourceBuilder<ContainerResource>(resource.Name, out var containerBuilder)
151$"The published Rust app '{resource.Name}' was not converted to a Dockerfile container resource.");
649$"Cargo arguments for resource '{resource.Name}' have not been resolved yet. " +
696.ReadAsync(workingDirectory, options.ManifestPath, resource.Name, environment, cancellationToken)
699var target = RustCargoTargetResolver.Resolve(metadata, options, executionContext, resource.Name);
723if (!applicationBuilder.TryCreateResourceBuilder<ContainerResource>(resource.Name, out var containerBuilder))
726$"The published Rust app '{resource.Name}' was not converted to a container resource.");
797$"The Rust app '{resource.Name}' targets '{cargoTarget}', " +
903$"The Rust app '{resource.Name}' targets '{target}', which is not compatible with the default " +
912$"The Rust app '{resource.Name}' targets '{target}', but the default Rust build image does not support " +
919$"The Rust app '{resource.Name}' targets '{target}', but the default Rust runtime image is not compatible " +
930$"The Rust app '{resource.Name}' targets '{target}', which cannot be mapped to a supported Docker Linux " +
Aspire.Hosting.Seq.Tests (10)
Aspire.Hosting.SqlServer (5)
Aspire.Hosting.SqlServer.Tests (31)
SqlServerFunctionalTests.cs (27)
46await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
48await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
52await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
54await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
84hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
86hb.AddSqlServerDbContext<TestDbContext>(newDb.Resource.Name);
87hb.AddSqlServerClient(newDb.Resource.Name);
182await app1.ResourceNotifications.WaitForResourceHealthyAsync(db1.Resource.Name, cts.Token);
191[$"ConnectionStrings:{db1.Resource.Name}"] = await db1.Resource.ConnectionStringExpression.GetValueAsync(default),
194hb1.AddSqlServerClient(db1.Resource.Name);
268await app2.ResourceNotifications.WaitForResourceHealthyAsync(db2.Resource.Name, cts.Token);
277[$"ConnectionStrings:{db2.Resource.Name}"] = await db2.Resource.ConnectionStringExpression.GetValueAsync(default),
280hb2.AddSqlServerClient(db2.Resource.Name);
374hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
376hb.AddSqlServerClient(newDb.Resource.Name);
382await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
388resourceName: sqlserver.Resource.Name,
435hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
437hb.AddSqlServerClient(newDb.Resource.Name);
443await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
508hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
510hb.AddSqlServerClient(newDb.Resource.Name);
516await app.ResourceNotifications.WaitForResourceHealthyAsync(sqlserver.Resource.Name, cts.Token);
569hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
570hb.AddKeyedSqlServerClient(db.Resource.Name);
579await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
581var conn = host.Services.GetRequiredKeyedService<SqlConnection>(db.Resource.Name);
Aspire.Hosting.Testing.Tests (2)
Aspire.Hosting.Tests (355)
Dcp\DcpExecutorTests.cs (35)
933var executables = GetCreatedExecutablesForResource(kubernetesService, resource.Name);
952executables = GetCreatedExecutablesForResource(kubernetesService, resource.Name);
1537Assert.Single(kubernetesService.CreatedResources.OfType<Container>(), c => c.AppModelResourceName == emulator.Resource.Name);
5363var executable = GetCreatedExecutableForResource(kubernetesService, resource.Name);
9663.Where(c => c.AppModelResourceName == container.Resource.Name)
9680await AssertEndpoint(container.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 11234);
9681await AssertEndpoint(container.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 18765);
9686await AssertEndpoint(containerWithAlias.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 21234);
9687await AssertEndpoint(containerWithAlias.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 28765);
9771s => s.AppModelResourceName == executable.Resource.Name
10224Assert.Equal(executable.Resource.Name, tunnelService.AppModelResourceName);
10229resource => resource.AppModelResourceName == executable.Resource.Name);
10258target.Resource.Name,
10275Assert.Equal(target.Resource.Name, tunnelService.AppModelResourceName);
10279resource => resource.AppModelResourceName == source.Resource.Name);
10312Assert.Equal(project.Resource.Name, tunnelService.AppModelResourceName);
10316resource => resource.AppModelResourceName == project.Resource.Name);
10351Assert.Equal(target.Resource.Name, tunnelService.AppModelResourceName);
10356resource => resource.AppModelResourceName == source.Resource.Name);
10408resource => resource.AppModelResourceName == executable.Resource.Name);
10475resource => resource.AppModelResourceName == executable.Resource.Name);
10516resource => resource.AppModelResourceName == source.Resource.Name);
10565resource => resource.AppModelResourceName == executable.Resource.Name);
10702while (!kubernetesService.CreatedResources.OfType<Container>().Any(c => c.AppModelResourceName == container.Resource.Name))
10718Assert.Single(createdContainers, c => c.AppModelResourceName == container.Resource.Name);
10719Assert.Single(createdContainers, c => c.AppModelResourceName == waiting.Resource.Name);
10720var waitingConsumingContainer = Assert.Single(createdContainers, c => c.AppModelResourceName == waitingConsumingEndpoint.Resource.Name);
10727Assert.Single(tunnelServices, s => s.AppModelResourceName == executableA.Resource.Name);
10728var executableBTunnelService = Assert.Single(tunnelServices, s => s.AppModelResourceName == executableB.Resource.Name);
10763while (!kubernetesService.CreatedResources.OfType<Executable>().Any(e => e.AppModelResourceName == upstreamExecutable.Resource.Name))
10771while (!kubernetesService.CreatedResources.OfType<Container>().Any(c => c.AppModelResourceName == tunnelDependentContainer.Resource.Name))
10787var upstreamExecutableResource = Assert.Single(createdResources.OfType<Executable>(), e => e.AppModelResourceName == upstreamExecutable.Resource.Name);
10788var downstreamExecutableResource = Assert.Single(createdResources.OfType<Executable>(), e => e.AppModelResourceName == downstreamExecutable.Resource.Name);
10789var tunnelDependentDcpContainer = Assert.Single(createdResources.OfType<Container>(), c => c.AppModelResourceName == tunnelDependentContainer.Resource.Name);
10800var upstreamTunnelService = Assert.Single(tunnelServices, s => s.AppModelResourceName == upstreamExecutable.Resource.Name);
DistributedApplicationTests.cs (16)
784using var clientA = app.CreateHttpClient(testProgram.ServiceABuilder.Resource.Name, "http");
785using var clientC = app.CreateHttpClient(testProgram.ServiceCBuilder.Resource.Name, "http");
792var uri = app.GetEndpoint(testProgram.ServiceBBuilder.Resource.Name, "http");
1110var dependentRunningResourceEvent = await rns.WaitForResourceAsync(container.Resource.Name, e => e.Snapshot.State?.Text == KnownResourceStates.Running).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
1271using var serviceAClient = app.CreateHttpClientWithResilience(testProgram.ServiceABuilder.Resource.Name, "http");
1783await app.WaitForTextAsync("Content root path:", resourceName: testProgram.ServiceABuilder.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutDuration);
1786var httpEndPoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "http");
1804var httpsEndpoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "https");
1854using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
1928using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
2057await app.ResourceNotifications.WaitForResourceAsync(container.Resource.Name, KnownResourceStates.NotStarted, token)
2059await app.ResourceNotifications.WaitForResourceAsync(executable.Resource.Name, KnownResourceStates.NotStarted, token)
2065var dcpContainer = Assert.Single(containers, c => c.AppModelResourceName == container.Resource.Name);
2074var dcpExecutable = Assert.Single(executables, e => e.AppModelResourceName == executable.Resource.Name);
2358var expectedServiceName = hasMultipleEndpoints ? $"{redis.Name}-{endpoint.EndpointName}" : redis.Name;
ExternalServiceTests.cs (16)
22Assert.Equal("nuget", externalService.Resource.Name);
35Assert.Equal("nuget", externalService.Resource.Name);
48Assert.Equal("nuget", externalService.Resource.Name);
51Assert.Equal("nuget-url", externalService.Resource.UrlParameter.Name);
86Assert.Equal("nuget", externalService.Resource.Name);
102Assert.Equal("nuget", externalService.Resource.Name);
233Assert.NotNull(healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")));
249Assert.NotNull(healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")));
341externalService.Resource.Name,
368externalService.Resource.Name,
395externalService.Resource.Name,
420var healthCheckAnnotation = healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external"));
441var healthCheckAnnotation = healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external"));
466var healthCheckKey = healthCheckAnnotations.First(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")).Key;
507Assert.Equal("service", externalService.Resource.Name);
522Assert.Equal("service", externalService.Resource.Name);
Orchestrator\ApplicationOrchestratorTests.cs (35)
41await notifications.PublishUpdateAsync(resource.Resource, resource.Resource.Name,
67CancellationToken.None, KnownResourceTypes.Executable, resource.Resource, resource.Resource.Name,
516Assert.True(resourceNotificationService.TryGetCurrentState(resource.Resource.Name, out var currentState));
644await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
647Assert.True(resourceNotificationService.TryGetCurrentState(waiter.Resource.Name, out var waitingEvent));
652await resourceNotificationService.WaitForResourceAsync(blocker.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
653await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
684CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, waiter.Resource.Name));
686await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
688Assert.True(resourceNotificationService.TryGetCurrentState(dependency.Resource.Name, out var dependencyEvent));
693await resourceNotificationService.WaitForResourceAsync(dependency.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
736waiter.Resource.Name,
794waiter.Resource.Name,
845waiter.Resource.Name,
899waiter.Resource.Name,
907waiter.Resource.Name,
954await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
959await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
961Assert.True(resourceNotificationService.TryGetCurrentState(blocker.Resource.Name, out var blockerEvent));
1006waiter.Resource.Name,
1010while (!resourceNotificationService.TryGetCurrentState(waiter.Resource.Name, out var waiterEvent)
1025await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, cancellationToken).DefaultTimeout();
1027Assert.True(resourceNotificationService.TryGetCurrentState(blocker.Resource.Name, out var blockerEvent));
1058await resourceNotificationService.WaitForResourceAsync(connectionString.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
1062await resourceNotificationService.WaitForResourceAsync(referenced.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1063await resourceNotificationService.WaitForResourceAsync(connectionString.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1094waiter.Resource.Name,
1099Assert.Equal(new[] { blocker.Resource.Name }, Assert.IsAssignableFrom<IEnumerable<string>>(waitingFor));
1105await resourceNotificationService.WaitForResourceAsync(blocker.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1106await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1238public ReferenceExpression ConnectionStringExpression => ReferenceExpression.Create($"{Name}-connection-string");
1364var childContainerState = resourceNotificationService.TryGetCurrentState(childContainer.Resource.Name, out var childContainerEvent) ? childContainerEvent.Snapshot.State?.Text : null;
1365var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
1412var childProjectState = resourceNotificationService.TryGetCurrentState(childProject.Resource.Name, out var childProjectEvent) ? childProjectEvent.Snapshot.State?.Text : null;
1413var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
Orchestrator\ParameterProcessorTests.cs (23)
464prompt.Inputs[parameter.Name].Value = "finalValue";
766var explicitParameterResource = model.Resources.OfType<ParameterResource>().First(p => p.Name == "explicitParam");
767var referencedParameterResource = model.Resources.OfType<ParameterResource>().First(p => p.Name == "referencedParam");
812Assert.Equal("explicitParam", explicitParameterResource.Name);
838Assert.Equal("envParam", parameterResource.Name);
1017Assert.Equal("excludedParam", parameterResource.Name);
1262Assert.Equal(string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceSetParameter, parameter.Name), result.Message);
1313Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1319Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out savedValueNode));
1346Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1495prompt.Inputs[parameter.Name].Value = "saved-value";
1519prompt.Inputs[firstParameter.Name].Value = "stale-form-value";
1520prompt.Inputs[secondParameter.Name].Value = "form-value";
1834Assert.Equal(string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceDeletedParameter, parameter.Name), result.Message);
1835var section = await capturingStateManager.AcquireSectionAsync($"Parameters:{parameter.Name}").DefaultTimeout();
1852Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1870Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1938Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
2038interaction.Inputs[parameter.Name].Value = "savedValue";
2050Assert.True(interaction.Inputs.ContainsName(parameter.Name));
2051Assert.Equal(keepOtherParameterUnresolved, interaction.Inputs.ContainsName(otherParameter.Name));
2128Assert.False(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out _));
2396var section = await capturingStateManager.AcquireSectionAsync($"Parameters:{parameter.Name}").DefaultTimeout();
ResourceNotificationTests.cs (55)
159Assert.True(notificationService.TryGetCurrentState(resource.Name, out var resourceEvent));
418resource.Name,
420GetWaitingForDependencies(re).SequenceEqual(new[] { dependency1.Name, dependency2.Name }),
431resource.Name,
433GetWaitingForDependencies(re).SequenceEqual(new[] { dependency2.Name }),
436Assert.Equal(new[] { dependency2.Name }, GetWaitingForDependencies(updatedWaitingEvent));
445Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
466resource.Name,
468GetWaitingForDependencies(re).SequenceEqual(new[] { dependency1.Name, dependency2.Name }),
484resource.Name,
486GetWaitingForDependencies(re).SequenceEqual(new[] { dependency2.Name }),
489Assert.Equal(new[] { dependency2.Name }, GetWaitingForDependencies(updatedWaitingEvent));
503Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
522resource.Name,
524GetWaitingForDependencies(re).SequenceEqual(new[] { dependency1.Name, dependency2.Name }),
536resource.Name,
538GetWaitingForDependencies(re).SequenceEqual(new[] { dependency2.Name }),
541Assert.Equal(new[] { dependency2.Name }, GetWaitingForDependencies(updatedWaitingEvent));
551Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
576resource.Name,
581Assert.Equal(new[] { dependency.Name }, GetWaitingForDependencies(waitingEvent));
622Assert.True(notificationService.TryGetCurrentState(resource.Name, out var resourceEvent));
656resource.Name,
727resource.Name,
731Assert.Equal(new[] { dependency.Name }, GetWaitingForDependencies(waitingEvent));
766resource.Name,
770Assert.Equal(new[] { dependency.Name }, GetWaitingForDependencies(waitingEvent));
798resource.Name,
811resource.Name,
825Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
841Assert.True(notificationService.TryGetCurrentState(resource.Name, out var waitingEvent));
849Assert.True(notificationService.TryGetCurrentState(resource.Name, out var runningEvent));
868Properties = [new ResourcePropertySnapshot(KnownProperties.Resource.WaitingFor, new[] { dependency.Name })]
872var waitTask = notificationService.WaitForResourceAsync(resource.Name, KnownResourceStates.Running, cts.Token);
902resource.Name,
904GetWaitingForDependencies(re).SequenceEqual(new[] { dependency.Name }),
1437var resourceEvent = await notificationService.WaitForResourceHealthyAsync(resource.Name, waitBehavior).DefaultTimeout();
1457var waitTask = notificationService.WaitForResourceAsync(resource.Name, resourceEvent =>
1500var waitTask = notificationService.WaitForResourceAsync(resource.Name, resourceEvent =>
1545var waitTask = notificationService.WaitForResourceAsync(resource.Name, _ => throw expectedException);
1566Assert.Equal(resource.Name, resourceEvent.Resource.Name);
1584var waitTask = notificationService.WaitForResourceHealthyAsync(resource.Name);
1606var waitTask = notificationService.WaitForResourceHealthyAsync(resource.Name);
1627() => notificationService.WaitForResourceHealthyAsync(resource.Name, WaitBehavior.StopOnResourceUnavailable, cts.Token));
1642() => notificationService.WaitForResourceHealthyAsync(resource.Name));
1662() => notificationService.WaitForResourceHealthyAsync(resource.Name, WaitBehavior.StopOnResourceUnavailable));
1845Assert.True(notificationService.TryGetCurrentState(resource.Name, out var initial));
1852Assert.True(notificationService.TryGetCurrentState(resource.Name, out var unchanged));
1868Assert.True(notificationService.TryGetCurrentState(resource.Name, out var initial));
1871Assert.True(notificationService.TryGetCurrentState(resource.Name, out var changed));
1897Assert.True(notificationService.TryGetCurrentState(resource.Name, out var initial));
1903Assert.True(notificationService.TryGetCurrentState(resource.Name, out var changed));
WaitForTests.cs (37)
33await app.ResourceNotifications.WaitForResourceAsync(throwingResource.Resource.Name, KnownResourceStates.FailedToStart, abortCts.Token);
34await app.ResourceNotifications.WaitForResourceAsync(dependingContainerResource.Resource.Name, KnownResourceStates.FailedToStart, abortCts.Token);
35await app.ResourceNotifications.WaitForResourceAsync(dependingExecutableResource.Resource.Name, KnownResourceStates.FailedToStart, abortCts.Token);
108await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
139await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
176await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
217await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
224await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, waitingStateCts.Token);
245dependency.Resource.Name,
269dependency.Resource.Name,
299await app.ResourceNotifications.WaitForResourceHealthyAsync(dependency.Resource.Name)
328await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
335await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, waitingStateCts.Token);
362await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
369await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
377await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
409await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
416await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
424await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
454await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
469await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, runningStateCts.Token);
501await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, "Waiting", waitingStateCts.Token);
516await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, runningStateCts.Token);
556await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, "Waiting", waitingStateCts.Token);
572await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, runningStateCts.Token);
610await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
624await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, runningStateCts.Token);
661await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
669await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
677await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
714await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
722await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
730await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
763await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
771await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
875await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
885await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, runningStateCts.Token);
WithUrlsTests.cs (13)
289Assert.StartsWith($"http://{projectB.Resource.Name.ToLowerInvariant()}{expectedHostSuffix}", u.Url);
408servicea.Resource.Name,
433servicea.Resource.Name,
466servicea.Resource.Name,
516await rns.WaitForResourceAsync(servicea.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
632await rns.WaitForResourceAsync(custom.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
1081resourceB.Resource.Name,
1086using var resourceAClient = app.CreateHttpClientWithResilience(resourceA.Resource.Name, "api");
1087using var resourceBClient = app.CreateHttpClientWithResilience(resourceB.Resource.Name, "http");
1133resourceB.Resource.Name,
1144using var resourceAClient = app.CreateHttpClientWithResilience(resourceA.Resource.Name, "api");
1148resourceB.Resource.Name,
1157resourceB.Resource.Name,
Aspire.Hosting.Valkey (2)
Aspire.Hosting.Valkey.Tests (15)
Aspire.Hosting.Yarp (1)
Aspire.Hosting.Yarp.Tests (3)
Aspire.Playground.Tests (3)
CustomResources.AppHost (2)
ExternalServices.AppHost (2)
KafkaBasic.AppHost (2)
Pipelines.Library (3)
Stress.AppHost (2)
Terminals.AppHost (3)
Testing.Tests (14)
WaitFailures.cs (14)
34await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, cancellationToken: cts.Token);
49await app.ResourceNotifications.WaitForResourceAsync(pwsh.Resource.Name, cancellationToken: cts.Token);
68await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, cancellationToken: cts.Token);
72await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.TerminalStates, cancellationToken: cts.Token);
87await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, "StateThatIsNeverUsed", cts.Token);
102await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, ["States", "That", "Are", "Never", "Used"], cts.Token);
117await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, x => false, cts.Token);
136await app.ResourceNotifications.WaitForResourceHealthyAsync(nginx.Resource.Name, cts.Token);
156await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, x => x.Snapshot.HealthReports.All(x => x.Status.HasValue), cts.Token);
159await app.ResourceNotifications.WaitForResourceHealthyAsync(nginx.Resource.Name, cts.Token);
176await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, x => x.Snapshot.HealthStatus == HealthStatus.Healthy, cts.Token);
180await app.ResourceNotifications.WaitForResourceHealthyAsync(nginx.Resource.Name, cts.Token);
228await app.ResourceNotifications.WaitForResourceAsync(dependency.Resource.Name, cancellationToken: cts.Token);
252await app.ResourceNotifications.WaitForResourceAsync(dependency.Resource.Name, cancellationToken: cts.Token);
TestProject.AppHost (1)