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)
2372 references to Name
Aspire.Hosting (72)
Orchestrator\ParameterProcessor.cs (16)
146referencedParameters.TryAdd(parameter.Name, parameter);
179.LogWarning("Parameter resource {ResourceName} could not be initialized. Waiting for user input.", parameterResource.Name);
187.LogError(ex, "Failed to initialize parameter resource {ResourceName}.", parameterResource.Name);
381var message = string.Format(CultureInfo.CurrentCulture, InteractionStrings.DeleteParameterMessage, parameterResource.Name);
443return new ExecuteCommandResult { Success = true, Message = string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceSetParameter, parameterResource.Name) };
459logger.LogInformation("Parameter value deleted from deployment state for {ParameterName}.", parameterResource.Name);
462.LogInformation("Parameter resource {ResourceName} value has been deleted from user secrets.", parameterResource.Name);
466logger.LogInformation("Parameter value cleared for {ParameterName} (not deleted from user secrets).", parameterResource.Name);
469.LogInformation("Parameter resource {ResourceName} value has been cleared.", parameterResource.Name);
491logger.LogWarning(ex, "Failed to delete parameter {ParameterName} from deployment state.", parameterResource.Name);
492return CommandResults.Failure($"Failed to delete parameter '{parameterResource.Name}'.");
495return new ExecuteCommandResult { Success = true, Message = string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceDeletedParameter, parameterResource.Name) };
514.LogInformation("Parameter resource {ResourceName} has been resolved via user interaction.", parameterResource.Name);
524logger.LogInformation("Parameter value saved to deployment state for {ParameterName}.", parameterResource.Name);
528logger.LogWarning(ex, "Failed to save parameter {ParameterName} to deployment state.", parameterResource.Name);
691logger.LogWarning(ex, "Failed to save parameter {ParameterName} to deployment state.", parameter.Name);
Aspire.Hosting.Azure (100)
AzureProvisioningController.cs (26)
1926await SetResourceLocationOverrideAsync(targetBicepResource.Name, intent.Location, cancellationToken).ConfigureAwait(false);
2160!notificationService.TryGetCurrentState(environmentResource.Name, out var environmentEvent) ||
2509var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
2514var outputs = ParseDeploymentStateJson(resource.Name, "Outputs", section.Data["Outputs"]?.GetValue<string>());
2527["scope"] = ParseDeploymentStateJson(resource.Name, "Scope", section.Data["Scope"]?.GetValue<string>())
2744var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{bicepResource.Name}", cancellationToken).ConfigureAwait(false);
2785=> resource.AzureResource is AzureBicepResource bicepResource ? bicepResource.Name : resource.Resource.Name;
2802var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{bicepResource.Name}", cancellationToken).ConfigureAwait(false);
2820$"Azure:Deployments:{bicepResource.Name}",
2923var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
2942_logger.LogInformation(ex, "Azure deployment {DeploymentId} was absent while collecting target resources for {ResourceName}.", deploymentId, resource.Name);
3138if (!notificationService.TryGetCurrentState(resource.Name, out var resourceEvent))
3392var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
3406_logger.LogDebug(ex, "Unable to parse cached outputs for resource {ResourceName} while checking for Azure drift.", resource.Name);
3460resource.Name,
3481resource.Name,
3494resource.Name,
3502resource.Name,
3511var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
3530_logger.LogDebug(ex, "Unable to parse persisted parameters while checking whether Azure resource {ResourceName} must be deleted for a location change.", resource.Name);
3561_logger.LogDebug(ex, "Unable to verify cached Azure resource state for {ResourceName} because no Azure credential is available.", resource.Name);
3568_logger.LogDebug(ex, "Unable to verify cached Azure resource state for {ResourceName} because the Azure resource probe failed.", resource.Name);
3581var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
3794TryGetPublishedTerminalDeploymentState(bicepResource.Name, out publishedTerminalState))
3808!IsResourceInState(bicepResource.Name, CancelingState))
3813var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{bicepResource.Name}").ConfigureAwait(false);
Provisioning\Provisioners\BicepProvisioner.cs (40)
54var stateSection = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
63logger.LogDebug("Cached deployment state for resource {ResourceName} is incomplete because provisioning state is {ProvisioningState}.", resource.Name, provisioningState);
72logger.LogDebug("Cached deployment state for resource {ResourceName} is incomplete because it is missing a checksum.", resource.Name);
78logger.LogDebug("Checksum mismatch for resource {ResourceName}. Expected cached checksum {ExpectedChecksum}, computed checksum {ActualChecksum}", resource.Name, configCheckSum, currentCheckSum);
82logger.LogDebug("Configuring resource {ResourceName} from existing deployment state.", resource.Name);
175var sectionName = $"Azure:Deployments:{resource.Name}";
207logger.LogDebug(ex, "Unable to reconcile cached deployment state for {ResourceName} because no Azure credential is available.", resource.Name);
212logger.LogDebug(ex, "Unable to reconcile cached deployment state for {ResourceName} because the Azure deployment probe failed.", resource.Name);
220logger.LogInformation("Cached Azure deployment {DeploymentId} for {ResourceName} no longer exists. Reprovisioning.", deploymentId, resource.Name);
242logger.LogInformation("Cached Azure deployment {DeploymentId} for {ResourceName} no longer exists after reconciliation started. Reprovisioning.", deploymentId, resource.Name);
255logger.LogDebug("Cached Azure deployment {DeploymentId} for {ResourceName} has provisioning state {ProvisioningState}. Reprovisioning.", deploymentId, resource.Name, deployment.ProvisioningState);
280logger.LogDebug(ex, "Unable to publish Azure deployment operation progress for cached deployment {DeploymentId} on {ResourceName}.", deploymentId, resource.Name);
284logger.LogDebug(ex, "Unable to publish Azure deployment operation progress for cached deployment {DeploymentId} on {ResourceName} because no Azure credential is available.", deploymentId, resource.Name);
299logger.LogDebug(ex, "Unable to continue reconciling cached Azure deployment {DeploymentId} for {ResourceName}.", deploymentId, resource.Name);
304logger.LogDebug(ex, "Unable to continue reconciling cached Azure deployment {DeploymentId} for {ResourceName} because no Azure credential is available.", deploymentId, resource.Name);
357if (!TryGetDeploymentStateJsonObject(stateSection, BicepUtilities.DeploymentStateParametersKey, resource.Name, out var parameters) ||
360logger.LogDebug("Cached deployment state for resource {ResourceName} cannot be reconciled because parameters or checksum are missing.", resource.Name);
371var scope = TryGetDeploymentStateJsonObject(stateSection, BicepUtilities.DeploymentStateScopeKey, resource.Name, out var cachedScope)
424throw new InvalidOperationException($"Azure deployment for {resource.Name} was canceled.");
433throw new InvalidOperationException($"Azure deployment for {resource.Name} failed.");
566logger.LogDebug("Setting parameters and scope for resource {ResourceName}", resource.Name);
579var deploymentName = executionContext.IsPublishMode ? $"{resource.Name}-{_timeProvider.GetUtcNow().ToUnixTimeSeconds()}" : resource.Name;
595resourceLogger.LogInformation("Deploying {Name} to {DeploymentTarget}", resource.Name, deploymentTargetName);
596logger.LogDebug("Starting deployment of resource {ResourceName} to {DeploymentTarget}", resource.Name, deploymentTargetName);
620var sectionName = $"Azure:Deployments:{resource.Name}";
677var sectionName = $"Azure:Deployments:{resource.Name}";
763resourceLogger.LogInformation("Deployment of {Name} to {DeploymentTarget} took {Elapsed}", resource.Name, deploymentTargetName, sw.Elapsed);
764logger.LogDebug("Deployment of resource {ResourceName} to {DeploymentTarget} completed in {Elapsed}", resource.Name, deploymentTargetName, sw.Elapsed);
785resourceLogger.LogError("Azure deployment of {Name} to {DeploymentTarget} completed with provisioning state {ProvisioningState}.", resource.Name, deploymentTargetName, provisioningState);
786throw new InvalidOperationException($"Deployment of {resource.Name} to {deploymentTargetName} failed with {provisioningState}");
795var sectionName = $"Azure:Deployments:{resource.Name}";
853var sectionName = $"Azure:Deployments:{resource.Name}";
865logger.LogDebug("Azure deployment {DeploymentId} for {ResourceName} is active, but cached state does not match the current deployment request.", deploymentId, resource.Name);
882logger.LogDebug(ex, "Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because the Azure deployment probe failed.", deploymentId, resource.Name);
887logger.LogDebug(ex, "Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because no Azure credential is available.", deploymentId, resource.Name);
896logger.LogDebug("Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because it could not be found.", deploymentId, resource.Name);
905logger.LogInformation("Azure deployment {DeploymentId} for {ResourceName} is already active. Waiting for the existing deployment to complete.", deploymentId, resource.Name);
918logger.LogDebug("Unable to adopt active Azure deployment {DeploymentId} for {ResourceName} because it disappeared while waiting.", deploymentId, resource.Name);
933logger.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 (18)
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.EventHubs (8)
Aspire.Hosting.Azure.FrontDoor (2)
Aspire.Hosting.Azure.Functions (3)
Aspire.Hosting.Azure.KeyVault (3)
Aspire.Hosting.Azure.Kubernetes (47)
AzureKubernetesEnvironmentResource.AksPipeline.cs (16)
56logger.LogInformation("Processing AKS environment '{Name}'", Name);
192.FirstOrDefault(p => p.Name == poolName && p.AksParent == environment);
219?? Name;
237$"Fetching AKS credentials for {Name}",
368.AcquireSectionAsync($"Azure:Deployments:{Name}", context.CancellationToken)
374$"No Azure deployment state was found for AKS environment '{Name}'. " +
393$"The Azure deployment state for AKS environment '{Name}' contains invalid outputs.",
400$"The Azure deployment state for AKS environment '{Name}' does not contain the deployed cluster identity.");
427$"The Azure deployment state for AKS environment '{Name}' contains an invalid scope.",
518$"Applying AGC ApplicationLoadBalancer CR for {lb.Name}",
537displaced, lb.Name, displaced);
544$"Could not resolve subnet ID for AGC load balancer '{lb.Name}'.");
549$"Cannot apply AGC ApplicationLoadBalancer CR for '{lb.Name}': " +
550$"kubeconfig was not set by aks-get-credentials-{Name}.");
646$"☸ ALB {lb.Name}",
656$"Failed to apply AGC ApplicationLoadBalancer for {lb.Name}: {ex.Message}",
Aspire.Hosting.Azure.Kubernetes.Tests (14)
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)
69Description = $"Deploys compute resource '{resource.TargetResource.Name}' to ACA sandbox '{resource.Name}'.",
79Description = $"Deletes ACA sandbox deployment '{resource.Name}'.",
170$"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.");
194var expectedName = $"destroy-azure-{environment.Name}";
266resource.Name);
273resource.Name);
310resource.Name,
337resource.Name,
345var lifecycleTask = await context.ReportingStep.CreateTaskAsync($"Configuring lifecycle for {resource.Name}", context.CancellationToken).ConfigureAwait(false);
405stateSection.Data["ResourceName"] = resource.Name;
439resource.Name,
465resource.Name,
487resource.Name);
491$"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.",
543resource.Name,
572["aspire-resource"] = resource.Name,
988throw 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.");
1340var stableOwnerId = CreateStableOwnerId(appHostIdentity, environmentName, fallbackScope, resource.Name);
1346resource.Name,
1364var legacyOwnerId = CreateLegacyStableOwnerId(appHostIdentity, scope, resource.Name);
1370await DeleteRemoteDeploymentsByResourceLabelAsync(context, client, scope, ownerId, resource.Name, s_noExcludedIds, s_noExcludedIds, s_noExcludedIds, throwOnError: true).ConfigureAwait(false);
1383await DeleteRemoteDeploymentsByResourceLabelAsync(context, client, scope, pendingOwnerCleanupId, resource.Name, s_noExcludedIds, s_noExcludedIds, s_noExcludedIds, throwOnError: true).ConfigureAwait(false);
1385var stableOwnerIdForScope = CreateStableOwnerId(appHostIdentity, environmentName, scope, resource.Name);
1388await DeleteRemoteDeploymentsByResourceLabelAsync(context, client, scope, stableOwnerIdForScope, resource.Name, s_noExcludedIds, s_noExcludedIds, s_noExcludedIds, throwOnError: true).ConfigureAwait(false);
2102stateSection.Data["ResourceName"] ??= resource.Name;
2317throw new InvalidOperationException($"Azure resource '{resource.Name}' is missing required output '{name}'. Ensure Azure infrastructure provisioning completed successfully.");
2333$"Azure sandbox group '{sandboxGroup.Name}' returned an invalid resource ID '{resourceId}'.");
2364internal static string GetStateSectionName(AzureSandboxContainerResource resource) => $"{SandboxStateSectionPrefix}{resource.Name}";
2368internal static string GetDeployStepName(AzureSandboxContainerResource resource) => $"deploy-{resource.Name}";
2370private 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 (435)
AzureAppServiceEnvironmentExtensionsTests.cs (10)
124var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
125var roles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "env-mi-roles-final-registry");
154Assert.Null(model.Resources.OfType<AzureUserAssignedIdentityResource>().SingleOrDefault(resource => resource.Name == "env-mi"));
155Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
175Assert.Same(identity.Resource, Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi"));
176Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
204var identityEast = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "east-mi");
205var identityWest = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "west-mi");
209var rolesEast = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "east-mi-roles-registry");
210var rolesWest = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "west-mi-roles-registry");
AzureBicepProvisionerTests.cs (33)
307AssertResourceGroupPropertyIsNull(services, resource.Name);
342AssertResourceGroupPropertyIsNull(services, resource.Name);
440AssertResourceGroupPropertyIsNull(services, resource.Name);
750Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
784Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
821Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
936Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
987Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1178Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1293Assert.True(notifications.TryGetCurrentState(resource.Name, out var resourceEvent));
1414var deploymentId = GetTestDeploymentId(resource.Name);
1432Assert.Equal(resource.Name, deploymentCollection.DeploymentName);
1436var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1449var deploymentId = GetTestDeploymentId(resource.Name);
1579var deploymentId = GetTestDeploymentId(resource.Name);
1596var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1611var deploymentId = GetTestDeploymentId(resource.Name);
1639var deploymentId = GetTestDeploymentId(resource.Name);
1651var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1663var deploymentId = GetTestDeploymentId(resource.Name);
1677var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1690var deploymentId = GetTestDeploymentId(resource.Name);
1706var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1719var deploymentId = GetTestDeploymentId(resource.Name);
1731Assert.Contains(resource.Name, exception.Message, StringComparison.Ordinal);
1732var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1744var deploymentId = GetTestDeploymentId(resource.Name);
1756Assert.Contains(resource.Name, exception.Message, StringComparison.Ordinal);
1757var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1761Assert.True(notificationService.TryGetCurrentState(resource.Name, out var resourceEvent));
1773var deploymentId = GetTestDeploymentId(resource.Name);
1790var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
1848var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}");
AzureContainerAppEnvironmentExtensionsTests.cs (13)
277var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
278var roles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "env-mi-roles-final-registry");
306var roles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "env-mi-roles-registry");
349var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
375var identity = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi");
401Assert.Null(model.Resources.OfType<AzureUserAssignedIdentityResource>().SingleOrDefault(resource => resource.Name == "env-mi"));
402Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
421Assert.Same(identity.Resource, Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi"));
422Assert.Null(model.Resources.OfType<AzureRoleAssignmentResource>().SingleOrDefault(resource => resource.Name.StartsWith("env-mi-roles-", StringComparison.Ordinal)));
449var identityEast = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "east-mi");
450var identityWest = Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "west-mi");
454var rolesEast = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "east-mi-roles-registry");
455var rolesWest = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "west-mi-roles-registry");
AzureContainerAppsTests.cs (18)
384var identityName = $"{proj.Name}-identity";
385var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == identityName);
461var identityName = $"{proj.Name}-identity";
462var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == identityName);
1096var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-identity");
1097var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-roles-storage");
1140var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-identity");
1141var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-roles-cosmos");
1181var projIdentity = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-identity");
1182var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "api-roles-redis");
1959var env1Resource = Assert.Single(envResources, r => r.Name == "cae1");
1960var env2Resource = Assert.Single(envResources, r => r.Name == "cae2");
2010var env1Resource = Assert.Single(envResources, r => r.Name == "cae1");
2011var env2Resource = Assert.Single(envResources, r => r.Name == "cae2");
2321var env1Resource = Assert.Single(envResources, r => r.Name == "cae1");
2322var env2Resource = Assert.Single(envResources, r => r.Name == "cae2");
2836Assert.Contains("acr", defaultAcr.Name);
2858Assert.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 (149)
359ResourceName = environmentResource.Name,
380Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
384Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
413ResourceName = environmentResource.Name,
496Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
569Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
708Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
743Assert.True(notifications.TryGetCurrentState(postgres.Resource.Name, out var postgresEvent));
751ResourceName = postgres.Resource.Name,
832ResourceName = storage.Resource.Name,
916ResourceName = storage.Resource.Name,
1185ResourceName = storage.Resource.Name,
1249ResourceName = storage.Resource.Name,
1310ResourceName = storage.Resource.Name,
1371ResourceName = storage.Resource.Name,
1385Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1421Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1498Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1506ResourceName = storage.Resource.Name,
1546var activeReprovisionTask = controller.ReprovisionResourceAsync(model, storage.Resource.Name, CancellationToken.None);
1564ResourceName = storage.Resource.Name,
1575Assert.Equal([storage.Resource.Name], testBicepProvisioner.ProvisionedResources);
1605var activeReprovisionTask = controller.ReprovisionResourceAsync(model, storage1.Resource.Name, CancellationToken.None);
1615ResourceName = storage2.Resource.Name,
1627ResourceName = storage2.Resource.Name,
1668Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1711ResourceName = storage.Resource.Name,
1723Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1795ResourceName = storage.Resource.Name,
1826Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1829Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
1889ResourceName = keyVault.Resource.Name,
1908Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
1960ResourceName = storage.Resource.Name,
1971Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
1974Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1978Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2038ResourceName = storage.Resource.Name,
2052ResourceName = storage.Resource.Name,
2062Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2117ResourceName = storage.Resource.Name,
2135Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2140Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2181ResourceName = storage.Resource.Name,
2197Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2200Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2235ResourceName = storage.Resource.Name,
2246Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
2249Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2252Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2260Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out environmentEvent));
2263Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2295ResourceName = storage.Resource.Name,
2306Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
2309Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2318Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out environmentEvent));
2321Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2372ResourceName = storage.Resource.Name,
2386ResourceName = storage2.Resource.Name,
2449ResourceName = storage.Resource.Name,
2460Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2466ResourceName = storage.Resource.Name,
2477Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2480Assert.True(notifications.TryGetCurrentState(blobs.Resource.Name, out var blobsEvent));
2489Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2538await WaitForResourceStateAsync(notifications, storage2.Resource.Name, "Running");
2539Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var runningStorage2Event));
2547ResourceName = storage.Resource.Name,
2555Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2559Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2564Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out storage2Event));
2593ResourceName = storage.Resource.Name,
2646ResourceName = storage.Resource.Name,
2660ResourceName = storage2.Resource.Name,
2713ResourceName = storage.Resource.Name,
2726Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
2729Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2738Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2786ResourceName = storage.Resource.Name,
2839ResourceName = storage.Resource.Name,
2899ResourceName = visibleResource.Name,
2960ResourceName = storage.Resource.Name,
3030ResourceName = storage.Resource.Name,
3039Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
3091ResourceName = storage.Resource.Name,
3160ResourceName = storage.Resource.Name,
3217ResourceName = storage.Resource.Name,
3280ResourceName = storage.Resource.Name,
3351ResourceName = storage.Resource.Name,
3406ResourceName = environmentResource.Name,
3446ResourceName = environmentResource.Name,
3484Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
3520ResourceName = environmentResource.Name,
3537Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
3568ResourceName = environmentResource.Name,
3624ResourceName = environmentResource.Name,
3755var storage2 = model.Resources.OfType<AzureBicepResource>().Single(r => r.Name == "storage2");
3771ResourceName = storage2.Name,
3806var storage = model.Resources.OfType<AzureBicepResource>().Single(r => r.Name == "storage");
3850ResourceName = storage.Resource.Name,
3922ResourceName = keyVault.Resource.Name,
3935Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
4002ResourceName = keyVault.Resource.Name,
4039Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
4076ResourceName = postgres.Resource.Name,
4128ResourceName = storage.Resource.Name,
4174ResourceName = keyVault.Resource.Name,
4220ResourceName = storage.Resource.Name,
4246Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
4288ResourceName = storage.Resource.Name,
4332Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4341Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4385Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4388Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4444Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4447Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
4450Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
4487Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4490Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4527ResourceName = environmentResource.Name,
4579ResourceName = environmentResource.Name,
4626ResourceName = environmentResource.Name,
4674ResourceName = environmentResource.Name,
4684Assert.True(notifications.TryGetCurrentState(environmentResource.Name, out var environmentEvent));
4751Assert.True(notifications.TryGetCurrentState(storage.Name, out var storageEvent));
4754Assert.True(notifications.TryGetCurrentState(storageRoles.Name, out var storageRolesEvent));
4812ResourceName = storage.Resource.Name,
4822Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
4828Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
4852Assert.True(notifications.TryGetCurrentState(azureEnvironment.Name, out var environmentEvent));
4858Assert.Equal([storage.Resource.Name, storage2.Resource.Name], Assert.IsType<string[]>(failedResourcesProperty.Value));
4873Assert.Equal("azure-environment", resource.Name);
4887Assert.Equal("azure-environment", resource.Name);
4915Assert.Equal("azure-environment2", resource.Name);
5476_configuredResources.Add(resource.Name);
5487_provisionedResources.Add(resource.Name);
5488_provisionedLocations[resource.Name] = resource.Parameters.TryGetValue(AzureBicepResource.KnownParameters.Location, out var location)
5612_provisionedResources.Add(resource.Name);
5622resource.Outputs["blobEndpoint"] = $"https://{resource.Name}.blob.core.windows.net/";
5698var section = await deploymentStateManager.AcquireSectionAsync($"Azure:Deployments:{resource.Name}", cancellationToken).ConfigureAwait(false);
5776if (string.Equals(resource.Name, childResourceName, StringComparison.Ordinal))
5785if (string.Equals(resource.Name, parentResourceName, StringComparison.Ordinal) &&
5798_provisionedResources.Add(resource.Name);
5801resource.Outputs["id"] = $"/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.Test/resources/{resource.Name}";
5802resource.Outputs["name"] = resource.Name;
5803resource.Outputs["vaultUri"] = $"https://{resource.Name}.vault.azure.net/";
5804resource.Outputs["connectionString"] = $"Host={resource.Name}.postgres.database.azure.com";
5805resource.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 (16)
153Assert.NotEqual(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, storageResources.Name);
154Assert.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, storageResources.Name);
172r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName));
174Assert.Equal("my-own-storage", storageResource.Name);
198r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName));
211Assert.NotEqual(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, resource.Name);
212Assert.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName, resource.Name);
323var storage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcstorage634f8");
356var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-funcstorage634f8");
384var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-my-own-storage");
413var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-my-own-storage");
444var projRolesStorage = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp-roles-my-own-storage");
445var projRolesStorage2 = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "funcapp2-roles-funcstorage634f8");
737.Where(r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName))
763r => r.Name.StartsWith(AzureFunctionsProjectResourceExtensions.DefaultAzureFunctionsHostStorageName));
765Assert.Equal("my-custom-storage", storageResource.Name);
AzureResourcePreparerTests.cs (14)
93var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "storage-roles");
139var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "storage-roles");
182Assert.DoesNotContain(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "dbsrv-roles");
236var roleAssignmentResource = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "api-roles-storage");
273.OrderBy(resource => resource.Name, StringComparer.Ordinal)];
286Assert.Equal("api-roles-keyvault", resource.Name);
292Assert.Equal("worker-roles-keyvault", resource.Name);
330.OrderBy(resource => resource.Name, StringComparer.Ordinal)];
343Assert.Equal("service-a-roles-signalr", resource.Name);
349Assert.Equal("service-b-roles-signalr", resource.Name);
358.OrderBy(resource => resource.Name, StringComparer.Ordinal),
380var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), resource => resource.Name == "storage-roles");
590var storageRoles = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "storage-roles");
646var roleAssignmentResource = Assert.Single(model.Resources.OfType<AzureRoleAssignmentResource>(), r => r.Name == "api-roles-storage");
AzureServiceBusExtensionsTests.cs (10)
98await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
100await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
104await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
106await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
139await rns.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
140await rns.WaitForResourceHealthyAsync(serviceBus.Resource.Name, cts.Token);
756Assert.Equal("sb", serviceBus.Resource.Name);
775var sbRoles = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "sb-roles");
848await app.ResourceNotifications.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
849await 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)
461Assert.Equal("storage", storage.Resource.Name);
546Assert.Equal("storage", storage.Resource.Name);
634Assert.Equal("storage", storage.Resource.Name);
653var storageRoles = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "storage-roles");
765Assert.Equal("storage", storage.Resource.Name);
852Assert.Equal("storage-blobs", blobService.Resource.Name);
879Assert.Equal("storage-queues", queueService.Resource.Name);
896Assert.Equal("blobs", blobServices[0].Name);
913Assert.Equal("queues", queueServices[0].Name);
930Assert.Equal("datalake", dataLakeServices[0].Name);
954var defaultBlobService = Assert.Single(blobServices, r => r.Name == "storage-blobs");
955var customBlobService = Assert.Single(blobServices, r => r.Name == "blobs");
957Assert.Equal("blobs", customBlobs.Resource.Name);
978Assert.Equal("blobs", customBlobs.Resource.Name);
979Assert.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);
218Assert.Equal("wps1", wps.Resource.Name);
234Assert.Equal("hub1", hub1.Resource.Name);
235Assert.Equal("resource2", hub2.Resource.Name);
236Assert.Equal("hub3", hub3.Resource.Name);
237Assert.Equal("hub4", hub4.Resource.Name);
262Assert.Equal("resource1", hub1.Resource.Name);
292Assert.Equal("wps1", wps.Resource.Name);
295var wpsRoles = Assert.Single(model.Resources.OfType<AzureProvisioningResource>(), r => r.Name == "wps1-roles");
348Assert.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 (2)
Aspire.Hosting.Blazor (16)
Aspire.Hosting.Blazor.Tests (7)
Aspire.Hosting.Browsers.Tests (24)
BrowserLogsBuilderExtensionsTests.cs (23)
48Assert.Equal("web-browser-logs", browserLogsResource.Name);
49Assert.Equal(web.Resource.Name, browserLogsResource.ParentResource.Name);
56Assert.Equal(web.Resource.Name, parentRelationship.Resource.Name);
453Assert.Equal(browserLogsResource.Name, call.ResourceName);
709adminBrowserLogsResource.Name,
886app.Services.GetRequiredService<ResourceLoggerService>().WatchAsync(browserLogsResource.Name),
963browserLogsResource.Name,
1012browserLogsResource.Name,
1033browserLogsResource.Name,
1097browserLogsResource.Name,
1110browserLogsResource.Name,
1172browserLogsResource.Name,
1225browserLogsResource.Name,
1234browserLogsResource.Name,
1285browserLogsResource.Name,
1346browserLogsResource.Name,
1362browserLogsResource.Name,
1409browserLogsResource.Name,
1445browserLogsResource.Name,
1477browserLogsResource.Name,
1493browserLogsResource.Name,
1546browserLogsResource.Name,
1562browserLogsResource.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 (4)
Aspire.Hosting.DevTunnels.Tests (5)
Aspire.Hosting.Docker (33)
DockerComposeEnvironmentResource.cs (26)
69Name = $"prepare-deployment-targets-{Name}",
70Description = $"Prepares Docker Compose deployment targets for {Name}.",
79Name = $"publish-{Name}",
80Description = $"Publishes the Docker Compose environment configuration for {Name}.",
119Name = $"prepare-{Name}",
120Description = $"Prepares the Docker Compose environment {Name} for deployment.",
130Name = $"docker-compose-up-{Name}",
133DependsOnSteps = [$"prepare-{Name}"]
140Name = $"destroy-compose-{Name}",
141Description = $"Confirms and destroys the Docker Compose environment {Name}.",
146var stateSection = await deploymentStateManager.AcquireSectionAsync($"DockerCompose:{Name}", ctx.CancellationToken).ConfigureAwait(false);
152$"No Docker Compose deployment state found for '{Name}'. Nothing to destroy.",
158await ConfirmDestroyAsync(ctx, Name).ConfigureAwait(false);
175new MarkdownString($"Running compose down for **{Name}** using **{runtime.Name}**"),
181new MarkdownString($"Compose shutdown complete for **{Name}** ({runtime.Name})"),
186ctx.Summary.Add("🗑️ Compose", Name);
198Name = $"docker-compose-down-{Name}",
246.RequiredBy($"docker-compose-up-{Name}")
442new MarkdownString($"Running compose up for **{Name}** using **{runtime.Name}**"),
454var stateSection = await deploymentStateManager.AcquireSectionAsync($"DockerCompose:{Name}", context.CancellationToken).ConfigureAwait(false);
461new MarkdownString($"Service **{Name}** is now running with Docker Compose locally (runtime: {runtime.Name})"),
488new MarkdownString($"Running compose down for **{Name}** using **{runtime.Name}**"),
499new MarkdownString($"Compose shutdown complete for **{Name}** ({runtime.Name})"),
599var environmentName = hostEnvironment?.EnvironmentName ?? environment.Name;
626return $"aspire-{environment.Name.ToLowerInvariant()}-{appHostSha[..8].ToLowerInvariant()}";
630return $"aspire-{environment.Name.ToLowerInvariant()}";
Aspire.Hosting.Docker.Tests (1)
Aspire.Hosting.Dotnet (9)
Aspire.Hosting.Dotnet.Tests (3)
Aspire.Hosting.DotnetTool.Tests (7)
Aspire.Hosting.EntityFrameworkCore (28)
EFResourceBuilderExtensions.cs (21)
158$"The DbContext type '{GetShortTypeName(dbContextTypeName)}' has already been registered for EF migrations on resource '{builder.Resource.Name}'.");
164$"Cannot register a specific DbContext type for migrations when they have already been registered without a context type on resource '{builder.Resource.Name}'.");
172$"Cannot register migrations without a context type when they have already been registered without a context type on resource '{builder.Resource.Name}'.");
176$"Cannot register migrations without a context type when they have already been registered for specific DbContext types on resource '{builder.Resource.Name}'.");
213? $"{migrationResource.Name}-generate-migration-script"
217? $"{migrationResource.Name}-generate-migration-bundle"
245Description = $"Generate EF Core migration SQL script for {migrationResource.Name}",
254? Path.Combine(outputDir, migrationResource.Name + ".sql")
270? [WellKnownPipelineSteps.Publish, $"build-{migrationResource.Name}"]
289Description = $"Generate EF Core migration bundle for {migrationResource.Name}",
329if (StringComparer.Ordinal.Compare(sibling.Name, current.Name) >= 0)
334if (predecessor is null || StringComparer.Ordinal.Compare(sibling.Name, predecessor.Name) > 0)
348? $"{predecessor.Name}-generate-migration-bundle"
349: $"{predecessor.Name}-generate-migration-script";
375logger.LogInformation("Generating {Operation} for '{ResourceName}'...", operationName, migrationResource.Name);
387logger.LogInformation("{Operation} generated successfully for '{ResourceName}'.", operationName, migrationResource.Name);
391throw new InvalidOperationException($"Failed to generate {operationName} for '{migrationResource.Name}': {result.ErrorMessage}");
405return migrationResource.Name + (isWindowsBundle ? ".exe" : string.Empty);
640var toolName = $"ef-tool-{migrationResource.Name}";
Aspire.Hosting.EntityFrameworkCore.Tests (11)
Aspire.Hosting.Foundry (87)
HostedAgent\AzureHostedAgentResource.cs (11)
50Name = $"deploy-{Name}",
54ctx.ReportingStep.Log(LogLevel.Information, new MarkdownString($"Successfully deployed **{Name}** as Hosted Agent (version {version})"));
109throw new InvalidOperationException($"Container image for hosted agent '{Name}' could not be resolved.");
163throw new InvalidOperationException($"Project '{project.Name}' does not have a valid connection string.");
170Name,
200Name,
244context.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);
251context.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);
277context.Logger.LogInformation("Assigned Foundry User role to hosted agent '{Name}' identity '{PrincipalId}'.", Name, principalId);
284Name,
499$"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 (15)
Aspire.Hosting.Garnet (1)
Aspire.Hosting.Garnet.Tests (10)
Aspire.Hosting.GitHub.Models (1)
Aspire.Hosting.GitHub.Models.Tests (10)
Aspire.Hosting.Go (4)
Aspire.Hosting.Java (33)
JavaDockerfileGenerator.cs (19)
306jarPath = NormalizeContextRelativePath(annotation.JarPath, resource.Name, appDirectory, "its JAR");
356$"Java application '{resource.Name}' cannot be published because its jarPath " +
453resource.Name,
575$"Java application '{resource.Name}' cannot be published because the OpenTelemetry agent " +
600$"The OpenTelemetry agent path '{authored}' configured on resource '{resource.Name}' " +
612$"The OpenTelemetry agent path '{authored}' configured on resource '{resource.Name}' " +
711? $"cp {ShellQuote(NormalizeContextRelativePath(artifact.RelativePath, resource.Name, appDirectory, "its JAR artifact"))} {ContainerArtifactPath}"
716? SelectQuarkusArtifactCommand(outputDirectory, outputGlob, resource.Name)
718? SelectNamedJarCommand(namedJar, ContainerArtifactPath, resource.Name)
719: SelectSingleJarCommand(outputGlob, ContainerArtifactPath, resource.Name);
743CacheId: $"aspire-java-{tool.ToString().ToLowerInvariant()}-{resource.Name.ToLowerInvariant()}",
1010$"Java application '{resource.Name}' cannot be published because its {wrapper} has no " +
1046$"Java application '{resource.Name}' cannot be published because its wrapper " +
1057$"Java application '{resource.Name}' cannot be published because the wrapper " +
1063$"Java application '{resource.Name}' cannot be published because there is no " +
1082$"Java application '{resource.Name}' cannot be published because its wrapper " +
1098$"Java application '{resource.Name}' cannot be published because its wrapper path " +
1155$"The Java application '{resource.Name}' cannot be published because no build tool was found. " +
1178$"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)
1904builder.TryCreateResourceBuilder<ContainerResource>(resource.Name, out var containerBuilder))
1906var validationStepName = $"validate-javascript-dockerfile-run-script-{resource.Name}";
1919Description = $"Validates that JavaScript app '{resource.Name}' does not publish an ignored run script with an existing Dockerfile.",
1983$"JavaScript app resource '{resource.Name}' is configured to run script '{runScript.ScriptName}'{argsClause}, but publish is using the existing Dockerfile '{dockerfileBuildAnnotation.DockerfilePath}'. " +
2115resourceLogger.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);
2123var aspireConfigDir = Path.Join(nodeModulesDir, ".aspire", appHostId, resource.Name);
2151resourceLogger.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);
2872$"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.");
2878$"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.");
2942var debuggerResourceName = $"{parentResource.Name}-browser";
2964$"Resource '{parentResource.Name}' does not have an HTTP or HTTPS endpoint. Browser debugging requires an endpoint to navigate to.");
3015var installerName = $"{resource.Resource.Name}-installer";
3083var 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 (139)
CertManagerExtensions.cs (30)
344$"Gateway '{builder.Resource.Name}' is in Kubernetes environment '{gatewayEnvironment.Name}' but issuer " +
345$"'{issuer.Resource.Name}' belongs to cert-manager installation '{issuer.Resource.Parent.Name}' in environment " +
346$"'{issuerEnvironment.Name}'. cert-manager is per-cluster, so an issuer can only be used by gateways in the " +
352.WithGatewayAnnotation(ClusterIssuerAnnotationKey, issuer.Resource.Name);
369Name = $"cm-issuer-apply-{captured.Name}",
370Description = $"Applies cert-manager ClusterIssuer '{captured.Name}'",
398Name = $"cm-issuer-delete-{captured.Name}",
399Description = $"Deletes cert-manager ClusterIssuer '{captured.Name}'",
402Tags = [HelmDeploymentEngine.GetKubernetesDestroyTag(certManager.Parent.Name)]
427$"ClusterIssuer '{issuer.Name}' has no spec. Configure it with WithLetsEncryptProduction(), " +
434$"ClusterIssuer '{issuer.Name}' has no solvers configured. Add at least one " +
444"Applying cert-manager ClusterIssuer '{IssuerName}'.", issuer.Name);
452var manifestPath = Path.Combine(tempDir.FullName, $"{issuer.Name}.yaml");
483$"kubectl apply for ClusterIssuer '{issuer.Name}' failed with exit code {result.ExitCode}: {errOut}");
487context.Logger.LogInformation("ClusterIssuer '{IssuerName}' applied.", issuer.Name);
507environment.Name);
512var k8sIssuerName = issuer.Name.ToKubernetesResourceName();
515"Deleting cert-manager ClusterIssuer '{IssuerName}'.", issuer.Name);
551issuer.Name,
558context.Logger.LogInformation("ClusterIssuer '{IssuerName}' deleted.", issuer.Name);
575var k8sIssuerName = issuer.Name.ToKubernetesResourceName();
599$"Unknown issuer spec type '{issuer.Spec?.GetType().Name}' on issuer '{issuer.Name}'.");
633&& string.Equals(v.Format, issuer.Name, StringComparison.Ordinal))
649issuer.Name,
650certManager.Parent.Name,
651issuer.Name);
662sb.Append(" name: ").AppendLine(gateway.Name.ToKubernetesResourceName());
668$"Unknown solver type '{solver.GetType().Name}' on issuer '{issuer.Name}'.");
Deployment\HelmDeploymentEngine.cs (29)
139Name = $"check-helm-prereqs-{environment.Name}",
140Description = $"Verifies Helm CLI is available for {environment.Name}.",
152Name = $"prepare-{environment.Name}",
153Description = $"Prepares Helm chart values for {environment.Name}.",
158prepareStep.DependsOn($"check-helm-prereqs-{environment.Name}");
164Name = $"helm-deploy-{environment.Name}",
165Description = $"Deploys {environment.Name} to Kubernetes via Helm.",
169helmDeployStep.DependsOn($"prepare-{environment.Name}");
176Name = $"print-{environment.Name}-instructions",
177Description = $"Prints access instructions for {environment.Name}.",
181instructionsStep.DependsOn($"helm-deploy-{environment.Name}");
188Name = $"destroy-helm-{environment.Name}",
189Description = $"Confirms and destroys the Helm deployment for {environment.Name}.",
190Tags = [GetKubernetesDestroyTag(environment.Name)],
197environment.Name);
203var stateSection = await deploymentStateManager.AcquireSectionAsync($"Helm:{environment.Name}", ctx.CancellationToken).ConfigureAwait(false);
210$"No Helm deployment state found for '{environment.Name}'. Nothing to destroy.",
236Name = GetHelmUninstallStepName(environment.Name),
237Description = $"Uninstalls the Helm release for {environment.Name}.",
238Tags = [HelmUninstallTag, GetKubernetesDestroyTag(environment.Name)],
258new MarkdownString($"Preparing Helm chart values for **{environment.Name}**"),
272new MarkdownString($"Helm chart values prepared for **{environment.Name}**"),
368var overrideFilePath = Path.Combine(outputPath, GetDeployValuesFileName(environment.Name));
427new MarkdownString($"Deploying **{environment.Name}** to Kubernetes namespace **{@namespace}** as Helm release **{releaseName}**"),
457var deployValuesFilePath = Path.Combine(outputPath, GetDeployValuesFileName(environment.Name));
491var stateSection = await deploymentStateManager.AcquireSectionAsync($"Helm:{environment.Name}", context.CancellationToken).ConfigureAwait(false);
558var dashboardServiceName = environment.Dashboard.Resource.Name.ToKubernetesResourceName() + "-service";
563var dashboardDeploymentName = environment.Dashboard.Resource.Name.ToKubernetesResourceName();
667environment.Name);
KubernetesEnvironmentResource.cs (39)
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)
1045var storageClass = await ResolveExpressionAsync(storageClassExpression, volumeResource.Name, cancellationToken).ConfigureAwait(false);
1068$"Gateway '{gatewayResource.Name}' must have a GatewayClassName set via WithGatewayClass(). " +
1072var gatewayName = gatewayResource.Name.ToKubernetesResourceName();
1086gatewayResource.Name,
1093$"Gateway '{gatewayResource.Name}' configures {resolvedHostnames.Count} hostnames that would be inherited by a hostless route, " +
1099gateway.Spec.GatewayClassName = await ResolveExpressionAsync(gatewayResource.GatewayClassName, gatewayResource.Name, cancellationToken).ConfigureAwait(false);
1103gateway.Metadata.Annotations[key] = await ResolveExpressionAsync(value, gatewayResource.Name, cancellationToken).ConfigureAwait(false);
1120var resolvedSecretName = await ResolveExpressionAsync(tls.SecretName, gatewayResource.Name, cancellationToken).ConfigureAwait(false);
1201var backendRef = ResolveGatewayBackendRef(route.Endpoint, deploymentTargets, gatewayResource.Name, logger);
1410var gatewayName = gateway.Name.ToKubernetesResourceName();
1864var gatewayName = gateway.Name.ToKubernetesResourceName();
Aspire.Hosting.Kubernetes.Tests (15)
Aspire.Hosting.Maui (13)
Aspire.Hosting.Maui.Tests (17)
Aspire.Hosting.Milvus (2)
Aspire.Hosting.Milvus.Tests (10)
Aspire.Hosting.MongoDB (45)
ReplicaSet\MongoDBReplicaSetBuilderExtensions.cs (35)
123logger.LogCritical("Cannot initialize MongoDB replica set resource '{ResourceName}' because it does not have any members.", resource.Name);
152throw 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.");
158?? throw new DistributedApplicationException($"The connection string of MongoDB replica set member '{member.Name}' could not be resolved.")
165Internal: $"{m.Name}:{m.PrimaryEndpoint.TargetPort!.Value}",
170.ConfigureAwait(false) ?? throw new DistributedApplicationException($"The endpoint of MongoDB replica set member '{m.Name}' could not be resolved.")
189logger.LogInformation("Retrieving MongoDB replica set information ({ResourceName}) from member '{MemberName}'", resource.Name, memberConnection.Resource.Name);
218logger.LogInformation("MongoDB replica set member '{MemberName}' is not accepting connections yet", memberConnection.Resource.Name);
247throw 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.");
257logger.LogInformation("MongoDB replica set resource '{ResourceName}' is already configured as declared — leaving it as it is", resource.Name);
262logger.LogInformation("Re-configuring MongoDB replica set resource '{ResourceName}' from member '{MemberName}' — last version {Version}", resource.Name, existing.Connection.Resource.Name, existing.Version);
268["_id"] = rsResource.Name,
305logger.LogInformation("Initializing MongoDB replica set resource '{ResourceName}'", resource.Name);
315["_id"] = rsResource.Name,
326["_id"] = rsResource.Name,
343logger.LogInformation("MongoDB replica set member '{MemberName}' stopped accepting connections before initialization completed", initialPrimary.Resource.Name);
362$"Failed to configure MongoDB replica set resource '{resource.Name}' after {MaxRetriesAttempt} attempts.{(lastConfigurationError is null ? "" : $" The last error reported by MongoDB was: {lastConfigurationError.Message}")}",
374logger.LogCritical(ex, "Failed to initialize MongoDB replica set resource '{ResourceName}'", resource.Name);
413throw new InvalidOperationException($"The MongoDB replica set '{builder.Resource.Name}' already has the maximum of {MaxMembers} members that MongoDB allows a replica set to hold.");
422string.Equals(existingReplicaSetName, builder.Resource.Name, StringComparisons.ResourceName)
423? $"The MongoDB server resource '{member.Resource.Name}' has already been added as a member of the replica set '{builder.Resource.Name}'."
424: $"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}'.");
434$"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.");
448$"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.");
454$"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.");
457member.WithReplicaSet(builder.Resource.Name);
497builder.Resource.StoppedMembers.Add(stopped.Name);
515builder.Resource.StoppedMembers.Remove(starting.Name);
537&& !builder.Resource.StoppedMembers.Contains(ready.Name)
Aspire.Hosting.MongoDB.Tests (35)
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);
130await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
167await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
209await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
211await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo1.Resource.Name, cts.Token);
212await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo2.Resource.Name, cts.Token);
213await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo3.Resource.Name, cts.Token);
303await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
371await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, secondPhaseCts.Token);
442await app.ResourceNotifications.WaitForResourceAsync(rs.Resource.Name, KnownResourceStates.FailedToStart, cts.Token);
Aspire.Hosting.MySql (6)
Aspire.Hosting.MySql.Tests (35)
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 (8)
Aspire.Hosting.PostgreSQL.Tests (41)
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)
162Assert.Equal("pythonProject", pythonProjectResource.Name);
201Assert.Equal("pythonProject", pythonProjectResource.Name);
244Assert.Equal("pythonProject", pythonProjectResource.Name);
740Assert.Equal("pythonProject-installer", installerResource.Name);
830Assert.Equal("pythonProject-installer", uvEnvironmentResource.Name);
849Assert.Equal("pythonProject-installer", installerResource.Name);
874Assert.Equal("pythonProject-installer", installerResource.Name);
905Assert.Equal("pythonProject-installer", installerResource.Name);
929Assert.Equal("python-script", resource.Name);
948Assert.Equal("flask-app", resource.Name);
967Assert.Equal("pytest", resource.Name);
990Assert.Equal("pythonProject", pythonProjectResource.Name);
2032Assert.Equal("pythonProject-installer", installerResource.Name);
2067Assert.Equal("pythonProject-installer", installerResource.Name);
2171Assert.Equal("pythonProject-venv-creator", venvCreatorResource.Name);
2199Assert.Equal("pythonProject-venv-creator", venvCreatorResource.Name);
2493Assert.Equal("pythonProject-installer", installerResource.Name);
2526Assert.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 (88)
Publishing\RadiusDeploymentPipelineStep.cs (11)
90Name = $"deploy-radius-{_environment.Name}",
91Description = $"Deploy Radius environment '{_environment.Name}' via rad CLI",
94step.DependsOn($"publish-radius-{_environment.Name}");
113logger.LogInformation("rad CLI detected on PATH for environment '{EnvironmentName}'", _environment.Name);
133$"Deploying Radius environment '{_environment.Name}' via rad deploy...",
201logger.LogWarning("Cancellation requested — terminating rad deploy process for environment '{EnvironmentName}'", _environment.Name);
217logger.LogInformation("rad deploy exited with code {ExitCode} for environment '{EnvironmentName}'", exitCode, _environment.Name);
226logger.LogError("rad deploy failed for environment '{EnvironmentName}': {ErrorMessage}", _environment.Name, errorMessage);
233$"Radius deployment complete for '{_environment.Name}'",
238logger.LogError(ex, "Unexpected error during rad deploy for environment '{EnvironmentName}'", _environment.Name);
309parameters.Count, _environment.Name);
Publishing\RadiusInfrastructureBuilder.cs (25)
122var envIdentifier = BicepPostProcessor.SanitizeIdentifier(_environment.Name);
587if (!storeConstructs.TryGetValue(store.Name, out var construct))
734construct.EnvironmentName = _environment.Name;
901construct.EnvironmentName = _environment.Name;
1318if (_envParametersByName.TryGetValue(parameter.Name, out var existing))
1323var identifier = Infrastructure.NormalizeBicepIdentifier(parameter.Name);
1333if (_recipeParameters.TryGetValue(parameter.Name, out var recipeParameter))
1343_envParametersByName[parameter.Name] = provisioningParameter;
1828if (!_recipeParameters.TryGetValue(parameter.Name, out var provisioningParameter))
1830var identifier = BicepPostProcessor.SanitizeIdentifier(parameter.Name);
1839$"Recipe parameters bound to Aspire parameters '{existingName}' and '{parameter.Name}' both " +
1848_recipeParameters[parameter.Name] = provisioningParameter;
1849_recipeParameterIdentifiers[identifier] = parameter.Name;
1884new($"A recipe parameter on Radius environment '{_environment.Name}' references {cloud} provider " +
1910resourceType, _environment.Name);
1946var identifier = BicepPostProcessor.SanitizeIdentifier(store.Name);
1949StoreName = store.Name,
1967storeConstructs[store.Name] = construct;
2017$"Unknown secret-store consumer kind '{consumer.Kind}' for store '{consumer.Store.Name}'.");
2060if (storeConstructs.TryGetValue(store.Name, out var construct))
2070$"Environment '{_environment.Name}' references secret store '{store.Name}', but that store is not " +
2148if (!options.SealedSecretManifests.TryGetValue(store.Name, out var manifest))
2150manifest = SealedSecretManifest.ReadValidated(store.Name, manifestPath, defaultNamespace);
2151options.SealedSecretManifests[store.Name] = manifest;
Publishing\SealedSecretApplyStep.cs (11)
47Name = $"apply-sealed-secrets-{_environment.Name}",
48Description = $"Apply and await sealed secrets for '{_environment.Name}' before rad deploy",
51step.DependsOn($"publish-radius-{_environment.Name}");
53step.RequiredBy($"deploy-radius-{_environment.Name}");
104var manifestPath = ResolveManifestPath(storeOutputDir, store.Name, sourceManifestPath);
110var validated = SealedSecretManifest.ReadValidated(store.Name, manifestPath, defaultNamespace);
129ct => ApplyManifestAsync(validated.Content, applyNamespace, kubeContext, store.Name, metadata.Namespace, metadata.Name, manifestPath, logger, ct),
132() => CreateOperationTimeoutException(store.Name, metadata.Namespace, metadata.Name, "apply", store.MaterializationTimeout))
136store.Name, metadata.Namespace, metadata.Name, appliedGeneration, deadline, store.MaterializationTimeout, s_pollInterval,
151() => CreateOperationTimeoutException(store.Name, metadata.Namespace, metadata.Name, "verify", store.MaterializationTimeout))
158$"'{store.Name}' is missing the declared key(s) {string.Join(", ", missing.Select(k => $"'{k}'"))}. " +
Aspire.Hosting.Radius.Tests (10)
Aspire.Hosting.Redis (6)
Aspire.Hosting.Redis.Tests (57)
AddRedisTests.cs (13)
42Assert.Equal("myRedis", containerResource.Name);
70Assert.Equal("myRedis", containerResource.Name);
309Assert.Equal(insight.Name, managementUrl.Endpoint?.Resource.Name);
334Assert.Equal(commander.Name, managementUrl.Endpoint?.Resource.Name);
373Assert.Equal($"{redis1.Resource.Name}.dev.internal", item.Value);
383Assert.Equal(redis1.Resource.Name, item.Value);
395Assert.Equal($"{redis2.Resource.Name}.dev.internal", item.Value);
405Assert.Equal(redis2.Resource.Name, item.Value);
417Assert.Equal($"{redis3.Resource.Name}.dev.internal", item.Value);
427Assert.Equal(redis3.Resource.Name, item.Value);
569Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{redis.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
591Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{password}", config["REDIS_HOSTS"]);
616Assert.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)
77ValidateDockerfileValue(options.ManifestPath, "cargo manifest path", resource.Name);
78var containerManifestPath = ValidateManifestPath(options.ManifestPath, workingDirectory, resource.Name);
79var targetCacheId = BuildTargetCacheId(resource.Name, containerManifestPath, workingDirectory);
84.ReadAsync(workingDirectory, options.ManifestPath, resource.Name, ReadOnlyDictionary<string, string>.Empty, context.CancellationToken)
91resource.Name);
95ValidateDockerfileValue(target.Name, "resolved Cargo target executable name", resource.Name);
96ValidateDockerfileValue(target.ProfileDirectory, "resolved Cargo profile directory", resource.Name);
97ValidateDockerfileValue(target.Target, "resolved Cargo target triple directory", resource.Name);
108ValidateCargoArgumentsDoNotContainCredentials(cargoArgs, resource.Name);
112ValidateDockerfileValue(cargoArg, "cargo argument", resource.Name);
122ValidateDockerfileValue(buildImage, "Dockerfile build image", resource.Name);
123ValidateDockerfileValue(runtimeImage, "Dockerfile runtime image", resource.Name);
RustHostingExtensions.cs (13)
112$"Cargo arguments for resource '{resource.Name}' have not been resolved yet. " +
150if (!builder.TryCreateResourceBuilder<ContainerResource>(resource.Name, out var containerBuilder)
154$"The published Rust app '{resource.Name}' was not converted to a Dockerfile container resource.");
652$"Cargo arguments for resource '{resource.Name}' have not been resolved yet. " +
699.ReadAsync(workingDirectory, options.ManifestPath, resource.Name, environment, cancellationToken)
702var target = RustCargoTargetResolver.Resolve(metadata, options, executionContext, resource.Name);
726if (!applicationBuilder.TryCreateResourceBuilder<ContainerResource>(resource.Name, out var containerBuilder))
729$"The published Rust app '{resource.Name}' was not converted to a container resource.");
800$"The Rust app '{resource.Name}' targets '{cargoTarget}', " +
906$"The Rust app '{resource.Name}' targets '{target}', which is not compatible with the default " +
915$"The Rust app '{resource.Name}' targets '{target}', but the default Rust build image does not support " +
922$"The Rust app '{resource.Name}' targets '{target}', but the default Rust runtime image is not compatible " +
933$"The Rust app '{resource.Name}' targets '{target}', which cannot be mapped to a supported Docker Linux " +
Aspire.Hosting.Seq.Tests (10)
Aspire.Hosting.SqlServer (4)
Aspire.Hosting.SqlServer.Tests (28)
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 (314)
Dcp\DcpExecutorTests.cs (22)
581var executables = GetCreatedExecutablesForResource(kubernetesService, resource.Name);
600executables = GetCreatedExecutablesForResource(kubernetesService, resource.Name);
1185Assert.Single(kubernetesService.CreatedResources.OfType<Container>(), c => c.AppModelResourceName == emulator.Resource.Name);
4751var executable = GetCreatedExecutableForResource(kubernetesService, resource.Name);
8993.Where(c => c.AppModelResourceName == container.Resource.Name)
9010await AssertEndpoint(container.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 11234);
9011await AssertEndpoint(container.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 18765);
9016await AssertEndpoint(containerWithAlias.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 21234);
9017await AssertEndpoint(containerWithAlias.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 28765);
9101s => s.AppModelResourceName == executable.Resource.Name
9526while (!kubernetesService.CreatedResources.OfType<Container>().Any(c => c.AppModelResourceName == container.Resource.Name))
9542Assert.Single(createdContainers, c => c.AppModelResourceName == container.Resource.Name);
9543Assert.Single(createdContainers, c => c.AppModelResourceName == waiting.Resource.Name);
9544var waitingConsumingContainer = Assert.Single(createdContainers, c => c.AppModelResourceName == waitingConsumingEndpoint.Resource.Name);
9551Assert.Single(tunnelServices, s => s.AppModelResourceName == executableA.Resource.Name);
9552var executableBTunnelService = Assert.Single(tunnelServices, s => s.AppModelResourceName == executableB.Resource.Name);
9587while (!kubernetesService.CreatedResources.OfType<Executable>().Any(e => e.AppModelResourceName == upstreamExecutable.Resource.Name))
9595while (!kubernetesService.CreatedResources.OfType<Container>().Any(c => c.AppModelResourceName == tunnelDependentContainer.Resource.Name))
9611var upstreamExecutableResource = Assert.Single(createdResources.OfType<Executable>(), e => e.AppModelResourceName == upstreamExecutable.Resource.Name);
9612var downstreamExecutableResource = Assert.Single(createdResources.OfType<Executable>(), e => e.AppModelResourceName == downstreamExecutable.Resource.Name);
9613var tunnelDependentDcpContainer = Assert.Single(createdResources.OfType<Container>(), c => c.AppModelResourceName == tunnelDependentContainer.Resource.Name);
9624var 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");
1779await app.WaitForTextAsync("Content root path:", resourceName: testProgram.ServiceABuilder.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutDuration);
1782var httpEndPoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "http");
1800var httpsEndpoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "https");
1850using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
1924using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
2053await app.ResourceNotifications.WaitForResourceAsync(container.Resource.Name, KnownResourceStates.NotStarted, token)
2055await app.ResourceNotifications.WaitForResourceAsync(executable.Resource.Name, KnownResourceStates.NotStarted, token)
2061var dcpContainer = Assert.Single(containers, c => c.AppModelResourceName == container.Resource.Name);
2070var dcpExecutable = Assert.Single(executables, e => e.AppModelResourceName == executable.Resource.Name);
2354var 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 (33)
471Assert.True(resourceNotificationService.TryGetCurrentState(resource.Resource.Name, out var currentState));
599await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
602Assert.True(resourceNotificationService.TryGetCurrentState(waiter.Resource.Name, out var waitingEvent));
607await resourceNotificationService.WaitForResourceAsync(blocker.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
608await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
639CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, waiter.Resource.Name));
641await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
643Assert.True(resourceNotificationService.TryGetCurrentState(dependency.Resource.Name, out var dependencyEvent));
648await resourceNotificationService.WaitForResourceAsync(dependency.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
691waiter.Resource.Name,
749waiter.Resource.Name,
800waiter.Resource.Name,
854waiter.Resource.Name,
862waiter.Resource.Name,
909await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
914await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
916Assert.True(resourceNotificationService.TryGetCurrentState(blocker.Resource.Name, out var blockerEvent));
961waiter.Resource.Name,
965while (!resourceNotificationService.TryGetCurrentState(waiter.Resource.Name, out var waiterEvent)
980await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, cancellationToken).DefaultTimeout();
982Assert.True(resourceNotificationService.TryGetCurrentState(blocker.Resource.Name, out var blockerEvent));
1013await resourceNotificationService.WaitForResourceAsync(connectionString.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
1017await resourceNotificationService.WaitForResourceAsync(referenced.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1018await resourceNotificationService.WaitForResourceAsync(connectionString.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1049waiter.Resource.Name,
1054Assert.Equal(new[] { blocker.Resource.Name }, Assert.IsAssignableFrom<IEnumerable<string>>(waitingFor));
1060await resourceNotificationService.WaitForResourceAsync(blocker.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1061await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1193public ReferenceExpression ConnectionStringExpression => ReferenceExpression.Create($"{Name}-connection-string");
1318var childContainerState = resourceNotificationService.TryGetCurrentState(childContainer.Resource.Name, out var childContainerEvent) ? childContainerEvent.Snapshot.State?.Text : null;
1319var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
1365var childProjectState = resourceNotificationService.TryGetCurrentState(childProject.Resource.Name, out var childProjectEvent) ? childProjectEvent.Snapshot.State?.Text : null;
1366var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
Orchestrator\ParameterProcessorTests.cs (14)
605var explicitParameterResource = model.Resources.OfType<ParameterResource>().First(p => p.Name == "explicitParam");
606var referencedParameterResource = model.Resources.OfType<ParameterResource>().First(p => p.Name == "referencedParam");
651Assert.Equal("explicitParam", explicitParameterResource.Name);
677Assert.Equal("envParam", parameterResource.Name);
856Assert.Equal("excludedParam", parameterResource.Name);
1101Assert.Equal(string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceSetParameter, parameter.Name), result.Message);
1152Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1158Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out savedValueNode));
1185Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1532Assert.Equal(string.Format(CultureInfo.InvariantCulture, CommandStrings.ResourceDeletedParameter, parameter.Name), result.Message);
1533var section = await capturingStateManager.AcquireSectionAsync($"Parameters:{parameter.Name}").DefaultTimeout();
1550Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1568Assert.True(capturingStateManager.State.TryGetPropertyValue($"Parameters:{parameter.Name}", out var savedValueNode));
1634var section = await capturingStateManager.AcquireSectionAsync($"Parameters:{parameter.Name}").DefaultTimeout();
ResourceNotificationTests.cs (45)
159Assert.True(notificationService.TryGetCurrentState(resource.Name, out var resourceEvent));
372resource.Name,
374GetWaitingForDependencies(re).SequenceEqual(new[] { dependency1.Name, dependency2.Name }),
385resource.Name,
387GetWaitingForDependencies(re).SequenceEqual(new[] { dependency2.Name }),
390Assert.Equal(new[] { dependency2.Name }, GetWaitingForDependencies(updatedWaitingEvent));
399Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
420resource.Name,
422GetWaitingForDependencies(re).SequenceEqual(new[] { dependency1.Name, dependency2.Name }),
438resource.Name,
440GetWaitingForDependencies(re).SequenceEqual(new[] { dependency2.Name }),
443Assert.Equal(new[] { dependency2.Name }, GetWaitingForDependencies(updatedWaitingEvent));
457Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
476resource.Name,
478GetWaitingForDependencies(re).SequenceEqual(new[] { dependency1.Name, dependency2.Name }),
490resource.Name,
492GetWaitingForDependencies(re).SequenceEqual(new[] { dependency2.Name }),
495Assert.Equal(new[] { dependency2.Name }, GetWaitingForDependencies(updatedWaitingEvent));
505Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
530resource.Name,
535Assert.Equal(new[] { dependency.Name }, GetWaitingForDependencies(waitingEvent));
576Assert.True(notificationService.TryGetCurrentState(resource.Name, out var resourceEvent));
610resource.Name,
681resource.Name,
685Assert.Equal(new[] { dependency.Name }, GetWaitingForDependencies(waitingEvent));
720resource.Name,
724Assert.Equal(new[] { dependency.Name }, GetWaitingForDependencies(waitingEvent));
752resource.Name,
765resource.Name,
779Assert.True(notificationService.TryGetCurrentState(resource.Name, out var completedWaitingEvent));
795Assert.True(notificationService.TryGetCurrentState(resource.Name, out var waitingEvent));
803Assert.True(notificationService.TryGetCurrentState(resource.Name, out var runningEvent));
822Properties = [new ResourcePropertySnapshot(KnownProperties.Resource.WaitingFor, new[] { dependency.Name })]
826var waitTask = notificationService.WaitForResourceAsync(resource.Name, KnownResourceStates.Running, cts.Token);
856resource.Name,
858GetWaitingForDependencies(re).SequenceEqual(new[] { dependency.Name }),
1554Assert.True(notificationService.TryGetCurrentState(resource.Name, out var initial));
1561Assert.True(notificationService.TryGetCurrentState(resource.Name, out var unchanged));
1577Assert.True(notificationService.TryGetCurrentState(resource.Name, out var initial));
1580Assert.True(notificationService.TryGetCurrentState(resource.Name, out var changed));
1606Assert.True(notificationService.TryGetCurrentState(resource.Name, out var initial));
1612Assert.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)
268Assert.StartsWith($"http://{projectB.Resource.Name.ToLowerInvariant()}{expectedHostSuffix}", u.Url);
389servicea.Resource.Name,
414servicea.Resource.Name,
447servicea.Resource.Name,
497await rns.WaitForResourceAsync(servicea.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
613await rns.WaitForResourceAsync(custom.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
974resourceB.Resource.Name,
979using var resourceAClient = app.CreateHttpClientWithResilience(resourceA.Resource.Name, "api");
980using var resourceBClient = app.CreateHttpClientWithResilience(resourceB.Resource.Name, "http");
1026resourceB.Resource.Name,
1037using var resourceAClient = app.CreateHttpClientWithResilience(resourceA.Resource.Name, "api");
1041resourceB.Resource.Name,
1050resourceB.Resource.Name,
Aspire.Hosting.Valkey (1)
Aspire.Hosting.Valkey.Tests (12)
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)
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)