3 implementations of Resource
Aspire.Hosting (1)
Aspire.Hosting.Azure.Sql (1)
Aspire.Hosting.RemoteHost.Tests (1)
8871 references to Resource
Aspire.Hosting (268)
ApplicationModel\ResourceExtensions.cs (3)
598(DistributedApplicationOperation.Run, IResourceBuilder<IResource> rb) when rb.Resource is IValueProvider provider => await resource.GetValue(executionContext, key, provider, logger, cancellationToken).ConfigureAwait(false),
600(DistributedApplicationOperation.Publish, IResourceBuilder<IResource> rb) when rb.Resource is IManifestExpressionProvider provider => new(provider.ValueExpression, false),
1869VisitReferences(resourceBuilder.Resource, visitedValues, visitor);
ResourceBuilderExtensions.cs (138)
140if (builder.Resource is ContainerResource or ExecutableResource or ProjectResource)
147SourceResource = sourceBuilder.Resource
151throw new InvalidOperationException($"Resource '{builder.Resource.Name}' does not support lifetime configuration.");
208if (builder.Resource is ContainerResource or ExecutableResource or ProjectResource)
223throw new InvalidOperationException($"Resource '{builder.Resource.Name}' does not support lifetime configuration.");
229foreach (var annotation in builder.Resource.Annotations.OfType<ContainerLifetimeAnnotation>().ToArray())
231builder.Resource.Annotations.Remove(annotation);
447builder.WithReferenceRelationship(externalService.Resource);
449if (externalService.Resource.Uri is not null)
451builder.WithEnvironment(name, externalService.Resource.Uri.ToString());
453else if (externalService.Resource.UrlParameter is not null)
460var url = await externalService.Resource.UrlParameter.GetValueAsync(context.CancellationToken).ConfigureAwait(false);
463throw new DistributedApplicationException($"The URL parameter '{externalService.Resource.UrlParameter.Name}' for source resource '{externalService.Resource.Name}' is invalid while configuring target resource '{builder.Resource.Name}': {message}");
467context.EnvironmentVariables[name] = externalService.Resource.UrlParameter;
489builder.WithReferenceRelationship(parameter.Resource);
493context.EnvironmentVariables[name] = parameter.Resource;
516builder.WithReferenceRelationship(resource.Resource);
520context.EnvironmentVariables[envVarName] = new ConnectionStringReference(resource.Resource, optional: false);
734builder.Resource.WithSerializedAnnotation(annotationId, json);
772return GetSerializedAnnotation(builder.Resource, annotationId);
803return HasSerializedAnnotation(builder.Resource, annotationId);
855return GetAnnotation(builder.Resource, definition);
1217var hasConnectionString = source.Resource is IResourceWithConnectionString && connectionStringSource is not null;
1218var hasServiceDiscovery = source.Resource is IResourceWithServiceDiscovery && serviceDiscoverySource is not null;
1219var hasExternalService = source.Resource is ExternalServiceResource && externalServiceSource is not null;
1269throw new InvalidOperationException($"The resource '{source.Resource.Name}' can't be used with withReference because it doesn't provide a connection string, service discovery, or a custom withReference implementation.");
1296return TryDispatchCustomWithReference(builder, source, connectionName, optional, name, source.Resource.GetType(), out dispatchedBuilder);
1369var resource = source.Resource;
1375builder.Resource.TryGetLastAnnotation<ReferenceEnvironmentInjectionAnnotation>(out var injectionAnnotation);
1521ApplyEndpoints(builder, source.Resource);
1553ApplyEndpoints(builder, source.Resource, endpointName: null, name);
1577throw new InvalidOperationException($"The URI for service reference '{name}' is invalid while configuring target resource '{builder.Resource.Name}': it must be absolute.");
1582throw new InvalidOperationException($"The URI for service reference '{name}' is invalid while configuring target resource '{builder.Resource.Name}': it cannot contain a fragment.");
1587throw new InvalidOperationException($"The URI for service reference '{name}' is invalid while configuring target resource '{builder.Resource.Name}': it cannot contain a query string.");
1591builder.Resource.TryGetLastAnnotation<ReferenceEnvironmentInjectionAnnotation>(out var injectionAnnotation);
1622builder.WithReferenceRelationship(externalService.Resource);
1625builder.Resource.TryGetLastAnnotation<ReferenceEnvironmentInjectionAnnotation>(out var injectionAnnotation);
1628if (externalService.Resource.Uri is { } uri)
1632var encodedResourceName = EnvironmentVariableNameEncoder.Encode(externalService.Resource.Name);
1638var envVarName = $"services__{externalService.Resource.Name}__{uri.Scheme}__0";
1642else if (externalService.Resource.UrlParameter is not null)
1648var encodedResourceName = EnvironmentVariableNameEncoder.Encode(externalService.Resource.Name);
1653discoveryEnvVarName = $"services__{externalService.Resource.Name}__default__0";
1656else if (ExternalServiceResource.UrlIsValidForExternalService(await externalService.Resource.UrlParameter.GetValueAsync(context.CancellationToken).ConfigureAwait(false), out var uri, out var message))
1658discoveryEnvVarName = $"services__{externalService.Resource.Name}__{uri.Scheme}__0";
1664throw new DistributedApplicationException($"The URL parameter '{externalService.Resource.UrlParameter.Name}' for source resource '{externalService.Resource.Name}' is invalid while configuring target resource '{builder.Resource.Name}': {message}");
1669context.EnvironmentVariables[discoveryEnvVarName] = externalService.Resource.UrlParameter;
1674context.EnvironmentVariables[endpointEnvVarName] = externalService.Resource.UrlParameter;
1709var endpointReferenceAnnotation = builder.Resource.Annotations
1717if (builder.Resource.IsContainer())
1779var endpoint = builder.Resource.Annotations
1796builder.Resource.Annotations.Add(endpoint);
1846!builder.Resource.Annotations.OfType<EndpointAnnotation>().Any(endpoint => string.Equals(endpoint.Name, endpointName, StringComparisons.EndpointAnnotationName)))
1883var existing = builder.Resource.Annotations.OfType<EndpointAnnotation>()
1964if (env is null || builder.Resource is not IResourceWithEndpoints resourceWithEndpoints || builder.Resource is not IResourceWithEnvironment)
2174if (!builder.Resource.TryGetAnnotationsOfType<EndpointAnnotation>(out var endpoints))
2205return builder.Resource.GetEndpoint(name, contextNetworkId);
2222return builder.Resource.GetEndpoint(name);
2502if (builder.Resource is IResourceWithEndpoints resource)
2516context.Logger.LogWarning("Could not execute callback to customize endpoint URL as no endpoint with name '{EndpointName}' could be found on resource '{ResourceName}'.", endpointName, builder.Resource.Name);
2562context.Logger.LogWarning("Could not execute callback to add an endpoint URL as no endpoint with name '{EndpointName}' could be found on resource '{ResourceName}'.", endpointName, builder.Resource.Name);
2602if (resourceComparer.Equals(builder.Resource, endpoint.Resource))
2604context.Logger.LogWarning("Could not execute callback to customize endpoint URL as no URL for endpoint '{EndpointName}' could be found on resource '{ResourceName}'.", endpoint.EndpointName, builder.Resource.Name);
2645Source = source.Resource,
2684builder.Resource.Annotations
2687.ForEach(w => builder.Resource.Annotations.Remove(w));
2805if (builder.Resource as IResource == dependency.Resource)
2807throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for itself.");
2810if (builder.Resource is IResourceWithParent resourceWithParent && resourceWithParent.Parent == dependency.Resource)
2812throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for its parent '{dependency.Resource.Name}'.");
2815if (dependency.Resource is IResourceWithParent dependencyResourceWithParent)
2828builder.WithRelationship(dependency.Resource, KnownRelationshipTypes.WaitFor);
2831return builder.WithAnnotation(new WaitAnnotation(dependency.Resource, WaitType.WaitUntilHealthy) { WaitBehavior = waitBehavior });
2928if (builder.Resource as IResource == dependency.Resource)
2930throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for itself.");
2933if (builder.Resource is IResourceWithParent resourceWithParent && resourceWithParent.Parent == dependency.Resource)
2935throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for its parent '{dependency.Resource.Name}'.");
2938if (dependency.Resource is IResourceWithParent dependencyResourceWithParent)
2950if (dependency.Resource is ConnectionStringResource cs)
2961builder.WithRelationship(dependency.Resource, KnownRelationshipTypes.WaitFor);
2964return builder.WithAnnotation(new WaitAnnotation(dependency.Resource, WaitType.WaitUntilStarted) { WaitBehavior = waitBehavior });
3031if (builder.Resource as IResource == dependency.Resource)
3033throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for itself.");
3036if (builder.Resource is IResourceWithParent resourceWithParent && resourceWithParent.Parent == dependency.Resource)
3038throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for its parent '{dependency.Resource.Name}'.");
3041builder.WithRelationship(dependency.Resource, KnownRelationshipTypes.WaitFor);
3043return builder.WithAnnotation(new WaitAnnotation(dependency.Resource, WaitType.WaitForCompletion, exitCode));
3091if (builder.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var annotations) && annotations.Any(a => a.Key == key))
3093throw new DistributedApplicationException($"Resource '{builder.Resource.Name}' already has a health check with key '{key}'.");
3180?? throw new DistributedApplicationException($"Could not create HTTP health check for resource '{builder.Resource.Name}' as the endpoint selector returned null.");
3184throw new DistributedApplicationException($"Could not create HTTP health check for resource '{builder.Resource.Name}' as the endpoint with name '{endpoint.EndpointName}' and scheme '{endpoint.Scheme}' is not an HTTP endpoint.");
3197throw new DistributedApplicationException($"The endpoint '{endpointName}' does not exist on the resource '{builder.Resource.Name}'.");
3203var healthCheckKey = $"{builder.Resource.Name}_{endpointName}_{path}_{statusCode}_check";
3299var existingAnnotation = builder.Resource.Annotations.OfType<ResourceCommandAnnotation>().SingleOrDefault(a => a.Name == name);
3302builder.Resource.Annotations.Remove(existingAnnotation);
3366var existingAnnotation = builder.Resource.Annotations.OfType<ResourceCommandAnnotation>().SingleOrDefault(a => a.Name == name);
3369builder.Resource.Annotations.Remove(existingAnnotation);
4055?? throw new DistributedApplicationException($"Could not create HTTP command for resource '{builder.Resource.Name}' as the endpoint selector returned null.");
4059throw new DistributedApplicationException($"Could not create HTTP command for resource '{builder.Resource.Name}' as the endpoint with name '{endpoint.EndpointName}' and scheme '{endpoint.Scheme}' is not an HTTP endpoint.");
4367CertificateAuthorityCollections = { certificateAuthorityCollection.Resource },
4369if (builder.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var existingAnnotation))
4373if (existingCollection != certificateAuthorityCollection.Resource)
4426if (builder.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var existingAnnotation))
4477if (builder.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var existingAnnotation))
4590Password = password?.Resource,
4626Password = password?.Resource,
4733var resource = builder.Resource;
4780var endpoints = builder.Resource.GetEndpoints();
4790throw new DistributedApplicationException($"Could not create {errorDisplayNoun} for resource '{builder.Resource.Name}' as the endpoint with name '{matchingEndpoint.EndpointName}' and scheme '{matchingEndpoint.Scheme}' is not an HTTP endpoint.");
4798throw new DistributedApplicationException($"Could not create {errorDisplayNoun} for resource '{builder.Resource.Name}' as no endpoint was found matching one of the specified names: {endpointNamesString}");
4806var endpoints = builder.Resource.GetEndpoints();
4818throw new DistributedApplicationException($"Could not create HTTP command for resource '{builder.Resource.Name}' as it has no HTTP endpoints.");
4855if (!builder.Resource.Annotations.OfType<ResourceRelationshipAnnotation>().Any(r => ReferenceEquals(r.Resource, resource) && r.Type == type))
4880return builder.WithRelationship(resourceBuilder.Resource, type);
4946AddReference(resourceBuilder.Resource);
4979return builder.WithAnnotation(new ResourceRelationshipAnnotation(resourceBuilder.Resource, KnownRelationshipTypes.Reference));
5012return builder.WithParentRelationship(parent.Resource);
5078child.WithRelationship(builder.Resource, KnownRelationshipTypes.Parent);
5172builder.WithAnnotation(new ComputeEnvironmentAnnotation(computeEnvironmentResource.Resource));
5423builder.Resource.Name,
5452var workingDirectory = Path.GetFullPath(builder.Resource.WorkingDirectory);
5563var endpoint = endpointSelector() ?? throw new DistributedApplicationException($"Could not create HTTP probe for resource '{builder.Resource.Name}' as the endpoint selector returned null.");
5591if (builder.Resource.Annotations.OfType<ProbeAnnotation>().SingleOrDefault(a => a.Type == probeAnnotation.Type) is { } existingAnnotation)
5593builder.Resource.Annotations.Remove(existingAnnotation);
Aspire.Hosting.Azure (48)
ExistingAzureResourceExtensions.cs (24)
54return RunAsExistingCore(builder, nameParameter.Resource, resourceGroupParameter?.Resource);
110return PublishAsExistingCore(builder, nameParameter.Resource, resourceGroupParameter?.Resource);
170return AsExistingCore(builder, nameParameter.Resource, resourceGroupParameter?.Resource);
210return RunAsExistingCore(builder, nameParameter.Resource, resourceGroup: null, subscription: subscriptionParameter.Resource);
267return PublishAsExistingCore(builder, nameParameter.Resource, resourceGroup: null, subscription: subscriptionParameter.Resource);
324return AsExistingCore(builder, nameParameter.Resource, resourceGroup: null, subscription: subscriptionParameter.Resource);
381return RunAsExistingCore(builder, nameParameter.Resource, resourceGroupParameter.Resource, subscriptionParameter.Resource);
442return PublishAsExistingCore(builder, nameParameter.Resource, resourceGroupParameter.Resource, subscriptionParameter.Resource);
505return AsExistingCore(builder, nameParameter.Resource, resourceGroupParameter.Resource, subscriptionParameter.Resource);
566return RunAsExistingCore(builder, nameParameter.Resource, resourceGroup: null, subscription: null, isTenantScope: true);
618return PublishAsExistingCore(builder, nameParameter.Resource, resourceGroup: null, subscription: null, isTenantScope: true);
670return AsExistingCore(builder, nameParameter.Resource, resourceGroup: null, subscription: null, isTenantScope: true);
Aspire.Hosting.Azure.AppConfiguration (3)
Aspire.Hosting.Azure.AppContainers (17)
Aspire.Hosting.Azure.ApplicationInsights (1)
Aspire.Hosting.Azure.AppService (23)
Aspire.Hosting.Azure.CognitiveServices (5)
Aspire.Hosting.Azure.ConnectorNamespace (48)
AzureConnectorNamespaceExtensions.cs (48)
280if (builder.Resource.Connections.Any(connection =>
284$"Connector connection '{connectionName}' is already registered on Connector Namespace '{builder.Resource.Name}'.");
292builder.Resource);
294builder.Resource.Connections.Add(connection);
326var configurationName = connectionName ?? connection.Resource.Name;
329connection.Resource.Parent.NameOutputReference);
332connection.Resource.ConnectionName);
348if (!string.IsNullOrWhiteSpace(builder.Resource.DisplayName))
351$"Connector connection '{builder.Resource.Name}' configures a display name and cannot be marked as existing.");
353if (builder.Resource.AccessPolicies.Count > 0)
356$"Connector connection '{builder.Resource.Name}' configures access policies and cannot be marked as existing.");
359builder.Resource.IsExisting = true;
391if (builder.Resource.IsExisting)
394$"Existing connector connection '{builder.Resource.Name}' is read-only and cannot create an access policy.");
399var resourceName = GetValidatedAccessPolicyResourceName(builder.Resource, name, policyName);
401builder.Resource.AccessPolicies.Add(new AzureConnectorNamespaceConnectionAccessPolicyResource(
404builder.Resource,
433if (builder.Resource.IsExisting)
436$"Existing connector connection '{builder.Resource.Name}' is read-only and cannot create an access policy.");
441var resourceName = GetValidatedAccessPolicyResourceName(builder.Resource, name, policyName);
443builder.Resource.AccessPolicies.Add(
447builder.Resource,
448identity.Resource));
471if (builder.Resource.McpServerConfigs.Any(config =>
475$"MCP server configuration '{configName}' is already registered on Connector Namespace '{builder.Resource.Name}'.");
482builder.Resource);
484builder.Resource.McpServerConfigs.Add(config);
499if (builder.Resource.Connectors.Count > 0)
502$"MCP server configuration '{builder.Resource.Name}' has connector routes and cannot be marked as existing.");
505if (!string.IsNullOrWhiteSpace(builder.Resource.Description))
508$"MCP server configuration '{builder.Resource.Name}' configures a description and cannot be marked as existing.");
511if (builder.Resource.AccessPolicies.Count > 0)
514$"MCP server configuration '{builder.Resource.Name}' configures access policies and cannot be marked as existing.");
517builder.Resource.IsExisting = true;
544if (builder.Resource.IsExisting)
547$"Existing MCP server configuration '{builder.Resource.Name}' is read-only and cannot create an access policy.");
550var resourceName = GetValidatedMcpAccessPolicyResourceName(builder.Resource, name, options.ObjectId);
551builder.Resource.AccessPolicies.Add(new AzureConnectorNamespaceMcpAccessPolicyResource(
553builder.Resource,
588if (builder.Resource.IsExisting)
591$"Existing MCP server configuration '{builder.Resource.Name}' is read-only.");
594if (!ReferenceEquals(builder.Resource.Parent, connection.Resource.Parent))
597$"Connector connection '{connection.Resource.Name}' belongs to a different Connector Namespace.");
600if (builder.Resource.Connectors.Count > 0)
603$"MCP server configuration '{builder.Resource.Name}' already has a connector. " +
619connection.Resource);
641builder.Resource.Connectors.Add(connectorDefinition);
Aspire.Hosting.Azure.ContainerRegistry (5)
Aspire.Hosting.Azure.CosmosDB (23)
Aspire.Hosting.Azure.EntraId (91)
EntraIdResourceExtensions.cs (91)
383TenantIdParameter = tenantId.Resource,
384ClientIdParameter = clientId.Resource
480resource.TenantIdParameter = (tenantId as IResourceBuilder<ParameterResource>)?.Resource;
482resource.ClientIdParameter = (clientId as IResourceBuilder<ParameterResource>)?.Resource;
541builder.Resource.TenantIdParameter = tenantId.Resource;
542builder.Resource.ClientIdParameter = clientId.Resource;
585builder.Resource.TenantId = tenantId;
586builder.Resource.ClientId = clientId;
609builder.Resource.EnsureCanBeExistingApplication();
610SetExistingApplicationIds(builder.Resource, tenantId, clientId);
640builder.Resource.SetExistingApplication();
685if (builder.Resource.IsExistingApplication)
691builder.Resource.ClientCredentials.OfType<EntraIdLocalDeveloperCertificateCredential>().Any())
698builder.Resource.ClientCredentials.Add(new EntraIdLocalDeveloperCertificateCredential(builder.Resource, builder.ApplicationBuilder.ExecutionContext));
725if (!clientSecret.Resource.Secret)
730builder.Resource.ClientCredentials.Add(new EntraIdClientSecretCredential
732ClientSecret = clientSecret.Resource
792builder.Resource.ClientCredentials.Add(new EntraIdFederatedIdentityCredential(managedIdentityClientId));
878builder.Resource.ClientCredentials.Add(new EntraIdFederatedIdentityCredential());
880foreach (var consumer in builder.Resource.Consumers)
934builder.Resource.ClientCredentials.Add(new EntraIdFederatedIdentityCredential
936ComputeTarget = computeResource.Resource
938EnsureManagedIdentityRequired(computeResource.Resource);
986builder.Resource.ClientCredentials.Add(new EntraIdFederatedIdentityCredential
988ManagedIdentity = identity.Resource
1023if (builder.Resource.IsExistingApplication)
1026$"Entra ID application '{builder.Resource.Name}' is an existing registration, and Aspire does not modify existing registrations, " +
1059builder.Resource.ClientCredentials.Add(new EntraIdKeyVaultCertificateCredential
1085builder.Resource.ClientCredentials.Add(new EntraIdStoreCertificateCredential
1111builder.Resource.ClientCredentials.Add(new EntraIdStoreCertificateCredential
1139Password = password?.Resource
1177builder.Resource.ClientCredentials.Add(credential);
1206builder.Resource.Instance = instance;
1259builder.Resource.SignInAudience = signInAudience;
1295builder.Resource.AddRedirectUri(redirectUri);
1342builder.Resource.AddRedirectUri(redirectUri.Resource);
1409builder.Resource.AddRedirectUri(new EntraIdEndpointRedirectUri(endpoint, path, builder.ApplicationBuilder.ExecutionContext.IsPublishMode));
1467builder.Resource.AddRedirectUri(new EntraIdHostRedirectUri(host.Resource, path));
1541AddOwners(builder.Resource.ApplicationOwners, ownerObjectIds, nameof(ownerObjectIds));
1562builder.Resource.ApplicationOwners.AddRange(ownerObjectIds.Select(p => (object)p.Resource));
1607AddOwners(builder.Resource.ServicePrincipalOwners, ownerObjectIds, nameof(ownerObjectIds));
1625builder.Resource.ServicePrincipalOwners.AddRange(ownerObjectIds.Select(p => (object)p.Resource));
1767if (builder.Resource.IsExistingApplication)
1772var roles = builder.Resource.AppRoles;
1778var id = role.GetStableId(builder.Resource.Name);
1779if (roles.Any(r => r.GetStableId(builder.Resource.Name) == id))
1784builder.Resource.AddAppRole(role);
1864builder.Resource.EnableIdTokenIssuance = true;
1882builder.Resource.ClientCapabilities.Add(capability);
1897builder.Resource.AllowWebApiToBeAuthorizedByACL = true;
1916builder.Resource.SendX5C = true;
1937builder.Resource.ExtraQueryParameters[key] = value;
1955builder.Resource.Audiences.Add(audience);
1982builder.Resource.UsesDefaultApplicationIdUri = true;
1985if (!builder.Resource.IsExistingApplication)
1987builder.Resource.ApplicationIdUri = null;
2026builder.Resource.ApplicationIdUri = applicationIdUri;
2027builder.Resource.UsesDefaultApplicationIdUri = false;
2102var resource = builder.Resource;
2184return builder.Resource.GetScopeUri(scopeName);
2221var scopes = FindScopes(builder.Resource, scopeNames, nameof(scopeNames));
2222EnsureNoDependencyCycle(builder.Resource, client.Resource);
2224var existing = builder.Resource.PreAuthorizedClients.FirstOrDefault(p => ReferenceEquals(p.Client, client.Resource));
2227builder.Resource.PreAuthorizedClients.Remove(existing);
2231builder.Resource.PreAuthorizedClients.Add(new EntraIdPreAuthorizedClient(client.Resource, scopes));
2277var apiResource = api.Resource;
2278if (ReferenceEquals(apiResource, builder.Resource))
2284EnsureNoDependencyCycle(builder.Resource, apiResource);
2287var access = GetOrAddApiAccess(builder.Resource, a => a.IsFor(apiResource), () => EntraIdApiAccess.ForApplication(apiResource));
2338var access = GetOrAddApiAccess(builder.Resource, a => a.IsFor(api), () => EntraIdApiAccess.ForApi(api));
2408var apiResource = api.Resource;
2410var access = builder.Resource.ApiAccess.FirstOrDefault(a => a.IsFor(apiResource));
2474var access = builder.Resource.ApiAccess.FirstOrDefault(a => a.IsFor(api));
2724var isDotnetProgram = builder.Resource is IDotnetProgramResource;
2726connectionName ??= isDotnetProgram ? "AzureAd" : EnvironmentVariableNameEncoder.Encode(source.Resource.Name);
2767var entra = source.Resource;
2773entra.Consumers.Add(builder.Resource);
2777builder.Resource.Annotations.Add(new EntraIdReferenceAnnotation(entra, downstreamApisPrefix, environmentVariablePrefix, isDotnetProgram));
2781EnsureManagedIdentityRequired(builder.Resource);
2830if (credential.EmitEnvironmentVariables(environmentVariables, credPrefix, separator, entra, builder.Resource, context.ExecutionContext))
2865EntraIdApplicationResource.ValidateConsumerReferences(builder.Resource);
Aspire.Hosting.Azure.EntraId.Tests (520)
EntraIdApiProvisioningTests.cs (140)
34Assert.Null(api.Resource.ApplicationIdUri);
35await Verify(api.Resource.GetBicepTemplateString(), "bicep");
44await Verify(api.Resource.GetBicepTemplateString(), "bicep");
62await Verify(api.Resource.GetBicepTemplateString(), "bicep");
69var bicep = builder.AddEntraIdApplication("entra-api").Resource.GetBicepTemplateString();
88Assert.Equal(api.Resource.GetBicepTemplateString(), api.Resource.GetBicepTemplateString());
89Assert.Equal(web.Resource.GetBicepTemplateString(), web.Resource.GetBicepTemplateString());
99return api.Resource.GetScopeId(Assert.Single(api.Resource.Scopes));
120var id = first.Resource.GetScopeId(first.Resource.Scopes[0]);
122first.Resource.Scopes[0].Description = "A different description.";
124Assert.Equal(id, first.Resource.GetScopeId(first.Resource.Scopes[0]));
125Assert.NotEqual(id, second.Resource.GetScopeId(second.Resource.Scopes[0]));
135Assert.Equal(id, api.Resource.GetScopeId(Assert.Single(api.Resource.Scopes)));
136Assert.Contains("11112222-aaaa-3333-bbbb-4444cccc5555", api.Resource.GetBicepTemplateString());
151Assert.Empty(api.Resource.Scopes);
173Assert.Single(api.Resource.Scopes);
186Assert.Equal(name, Assert.Single(api.Resource.Scopes).Name);
203Assert.Null(api.Resource.ApplicationIdUri);
215Assert.Equal(uri, api.Resource.ApplicationIdUri);
231Assert.Null(customThenDefault.Resource.ApplicationIdUri);
232var customThenDefaultBicep = customThenDefault.Resource.GetBicepTemplateString();
236Assert.Equal("api://custom", defaultThenCustom.Resource.ApplicationIdUri);
237var defaultThenCustomBicep = defaultThenCustom.Resource.GetBicepTemplateString();
250Assert.Equal("api://contoso-orders", existing.Resource.ApplicationIdUri);
281Assert.Empty(web.Resource.ApiAccess);
299var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
320var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
354var bicep = web.Resource.GetBicepTemplateString();
382await Verify(web.Resource.GetBicepTemplateString(), "bicep");
400await Verify(web.Resource.GetBicepTemplateString(), "bicep");
411Assert.Equal("api://contoso-orders", existingApi.Resource.ApplicationIdUri);
412Assert.Throws<InvalidOperationException>(existingApi.Resource.GetBicepTemplateString);
426var exception = Assert.Throws<InvalidOperationException>(web.Resource.GetBicepTemplateString);
430existingApi.Resource.Scopes[0].Id = id;
431Assert.Contains($"id: '{id:D}'", web.Resource.GetBicepTemplateString());
447Assert.Empty(web.Resource.ApiAccess);
460Assert.Contains("access_as_user", web.Resource.GetBicepTemplateString());
462api.Resource.Scopes[0].IsEnabled = false;
464var template = Assert.Throws<InvalidOperationException>(web.Resource.GetBicepTemplateString);
467var validation = Assert.Throws<InvalidOperationException>(web.Resource.ValidateApiAccess);
480Assert.Contains("preAuthorizedApplications", api.Resource.GetBicepTemplateString());
482api.Resource.Scopes[0].IsEnabled = false;
484var template = Assert.Throws<InvalidOperationException>(api.Resource.GetBicepTemplateString);
487Assert.Throws<InvalidOperationException>(api.Resource.ValidateApiAccess);
500web.Resource.ValidateApiAccess();
502existingApi.Resource.Scopes[0].IsEnabled = false;
504var validation = Assert.Throws<InvalidOperationException>(web.Resource.ValidateApiAccess);
516var access = Assert.Single(web.Resource.ApiAccess);
531var declared = Assert.Single(web.Resource.ApiAccess).Declared;
558Assert.Empty(web.Resource.ApiAccess);
575await Verify(web.Resource.GetBicepTemplateString(), "bicep");
613Assert.Empty(Assert.Single(web.Resource.ApiAccess).Consented);
629Assert.Equal(2, api.Resource.PreAuthorizedClients.Count);
630await Verify(api.Resource.GetBicepTemplateString(), "bicep");
645Assert.Empty(api.Resource.PreAuthorizedClients);
657Assert.Empty(api.Resource.PreAuthorizedClients);
663Assert.Empty(otherWeb.Resource.ApiAccess);
691await Verify(api.Resource.GetBicepTemplateString(), "bicep");
705Assert.Equal("{created-api.outputs.applicationIdUri}/access_as_user", created.Resource.GetScopeUri("access_as_user").ValueExpression);
706Assert.Equal("api://contoso-orders/orders.read", custom.Resource.GetScopeUri("orders.read").ValueExpression);
707Assert.Equal("api://existing/items.read", existing.Resource.GetScopeUri("items.read").ValueExpression);
708Assert.Throws<ArgumentException>(() => created.Resource.GetScopeUri("unknown"));
709Assert.Throws<InvalidOperationException>(() => existingWithoutUri.Resource.GetScopeUri("items.read"));
751entra.Resource.Outputs["tenantId"] = TenantId;
752entra.Resource.Outputs["clientId"] = ClientId;
753entra.Resource.Outputs["applicationIdUri"] = $"api://{prefix}-{ClientId}";
754entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
760var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, operation, TestServiceProvider.Instance);
784var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
785var containerEnv = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
822web.Resource.Outputs["tenantId"] = TenantId;
823web.Resource.Outputs["clientId"] = ClientId;
824web.Resource.ProvisioningTaskCompletionSource!.SetResult();
829var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
847web.Resource.ValidateApiAccess();
851var validation = Assert.Throws<InvalidOperationException>(web.Resource.ValidateApiAccess);
855await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
860web.Resource.ValidateApiAccess();
873Assert.Empty(existing.Resource.Annotations.OfType<PipelineStepAnnotation>());
874Assert.Empty(existingWithoutDeclarations.Resource.Annotations.OfType<PipelineStepAnnotation>());
880foreach (var resource in new[] { created.Resource, existing.Resource })
908web.Resource.ValidateApiAccess();
912var exception = Assert.Throws<InvalidOperationException>(web.Resource.ValidateApiAccess);
935web.Resource.ValidateApiAccess();
936var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
960var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
977var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
978var containerEnv = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
992var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1010await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
1026var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1049var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(webFrontend.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1067var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(webFrontend.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1087var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(webFrontend.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1107var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(worker.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1108var defaultEnv = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(defaultWorker.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1195var bicep = web.Resource.GetBicepTemplateString();
1198Assert.Equal("orders-api", ((BicepOutputReference)web.Resource.Parameters["orders_apiClientId"]!).Resource.Name);
1199Assert.Equal("ordersApi", ((BicepOutputReference)web.Resource.Parameters["ordersApiClientId"]!).Resource.Name);
1200Assert.Equal("orders-api", ((BicepOutputReference)web.Resource.Parameters["orders_apiServicePrincipalId"]!).Resource.Name);
1201Assert.Equal("ordersApi", ((BicepOutputReference)web.Resource.Parameters["ordersApiServicePrincipalId"]!).Resource.Name);
1203Assert.Equal(bicep, web.Resource.GetBicepTemplateString());
1220var bicep = web.Resource.GetBicepTemplateString();
1243var bicep = web.Resource.GetBicepTemplateString();
1264var bicep = web.Resource.GetBicepTemplateString();
1282var bicep = web.Resource.GetBicepTemplateString();
1285Assert.IsType<ParameterResource>(web.Resource.Parameters["orders_apiClientId"]);
1286Assert.Equal("orders-api", ((BicepOutputReference)web.Resource.Parameters["orders_apiClientId_2"]!).Resource.Name);
1299var bicep = api.Resource.GetBicepTemplateString();
1318var bicep = registration.Resource.GetBicepTemplateString();
1322Assert.Single(registration.Resource.Parameters, p => p.Key.StartsWith("shared", StringComparison.Ordinal));
1363await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(frontend.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
1369Assert.Equal(exception.Message, Assert.Throws<InvalidOperationException>(first.Resource.ValidateApiAccess).Message);
1385await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(worker.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
1415var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(frontend.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1430await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(worker.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
1445first.Resource.ValidateApiAccess();
1446var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(frontend.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1463var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(worker.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1479await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(worker.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
1490first.Resource.ValidateApiAccess();
1491var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(frontend.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1519var derivedId = api.Resource.GetScopeId(api.Resource.Scopes[0]).ToString("D");
1523api.Resource.Scopes[0].Id = adoptedId;
1525var apiBicep = api.Resource.GetBicepTemplateString();
1526var webBicep = web.Resource.GetBicepTemplateString();
1546existingApi.Resource.Scopes[0].Id = secondId;
1548var webBicep = web.Resource.GetBicepTemplateString();
1562existingApi.Resource.Scopes[0].Id = null;
1564var exception = Assert.Throws<InvalidOperationException>(web.Resource.GetBicepTemplateString);
1579var access = Assert.Single(web.Resource.ApiAccess);
EntraIdInitializationTests.cs (65)
25var snapshot = await InitializeAsync(app, entra.Resource);
57var snapshot = await InitializeAsync(app, entra.Resource);
78var snapshot = await InitializeAsync(app, entra.Resource);
110var snapshot = await InitializeAsync(app, entra.Resource);
131var snapshot = await InitializeAsync(app, entra.Resource);
150var snapshot = await InitializeAsync(app, entra.Resource);
158}, await ReadLogsAsync(app, entra.Resource));
170var snapshot = await InitializeAsync(app, entra.Resource);
176}, await ReadLogsAsync(app, entra.Resource));
188var snapshot = await InitializeAsync(app, entra.Resource);
191var log = Assert.Single(await ReadLogsAsync(app, entra.Resource));
203entra.Resource.Outputs["tenantId"] = TenantId;
204entra.Resource.Outputs["clientId"] = ClientId;
207entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
208var snapshot = await InitializeAsync(app, entra.Resource);
226entra.Resource.ProvisioningTaskCompletionSource!.SetException(new InvalidOperationException("Registration creation was denied."));
227var snapshot = await InitializeAsync(app, entra.Resource);
231var log = Assert.Single(await ReadLogsAsync(app, entra.Resource));
248await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot with { State = new("Missing subscription configuration", KnownResourceStateStyles.Error) });
249entra.Resource.ProvisioningTaskCompletionSource!.SetException(new MissingConfigurationException("Azure subscription is missing."));
250var initialization = PublishInitializationAsync(app, entra.Resource, cts.Token);
256Assert.True(notifications.TryGetCurrentState(entra.Resource.Name, out var resourceEvent));
274await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot);
275entra.Resource.ProvisioningTaskCompletionSource!.SetException(new InvalidOperationException("Azure context is missing."));
276var initialization = PublishInitializationAsync(app, entra.Resource, cts.Token);
280await notifications.WaitForResourceAsync(entra.Resource.Name,
282entra.Resource.ProvisioningTaskCompletionSource = new(TaskCreationOptions.RunContinuationsAsynchronously);
283await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot with { State = KnownResourceStates.Waiting });
284entra.Resource.Outputs["tenantId"] = TenantId;
285entra.Resource.Outputs["clientId"] = ClientId;
287await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot with { State = KnownResourceStates.Running });
288entra.Resource.ProvisioningTaskCompletionSource.SetResult();
290var ready = await notifications.WaitForResourceAsync(entra.Resource.Name,
310entra.Resource.Outputs["tenantId"] = TenantId;
311entra.Resource.Outputs["clientId"] = ClientId;
312entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
316await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot with
321var initialization = PublishInitializationAsync(app, entra.Resource, cts.Token);
325await notifications.WaitForResourceAsync(entra.Resource.Name,
331entra.Resource.ProvisioningTaskCompletionSource = new(TaskCreationOptions.RunContinuationsAsynchronously);
332await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot with { State = KnownResourceStates.Waiting });
333entra.Resource.Outputs["tenantId"] = updatedTenant;
334entra.Resource.Outputs["clientId"] = updatedClient;
335entra.Resource.ProvisioningTaskCompletionSource.SetResult();
336var ready = await notifications.WaitForResourceAsync(entra.Resource.Name,
369await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot);
372entra.Resource.Outputs["tenantId"] = TenantId;
373entra.Resource.Outputs["clientId"] = ClientId;
374entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
377var initialization = PublishInitializationAsync(app, entra.Resource, cts.Token);
382await notifications.WaitForResourceAsync(entra.Resource.Name,
390Assert.Equal(provisioningCompleted, entra.Resource.ProvisioningTaskCompletionSource!.Task.IsCompletedSuccessfully);
391Assert.False(entra.Resource.ProvisioningTaskCompletionSource.Task.IsCanceled);
408entra.Resource.TenantId = "my-tenant";
409entra.Resource.ClientId = "my-client";
410entra.Resource.Instance = "http://login.microsoftonline.com/";
411entra.Resource.SignInAudience = (EntraIdSignInAudience)42;
414var snapshot = await InitializeAsync(app, entra.Resource);
424}, await ReadLogsAsync(app, entra.Resource));
437await notifications.PublishUpdateAsync(entra.Resource, snapshot => snapshot with
443var snapshot = await InitializeAsync(app, entra.Resource);
465var snapshot = await InitializeAsync(app, entra.Resource);
468Assert.Same(entra.Resource, startedResource);
479var snapshot = await InitializeAsync(app, entra.Resource);
483var log = Assert.Single(await ReadLogsAsync(app, entra.Resource));
EntraIdPolyglotTests.cs (53)
36Assert.True(entra.Resource.IsExistingApplication);
38Assert.Null(entra.Resource.ProvisioningTaskCompletionSource);
39Assert.Null(await ManifestUtils.GetManifestOrNull(entra.Resource));
46consumer.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
63consumer = project.Resource;
69consumer = container.Resource;
72Assert.Same(consumer, Assert.Single(entra.Resource.Consumers));
91Assert.Null(entra.Resource.TenantIdParameter);
92Assert.Null(entra.Resource.ClientIdParameter);
93Assert.Equal(TenantId, entra.Resource.TenantId);
94Assert.Equal(ClientId, entra.Resource.ClientId);
95Assert.Empty(entra.Resource.Annotations.OfType<PipelineStepAnnotation>());
96Assert.Null(await ManifestUtils.GetManifestOrNull(entra.Resource));
117Assert.Equal(TenantId, entra.Resource.TenantId);
118Assert.Equal(ClientId, entra.Resource.ClientId);
151consumer.Resource, operation, TestServiceProvider.Instance);
153Assert.Same(secret.Resource, Assert.IsType<EntraIdClientSecretCredential>(entra.Resource.ClientCredentials[0]).ClientSecret);
154Assert.Same(password.Resource, Assert.IsType<EntraIdFileCertificateCredential>(entra.Resource.ClientCredentials[5]).Password);
169Assert.Empty(entra.Resource.ClientCredentials);
189Assert.IsType<EntraIdLocalDeveloperCertificateCredential>(Assert.Single(entra.Resource.ClientCredentials));
193Assert.Empty(entra.Resource.ClientCredentials);
207Assert.Empty(existing.Resource.ClientCredentials);
226Assert.Empty(entra.Resource.ClientCredentials);
230Assert.Collection(entra.Resource.ClientCredentials,
232c => Assert.Same(consumer.Resource, Assert.IsType<EntraIdFederatedIdentityCredential>(c).ComputeTarget),
233c => Assert.Same(identity.Resource, Assert.IsType<EntraIdFederatedIdentityCredential>(c).ManagedIdentity));
259Assert.Equal([ClientId, owner.Resource, TenantId], entra.Resource.ApplicationOwners);
260Assert.Equal(entra.Resource.ApplicationOwners, entra.Resource.ServicePrincipalOwners);
261await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
262var expression = Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri0"]);
264Assert.Same(host.Resource, Assert.Single(expression.ValueProviders));
281await Verify(entra.Resource.GetBicepTemplateString(), "bicep").UseParameters(operation);
282Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri0"]);
303Assert.Equal(nativeEntra.Resource.GetBicepTemplateString(), exportedEntra.Resource.GetBicepTemplateString());
308Assert.Equal(4, exportedEntra.Resource.AppRoles.Count);
386Assert.Equal(nativeApi.Resource.GetBicepTemplateString(), exportedApi.Resource.GetBicepTemplateString());
387Assert.Equal(nativeWeb.Resource.GetBicepTemplateString(), exportedWeb.Resource.GetBicepTemplateString());
420consumer.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
453Assert.Single(api.Resource.Scopes);
461Assert.Empty(web.Resource.ApiAccess);
466Assert.Empty(web.Resource.ApiAccess);
488Assert.Empty(entra.Resource.RedirectUris);
489Assert.Empty(entra.Resource.RedirectUriParameters);
490Assert.Empty(entra.Resource.ApplicationOwners);
491Assert.Empty(entra.Resource.ServicePrincipalOwners);
504Assert.Empty(entra.Resource.Consumers);
EntraIdProvisioningTests.cs (166)
39await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
53return entra.Resource.GetBicepTemplateString();
72Assert.Single(entra.Resource.AppRoles);
108var roles = Assert.IsAssignableFrom<IList<EntraIdAppRole>>(entra.Resource.AppRoles);
111Assert.Single(entra.Resource.AppRoles);
141Assert.Empty(entra.Resource.ApplicationOwners);
153Assert.Equal(2, entra.Resource.ApplicationOwners.Count);
154Assert.Equal(entra.Resource.ApplicationOwners, entra.Resource.ServicePrincipalOwners);
155await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
168Assert.Equal(["00001111-aaaa-2222-bbbb-3333cccc4444"], entra.Resource.ApplicationOwners);
177Assert.DoesNotContain("owners", entra.Resource.GetBicepTemplateString());
188await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
202await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
224web.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
246var exception = Assert.Throws<InvalidOperationException>(entra.Resource.ValidateManagedIdentities);
260Assert.Contains("WithAzureUserAssignedIdentity", Assert.Throws<InvalidOperationException>(entra.Resource.ValidateManagedIdentities).Message);
263web.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
284var dependencies = await web.Resource.GetResourceDependenciesAsync(builder.ExecutionContext, ResourceDependencyDiscoveryMode.DirectOnly);
285Assert.Contains(entra.Resource, dependencies);
288web.WithAnnotation(new AppIdentityAnnotation(identity.Resource));
290web.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
304Assert.DoesNotContain("web_identity_principalId", entra.Resource.GetBicepTemplateString());
310Assert.Same(identity, Assert.Single(entra.Resource.GetFederatedIdentities()));
311Assert.Contains("web_identity_principalId", entra.Resource.GetBicepTemplateString());
337Assert.Empty(entra.Resource.ClientCredentials);
338var bicep = entra.Resource.GetBicepTemplateString();
353var bicep = entra.Resource.GetBicepTemplateString();
356Assert.Empty(entra.Resource.GetFederatedIdentities());
368var credential = Assert.Single(entra.Resource.ClientCredentials);
370Assert.True(credential.EmitEnvironmentVariables(envVars, "AzureAd__ClientCredentials__0", "__", entra.Resource, web.Resource, builder.ExecutionContext));
390var bicep = entra.Resource.GetBicepTemplateString();
416Assert.Contains("issuer: 'https://login.microsoftonline.com/${tenant().tenantId}/v2.0'", entra.Resource.GetBicepTemplateString());
429var bicep = entra.Resource.GetBicepTemplateString();
432Assert.Same(redirectUris.Resource, entra.Resource.Parameters["web_identity_principalId"]);
433Assert.Same(webIdentity.Resource, Assert.IsType<BicepOutputReference>(entra.Resource.Parameters["web_identity_principalId_2"]).Resource);
437Assert.Equal(bicep, entra.Resource.GetBicepTemplateString());
451var bicep = entra.Resource.GetBicepTemplateString();
453Assert.Same(redirectUris.Resource, entra.Resource.Parameters["WEB_identity_principalId"]);
454Assert.Same(webIdentity.Resource, Assert.IsType<BicepOutputReference>(entra.Resource.Parameters["web_identity_principalId_2"]).Resource);
469var bicep = entra.Resource.GetBicepTemplateString();
486entra.Resource.ValidateManagedIdentities();
487Assert.Same(identity.Resource, Assert.Single(entra.Resource.GetFederatedIdentities()));
488Assert.NotNull(published.Resource);
508entra.Resource.Instance = "https://login.contoso.example/";
510var exception = Assert.Throws<InvalidOperationException>(entra.Resource.GetBicepTemplateString);
520Assert.IsAssignableFrom<AzureProvisioningResource>(entra.Resource);
521var tenantScoped = Assert.Single(entra.Resource.Annotations.OfType<TenantScopedResourceAnnotation>());
527Assert.NotNull(entra.Resource.ProvisioningTaskCompletionSource);
528Assert.False(entra.Resource.ProvisioningTaskCompletionSource.Task.IsCompleted);
529Assert.Equal(new[] { "tenantResourceSuffix" }, entra.Resource.Parameters.Keys);
530Assert.Equal(EntraIdSignInAudience.AzureADMyOrg, entra.Resource.SignInAudience);
531Assert.Null(entra.Resource.Parameters[AzureBicepResource.KnownParameters.TenantResourceSuffix]);
534await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
535Assert.Equal(new[] { "tenantResourceSuffix" }, entra.Resource.Parameters.Keys);
557await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
568using var first = entra.Resource.GetBicepTemplateFile(workspace.Path);
570using var second = entra.Resource.GetBicepTemplateFile(workspace.Path);
574Assert.Equal(firstContents, entra.Resource.GetBicepTemplateString());
584entra.Resource.Scope = tenantScoped
588var exception = Assert.Throws<InvalidOperationException>(entra.Resource.GetBicepTemplateString);
602var manifest = await ManifestUtils.GetManifest(entra.Resource, workspace.Path);
603Assert.Equal(new[] { "tenantResourceSuffix" }, entra.Resource.Parameters.Keys);
605.AppendContentAsFile(entra.Resource.GetBicepTemplateString(), "bicep");
681Assert.Same(context.ParameterLookup[suffix.Resource],
769.WithParameter("tenantId", web.Resource.TenantIdOutputReference)
770.WithParameter("clientId", web.Resource.ClientIdOutputReference);
804Assert.Equal(audience, entra.Resource.SignInAudience);
805Assert.Equal(new[] { "tenantResourceSuffix" }, entra.Resource.Parameters.Keys);
806await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
819Assert.True(entra.Resource.EnableIdTokenIssuance);
820Assert.Equal(new[] { "tenantResourceSuffix" }, entra.Resource.Parameters.Keys);
821await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
835Assert.Equal(new[] { "https://localhost:7123/signin-oidc", "https://localhost:7123/signout-callback-oidc" }, entra.Resource.RedirectUris);
850Assert.Equal(new[] { signIn.Resource, signOut.Resource }, entra.Resource.RedirectUriParameters);
862await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
863Assert.Equal(new[] { "tenantResourceSuffix", "web_redirect_uris", "extra_redirect_uris" }, entra.Resource.Parameters.Keys);
873await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
884await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
885Assert.Equal(new[] { "tenantResourceSuffix", "redirectUri0", "redirectUri1" }, entra.Resource.Parameters.Keys);
887entra.Resource.Parameters.Where(p => p.Key.StartsWith("redirectUri", StringComparison.Ordinal)),
902await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
915_ = entra.Resource.GetBicepTemplateString();
916var expression = Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri0"]);
928var context = new ResourceUrlsCallbackContext(builder.ExecutionContext, web.Resource, urls);
929foreach (var callback in web.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>())
948await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
949var expression = Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri0"]);
951Assert.Same(host.Resource, Assert.Single(expression.ValueProviders));
972Assert.Single(entra.Resource.RedirectUriParameters);
985_ = entra.Resource.GetBicepTemplateString();
986var expression = Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri0"]);
990var context = new ResourceUrlsCallbackContext(builder.ExecutionContext, web.Resource, urls);
991foreach (var callback in web.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>())
1012_ = entra.Resource.GetBicepTemplateString();
1013var expression = Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri0"]);
1021var context = new ResourceUrlsCallbackContext(builder.ExecutionContext, web.Resource, urls);
1022foreach (var callback in web.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>())
1040_ = entra.Resource.GetBicepTemplateString();
1041var expression = Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri0"]);
1044var context = new ResourceUrlsCallbackContext(builder.ExecutionContext, web.Resource, []);
1045foreach (var callback in web.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>())
1072var bicep = entra.Resource.GetBicepTemplateString();
1073Assert.Same(existing.Resource, entra.Resource.Parameters["redirectUri0"]);
1074Assert.IsType<ReferenceExpression>(entra.Resource.Parameters["redirectUri1"]);
1079Assert.Equal(bicep, entra.Resource.GetBicepTemplateString());
1107entra.Resource.SignInAudience = EntraIdSignInAudience.AzureADMultipleOrgs;
1108entra.Resource.AddRedirectUri("https://localhost:7123/signin-oidc");
1109entra.Resource.EnableIdTokenIssuance = true;
1111await Verify(entra.Resource.GetBicepTemplateString(), "bicep");
1131Assert.True(entra.Resource.IsExistingApplication);
1132Assert.Equal(TenantId, entra.Resource.TenantId);
1133Assert.Equal(ClientId, entra.Resource.ClientId);
1134Assert.Null(entra.Resource.ProvisioningTaskCompletionSource);
1135Assert.Empty(entra.Resource.Annotations.OfType<PipelineStepAnnotation>());
1136Assert.Empty(entra.Resource.Annotations.OfType<PipelineConfigurationAnnotation>());
1137Assert.Null(await ManifestUtils.GetManifestOrNull(entra.Resource));
1146Assert.True(entra.Resource.IsExistingApplication);
1147Assert.Null(entra.Resource.ProvisioningTaskCompletionSource);
1148Assert.Empty(entra.Resource.Annotations.OfType<PipelineStepAnnotation>());
1149Assert.Empty(entra.Resource.Annotations.OfType<PipelineConfigurationAnnotation>());
1150Assert.Null(await ManifestUtils.GetManifestOrNull(entra.Resource));
1167Assert.True(existing.Resource.IsExistingApplication);
1168Assert.Null(existing.Resource.ProvisioningTaskCompletionSource);
1170Assert.Empty(existing.Resource.Annotations.OfType<PipelineStepAnnotation>());
1171Assert.Same(customization, Assert.Single(existing.Resource.Annotations.OfType<PipelineConfigurationAnnotation>()));
1172Assert.Null(await ManifestUtils.GetManifestOrNull(existing.Resource));
1194Assert.True(entra.Resource.IsExistingApplication);
1241Assert.Empty(existing.Resource.Annotations.OfType<PipelineStepAnnotation>());
1280Assert.Same(customization, Assert.Single(entra.Resource.Annotations.OfType<PipelineConfigurationAnnotation>()));
1292var exception = Assert.Throws<InvalidOperationException>(entra.Resource.GetBicepTemplateString);
1304entra.Resource.SignInAudience = (EntraIdSignInAudience)42;
1306var exception = Assert.Throws<InvalidOperationException>(entra.Resource.GetBicepTemplateString);
1324var exception = Assert.Throws<InvalidOperationException>(entra.Resource.GetBicepTemplateString);
1348entra.Resource.Outputs["tenantId"] = TenantId;
1349entra.Resource.Outputs["clientId"] = ClientId;
1350entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
1376project.Resource, operation, TestServiceProvider.Instance));
1378container.Resource, operation, TestServiceProvider.Instance));
1392node.Resource, DistributedApplicationOperation.Run, app.Services).AsTask();
1395entra.Resource.Outputs["tenantId"] = TenantId;
1396entra.Resource.Outputs["clientId"] = ClientId;
1397entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
1433var initialWaits = consumer.Resource.Annotations.OfType<WaitAnnotation>().ToArray();
1437Assert.Equal(initialWaits, consumer.Resource.Annotations.OfType<WaitAnnotation>());
1449var wait = Assert.Single(node.Resource.Annotations.OfType<WaitAnnotation>());
1450Assert.Same(entra.Resource, wait.Resource);
1466node.Resource, DistributedApplicationOperation.Run, app.Services).AsTask();
1468entra.Resource.ProvisioningTaskCompletionSource!.SetException(failure);
1482var value = entra.Resource.ClientIdOutputReference.GetValueAsync(cts.Token).AsTask();
1485entra.Resource.Outputs["clientId"] = ClientId;
1486entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
1497var value = entra.Resource.ClientIdOutputReference.GetValueAsync(cts.Token).AsTask();
1501Assert.False(entra.Resource.ProvisioningTaskCompletionSource!.Task.IsCompleted);
1502entra.Resource.Outputs["clientId"] = ClientId;
1503entra.Resource.ProvisioningTaskCompletionSource.SetResult();
1505Assert.Equal(ClientId, await entra.Resource.ClientIdOutputReference.GetValueAsync());
EntraIdResourceBuilderTests.cs (46)
79Assert.Equal("contoso.onmicrosoft.com", entra.Resource.TenantId);
260Assert.Equal(EntraIdSignInAudience.AzureADMyOrg, entra.Resource.SignInAudience);
281Assert.True(entra.Resource.TryGetAnnotationsOfType<ManifestPublishingCallbackAnnotation>(out var annotations));
292var annotation = Assert.Single(entra.Resource.Annotations.OfType<ResourceSnapshotAnnotation>());
398Assert.Empty(entra.Resource.ClientCredentials);
409Assert.Empty(entra.Resource.ClientCredentials);
434web.Resource, operation, TestServiceProvider.Instance);
506container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
533container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
558container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
560Assert.Equal(signInAudience, entra.Resource.SignInAudience);
585container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
608container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
624Password = password.Resource
631container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
657container.Resource, operation, TestServiceProvider.Instance);
683project.Resource, operation, TestServiceProvider.Instance);
694explicitNull.Resource, operation, TestServiceProvider.Instance));
717project.Resource, operation, TestServiceProvider.Instance);
755named.Resource, operation, TestServiceProvider.Instance));
757positional.Resource, operation, TestServiceProvider.Instance));
774project.Resource, operation, TestServiceProvider.Instance);
802container.Resource, operation, TestServiceProvider.Instance);
813explicitNull.Resource, operation, TestServiceProvider.Instance));
828project.Resource, operation, TestServiceProvider.Instance);
854defaultConsumer.Resource, operation, TestServiceProvider.Instance);
856customConsumer.Resource, operation, TestServiceProvider.Instance);
900Password = password.Resource
922container.Resource, operation, TestServiceProvider.Instance);
1003unprefixed.Resource, operation, TestServiceProvider.Instance));
1018container.Resource, operation, TestServiceProvider.Instance);
1040container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1126var relationships = project.Resource.Annotations
1130Assert.Contains(relationships, r => r.Resource == entra.Resource);
1196ClientSecret = notSecret.Resource
1200Assert.Empty(entra.Resource.ClientCredentials);
1213Password = notSecret.Resource
1217Assert.Empty(entra.Resource.ClientCredentials);
1235Password = password.Resource
1238.WithCredential(new EntraIdClientSecretCredential { ClientSecret = secret.Resource })
1241Assert.Same(password.Resource, certificate.Password);
1244certificate.Password = replacement.Resource;
1251consumer.Resource, operation, TestServiceProvider.Instance);
1297container.Resource, operation, TestServiceProvider.Instance);
1320container.Resource, operation, TestServiceProvider.Instance);
1347container.Resource, operation, TestServiceProvider.Instance);
LocalDeveloperCertificateProvisioningTests.cs (17)
23entra.Resource.Parameters[AzureBicepResource.KnownParameters.TenantResourceSuffix] = "dev";
25var credential = Assert.IsType<EntraIdLocalDeveloperCertificateCredential>(Assert.Single(entra.Resource.ClientCredentials));
26var original = await credential.GetCertificateAsync(app.Services, entra.Resource, TestContext.Current.CancellationToken);
27_ = entra.Resource.GetBicepTemplateString();
29await BicepUtilities.SetParametersAsync(parameters, entra.Resource, builder.ExecutionContext, cancellationToken: TestContext.Current.CancellationToken);
30var initialChecksum = BicepUtilities.GetChecksum(entra.Resource, parameters, scope: null);
33Assert.Equal(initialChecksum, await BicepUtilities.GetCurrentChecksumAsync(entra.Resource, section, builder.ExecutionContext, NullLogger.Instance, TestContext.Current.CancellationToken));
34entra.Resource.ClientCredentials.Clear();
35var reusedCredential = new EntraIdLocalDeveloperCertificateCredential(entra.Resource, builder.ExecutionContext);
36entra.Resource.ClientCredentials.Add(reusedCredential);
37Assert.Equal(initialChecksum, await BicepUtilities.GetCurrentChecksumAsync(entra.Resource, section, builder.ExecutionContext, NullLogger.Instance, TestContext.Current.CancellationToken));
38var reused = await reusedCredential.GetCertificateAsync(app.Services, entra.Resource, TestContext.Current.CancellationToken);
43entra.Resource.ClientCredentials.Clear();
44var nextRun = new EntraIdLocalDeveloperCertificateCredential(entra.Resource, builder.ExecutionContext);
45entra.Resource.ClientCredentials.Add(nextRun);
47var renewedChecksum = await BicepUtilities.GetCurrentChecksumAsync(entra.Resource, section, builder.ExecutionContext, NullLogger.Instance, TestContext.Current.CancellationToken);
50var renewed = await nextRun.GetCertificateAsync(app.Services, entra.Resource, TestContext.Current.CancellationToken);
LocalDeveloperCertificateTests.cs (26)
245var credential = Assert.IsType<EntraIdLocalDeveloperCertificateCredential>(Assert.Single(entra.Resource.ClientCredentials));
248var template = entra.Resource.GetBicepTemplateString();
249var certificate = await credential.GetCertificateAsync(app.Services, entra.Resource, TestContext.Current.CancellationToken);
266Assert.Null(created.Resource.TenantId);
267Assert.Null(created.Resource.ClientId);
271Assert.Null(created.Resource.TenantIdParameter);
272Assert.Null(created.Resource.ClientIdParameter);
273Assert.False(created.Resource.IsExistingApplication);
282var template = entra.Resource.GetBicepTemplateString();
283Assert.Empty(entra.Resource.ClientCredentials);
286var environment = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(web.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
304entra.Resource.Outputs["tenantId"] = "aaaabbbb-0000-cccc-1111-dddd2222eeee";
305entra.Resource.Outputs["clientId"] = "00001111-aaaa-2222-bbbb-3333cccc4444";
306entra.Resource.ProvisioningTaskCompletionSource!.SetResult();
308var result = await ExecutionConfigurationBuilder.Create(web.Resource).WithEnvironmentVariablesConfig()
323var selected = await Assert.IsType<EntraIdLocalDeveloperCertificateCredential>(Assert.Single(entra.Resource.ClientCredentials))
324.GetCertificateAsync(app.Services, entra.Resource, TestContext.Current.CancellationToken);
336var secret = Assert.IsType<EntraIdLocalDeveloperCertificateCredential>(entra.Resource.ClientCredentials[0]).Secret;
338var dependencies = await web.Resource.GetResourceDependenciesAsync(builder.ExecutionContext, cancellationToken: TestContext.Current.CancellationToken);
343var args = await ExecutionConfigurationBuilder.Create(executable.Resource).WithArgumentsConfig()
356var credential = Assert.IsType<EntraIdLocalDeveloperCertificateCredential>(entra.Resource.ClientCredentials[0]);
357var first = await credential.GetCertificateAsync(app.Services, entra.Resource, TestContext.Current.CancellationToken);
359var second = await credential.GetCertificateAsync(app.Services, entra.Resource, TestContext.Current.CancellationToken);
363credential.EmitEnvironmentVariables(env, "AzureAd__ClientCredentials__0", "__", entra.Resource, new ProjectResource("web"), builder.ExecutionContext);
365Assert.False(entra.Resource.ProvisioningTaskCompletionSource!.Task.IsCompleted);
367Assert.False(entra.Resource.ProvisioningTaskCompletionSource.Task.IsCompleted);
Aspire.Hosting.Azure.EventHubs (14)
Aspire.Hosting.Azure.FrontDoor (10)
Aspire.Hosting.Azure.Functions (26)
Aspire.Hosting.Azure.KeyVault (12)
AzureKeyVaultResourceExtensions.cs (11)
241return builder.Resource.GetSecret(secretName);
257return builder.AddSecret(name, name, parameterResource.Resource);
298var secret = new AzureKeyVaultSecretResource(name, name, builder.Resource, parameterResource);
299builder.Resource.Secrets.Add(secret);
319var secret = new AzureKeyVaultSecretResource(name, name, builder.Resource, value);
320builder.Resource.Secrets.Add(secret);
339return builder.AddSecret(name, secretName, parameterResource.Resource);
358var secret = new AzureKeyVaultSecretResource(name, secretName, builder.Resource, parameterResource);
359builder.Resource.Secrets.Add(secret);
380var secret = new AzureKeyVaultSecretResource(name, secretName, builder.Resource, value);
381builder.Resource.Secrets.Add(secret);
Aspire.Hosting.Azure.Kubernetes (54)
AzureKubernetesEnvironmentExtensions.cs (41)
80resource.KubernetesEnvironment = k8sEnvBuilder.Resource;
94resource.DefaultContainerRegistry = defaultRegistry.Resource;
95resource.Annotations.Add(new ContainerRegistryReferenceAnnotation(defaultRegistry.Resource));
96k8sEnvBuilder.WithAnnotation(new ContainerRegistryReferenceAnnotation(defaultRegistry.Resource));
100resource.ControlPlaneIdentity = controlPlaneIdentity.Resource;
101resource.KubeletIdentity = kubeletIdentity.Resource;
102resource.References.Add(controlPlaneIdentity.Resource);
103resource.References.Add(kubeletIdentity.Resource);
108controlPlaneIdentity.WithAnnotation(new RoleAssignmentAnnotation(kubeletIdentity.Resource,
124foreach (var identity in new[] { controlPlaneIdentity.Resource, kubeletIdentity.Resource })
136controlPlaneIdentity.Resource.Scope = resource.Scope;
137kubeletIdentity.Resource.Scope = resource.Scope;
162context.Model.Resources.Add(controlPlaneIdentity.Resource);
163context.Model.Resources.Add(kubeletIdentity.Resource);
291builder.Resource.NodePools.Add(config);
293var nodePool = new AksNodePoolResource(name, config, builder.Resource);
383builder.Resource.NodePools.RemoveAll(p => p.Mode is AksNodePoolMode.System);
384builder.Resource.NodePools.Insert(0, config);
428builder.WithAnnotation(new AksSubnetAnnotation(subnet.Resource.Id), ResourceAnnotationMutationBehavior.Replace);
464builder.WithAnnotation(new AksSubnetAnnotation(subnet.Resource.Id));
468builder.Resource.AksParent.NodePoolSubnets[builder.Resource.Name] = subnet.Resource.Id;
495if (builder.Resource.DefaultContainerRegistry is not null)
497builder.ApplicationBuilder.Resources.Remove(builder.Resource.DefaultContainerRegistry);
498builder.Resource.DefaultContainerRegistry = null;
504new ContainerRegistryReferenceAnnotation(registry.Resource),
510var staleAnnotations = builder.Resource.KubernetesEnvironment.Annotations
514builder.Resource.KubernetesEnvironment.Annotations.Remove(old);
517builder.Resource.KubernetesEnvironment.Annotations.Add(
518new ContainerRegistryReferenceAnnotation(registry.Resource));
588builder.Resource.GatewayApiEnabled = true;
589builder.Resource.ApplicationLoadBalancerEnabled = true;
605var existingDelegation = subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>().LastOrDefault();
618builder.Resource,
619subnet.Resource.Id,
620subnet.Resource,
628builder.Resource.LoadBalancers.Add(lb);
665builder.Resource.OidcIssuerEnabled = enabled;
666builder.Resource.WorkloadIdentityEnabled = enabled;
Aspire.Hosting.Azure.Kubernetes.Tests (313)
AzureKubernetesEnvironmentExtensionsTests.cs (180)
31Assert.Equal("aks", aks.Resource.Name);
32Assert.Equal("{aks.outputs.id}", aks.Resource.Id.ValueExpression);
33Assert.Equal("{aks.outputs.clusterFqdn}", aks.Resource.ClusterFqdn.ValueExpression);
34Assert.Equal("{aks.outputs.oidcIssuerUrl}", aks.Resource.OidcIssuerUrl.ValueExpression);
36var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
59var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
76Assert.Equal(2, aks.Resource.NodePools.Count);
78Assert.Equal("gpu", gpuPool.Resource.Name);
79Assert.Equal("gpu", gpuPool.Resource.Config.Name);
80Assert.Equal("Standard_NC6s_v3", gpuPool.Resource.Config.VmSize);
81Assert.Equal(0, gpuPool.Resource.Config.MinCount);
82Assert.Equal(5, gpuPool.Resource.Config.MaxCount);
83Assert.Equal(AksNodePoolMode.User, gpuPool.Resource.Config.Mode);
84Assert.Null(gpuPool.Resource.Config.OsSku);
85Assert.Same(aks.Resource, gpuPool.Resource.AksParent);
99Assert.Single(aks.Resource.NodePools);
100var defaultPool = aks.Resource.NodePools[0];
134Assert.Collection(aks.Resource.NodePools,
136pool => Assert.Same(workers.Resource.Config, pool),
137pool => Assert.Same(defaults.Resource.Config, pool));
138Assert.Equal(new AksNodePoolConfig("workers", "Standard_D2s_v5", 0, 5, AksNodePoolMode.User, "Ubuntu"), workers.Resource.Config);
139Assert.Equal(new AksNodePoolConfig("defaults", "Standard_D2s_v5", 1, 3, AksNodePoolMode.User), defaults.Resource.Config);
165Assert.Same(systemConfig, aks.Resource.NodePools[0]);
166Assert.Same(workerConfig, workers.Resource.Config);
170workers.Resource.Config.OsSku = "AzureLinux";
171workers.Resource.Config.VmSize = "Standard_D4s_v5";
172workers.Resource.Config.MinCount = 2;
173workers.Resource.Config.MaxCount = 4;
175var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
180var regenerated = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
209Assert.Collection(aks.Resource.NodePools,
211pool => Assert.Same(workers.Resource.Config, pool));
238Configure(aks.Resource.NodePools[0]);
239Configure(workers.Resource.Config);
241await Assert.ThrowsAnyAsync<ArgumentException>(() => AzureManifestUtils.GetManifestWithBicep(aks.Resource));
244await Assert.ThrowsAnyAsync<ArgumentException>(() => AzureManifestUtils.GetManifestWithBicep(aks.Resource));
253var original = Assert.Single(aks.Resource.NodePools);
261Assert.Same(original, Assert.Single(aks.Resource.NodePools));
271await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => AzureManifestUtils.GetManifestWithBicep(aks.Resource));
274await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => AzureManifestUtils.GetManifestWithBicep(aks.Resource));
283var original = Assert.Single(aks.Resource.NodePools);
288Assert.Same(original, Assert.Single(aks.Resource.NodePools));
305var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
306var regenerated = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
323Assert.True(aks.Resource.OidcIssuerEnabled);
324Assert.True(aks.Resource.WorkloadIdentityEnabled);
325Assert.Null(aks.Resource.KubernetesVersion);
326Assert.False(aks.Resource.IsPrivateCluster);
327Assert.False(aks.Resource.ContainerInsightsEnabled);
328Assert.Null(aks.Resource.LogAnalyticsWorkspace);
342Assert.NotNull(aks.Resource.KubernetesEnvironment);
343Assert.Equal("aks", aks.Resource.KubernetesEnvironment.Name);
344Assert.True(aks.Resource.TryGetLastAnnotation<KubernetesEnvironmentAnnotation>(out var annotation));
361Assert.Same(aks.Resource, computeEnvironment);
413Assert.True(aks.Resource.OidcIssuerEnabled);
414Assert.True(aks.Resource.WorkloadIdentityEnabled);
432Assert.True(project.Resource.TryGetLastAnnotation<AppIdentityAnnotation>(out var appIdentity));
433Assert.Same(identity.Resource, appIdentity.IdentityResource);
445Assert.IsAssignableFrom<IAzureComputeEnvironmentResource>(aks.Resource);
457Assert.IsAssignableFrom<IAzureNspAssociationTarget>(aks.Resource);
495Assert.True(aks.Resource.TryGetLastAnnotation<AksSubnetAnnotation>(out _));
498Assert.Single(aks.Resource.NodePoolSubnets);
499Assert.True(aks.Resource.NodePoolSubnets.ContainsKey("gpu"));
502Assert.True(gpuPool.Resource.TryGetLastAnnotation<AksSubnetAnnotation>(out _));
521Assert.False(aks.Resource.TryGetLastAnnotation<AksSubnetAnnotation>(out _));
524Assert.Single(aks.Resource.NodePoolSubnets);
525Assert.True(aks.Resource.NodePoolSubnets.ContainsKey("gpu"));
543Assert.True(container.Resource.TryGetLastAnnotation<KubernetesNodePoolAnnotation>(out var affinity));
544Assert.Same(gpuPool.Resource, affinity.NodePool);
562Assert.Equal(3, aks.Resource.NodePools.Count);
563Assert.Equal("cpu", pool1.Resource.Name);
564Assert.Equal("gpu", pool2.Resource.Name);
575Assert.NotNull(aks.Resource.DefaultContainerRegistry);
576Assert.Equal("aks-acr", aks.Resource.DefaultContainerRegistry.Name);
591Assert.Null(aks.Resource.DefaultContainerRegistry);
594Assert.True(aks.Resource.TryGetLastAnnotation<ContainerRegistryReferenceAnnotation>(out var annotation));
595Assert.Same(explicitAcr.Resource, annotation.Registry);
610Assert.True(aks.Resource.TryGetLastAnnotation<ContainerRegistryReferenceAnnotation>(out var aksAnnotation));
611Assert.Same(aks.Resource.DefaultContainerRegistry, aksAnnotation.Registry);
613Assert.True(aks.Resource.KubernetesEnvironment
615Assert.Same(aks.Resource.DefaultContainerRegistry, annotation.Registry);
648Assert.Same(registry.Resource, roles.TargetAzureResource);
649Assert.Same(aks.Resource.KubeletIdentity, roles.IdentityResource);
650Assert.Equal(aks.Resource.KubeletIdentity!.PrincipalId.ValueExpression,
653Assert.False(aks.Resource.Parameters.ContainsKey("acrName"));
654Assert.Equal("{aks.outputs.kubeletIdentityObjectId}", aks.Resource.KubeletIdentityObjectId.ValueExpression);
693Assert.Same(final.Resource, provisioningRoles.TargetAzureResource);
694Assert.Same(aks.Resource.KubeletIdentity, provisioningRoles.IdentityResource);
696identity => Assert.Same(aks.Resource.ControlPlaneIdentity, identity),
697identity => Assert.Same(aks.Resource.KubeletIdentity, identity));
712.OfType<AzureRoleAssignmentResource>().Where(resource => resource.TargetAzureResource == registry.Resource);
714role => Assert.Same(first.Resource.KubeletIdentity, role.IdentityResource),
715role => Assert.Same(second.Resource.KubeletIdentity, role.IdentityResource));
730.OfType<AzureRoleAssignmentResource>(), resource => resource.TargetAzureResource == registry.Resource);
731Assert.Same(aks.Resource.KubeletIdentity, roles.IdentityResource);
733var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
746Assert.Null(aks.Resource.ControlPlaneIdentity);
747Assert.Null(aks.Resource.KubeletIdentity);
749var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
767Assert.Same(aks.Resource.ControlPlaneIdentity, role.IdentityResource);
768Assert.Same(aks.Resource.KubeletIdentity, role.TargetAzureResource);
769Assert.Contains(role, aks.Resource.References);
773Assert.Same(aks.Resource.KubeletIdentity, role.IdentityResource);
774Assert.Same(aks.Resource.DefaultContainerRegistry, role.TargetAzureResource);
775Assert.Contains(role, aks.Resource.References);
777Assert.Collection(aks.Resource.KubeletIdentity!.Annotations.OfType<RoleAssignmentAnnotation>(),
780Assert.Collection(aks.Resource.ControlPlaneIdentity!.Annotations.OfType<RoleAssignmentAnnotation>(),
810builder.AddParameter("cluster-group", "cluster-rg").Resource,
811builder.AddParameter("cluster-subscription", "00000000-0000-0000-0000-000000000001").Resource)
819aks.Resource.Scope = scope;
825Assert.Same(scope, aks.Resource.ControlPlaneIdentity!.Scope);
826Assert.Same(scope, aks.Resource.KubeletIdentity!.Scope);
829role => role.TargetAzureResource == aks.Resource.KubeletIdentity);
833role => role.TargetAzureResource == aks.Resource.DefaultContainerRegistry);
874registry.Resource.Scope = new AzureBicepResourceScope("explicit-rg", "00000000-0000-0000-0000-000000000001");
881.OfType<AzureRoleAssignmentResource>(), resource => resource.TargetAzureResource == registry.Resource);
882Assert.Same(registry.Resource.Scope, roles.Scope);
897builder.AddParameter("registry-group", "registry-rg").Resource,
898builder.AddParameter("registry-subscription", "00000000-0000-0000-0000-000000000001").Resource)
902builder.AddParameter("network-group", "network-rg").Resource,
903builder.AddParameter("network-subscription", "00000000-0000-0000-0000-000000000002").Resource)
915var registryRole = Assert.Single(roles, role => role.TargetAzureResource == registry.Resource);
916var networkRole = Assert.Single(roles, role => role.TargetAzureResource == network.Resource);
917Assert.Same(registryScope, registry.Resource.Scope);
919Assert.Same(aks.Resource.KubeletIdentity, registryRole.IdentityResource);
920Assert.Same(networkScope, network.Resource.Scope);
922Assert.Same(aks.Resource.ControlPlaneIdentity, networkRole.IdentityResource);
923Assert.Contains(registryRole, aks.Resource.References);
924Assert.Contains(networkRole, aks.Resource.References);
973Assert.Same(aks.Resource.ControlPlaneIdentity, role.IdentityResource);
974Assert.Same(poolNetwork.Resource, role.TargetAzureResource);
976Assert.Contains(role, aks.Resource.References);
980Assert.Same(aks.Resource.ControlPlaneIdentity, role.IdentityResource);
981Assert.Same(finalNetwork.Resource, role.TargetAzureResource);
983Assert.Contains(role, aks.Resource.References);
985foreach (var annotation in aks.Resource.ControlPlaneIdentity!.Annotations.OfType<RoleAssignmentAnnotation>()
1005Assert.Single(aks.Resource.NodePools, p => p.Mode is AksNodePoolMode.System);
1006var systemPool = aks.Resource.NodePools.First(p => p.Mode is AksNodePoolMode.System);
1025var systemPool = aks.Resource.NodePools.First(p => p.Mode is AksNodePoolMode.System);
1043Assert.Equal("Standard_D2s_v5", aks.Resource.NodePools[0].VmSize);
1049Assert.Single(aks.Resource.NodePools, p => p.Mode is AksNodePoolMode.System);
1050Assert.Equal("Standard_B2s", aks.Resource.NodePools.First(p => p.Mode is AksNodePoolMode.System).VmSize);
1066Assert.Single(aks.Resource.NodePools, p => p.Mode is AksNodePoolMode.System);
1067var systemPool = aks.Resource.NodePools.First(p => p.Mode is AksNodePoolMode.System);
1088Assert.Equal(2, aks.Resource.NodePools.Count);
1089Assert.Equal("Standard_B2s", aks.Resource.NodePools.First(p => p.Mode is AksNodePoolMode.System).VmSize);
1090Assert.Equal("gpu", gpuPool.Resource.Name);
1118var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
1136aks.Resource.GatewayApiEnabled = gatewayApiEnabled;
1137aks.Resource.ApplicationLoadBalancerEnabled = applicationLoadBalancerEnabled;
1139Assert.Equal(applicationLoadBalancerEnabled, aks.Resource.RequiresPreviewIngressApi);
1149aks.Resource.GatewayApiEnabled = true;
1151var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
1169var manifest = await AzureManifestUtils.GetManifestWithBicep(aks.Resource);
1185Assert.True(aks.Resource.GatewayApiEnabled);
1186Assert.True(aks.Resource.ApplicationLoadBalancerEnabled);
1187Assert.True(aks.Resource.RequiresPreviewIngressApi);
1190Assert.True(albSubnet.Resource.TryGetLastAnnotation<AzureSubnetServiceDelegationAnnotation>(out var delegation));
1206Assert.Same(aks.Resource, lb.Resource.Parent);
1207Assert.Equal("alb-lb", lb.Resource.AlbName);
1208Assert.True(lb.Resource.TryGetAnnotationsOfType<PipelineStepAnnotation>(out var stepAnnotations));
1226Assert.NotSame(lb1.Resource, lb2.Resource);
1227Assert.Equal("alb-lb1", lb1.Resource.AlbName);
1228Assert.Equal("alb-lb2", lb2.Resource.AlbName);
1231Assert.True(lb1.Resource.TryGetAnnotationsOfType<PipelineStepAnnotation>(out var lb1Steps));
1232Assert.True(lb2.Resource.TryGetAnnotationsOfType<PipelineStepAnnotation>(out var lb2Steps));
1238Assert.True(alb1.Resource.TryGetLastAnnotation<AzureSubnetServiceDelegationAnnotation>(out _));
1239Assert.True(alb2.Resource.TryGetLastAnnotation<AzureSubnetServiceDelegationAnnotation>(out _));
1259var delegation = Assert.Single(albSubnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
1263Assert.Equal("Microsoft.Netapp/volumes", lb.Resource.DisplacedDelegationServiceName);
1280var delegation = Assert.Single(albSubnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
1284Assert.Null(lb1.Resource.DisplacedDelegationServiceName);
1285Assert.Null(lb2.Resource.DisplacedDelegationServiceName);
1301var delegation = Assert.Single(albSubnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
1303Assert.Null(lb.Resource.DisplacedDelegationServiceName);
1324var delegation = Assert.Single(albSubnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
1328Assert.Equal("Microsoft.Sql/managedInstances", lb.Resource.DisplacedDelegationServiceName);
AzureKubernetesInfrastructureTests.cs (101)
32Assert.Single(aks.Resource.NodePools);
33Assert.Equal(AksNodePoolMode.System, aks.Resource.NodePools[0].Mode);
41Assert.Equal(2, aks.Resource.NodePools.Count);
42var workloadPool = aks.Resource.NodePools.First(p => p.Mode is AksNodePoolMode.User);
47Assert.True(container.Resource.TryGetLastAnnotation<KubernetesNodePoolAnnotation>(out var affinity));
66Assert.Equal(2, aks.Resource.NodePools.Count); // system + gpu
67Assert.DoesNotContain(aks.Resource.NodePools, p => p.Name == "workload");
70Assert.True(container.Resource.TryGetLastAnnotation<KubernetesNodePoolAnnotation>(out var affinity));
91Assert.True(container.Resource.TryGetLastAnnotation<KubernetesNodePoolAnnotation>(out var affinity));
107Assert.True(container.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target));
111Assert.Same(aks.Resource, target.ComputeEnvironment);
142Assert.Same(enva.Resource, enva.Resource.KubernetesEnvironment.OwningComputeEnvironment);
143Assert.Same(envb.Resource, envb.Resource.KubernetesEnvironment.OwningComputeEnvironment);
144Assert.True(enva.Resource.TryGetLastAnnotation<KubernetesEnvironmentAnnotation>(out var _));
145Assert.True(envb.Resource.TryGetLastAnnotation<KubernetesEnvironmentAnnotation>(out var _));
151Assert.True(cache.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var cacheTarget),
153Assert.Same(enva.Resource, cacheTarget.ComputeEnvironment);
155Assert.True(api.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var apiTarget),
157Assert.Same(enva.Resource, apiTarget.ComputeEnvironment);
160Assert.True(other.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var otherTarget),
162Assert.Same(envb.Resource, otherTarget.ComputeEnvironment);
347aks.Resource.AzCliPathResolverForTesting = () => "/fake/az";
348aks.Resource.AzCommandRunnerForTesting = (_, _, _) => Task.FromResult(
483aks.Resource.AzCliPathResolverForTesting = () => "/fake/az";
484aks.Resource.AzCommandRunnerForTesting = (_, arguments, _) =>
515Assert.Empty(aks.Resource.Outputs);
516Assert.NotNull(aks.Resource.KubernetesEnvironment.KubeConfigPath);
518["version --short", $"uninstall aks --namespace default --ignore-not-found --kubeconfig \"{aks.Resource.KubernetesEnvironment.KubeConfigPath}\""],
565aks.Resource.Scope = new AzureBicepResourceScope(
566aks.Resource.NameOutputReference,
567aks.Resource.Id);
568aks.Resource.AzCliPathResolverForTesting = () => "/fake/az";
569aks.Resource.AzCommandRunnerForTesting = (_, arguments, _) =>
598Assert.Empty(aks.Resource.Outputs);
599Assert.NotNull(aks.Resource.KubernetesEnvironment.KubeConfigPath);
601["version --short", $"uninstall aks --namespace default --ignore-not-found --kubeconfig \"{aks.Resource.KubernetesEnvironment.KubeConfigPath}\""],
629aks.Resource.AzCliPathResolverForTesting = () =>
643Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
677aks.Resource.AzCliPathResolverForTesting = () =>
694Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
729Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
766Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
800aks.Resource.AzCliPathResolverForTesting = () =>
817Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
863aks.Resource.AzCliPathResolverForTesting = () => "/fake/az";
864aks.Resource.AzCommandRunnerForTesting = (_, arguments, _) =>
889Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
890Assert.True(aks.Resource.KubernetesEnvironment.SkipDestroyCleanup);
927aks.Resource.KubernetesEnvironment.Annotations.Add(
928new HelmReleaseNameAnnotation(ReferenceExpression.Create($"{releaseParameter.Resource}")));
929aks.Resource.KubernetesEnvironment.Annotations.Add(
930new KubernetesNamespaceAnnotation(ReferenceExpression.Create($"{namespaceParameter.Resource}")));
931aks.Resource.AzCliPathResolverForTesting = () => "/fake/az";
932aks.Resource.AzCommandRunnerForTesting = (_, arguments, _) =>
961Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
962Assert.True(aks.Resource.KubernetesEnvironment.SkipDestroyCleanup);
999aks.Resource.KubernetesEnvironment.Annotations.Add(
1000new HelmReleaseNameAnnotation(ReferenceExpression.Create($"{aks.Resource.NameOutputReference}")));
1001aks.Resource.AzCliPathResolverForTesting = () => "/fake/az";
1002aks.Resource.AzCommandRunnerForTesting = (_, arguments, _) =>
1031Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
1032Assert.True(aks.Resource.KubernetesEnvironment.SkipDestroyCleanup);
1064aks.Resource.KubernetesEnvironment.Annotations.Add(
1066aks.Resource.KubernetesEnvironment.Annotations.Add(
1068aks.Resource.AzCliPathResolverForTesting = () => "/fake/az";
1069aks.Resource.AzCommandRunnerForTesting = (_, arguments, _) =>
1091var kubeConfigPath = Assert.IsType<string>(aks.Resource.KubernetesEnvironment.KubeConfigPath);
1131Assert.Null(aks.Resource.KubernetesEnvironment.KubeConfigPath);
1374aks.Resource.Outputs["name"] = clusterName;
1377aks.Resource.AzCliPathResolverForTesting = () => "/usr/bin/az";
1378aks.Resource.AzCommandRunnerForTesting = (path, arguments, logger) =>
1402foreach (var annotation in aks.Resource.Annotations.OfType<PipelineStepAnnotation>())
1407Resource = aks.Resource
1417Assert.NotNull(aks.Resource.ProvisioningTaskCompletionSource);
1418aks.Resource.ProvisioningTaskCompletionSource.TrySetResult();
1447await File.ReadAllTextAsync(aks.Resource.KubernetesEnvironment.KubeConfigPath!, TestContext.Current.CancellationToken));
1475aks.Resource.Outputs["name"] = clusterName;
1478aks.Resource.AzCliPathResolverForTesting = () => "/usr/bin/az";
1479aks.Resource.AzCommandRunnerForTesting = (path, arguments, logger) =>
1496foreach (var annotation in aks.Resource.Annotations.OfType<PipelineStepAnnotation>())
1501Resource = aks.Resource
1507Assert.NotNull(aks.Resource.ProvisioningTaskCompletionSource);
1508aks.Resource.ProvisioningTaskCompletionSource.TrySetResult();
1687aks.Resource.Scope = new AzureBicepResourceScope(scopeResourceGroup, scopeSubscriptionId);
1688aks.Resource.Outputs["name"] = clusterName;
1691aks.Resource.AzCliPathResolverForTesting = () => "/usr/bin/az";
1692aks.Resource.AzCommandRunnerForTesting = (path, arguments, logger) =>
1709foreach (var annotation in aks.Resource.Annotations.OfType<PipelineStepAnnotation>())
1714Resource = aks.Resource
1720Assert.NotNull(aks.Resource.ProvisioningTaskCompletionSource);
1721aks.Resource.ProvisioningTaskCompletionSource.TrySetResult();
1757aks.Resource.Scope = AzureBicepResourceScope.CreateForSubscription(subscriptionId);
1758aks.Resource.Outputs["name"] = clusterName;
1761aks.Resource.AzCliPathResolverForTesting = () => "/usr/bin/az";
1762aks.Resource.AzCommandRunnerForTesting = (path, arguments, logger) =>
1779foreach (var annotation in aks.Resource.Annotations.OfType<PipelineStepAnnotation>())
1784Resource = aks.Resource
1790Assert.NotNull(aks.Resource.ProvisioningTaskCompletionSource);
1791aks.Resource.ProvisioningTaskCompletionSource.TrySetResult();
Aspire.Hosting.Azure.Kusto (14)
AzureKustoBuilderExtensions.cs (13)
118var kustoDatabase = new AzureKustoReadWriteDatabaseResource(name, databaseName, builder.Resource);
119builder.Resource.Databases.Add(kustoDatabase);
130kcsb = GetConnectionStringBuilder(builder.Resource, connectionString);
174var surrogate = new AzureKustoEmulatorResource(builder.Resource);
236var resource = resourceBuilder.Resource;
371if (resourceBuilder.Resource.IsEmulator)
382.Resource
386throw new DistributedApplicationException($"Connection string for Kusto resource '{resourceBuilder.Resource.Name}' is not set.");
389var result = launcher.TryLaunchKustoExplorer(title: "", resourceBuilder.Resource.Name, connectionString, requestText: "");
397.Resource
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 (33)
Aspire.Hosting.Azure.Network (41)
Aspire.Hosting.Azure.PostgreSQL (24)
Aspire.Hosting.Azure.Redis (20)
Aspire.Hosting.Azure.Sandboxes (19)
Aspire.Hosting.Azure.Search (1)
Aspire.Hosting.Azure.ServiceBus (30)
AzureServiceBusExtensions.cs (29)
185var queue = new AzureServiceBusQueueResource(name, queueName, builder.Resource);
186builder.Resource.Queues.Add(queue);
205configure(builder.Resource);
271var topic = new AzureServiceBusTopicResource(name, topicName, builder.Resource);
272builder.Resource.Topics.Add(topic);
291configure(builder.Resource);
313if (builder.Resource.Topics.FirstOrDefault(x => x.Name == topicName) is { } existingResource)
344var subscription = new AzureServiceBusSubscriptionResource(name, subscriptionName, builder.Resource);
345builder.Resource.Subscriptions.Add(subscription);
364configure(builder.Resource);
402if (builder.Resource.IsEmulator)
429var surrogate = new AzureServiceBusEmulatorResource(builder.Resource);
440if (!builder.Resource.HasAnnotationOfType<SqlServerConnectionAnnotation>())
446$"{builder.Resource.Name}-sql-pwd",
453.AddSqlServer($"{builder.Resource.Name}-mssql", passwordBuilder)
462foreach (var sqlServerConfiguration in builder.Resource.Annotations.OfType<SqlServerConfigurationAnnotation>())
467if (!sqlServerBuilder.Resource.Annotations.OfType<EndpointAnnotation>().Any(e => e.Name == SqlServerEndpointName))
475builder.WithAnnotation(new SqlServerConnectionAnnotation(sqlServerBuilder.Resource, []));
484if (!builder.Resource.TryGetLastAnnotation<SqlServerConnectionAnnotation>(out var sqlConnection))
503var customConfigFile = builder.Resource.Annotations.OfType<ConfigFileAnnotation>().FirstOrDefault();
516var tempConfig = JsonNode.Parse(CreateEmulatorConfigJson(builder.Resource));
524var configJsonAnnotations = builder.Resource.Annotations.OfType<ConfigJsonAnnotation>();
672if (builder.Resource.HasAnnotationOfType<SqlServerConnectionAnnotation>())
713if (builder.Resource.HasAnnotationOfType<SqlServerConfigurationAnnotation>())
720if (builder.Resource.TryGetLastAnnotation<SqlServerConnectionAnnotation>(out var previousConnection))
722RemoveWaitFor(builder.Resource, previousConnection.WaitAnnotations);
726var existingAnnotations = builder.Resource.Annotations.ToHashSet();
728var waitAnnotations = builder.Resource.Annotations
732return builder.WithAnnotation(new SqlServerConnectionAnnotation(sqlServer.Resource, waitAnnotations), ResourceAnnotationMutationBehavior.Replace);
Aspire.Hosting.Azure.SignalR (2)
Aspire.Hosting.Azure.Sql (27)
Aspire.Hosting.Azure.Storage (43)
AzureStorageExtensions.cs (42)
188if (builder.Resource.IsHnsEnabled)
221var blobConnectionString = await builder.Resource.GetBlobConnectionString().GetValueAsync(ct).ConfigureAwait(false) ?? throw new DistributedApplicationException($"{nameof(ConnectionStringAvailableEvent)} was published for the '{builder.Resource.Name}' resource but the connection string was null.");
224var queueConnectionString = await builder.Resource.GetQueueConnectionString().GetValueAsync(ct).ConfigureAwait(false) ?? throw new DistributedApplicationException($"{nameof(ConnectionStringAvailableEvent)} was published for the '{builder.Resource.Name}' resource but the connection string was null.");
235foreach (var container in builder.Resource.BlobContainers)
241foreach (var queue in builder.Resource.Queues)
249var healthCheckKey = $"{builder.Resource.Name}_check";
262var surrogate = new AzureStorageEmulatorResource(builder.Resource);
284return builder.WithBindMount(path ?? $".azurite/{builder.Resource.Name}", "/data", isReadOnly);
394if (string.Equals(name, builder.Resource.Name + "-blobs", StringComparisons.ResourceName))
399builder.Resource.ImplicitBlobService ??= defaultService;
404builder.Resource.ImplicitBlobService ??= service;
421builder.Resource.IsHnsEnabled = true;
423if (string.Equals(name, builder.Resource.Name + "-data-lake", StringComparisons.ResourceName))
428builder.Resource.ImplicitDataLakeService ??= defaultService;
433builder.Resource.ImplicitDataLakeService ??= service;
464var name = builder.Resource.Name + "-blobs";
466return builder.Resource.BlobStorageBuilder ??= CreateBlobService(builder, name);
473var name = builder.Resource.Name + "-data-lake";
475return builder.Resource.DataLakeStorageBuilder ??= CreateDataLakeService(builder, name);
495var parentBuilder = builder.Resource.ImplicitBlobService ??= GetBlobService(builder);
496AzureBlobStorageContainerResource resource = new(name, blobContainerName, parentBuilder.Resource);
497builder.Resource.BlobContainers.Add(resource);
534builder.Resource.IsHnsEnabled = true;
538var parentBuilder = builder.Resource.ImplicitDataLakeService ??= GetDataLakeService(builder);
539AzureDataLakeStorageFileSystemResource resource = new(name, dataLakeFileSystemName, parentBuilder.Resource);
540builder.Resource.DataLakeFileSystems.Add(resource);
562AzureBlobStorageContainerResource resource = new(name, blobContainerName, builder.Resource);
563builder.Resource.Parent.BlobContainers.Add(resource);
614if (string.Equals(name, builder.Resource.Name + "-queues", StringComparisons.ResourceName))
619builder.Resource.ImplicitQueueService ??= defaultService;
624builder.Resource.ImplicitQueueService ??= service;
637var name = builder.Resource.Name + "-queues";
639return builder.Resource.QueueStorageBuilder ??= CreateQueueService(builder, name);
659var parentBuilder = builder.Resource.ImplicitQueueService ??= builder.GetQueueService();
660AzureQueueStorageQueueResource resource = new(name, queueName, parentBuilder.Resource);
661builder.Resource.Queues.Add(resource);
812var resource = new AzureBlobStorageResource(name, builder.Resource);
838var resource = new AzureDataLakeStorageResource(name, builder.Resource);
847var resource = new AzureTableStorageResource(name, builder.Resource);
854var resource = new AzureQueueStorageResource(name, builder.Resource);
Aspire.Hosting.Azure.Tests (1897)
AzureApplicationInsightsExtensionsTests.cs (19)
19appInsights.Resource.Outputs["appInsightsConnectionString"] = "myinstrumentationkey";
21var connectionStringResource = (IResourceWithConnectionString)appInsights.Resource;
23Assert.Equal("appInsights", appInsights.Resource.Name);
25Assert.Equal("{appInsights.outputs.appInsightsConnectionString}", appInsights.Resource.ConnectionStringExpression.ValueExpression);
27var (appInsightsManifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
40appInsights.Resource.Outputs["appInsightsConnectionString"] = "myinstrumentationkey";
42var connectionStringResource = (IResourceWithConnectionString)appInsights.Resource;
44Assert.Equal("appInsights", appInsights.Resource.Name);
46Assert.Equal("{appInsights.outputs.appInsightsConnectionString}", appInsights.Resource.ConnectionStringExpression.ValueExpression);
48var appInsightsManifest = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
69appInsights.Resource.Outputs["appInsightsConnectionString"] = "myinstrumentationkey";
71var connectionStringResource = (IResourceWithConnectionString)appInsights.Resource;
73Assert.Equal("appInsights", appInsights.Resource.Name);
75Assert.Equal("{appInsights.outputs.appInsightsConnectionString}", appInsights.Resource.ConnectionStringExpression.ValueExpression);
77var (appInsightsManifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
90appInsights.Resource.Outputs["appInsightsConnectionString"] = "myinstrumentationkey";
97var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
114var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
128var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
AzureAppServiceEnvironmentExtensionsTests.cs (11)
41_ = appServiceEnvironment.Resource.AddAsExistingResource(infra);
44var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
58var registry = appServiceEnvironment.Resource.ContainerRegistry;
73var registry = appServiceEnvironment.Resource.ContainerRegistry;
74Assert.Same(acr.Resource, registry);
96var exception = Assert.Throws<InvalidOperationException>(() => appServiceEnvironment.Resource.ContainerRegistry);
125Assert.Same(finalRegistry.Resource, roles.TargetAzureResource);
127var (_, envBicep) = await AzureManifestUtils.GetManifestWithBicep(env.Resource, skipPreparer: true);
174Assert.Same(identity.Resource, Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi"));
210Assert.Same(registry.Resource, rolesEast.TargetAzureResource);
211Assert.Same(registry.Resource, rolesWest.TargetAzureResource);
AzureAppServiceTests.cs (40)
34.WithEnvironment(context => context.EnvironmentVariables["CLIENT_ID"] = new TestBicepOutputReferenceProvider(identity.Resource.ClientId));
40var website = Assert.IsAssignableFrom<AzureProvisioningResource>(api.Resource.GetDeploymentTargetAnnotation()?.DeploymentTarget);
72Assert.Same(env.Resource, target.ComputeEnvironment);
95var target = project.Resource.GetDeploymentTargetAnnotation();
97Assert.Same(environment.Resource, target.ComputeEnvironment);
143var target = project.Resource.GetDeploymentTargetAnnotation();
147var (_, virtualNetworkBicep) = await GetManifestWithBicep(vnet.Resource);
183var target = project.Resource.GetDeploymentTargetAnnotation();
187var (_, virtualNetworkBicep) = await GetManifestWithBicep(vnet.Resource);
225var target = project.Resource.GetDeploymentTargetAnnotation();
267var target = project.Resource.GetDeploymentTargetAnnotation();
401project2.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
445SetFoundryProjectOutputs(project.Resource);
447web.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
576Assert.NotNull(env.Resource.NameOutputReference);
577Assert.Equal("name", env.Resource.NameOutputReference.Name);
578Assert.Same(env.Resource, env.Resource.NameOutputReference.Resource);
668var (manifest, bicep) = await GetManifestWithBicep(env.Resource);
688var (manifest, bicep) = await GetManifestWithBicep(env.Resource);
719var (manifest, bicep) = await GetManifestWithBicep(env.Resource);
737var steps = await CreateStepsAsync(app, env.Resource);
749Assert.IsAssignableFrom<IAzureComputeEnvironmentResource>(env.Resource);
750Assert.IsAssignableFrom<IComputeEnvironmentResource>(env.Resource);
911project2.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
947project2.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
983project2.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1021project2.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1056project2.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1132project.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1163container.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1187var endpointReferenceEx = env.Resource.GetHostAddressExpression(project.GetEndpoint("http"));
1193Assert.Equal(env.Resource, output.Resource);
1211env.Resource.Outputs["webSiteSuffix"] = "website123";
1212env.Resource.ProvisioningTaskCompletionSource?.TrySetResult();
1219var expression = env.Resource.GetEndpointPropertyExpression(project.GetEndpoint("http").Property(property));
1349project.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1380project.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1412project.Resource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target);
1441featureFlag.Resource,
AzureBicepProvisionerTests.cs (10)
39await BicepUtilities.SetParametersAsync(parameters, registration.Resource, builder.ExecutionContext);
42cached.Data[BicepUtilities.DeploymentStateChecksumKey] = BicepUtilities.GetChecksum(registration.Resource, parameters, null);
47Assert.True(await provisioner.ConfigureResourceAsync(registration.Resource, CancellationToken.None));
48Assert.Equal("original-client", registration.Resource.Outputs["clientId"]);
49registration.Resource.Outputs.Clear();
55Assert.False(await provisioner.ConfigureResourceAsync(registration.Resource, CancellationToken.None));
56Assert.Empty(registration.Resource.Outputs);
108if (resourceEvent.Resource == entries.Resource)
500await CreateProvisioner(services).GetOrCreateResourceAsync(resource.Resource, context, CancellationToken.None);
502Assert.Equal(hasLocation || explicitlyBound, resource.Resource.HasLocationParameter);
AzureConnectorNamespaceTests.cs (45)
52worker.Resource,
77worker.Resource,
183Assert.Same(gateway.Resource, connection.Resource.Parent);
184Assert.Same(gateway.Resource, mcp.Resource.Parent);
187Assert.Single(connection.Resource.Annotations.OfType<ManifestPublishingCallbackAnnotation>()));
190Assert.Single(mcp.Resource.Annotations.OfType<ManifestPublishingCallbackAnnotation>()));
191var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(model, gateway.Resource);
223var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(model, gateway.Resource);
257() => AzureManifestUtils.GetManifestWithBicep(model, gateway.Resource));
284() => AzureManifestUtils.GetManifestWithBicep(model, gateway.Resource));
311Assert.Single(gateway.Resource.Connections);
331Assert.Single(gateway.Resource.McpServerConfigs);
360Assert.NotEqual(firstConnection.Resource.BicepIdentifier, secondConnection.Resource.BicepIdentifier);
361Assert.NotEqual(secondConnection.Resource.BicepIdentifier, mcp.Resource.BicepIdentifier);
369Assert.StartsWith("connectorConnection_location_abcdefghijklmnop_", firstConnection.Resource.BicepIdentifier, StringComparison.Ordinal);
370Assert.StartsWith("connectorMcpServer_location_abcdefghijklmnop_", mcp.Resource.BicepIdentifier, StringComparison.Ordinal);
374var (_, bicep) = await AzureManifestUtils.GetManifestWithBicep(model, gateway.Resource);
389var (_, firstBicep) = await AzureManifestUtils.GetManifestWithBicep(model, firstGateway.Resource);
390var (_, secondBicep) = await AzureManifestUtils.GetManifestWithBicep(model, secondGateway.Resource);
425Assert.Single(mcp.Resource.Connectors);
449Assert.Empty(mcp.Resource.AccessPolicies);
473Assert.False(mcp.Resource.IsExisting);
513Assert.Empty(mcp.Resource.AccessPolicies);
555Assert.Single(mcp.Resource.AccessPolicies);
578Assert.False(connection.Resource.IsExisting);
609Assert.Empty(connection.Resource.AccessPolicies);
639Assert.Empty(connection.Resource.AccessPolicies);
640Assert.Empty(mcp.Resource.AccessPolicies);
663Assert.Empty(connection.Resource.AccessPolicies);
707Assert.Single(office365.Resource.AccessPolicies).Name,
711Assert.Single(sharepoint.Resource.AccessPolicies).Name,
714Assert.Single(compoundParentName.Resource.AccessPolicies).Name,
715Assert.Single(compoundPolicyName.Resource.AccessPolicies).Name);
759Assert.Single(connection.Resource.AccessPolicies);
800connection.Resource.AccessPolicies,
804connection.Resource.AccessPolicies[0].BicepIdentifier,
805connection.Resource.AccessPolicies[1].BicepIdentifier);
835connection.Resource.BicepIdentifier,
836Assert.Single(connection.Resource.AccessPolicies).BicepIdentifier,
837mcp.Resource.BicepIdentifier,
838Assert.Single(mcp.Resource.AccessPolicies).BicepIdentifier
AzureContainerAppEnvironmentExtensionsTests.cs (27)
44_ = containerAppEnvironment.Resource.AddAsExistingResource(infra);
47var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
74Assert.True(logAnalyticsWorkspace.Resource.TryGetLastAnnotation<ExistingAzureResourceAnnotation>(out var existingAnnotation));
75Assert.Equal(lawName.Resource, existingAnnotation.Name);
76Assert.Equal(lawResourceGroup.Resource, existingAnnotation.ResourceGroup);
79Assert.True(containerAppEnvironment.Resource.TryGetLastAnnotation<AzureLogAnalyticsWorkspaceReferenceAnnotation>(out var workspaceRef));
80Assert.Same(logAnalyticsWorkspace.Resource, workspaceRef.Workspace);
83var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(containerAppEnvironment.Resource);
97var registry = containerAppEnvironment.Resource.ContainerRegistry;
112var registry = containerAppEnvironment.Resource.ContainerRegistry;
113Assert.Same(acr.Resource, registry);
135var exception = Assert.Throws<InvalidOperationException>(() => containerAppEnvironment.Resource.ContainerRegistry);
151var (_, envBicep) = await AzureManifestUtils.GetManifestWithBicep(containerAppEnvironment.Resource);
152var (_, vnetBicep) = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
173var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(env.Resource);
198var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(env.Resource);
218var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(env.Resource);
249var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(env.Resource);
278Assert.Same(finalRegistry.Resource, roles.TargetAzureResource);
280var (_, envBicep) = await AzureManifestUtils.GetManifestWithBicep(env.Resource, skipPreparer: true);
420Assert.Same(identity.Resource, Assert.Single(model.Resources.OfType<AzureUserAssignedIdentityResource>(), resource => resource.Name == "env-mi"));
455Assert.Same(registry.Resource, rolesEast.TargetAzureResource);
456Assert.Same(registry.Resource, rolesWest.TargetAzureResource);
474() => AzureManifestUtils.GetManifestWithBicep(env.Resource));
503() => AzureManifestUtils.GetManifestWithBicep(env.Resource, skipPreparer: true));
527() => AzureManifestUtils.GetManifestWithBicep(env.Resource));
600Assert.Same(environment.Resource, api.GetDeploymentTargetAnnotation()!.ComputeEnvironment);
AzureContainerAppExpressEndpointTests.cs (37)
53enabled.Resource, bool.TrueString, nested, ReferenceExpression.Create($"disabled"));
61var apiTarget = GetTarget(api.Resource);
62var webTarget = GetTarget(web.Resource);
68Assert.Same(environment.Resource, domain.Resource);
85var host = environment.Resource.GetHostAddressExpression(endpoint);
88Assert.Same(environment.Resource, output.Resource);
89Assert.Null(api.Resource.GetDeploymentTargetAnnotation());
93var target = GetTarget(api.Resource);
95Assert.Same(target, GetTarget(api.Resource));
96Assert.Single(api.Resource.Annotations.OfType<DeploymentTargetAnnotation>());
98environment.Resource.Outputs[DomainOutputName] = "salmonisland-e9e6a567.westus3.azurecontainerapps.io";
99environment.Resource.ProvisioningTaskCompletionSource?.TrySetResult();
113var expression = environment.Resource.GetEndpointPropertyExpression(endpoint.Property(property));
134var expression = environment.Resource.GetEndpointPropertyExpression(api.GetEndpoint("http").Property(property));
137Assert.Null(api.Resource.GetDeploymentTargetAnnotation());
156environment.Resource.GetEndpointPropertyExpression(api.GetEndpoint("http").Property(property)));
178enabled.Resource, bool.TrueString,
189var exception = Assert.Throws<InvalidOperationException>(GetTarget(web.Resource).GetBicepTemplateString);
222web.WithEnvironment("EARLY_HOST", producerEnvironment.Resource.GetHostAddressExpression(api.GetEndpoint("http")));
227var webTarget = GetTarget(web.Resource);
233output => output.Name == DomainOutputName && output.Resource == producerEnvironment.Resource);
234Assert.Same(producerEnvironment.Resource, domain.Resource);
263var target = GetTarget(web.Resource);
266output => output.Name == DomainOutputName && output.Resource == standard.Resource);
267Assert.Same(standard.Resource, domain.Resource);
295var target = GetTarget(web.Resource);
317? environment.Resource.GetEndpointPropertyExpression(endpoint.Property(EndpointProperty.Url))
323var target = GetTarget(api.Resource);
328Assert.Same(environment.Resource, domain.Resource);
345var firstTarget = GetTarget(first.Resource);
346var secondTarget = GetTarget(second.Resource);
368var target = GetTarget(api.Resource);
369environment.Resource.Outputs[DomainOutputName] = "salmonisland-e9e6a567.westus3.azurecontainerapps.io";
370environment.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"] =
376foreach (var annotation in environment.Resource.Annotations.OfType<PipelineStepAnnotation>())
381Resource = environment.Resource
385environment.Resource.ProvisioningTaskCompletionSource?.TrySetResult();
AzureContainerAppsTests.cs (39)
36.WithEnvironment(context => context.EnvironmentVariables["CLIENT_ID"] = new TestBicepOutputReferenceProvider(identity.Resource.ClientId));
42var resource = Assert.IsAssignableFrom<AzureProvisioningResource>(api.Resource.GetDeploymentTargetAnnotation()?.DeploymentTarget);
134Assert.Same(env.Resource, target.ComputeEnvironment);
156var target = project.Resource.GetDeploymentTargetAnnotation();
158Assert.Same(environment.Resource, target.ComputeEnvironment);
208SetFoundryProjectOutputs(project.Resource);
210var target = web.Resource.GetDeploymentTargetAnnotation();
260Assert.Same(infra.Resource, target.ComputeEnvironment);
291Assert.Same(env.Resource, target?.ComputeEnvironment);
412.WithEnvironment("DATABASE_URL", pgContainer.Resource.UriExpression);
975var target = container.Resource.GetDeploymentTargetAnnotation()?.DeploymentTarget as AzureBicepResource;
1662var (manifest, bicep) = await GetManifestWithBicep(sql.Resource);
1783var managedEnvironment = (ContainerAppManagedEnvironment)env.Resource.AddAsExistingResource(infra);
1795var (manifest, bicep) = await GetManifestWithBicep(azResource.Resource);
1885Assert.IsAssignableFrom<IAzureComputeEnvironmentResource>(env.Resource);
1886Assert.IsAssignableFrom<IComputeEnvironmentResource>(env.Resource);
2808var dockerFileAnnotation = c.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
2874var endpointReferenceEx = env.Resource.GetHostAddressExpression(project.GetEndpoint("http"));
2880Assert.Equal(env.Resource, output.Resource);
2898env.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"] = "example.azurecontainerapps.io";
2899env.Resource.ProvisioningTaskCompletionSource?.TrySetResult();
2908var expression = env.Resource.GetEndpointPropertyExpression(project.GetEndpoint("http").Property(property));
2999var containerRegistryInterface = env.Resource as IContainerRegistry;
3083var webappAcaTarget = webappAcaResource.GetDeploymentTargetAnnotation(aca.Resource);
3085Assert.Same(aca.Resource, webappAcaTarget.ComputeEnvironment);
3089var webappServiceTarget = webappServiceResource.GetDeploymentTargetAnnotation(appService.Resource);
3091Assert.Same(appService.Resource, webappServiceTarget.ComputeEnvironment);
3095var containerAcaTarget = containerAcaResource.GetDeploymentTargetAnnotation(aca.Resource);
3097Assert.Same(aca.Resource, containerAcaTarget.ComputeEnvironment);
3103var containerAppServiceAcaTarget = containerAppServiceResource.GetDeploymentTargetAnnotation(aca.Resource);
3107Assert.Null(webappAcaResource.GetDeploymentTargetAnnotation(appService.Resource));
3108Assert.Null(webappServiceResource.GetDeploymentTargetAnnotation(aca.Resource));
3109Assert.Null(containerAcaResource.GetDeploymentTargetAnnotation(appService.Resource));
3193featureFlag.Resource,
3236featureFlag.Resource,
3238ReferenceExpression.Create($"prefix-{connectionPrefix.Resource}-enabled"),
3279innerFlag.Resource,
3285outerFlag.Resource,
3323var steps = await CreateStepsAsync(app, env.Resource);
AzureCosmosDBEmulatorFunctionalTests.cs (21)
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);
AzureCosmosDBExtensionsTests.cs (103)
38var endpointAnnotation = cosmos.Resource.Annotations.OfType<EndpointAnnotation>().FirstOrDefault();
59var containerImageAnnotation = cosmos.Resource.Annotations.OfType<ContainerImageAnnotation>().FirstOrDefault();
76var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
107Assert.Equal("{cosmos.outputs.connectionString}", cosmos.Resource.ConnectionStringExpression.ValueExpression);
110Assert.Equal("AccountEndpoint={cosmos.outputs.connectionString};Database=db1", db1.Resource.ConnectionStringExpression.ValueExpression);
111Assert.Equal("AccountEndpoint={cosmos.outputs.connectionString};Database=db1;Container=container1", container1.Resource.ConnectionStringExpression.ValueExpression);
137Assert.DoesNotContain(";Database=db1", cosmos.Resource.ConnectionStringExpression.ValueExpression);
138Assert.DoesNotContain(";Database=db1;Container=container1", cosmos.Resource.ConnectionStringExpression.ValueExpression);
139Assert.Contains(";Database=db1", db1.Resource.ConnectionStringExpression.ValueExpression);
140Assert.Contains(";Database=db1;Container=container1", container1.Resource.ConnectionStringExpression.ValueExpression);
142Assert.Contains(";Database=db", db2.Resource.ConnectionStringExpression.ValueExpression);
143Assert.Contains(";Database=db;Container=container", container2.Resource.ConnectionStringExpression.ValueExpression);
156((IResourceWithAzureFunctionsConfig)cosmos.Resource).ApplyAzureFunctionsConfiguration(target, "cosmos");
163((IResourceWithAzureFunctionsConfig)db1.Resource).ApplyAzureFunctionsConfiguration(target, "db1");
172((IResourceWithAzureFunctionsConfig)container1.Resource).ApplyAzureFunctionsConfiguration(target, "container1");
207var manifest = await GetManifestWithBicep(model, cosmos.Resource);
257Assert.Equal("{cosmos-kv.secrets.connectionstrings--cosmos}", cosmos.Resource.ConnectionStringExpression.ValueExpression);
258Assert.Equal("{cosmos-kv.secrets.connectionstrings--db1}", database.Resource.ConnectionStringExpression.ValueExpression);
259Assert.Equal("{cosmos-kv.secrets.connectionstrings--container1}", container.Resource.ConnectionStringExpression.ValueExpression);
261var manifest = await GetManifestWithBicep(cosmos.Resource);
276Assert.True(cosmos.Resource.IsContainer());
278var csExpr = cosmos.Resource.ConnectionStringExpression;
284Assert.Equal(cs, await ((IResourceWithConnectionString)cosmos.Resource).GetConnectionStringAsync());
297Assert.True(cosmos.Resource.IsContainer());
299var csExpr = cosmos.Resource.ConnectionStringExpression;
305Assert.Equal(cs, await ((IResourceWithConnectionString)cosmos.Resource).GetConnectionStringAsync());
375var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
386var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
388Assert.Equal("cosmos", cosmos.Resource.Name);
406cosmos.Resource.Outputs["connectionString"] = "mycosmosconnectionstring";
408var manifest = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
429var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
431Assert.Equal("cosmos", cosmos.Resource.Name);
469kv.Resource.SecretResolver = (secretRef, _) =>
479var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
490var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
492Assert.Equal("cosmos", cosmos.Resource.Name);
510cosmos.Resource.Outputs["connectionString"] = "mycosmosconnectionstring";
512var manifest = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
531var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
533Assert.Equal("cosmos", cosmos.Resource.Name);
544var manifest = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
556Assert.True(cosmos.Resource.IsEmulator());
557Assert.Contains(cosmos.Resource.Annotations, a => a is EmulatorResourceAnnotation);
568Assert.True(cosmos.Resource.IsEmulator());
569Assert.Contains(cosmos.Resource.Annotations, a => a is EmulatorResourceAnnotation);
579Assert.NotEmpty(cosmos.Resource.Annotations.OfType<OtlpExporterAnnotation>());
583var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, serviceProvider);
615_ = cosmosdb.Resource.AddAsExistingResource(infra);
618var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
645Assert.NotNull(cosmos.Resource.ConnectionStringSecretOutput);
646Assert.Same(cosmos.Resource, cosmos.Resource.ConnectionStringSecretOutput.SecretOwner);
648Assert.NotNull(cosmos.Resource.PrimaryAccessKeySecretOutput);
649Assert.Same(cosmos.Resource, cosmos.Resource.PrimaryAccessKeySecretOutput.SecretOwner);
652var references = ((IValueWithReferences)cosmos.Resource.ConnectionStringSecretOutput).References.ToList();
653Assert.Contains(cosmos.Resource, references);
654Assert.Contains(cosmos.Resource.ConnectionStringSecretOutput.Resource, references);
665Assert.Contains(cosmos.Resource.Annotations, a => a is HttpsCertificateConfigurationCallbackAnnotation);
676Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is HttpsCertificateConfigurationCallbackAnnotation);
687cosmos.Resource.Annotations.OfType<HttpsCertificateConfigurationCallbackAnnotation>());
695Resource = cosmos.Resource,
722cosmos.Resource.Annotations.OfType<CertificateTrustConfigurationCallbackAnnotation>());
730Resource = cosmos.Resource,
754cosmos.Resource.Annotations.OfType<HttpsCertificateConfigurationCallbackAnnotation>());
763Resource = cosmos.Resource,
809var emulatorEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "emulator");
841var emulatorEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "emulator");
870var dataExplorerEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "data-explorer");
900var dataExplorerEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "data-explorer");
911var image = Assert.Single(cosmos.Resource.Annotations.OfType<ContainerImageAnnotation>());
926var image = Assert.Single(cosmos.Resource.Annotations.OfType<ContainerImageAnnotation>());
939var image = Assert.Single(cosmos.Resource.Annotations.OfType<ContainerImageAnnotation>());
953var mount = Assert.Single(cosmos.Resource.Annotations.OfType<ContainerMountAnnotation>());
961var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, serviceProvider);
973var mount = Assert.Single(cosmos.Resource.Annotations.OfType<ContainerMountAnnotation>());
978var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1013var endpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "data-explorer");
1019var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, serviceProvider);
1033var csExpr = cosmos.Resource.ConnectionStringExpression;
1049var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, serviceProvider);
1062var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1073var healthEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "emulatorhealth");
1078Assert.Contains(cosmos.Resource.Annotations, a => a is HealthCheckAnnotation);
1088Assert.Contains(cosmos.Resource.Annotations, a => a is HealthCheckAnnotation hc && hc.Key == "cosmos_check");
1099var mount = Assert.Single(cosmos.Resource.Annotations.OfType<ContainerMountAnnotation>());
1112var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1124var endpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "data-explorer");
1141() => builder.Eventing.PublishAsync(new ResourceReadyEvent(cosmos.Resource, app.Services)));
1158await builder.Eventing.PublishAsync(new ConnectionStringAvailableEvent(cosmos.Resource, app.Services));
1201Assert.False(cosmos.Resource.IsEmulator);
1202Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is ContainerImageAnnotation);
1203Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is EmulatorResourceAnnotation);
1204Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is ContainerMountAnnotation);
1214Assert.False(cosmos.Resource.IsEmulator);
1215Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is ContainerImageAnnotation);
1216Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is EmulatorResourceAnnotation);
1217Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is ContainerMountAnnotation);
1252cosmos.Resource,
1255foreach (var callback in cosmos.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>())
1277cosmos.Resource,
1280foreach (var callback in cosmos.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>())
AzureDeployerTests.cs (55)
360var dockerFileAnnotation = c.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
483Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
484Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
485Assert.Equal(GetTestResourceId("/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity"), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
486Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
487Assert.Equal($"/subscriptions/{TestSubscriptionId}/resourceGroups/{TestResourceGroupName}/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
543Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
544Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
545Assert.Equal(GetTestResourceId("/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity"), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
546Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
547Assert.Equal($"/subscriptions/{TestSubscriptionId}/resourceGroups/{TestResourceGroupName}/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
609Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
610Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
611Assert.Equal(GetTestResourceId("/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity"), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
612Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
613Assert.Equal($"/subscriptions/{TestSubscriptionId}/resourceGroups/{TestResourceGroupName}/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
677var (containerAppSubscriptionId, containerAppResourceGroupName) = GetSubscriptionAndResourceGroup((string)containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]!);
713var envResource = Assert.IsAssignableFrom<AzureBicepResource>(environment.Resource);
714var apiTarget = Assert.IsAssignableFrom<AzureBicepResource>(api.Resource.GetDeploymentTargetAnnotation()!.DeploymentTarget);
715var webTarget = Assert.IsAssignableFrom<AzureBicepResource>(web.Resource.GetDeploymentTargetAnnotation()!.DeploymentTarget);
799var webSiteSuffix = Assert.IsType<string>(appServiceEnv.Resource.Outputs["webSiteSuffix"]);
801var (planSubscriptionId, planResourceGroupName) = GetSubscriptionAndResourceGroup((string)appServiceEnv.Resource.Outputs["planId"]!);
894Assert.Equal("acaregistry", acaEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
895Assert.Equal("acaregistry.azurecr.io", acaEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
896Assert.Equal(GetTestResourceId("/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aca-identity"), acaEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
897Assert.Equal("aca.westus.azurecontainerapps.io", acaEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
898Assert.Equal(GetTestResourceId("/providers/Microsoft.App/managedEnvironments/acaenv"), acaEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
901Assert.Equal("aasregistry", aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
902Assert.Equal("aasregistry.azurecr.io", aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
903Assert.Equal(GetTestResourceId("/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aas-identity"), aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
904Assert.Equal(GetTestResourceId("/providers/Microsoft.Web/serverfarms/aasplan"), aasEnv.Resource.Outputs["planId"]);
905Assert.Equal("aas-client-id", aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_CLIENT_ID"]);
1021var setValue = await param.Resource.GetValueAsync(default);
1095var setValue = await param.Resource.GetValueAsync(default);
1145Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
1146Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
1147Assert.Equal(GetTestResourceId("/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity"), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
1148Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
1149Assert.Equal($"/subscriptions/{TestSubscriptionId}/resourceGroups/{TestResourceGroupName}/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
1207Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
1208Assert.Equal(GetTestResourceId("/providers/Microsoft.App/managedEnvironments/testenv"), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
1417Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
1418Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
1419Assert.Equal(GetTestResourceId("/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity"), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
1420Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
1421Assert.Equal($"/subscriptions/{TestSubscriptionId}/resourceGroups/{TestResourceGroupName}/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
1424var funcAppDeployment = Assert.IsAssignableFrom<AzureProvisioningResource>(funcApp.Resource.GetDeploymentTargetAnnotation()?.DeploymentTarget);
1426Assert.Equal(await ((BicepOutputReference)funcAppDeployment.Parameters["env_outputs_azure_container_apps_environment_default_domain"]!).GetValueAsync(), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
1427Assert.Equal(await ((BicepOutputReference)funcAppDeployment.Parameters["env_outputs_azure_container_apps_environment_id"]!).GetValueAsync(), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
2119Assert.Equal("secret-key-12345", await regularParam.Resource.GetValueAsync(default));
2120Assert.Equal("Server=localhost;Database=mydb", await connectionStringParam.Resource.GetValueAsync(default));
2121Assert.Equal("custom-value-xyz", await customKeyParam.Resource.GetValueAsync(default));
2175Assert.Equal("secret-key-12345", await regularParam.Resource.GetValueAsync(default));
2176Assert.Equal("Server=localhost;Database=mydb", await connectionStringParam.Resource.GetValueAsync(default));
2177Assert.Equal("custom-value-xyz", await customKeyParam.Resource.GetValueAsync(default));
AzureEnvironmentResourceExtensionsTests.cs (244)
89directory.Resource.Outputs["objectId"] = "aaaabbbb-0000-cccc-1111-dddd2222eeee";
90directory.Resource.Outputs["servicePrincipalId"] = "00001111-aaaa-2222-bbbb-3333cccc4444";
91directory.Resource.Outputs["tenantId"] = "87654321-4321-4321-4321-210987654321";
93var originalOutputs = new Dictionary<string, object?>(directory.Resource.Outputs);
97storage.Resource.Outputs["id"] = "storage-resource";
99await notifications.PublishUpdateAsync(directory.Resource, snapshot => snapshot with
119Assert.Equal(originalOutputs, directory.Resource.Outputs);
120Assert.True(notifications.TryGetCurrentState(directory.Resource.Name, out var directorySnapshot));
126Assert.Empty(storage.Resource.Outputs);
140Assert.Equal("storage-resource", storage.Resource.Outputs["id"]);
166}.Order(), directory.Resource.Annotations.OfType<ResourceCommandAnnotation>().Select(command => command.Name).Order());
205arm.Resource.Scope = AzureBicepResourceScope.CreateForTenant();
215arm.Resource.Annotations.OfType<ResourceCommandAnnotation>().Select(command => command.Name).Order());
233? controller.DeleteAzureResourceAsync(model, directory.Resource.Name)
234: controller.ChangeResourceLocationAsync(model, directory.Resource.Name, CancellationToken.None));
357Assert.Same(firstBuilder.Resource, secondBuilder.Resource);
624storage.Resource.Outputs["blobEndpoint"] = "https://storage.blob.core.windows.net/";
635await notifications.PublishUpdateAsync(storage.Resource, state => state with
674Assert.Empty(storage.Resource.Outputs);
680Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
792Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
794Assert.Equal("https://storage.blob.core.windows.net/", storage.Resource.Outputs["blobEndpoint"]);
811storage.Resource.ProvisioningTaskCompletionSource = existingTcs;
821Assert.Same(existingTcs, storage.Resource.ProvisioningTaskCompletionSource);
855Assert.Empty(storage.Resource.Outputs);
865Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
867Assert.Equal("https://storage.blob.core.windows.net/", storage.Resource.Outputs["blobEndpoint"]);
903Assert.Equal("https://storage.blob.core.windows.net/", storage.Resource.Outputs["blobEndpoint"]);
932Assert.Equal("https://storage.blob.core.windows.net/", storage.Resource.Outputs["blobEndpoint"]);
975Assert.Contains(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ForgetStateCommandName);
976var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
993Assert.Contains(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.GetAzureResourceCommandName);
994var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
995var deleteCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.DeleteAzureResourceCommandName);
996var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
1000Assert.DoesNotContain(blobs.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c =>
1024await notifications.PublishUpdateAsync(keyVault.Resource, state => state with { State = KnownResourceStates.Running });
1026Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
1059await notifications.PublishUpdateAsync(postgres.Resource, state => state with { State = KnownResourceStates.Running });
1061Assert.True(notifications.TryGetCurrentState(postgres.Resource.Name, out var postgresEvent));
1064var changeLocationCommand = Assert.Single(postgres.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
1069ResourceName = postgres.Resource.Name,
1145var getResourceCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.GetAzureResourceCommandName);
1150ResourceName = storage.Resource.Name,
1229var getResourceCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.GetAzureResourceCommandName);
1234ResourceName = storage.Resource.Name,
1498var getResourceCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.GetAzureResourceCommandName);
1503ResourceName = storage.Resource.Name,
1562var getResourceCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.GetAzureResourceCommandName);
1567ResourceName = storage.Resource.Name,
1623var getResourceCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.GetAzureResourceCommandName);
1628ResourceName = storage.Resource.Name,
1682await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = new("Waiting for Deployment", KnownResourceStateStyles.Info) });
1684var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
1689ResourceName = storage.Resource.Name,
1703Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1737await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = new("Creating ARM Deployment", KnownResourceStateStyles.Info) });
1739Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1814await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = new(AzureProvisioningController.WaitingForDeploymentState, KnownResourceStateStyles.Info) });
1816Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
1819var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
1824ResourceName = storage.Resource.Name,
1864var activeReprovisionTask = controller.ReprovisionResourceAsync(model, storage.Resource.Name, CancellationToken.None);
1877var command = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == commandName);
1882ResourceName = storage.Resource.Name,
1893Assert.Equal([storage.Resource.Name], testBicepProvisioner.ProvisionedResources);
1923var activeReprovisionTask = controller.ReprovisionResourceAsync(model, storage1.Resource.Name, CancellationToken.None);
1929var queuedReprovisionCommand = Assert.Single(storage2.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
1933ResourceName = storage2.Resource.Name,
1941var conflictingCommand = Assert.Single(storage2.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.DeleteAzureResourceCommandName);
1945ResourceName = storage2.Resource.Name,
1984await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
1986Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2022await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
2024var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
2029ResourceName = storage.Resource.Name,
2041Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2102storage.Resource.Outputs["blobEndpoint"] = "https://storage.blob.core.windows.net/";
2103storage2.Resource.Outputs["blobEndpoint"] = "https://storage2.blob.core.windows.net/";
2105await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = new("Failed to Provision", KnownResourceStateStyles.Error) });
2106await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
2108var deleteCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.DeleteAzureResourceCommandName);
2113ResourceName = storage.Resource.Name,
2141Assert.Empty(storage.Resource.Outputs);
2142Assert.Equal("https://storage2.blob.core.windows.net/", storage2.Resource.Outputs["blobEndpoint"]);
2144Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2147Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2200await notifications.PublishUpdateAsync(keyVault.Resource, state => state with { State = new("Failed to Provision", KnownResourceStateStyles.Error) });
2202var deleteCommand = Assert.Single(keyVault.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.DeleteAzureResourceCommandName);
2207ResourceName = keyVault.Resource.Name,
2226Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
2270await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
2271await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
2273var deleteCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.DeleteAzureResourceCommandName);
2278ResourceName = storage.Resource.Name,
2292Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2296Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2348await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
2350var deleteCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.DeleteAzureResourceCommandName);
2351var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
2356ResourceName = storage.Resource.Name,
2370ResourceName = storage.Resource.Name,
2380Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2413storage.Resource.Outputs["blobEndpoint"] = "https://storage.blob.core.windows.net/";
2414storage2.Resource.Outputs["blobEndpoint"] = "https://storage2.blob.core.windows.net/";
2416await notifications.PublishUpdateAsync(storage.Resource, state => state with
2423await notifications.PublishUpdateAsync(storage2.Resource, state => state with
2430var forgetCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ForgetStateCommandName);
2435ResourceName = storage.Resource.Name,
2450Assert.Empty(storage.Resource.Outputs);
2451Assert.Equal("https://storage2.blob.core.windows.net/", storage2.Resource.Outputs["blobEndpoint"]);
2453Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2458Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2491await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
2492await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
2494var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
2499ResourceName = storage.Resource.Name,
2507Assert.Contains(storage.Resource.Outputs, output => output.Key == "blobEndpoint");
2515Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2518Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2545await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
2546await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
2548var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
2553ResourceName = storage.Resource.Name,
2567Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2570Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2581Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2606await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
2608var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
2613ResourceName = storage.Resource.Name,
2627Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2639Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2684var reprovisionStorageCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
2685var reprovisionStorage2Command = Assert.Single(storage2.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
2690ResourceName = storage.Resource.Name,
2704ResourceName = storage2.Resource.Name,
2761var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
2762var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
2767ResourceName = storage.Resource.Name,
2778Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2784ResourceName = storage.Resource.Name,
2795Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2798Assert.True(notifications.TryGetCurrentState(blobs.Resource.Name, out var blobsEvent));
2807Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
2856await WaitForResourceStateAsync(notifications, storage2.Resource.Name, "Running");
2857Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var runningStorage2Event));
2860var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
2865ResourceName = storage.Resource.Name,
2873Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
2877Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
2882Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out storage2Event));
2906var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
2911ResourceName = storage.Resource.Name,
2958var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
2959var cancelCommand = Assert.Single(storage2.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
2964ResourceName = storage.Resource.Name,
2978ResourceName = storage2.Resource.Name,
3023await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
3024await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
3026var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3031ResourceName = storage.Resource.Name,
3047Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
3056Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
3096await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = new("Failed to Provision", KnownResourceStateStyles.Error) });
3097await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
3099var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3104ResourceName = storage.Resource.Name,
3150await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
3152var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3157ResourceName = storage.Resource.Name,
3265await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
3267var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3278ResourceName = storage.Resource.Name,
3338await notifications.PublishUpdateAsync(storage.Resource, state => state with
3344var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3348ResourceName = storage.Resource.Name,
3357Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
3398await notifications.PublishUpdateAsync(storage.Resource, state => state with
3404var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3409ResourceName = storage.Resource.Name,
3471await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
3473var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3478ResourceName = storage.Resource.Name,
3524await notifications.PublishUpdateAsync(storage.Resource, state => state with
3530var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3535ResourceName = storage.Resource.Name,
3587await notifications.PublishUpdateAsync(storage.Resource, state => state with
3593var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3598ResourceName = storage.Resource.Name,
3659await notifications.PublishUpdateAsync(storage.Resource, state => state with
3665var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
3669ResourceName = storage.Resource.Name,
3716await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
3717await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
3931await notifications.PublishUpdateAsync(storage.Resource, state => state with
4161await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
4163var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
4168ResourceName = storage.Resource.Name,
4233await notifications.PublishUpdateAsync(keyVault.Resource, state => state with { State = new("Canceled", KnownResourceStateStyles.Info) });
4235var reprovisionCommand = Assert.Single(keyVault.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
4240ResourceName = keyVault.Resource.Name,
4253Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
4313await notifications.PublishUpdateAsync(keyVault.Resource, state => state with { State = new("Canceled", KnownResourceStateStyles.Info) });
4315var reprovisionCommand = Assert.Single(keyVault.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
4320ResourceName = keyVault.Resource.Name,
4357Assert.True(notifications.TryGetCurrentState(keyVault.Resource.Name, out var keyVaultEvent));
4387await notifications.PublishUpdateAsync(postgres.Resource, state => state with { State = KnownResourceStates.Running });
4389var reprovisionCommand = Assert.Single(postgres.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
4394ResourceName = postgres.Resource.Name,
4439await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
4441var changeLocationCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
4446ResourceName = storage.Resource.Name,
4485await notifications.PublishUpdateAsync(keyVault.Resource, state => state with { State = KnownResourceStates.Running });
4487var changeLocationCommand = Assert.Single(keyVault.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ChangeResourceLocationCommandName);
4492ResourceName = keyVault.Resource.Name,
4531await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
4533var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
4538ResourceName = storage.Resource.Name,
4564Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
4599var reprovisionCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.ReprovisionResourceCommandName);
4606ResourceName = storage.Resource.Name,
4646await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
4659Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4699await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
4706Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4757await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
4758await notifications.PublishUpdateAsync(storage2.Resource, state => state with { State = KnownResourceStates.Running });
4765Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
4768Assert.True(notifications.TryGetCurrentState(storage2.Resource.Name, out var storage2Event));
4801await notifications.PublishUpdateAsync(storage.Resource, state => state with { State = KnownResourceStates.Running });
4808Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var resourceEvent));
4865Assert.Empty(storage.Resource.Outputs);
4910Assert.Empty(storage.Resource.Outputs);
4956Assert.Empty(storage.Resource.Outputs);
5126var cancelCommand = Assert.Single(storage.Resource.Annotations.OfType<ResourceCommandAnnotation>(), c => c.Name == AzureProvisioningController.CancelCommandName);
5130ResourceName = storage.Resource.Name,
5140Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out var storageEvent));
5146Assert.True(notifications.TryGetCurrentState(storage.Resource.Name, out storageEvent));
5176Assert.Equal([storage.Resource.Name, storage2.Resource.Name], Assert.IsType<string[]>(failedResourcesProperty.Value));
5215var icon = Assert.Single(resourceBuilder.Resource.Annotations.OfType<ResourceIconAnnotation>());
5261Assert.Equal(expectedLocation.Resource, resource.Location);
5277Assert.Equal(expectedResourceGroup.Resource, resource.ResourceGroupName);
AzureEventHubsExtensionsTests.cs (34)
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);
84hb.Configuration["ConnectionStrings:hub"] = await eventHub.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
90hb.Configuration["ConnectionStrings:eventhubns"] = await eventHubns.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
91hb.AddAzureEventHubProducerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
92hb.AddAzureEventHubConsumerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
130await app.ResourceNotifications.WaitForResourceHealthyAsync(eventHubns.Resource.Name, cts.Token);
136hb.Configuration["ConnectionStrings:eventhubns"] = await eventHubns.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
137hb.AddAzureEventHubProducerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
138hb.AddAzureEventHubConsumerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
142hb.Configuration["ConnectionStrings:eventhubns"] = await eventHubns.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None) + $";EntityPath={hubName};";
168var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
187var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
206var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
225var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
244var endpoints = eventHubs.Resource.Annotations.OfType<EndpointAnnotation>().ToList();
272var containerImageAnnotation = eventHubs.Resource.Annotations.OfType<ContainerImageAnnotation>().FirstOrDefault();
292var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(model, eventHubs.Resource);
325var manifest = await AzureManifestUtils.GetManifestWithBicep(eventHubs.Resource);
517Assert.Same(eventHubs.Resource.Annotations, sourceResource.Annotations);
519var persistenceAnnotation = Assert.Single(eventHubs.Resource.Annotations.OfType<PersistenceAnnotation>());
568Assert.Equal("{eh.outputs.eventHubsEndpoint}", eventHubs.Resource.ConnectionStringExpression.ValueExpression);
569Assert.Equal("Endpoint={eh.outputs.eventHubsEndpoint};EntityPath=hub1", eventHub.Resource.ConnectionStringExpression.ValueExpression);
570Assert.Equal("Endpoint={eh.outputs.eventHubsEndpoint};EntityPath=hub1;ConsumerGroup=cg1", consumerGroup.Resource.ConnectionStringExpression.ValueExpression);
583((IResourceWithAzureFunctionsConfig)eventHubs.Resource).ApplyAzureFunctionsConfiguration(target, "eh");
593((IResourceWithAzureFunctionsConfig)eventHub.Resource).ApplyAzureFunctionsConfiguration(target, "hub1");
609((IResourceWithAzureFunctionsConfig)consumerGroup.Resource).ApplyAzureFunctionsConfiguration(target, "cg1");
639Assert.True(eventHubs.Resource.IsEmulator());
640Assert.Contains(eventHubs.Resource.Annotations, a => a is EmulatorResourceAnnotation);
670_ = eventHubs.Resource.AddAsExistingResource(infra);
673var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
AzureFrontDoorPrivateLinkTests.cs (19)
38var (_, bicep) = await GetManifestWithBicep(frontDoor.Resource);
61var (_, bicep) = await GetManifestWithBicep(environment.Resource);
83var (_, bicep) = await GetManifestWithBicep(frontDoor.Resource);
126var (_, bicep) = await GetManifestWithBicep(frontDoor.Resource);
156var (_, bicep) = await GetManifestWithBicep(GetContainerApp(web.Resource));
185var (_, frontDoorBicep) = await GetManifestWithBicep(frontDoor.Resource);
186var (_, publicEnvironmentBicep) = await GetManifestWithBicep(publicEnvironment.Resource);
215var (_, firstBicep) = await GetManifestWithBicep(first.Resource);
216var (_, secondBicep) = await GetManifestWithBicep(second.Resource);
251var (_, bicep) = await GetManifestWithBicep(frontDoor.Resource);
362Assert.Single(frontDoor.Resource.Annotations.OfType<AzureFrontDoorPrivateLinkAnnotation>());
363Assert.Single(environment.Resource.Annotations.OfType<PrivateEndpointTargetAnnotation>());
377Assert.Empty(environment.Resource.Annotations.OfType<PrivateEndpointTargetAnnotation>());
378Assert.Empty(frontDoor.Resource.Annotations.OfType<AzureFrontDoorPrivateLinkAnnotation>());
402var connection = Assert.Single(frontDoor.Resource.Annotations.OfType<AzureFrontDoorPrivateLinkAnnotation>());
453var (_, bicep) = await GetManifestWithBicep(frontDoor.Resource);
479var (_, bicep) = await GetManifestWithBicep(frontDoor.Resource);
486Assert.Single(target.Resource.Annotations.OfType<PrivateEndpointTargetAnnotation>());
496var target = Assert.IsAssignableFrom<IAzureCdnPrivateLinkTarget>(environment.Resource);
AzureFunctionsTests.cs (28)
46Assert.True(funcApp.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relAnnotations));
177Assert.True(funcApp.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relAnnotations));
180Assert.Equal(storage.Resource, rel.Resource);
294Assert.True(funcApp.Resource.TryGetAnnotationsOfType<EnvironmentCallbackAnnotation>(out var envAnnotations));
319Assert.True(funcApp.Resource.TryGetAnnotationsOfType<EnvironmentCallbackAnnotation>(out var envAnnotations));
350Assert.True(funcApp.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relAnnotations));
375Assert.True(funcApp.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relAnnotations));
378Assert.Equal(storage.Resource, rel.Resource);
421Assert.Equal("npm", funcApp.Resource.Command);
423var args = await ArgumentEvaluator.GetArgumentListAsync(funcApp.Resource);
448Assert.Equal("func", funcApp.Resource.Command);
450var args = await ArgumentEvaluator.GetArgumentListAsync(funcApp.Resource);
483var manifest = await ManifestUtils.GetManifest(funcApp.Resource, tempDir.Path);
496var endpoint = Assert.Single(funcApp.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "http");
515var dockerBuildAnnotation = funcApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
537await ManifestUtils.GetManifest(funcApp.Resource, tempDir.Path);
555var dockerBuildAnnotation = funcApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
570var manifest = await ManifestUtils.GetManifest(funcApp.Resource, tempDir.Path);
576var dockerBuildAnnotation = funcApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
596var (_, bicep) = await GetManifestWithBicep(funcApp.Resource.GetDeploymentTargetAnnotation()!.DeploymentTarget);
610var commands = funcApp.Resource.Annotations.OfType<RequiredCommandAnnotation>().Select(a => a.Command).ToArray();
624var commands = funcApp.Resource.Annotations.OfType<RequiredCommandAnnotation>().Select(a => a.Command).ToArray();
677var (_, bicep) = await GetManifestWithBicep(funcApp.Resource.GetDeploymentTargetAnnotation()!.DeploymentTarget);
986Assert.True(funcApp.Resource.TryGetLastAnnotation<IProjectMetadata>(out var projectMetadata));
1006Assert.True(funcApp.Resource.TryGetLastAnnotation<IProjectMetadata>(out var projectMetadata));
1090Assert.True(funcApp.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relAnnotations));
1093Assert.Equal(customStorage.Resource, rel.Resource);
1124var annotation = funcApp.Resource.Annotations.OfType<RequiredCommandAnnotation>().SingleOrDefault();
AzureKeyVaultTests.cs (47)
21var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(mykv.Resource);
37var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(model, mykv.Resource);
57kv.Resource.SecretResolver = (s, ct) =>
63var secretReference = kv.Resource.GetSecret("mySecret");
72containerBuilder.Resource,
77containerBuilder.Resource,
98var secretReference = kv.Resource.GetSecret("mySecret");
99var secretReference2 = kv.Resource.GetSecret("mySecret2");
120var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
136var secretReference = kv.Resource.GetSecret("mySecret");
137var secretReference2 = kv.Resource.GetSecret("mySecret2");
158module2.Resource.Scope = new(existingRg.Resource);
160var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
161var (manifest2, bicep2) = await AzureManifestUtils.GetManifestWithBicep(module2.Resource, skipPreparer: true);
176var secretReference = kv.Resource.GetSecret("mySecret");
177var secretReference2 = kv.Resource.GetSecret("mySecret2");
189var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
206Assert.Same(kv.Resource, secret.Resource);
220Assert.IsType<AzureKeyVaultSecretResource>(secretResource.Resource);
221Assert.Equal("mySecret", secretResource.Resource.Name);
222Assert.Equal("mySecret", secretResource.Resource.SecretName);
223Assert.Same(kv.Resource, secretResource.Resource.Parent);
224Assert.Single(kv.Resource.Secrets);
225Assert.Same(secretResource.Resource, kv.Resource.Secrets[0]);
237var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(kv.Resource);
252var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(kv.Resource);
267Assert.True(secretResource.Resource.TryGetAnnotationsOfType<ManifestPublishingCallbackAnnotation>(out var manifestAnnotations));
286var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(kv.Resource);
381_ = keyVault.Resource.AddAsExistingResource(infra);
384var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
397Assert.False(keyVault.Resource.IsEmulator);
408keyVault.Resource.Annotations.Add(new ContainerImageAnnotation
413Assert.True(keyVault.Resource.IsEmulator);
424keyVault.Resource.Annotations.Add(new ContainerImageAnnotation
432var connectionString = keyVault.Resource.ConnectionStringExpression;
434Assert.True(keyVault.Resource.IsEmulator);
445var connectionString = keyVault.Resource.ConnectionStringExpression;
447Assert.False(keyVault.Resource.IsEmulator);
463keyVault.Resource.Annotations.Add(new ConnectionStringRedirectAnnotation(redirectTarget));
465var connectionString = keyVault.Resource.ConnectionStringExpression;
466var connectionStringValue = await keyVault.Resource.GetConnectionStringAsync(default);
484keyVault.Resource.Annotations.Add(new ContainerImageAnnotation
493keyVault.Resource.Annotations.Add(new ConnectionStringRedirectAnnotation(redirectTarget));
495var connectionStringValue = await keyVault.Resource.GetConnectionStringAsync(default);
AzureManagedRedisExtensionsTests.cs (21)
38var (_, bicep) = await GetManifestWithBicep(model, redis.Resource);
55redisResource = c.Resource;
60Assert.True(redis.Resource.IsContainer(), "The resource should now be a container resource.");
65Assert.Equal($"localhost:12455,password={await redisResource.PasswordParameter.GetValueAsync(CancellationToken.None)}{sslArg}", await redis.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
78redisResource = c.Resource;
96Assert.True(redis.Resource.IsContainer(), "The resource should now be a container resource.");
99Assert.Equal($"localhost:12455,password=p@ssw0rd1", await redis.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
102Assert.NotNull(redis.Resource.HostName);
103Assert.Equal("localhost", await redis.Resource.HostName.GetValueAsync(CancellationToken.None));
105Assert.NotNull(redis.Resource.Password);
106Assert.Equal("p@ssw0rd1", await redis.Resource.Password.GetValueAsync(CancellationToken.None));
154Assert.NotNull(redis.Resource.HostName);
155Assert.NotNull(redis.Resource.Password);
158var hostValue = await redis.Resource.HostName.GetValueAsync(CancellationToken.None);
161var passwordValue = await redis.Resource.Password.GetValueAsync(CancellationToken.None);
174Assert.Null(redis.Resource.Password);
177Assert.NotNull(redis.Resource.HostName);
178Assert.Equal("{redis-data.outputs.hostName}", redis.Resource.HostName.ValueExpression);
216_ = redis.Resource.AddAsExistingResource(infra);
219var (manifest, bicep) = await GetManifestWithBicep(module.Resource, skipPreparer: true);
242var (_, bicep) = await GetManifestWithBicep(redis.Resource);
AzurePostgresExtensionsTests.cs (53)
41var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(postgres.Resource, skipPreparer: true);
98var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(postgres.Resource);
133Assert.True(postgres.Resource.IsContainer(), "The resource should now be a container resource.");
134Assert.StartsWith("Host=localhost;Port=12455;Username=postgres;Password=", await postgres.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
136var db1ConnectionString = await db1.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
140var db2ConnectionString = await db2.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
182var endpoint = Assert.Single(innerPostgres.Resource.Annotations.OfType<EndpointAnnotation>());
191Assert.True(postgres.Resource.IsContainer(), "The resource should now be a container resource.");
192Assert.Equal("Host=localhost;Port=12455;Username=user1;Password=p@ssw0rd1", await postgres.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
195Assert.NotNull(postgres.Resource.Host);
196Assert.Equal("localhost", await postgres.Resource.Host.GetValueAsync(CancellationToken.None));
198Assert.NotNull(postgres.Resource.Port);
199Assert.Equal("12455", await postgres.Resource.Port.GetValueAsync(CancellationToken.None));
201Assert.NotNull(postgres.Resource.HostName);
202Assert.Equal("localhost:12455", await postgres.Resource.HostName.GetValueAsync(CancellationToken.None));
204Assert.NotNull(postgres.Resource.UserName);
205Assert.Equal("user1", await postgres.Resource.UserName.GetValueAsync(CancellationToken.None));
207Assert.NotNull(postgres.Resource.Password);
208Assert.Equal("p@ssw0rd1", await postgres.Resource.Password.GetValueAsync(CancellationToken.None));
210var db1ConnectionString = await db1.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
213var db2ConnectionString = await db2.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
247Assert.Equal("Host=localhost;Port=12455;Username=user;Password=p@ssw0rd1", await postgres.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
248Assert.Equal("Host=localhost;Port=12455;Username=user;Password=p@ssw0rd1;Database=db1", await db1.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
249Assert.Equal("Host=localhost;Port=12455;Username=user;Password=p@ssw0rd1;Database=db2Name", await db2.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
324Assert.NotNull(postgres.Resource.UserName);
325Assert.NotNull(postgres.Resource.Password);
326Assert.NotNull(postgres.Resource.HostName);
329var hostValue = await postgres.Resource.HostName.GetValueAsync(CancellationToken.None);
332var userValue = await postgres.Resource.UserName.GetValueAsync(CancellationToken.None);
336var passwordValue = await postgres.Resource.Password.GetValueAsync(CancellationToken.None);
350Assert.Null(postgres.Resource.UserName);
351Assert.Null(postgres.Resource.Password);
354Assert.NotNull(postgres.Resource.HostName);
355Assert.Equal("{postgres-data.outputs.hostName}", postgres.Resource.HostName.ValueExpression);
442Assert.True(postgres.Resource.TryGetLastAnnotation<ConnectionStringRedirectAnnotation>(out var connectionStringAnnotation));
446var manifest = await AzureManifestUtils.GetManifestWithBicep(postgres.Resource);
451Assert.Equal("myconnectionstring", await postgres.Resource.GetConnectionStringAsync(default));
485Assert.True(postgres.Resource.TryGetLastAnnotation<ConnectionStringRedirectAnnotation>(out var connectionStringAnnotation));
489var manifest = await AzureManifestUtils.GetManifestWithBicep(postgres.Resource);
494Assert.Equal("myconnectionstring", await postgres.Resource.GetConnectionStringAsync(default));
529var manifest = await AzureManifestUtils.GetManifestWithBicep(postgres.Resource);
535Assert.Equal(expectedConnectionString, await postgres.Resource.GetConnectionStringAsync());
561var manifest = await ManifestUtils.GetManifest(postgres.Resource);
581manifest = await ManifestUtils.GetManifest(postgres.Resource);
600manifest = await ManifestUtils.GetManifest(postgres.Resource);
643_ = postgres.Resource.AddAsExistingResource(infra);
646var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
674Assert.NotNull(postgres.Resource.ConnectionStringSecretOutput);
675Assert.Same(postgres.Resource, postgres.Resource.ConnectionStringSecretOutput.SecretOwner);
678var references = ((IValueWithReferences)postgres.Resource.ConnectionStringSecretOutput).References.ToList();
679Assert.Contains(postgres.Resource, references);
680Assert.Contains(postgres.Resource.ConnectionStringSecretOutput.Resource, references);
AzureRedisExtensionsTests.cs (32)
40var (manifest, bicep) = await GetManifestWithBicep(model, redis.Resource);
83var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(redis.Resource);
99redisResource = c.Resource;
104Assert.True(redis.Resource.IsContainer(), "The resource should now be a container resource.");
108Assert.Equal($"localhost:12455,password={redisResource.PasswordParameter.Value}", await redis.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
122redisResource = c.Resource;
140Assert.True(redis.Resource.IsContainer(), "The resource should now be a container resource.");
143Assert.Equal($"localhost:12455,password=p@ssw0rd1", await redis.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
146Assert.NotNull(redis.Resource.HostName);
147Assert.Equal("localhost:12455", await redis.Resource.HostName.GetValueAsync(CancellationToken.None));
149Assert.NotNull(redis.Resource.Password);
150Assert.Equal("p@ssw0rd1", await redis.Resource.Password.GetValueAsync(CancellationToken.None));
198Assert.NotNull(redis.Resource.HostName);
199Assert.NotNull(redis.Resource.Password);
202var hostValue = await redis.Resource.HostName.GetValueAsync(CancellationToken.None);
205var passwordValue = await redis.Resource.Password.GetValueAsync(CancellationToken.None);
218Assert.Null(redis.Resource.Password);
221Assert.NotNull(redis.Resource.HostName);
222Assert.Equal("{redis-data.outputs.hostName}", redis.Resource.HostName.ValueExpression);
244Assert.True(redis.Resource.IsContainer());
245Assert.NotNull(redis.Resource.PasswordParameter);
248Assert.Equal($"localhost:12455,password={redis.Resource.PasswordParameter.Value}", await redis.Resource.GetConnectionStringAsync());
251var manifest = await AzureManifestUtils.GetManifestWithBicep(redis.Resource);
295_ = redis.Resource.AddAsExistingResource(infra);
298var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
325Assert.NotNull(redis.Resource.ConnectionStringSecretOutput);
326Assert.Same(redis.Resource, redis.Resource.ConnectionStringSecretOutput.SecretOwner);
329var references = ((IValueWithReferences)redis.Resource.ConnectionStringSecretOutput).References.ToList();
330Assert.Contains(redis.Resource, references);
331Assert.Contains(redis.Resource.ConnectionStringSecretOutput.Resource, references);
AzureResourcePreparerTests.cs (72)
34storage.Resource.Scope = scope;
42resource => resource.TargetAzureResource == storage.Resource);
45var storageManifest = await GetManifestWithBicep(storage.Resource, skipPreparer: true);
47Assert.Same(scope, storage.Resource.Scope);
68builder.AddParameter("callback-group", "callback-rg").Resource,
69builder.AddParameter("callback-subscription", "00000000-0000-0000-0000-000000000001").Resource)
71storage.Resource.Scope = new AzureBicepResourceScope("initial-rg");
82.Where(resource => resource.TargetAzureResource == storage.Resource).ToArray();
84Assert.All(roles, role => Assert.Contains(storage.Resource, role.GetExplicitAzureReferences()));
86var storageManifest = await GetManifestWithBicep(storage.Resource, skipPreparer: true);
87Assert.Same(scope, storage.Resource.Scope);
92.Where(resource => resource.TargetAzureResource == storage.Resource));
109first.WithAnnotation(new RoleAssignmentAnnotation(second.Resource, operatorRoles));
110second.WithAnnotation(new RoleAssignmentAnnotation(first.Resource, operatorRoles));
125Assert.Same(roles[0], Assert.Single(first.Resource.Annotations.OfType<DeploymentPrerequisitesAnnotation>()).Resources.Single());
126Assert.Same(roles[1], Assert.Single(second.Resource.Annotations.OfType<DeploymentPrerequisitesAnnotation>()).Resources.Single());
194Assert.True(storage.Resource.TryGetLastAnnotation<DefaultRoleAssignmentsAnnotation>(out var defaultAssignments));
201Assert.Same(storage.Resource, storageRoles.TargetAzureResource);
213Assert.True(api.Resource.TryGetLastAnnotation<RoleAssignmentAnnotation>(out var apiRoleAssignments));
214Assert.Equal(storage.Resource, apiRoleAssignments.Target);
247Assert.Same(storage.Resource, storageRoles.TargetAzureResource);
257Assert.True(api.Resource.TryGetLastAnnotation<RoleAssignmentAnnotation>(out var apiRoleAssignments));
258Assert.Equal(storage.Resource, apiRoleAssignments.Target);
263Assert.True(api2.Resource.TryGetLastAnnotation<RoleAssignmentAnnotation>(out var api2RoleAssignments));
264Assert.Equal(storage.Resource, api2RoleAssignments.Target);
306context.Args.Add(blobs.Resource.ConnectionStringExpression);
312Assert.True(storage.Resource.TryGetLastAnnotation<DefaultRoleAssignmentsAnnotation>(out var defaultAssignments));
314Assert.True(api.Resource.TryGetLastAnnotation<RoleAssignmentAnnotation>(out var apiRoleAssignments));
315Assert.Equal(storage.Resource, apiRoleAssignments.Target);
344var deploymentTarget = Assert.IsAssignableFrom<AzureBicepResource>(api.Resource.GetDeploymentTargetAnnotation()?.DeploymentTarget);
346Assert.Same(storage.Resource, roleAssignmentResource.TargetAzureResource);
347Assert.Same(api.Resource, roleAssignmentResource.OwnerResource);
349Assert.Contains(blobPE.Resource, deploymentTarget.References);
350Assert.Contains(queuesPE.Resource, deploymentTarget.References);
379.Where(resource => resource.TargetAzureResource == keyVault.Resource)
394Assert.Same(keyVault.Resource, resource.TargetAzureResource);
395Assert.Same(api.Resource, resource.OwnerResource);
400Assert.Same(keyVault.Resource, resource.TargetAzureResource);
401Assert.Same(worker.Resource, resource.OwnerResource);
406resource => resource.TargetAzureResource == storage.Resource);
407Assert.Same(api.Resource, storageRoleAssignment.OwnerResource);
444.Where(resource => resource.TargetAzureResource == signalR.Resource)
459Assert.Same(signalR.Resource, resource.TargetAzureResource);
460Assert.Same(serviceA.Resource, resource.OwnerResource);
465Assert.Same(signalR.Resource, resource.TargetAzureResource);
466Assert.Same(serviceB.Resource, resource.OwnerResource);
496Assert.Same(storage.Resource, storageRoles.TargetAzureResource);
498Assert.Single(storage.Resource.Annotations.OfType<RoleAssignmentResourceAnnotation>());
669agent.Resource.Annotations.Add(new ReferenceRoleAssignmentAnnotation(
670storage.Resource,
679Assert.True(consumer.Resource.TryGetLastAnnotation<RoleAssignmentAnnotation>(out var consumerRoleAssignments));
680Assert.Equal(storage.Resource, consumerRoleAssignments.Target);
694agent.Resource.Annotations.Add(new ReferenceRoleAssignmentAnnotation(
695storage.Resource,
706Assert.Same(storage.Resource, storageRoles.TargetAzureResource);
719agent.Resource.Annotations.Add(new ReferenceRoleAssignmentAnnotation(
720storage.Resource,
730Assert.False(bystander.Resource.TryGetLastAnnotation<RoleAssignmentAnnotation>(out _));
748agent1.Resource.Annotations.Add(new ReferenceRoleAssignmentAnnotation(storage.Resource, role));
751agent2.Resource.Annotations.Add(new ReferenceRoleAssignmentAnnotation(storage.Resource, role));
762Assert.Same(storage.Resource, roleAssignmentResource.TargetAzureResource);
763Assert.Same(consumer.Resource, roleAssignmentResource.OwnerResource);
782agent.Resource.Annotations.Add(new ReferenceRoleAssignmentAnnotation(
783storage.Resource,
798var roleIds = consumer.Resource.Annotations.OfType<RoleAssignmentAnnotation>()
799.Where(a => a.Target == storage.Resource)
825agent.Resource.Annotations.Add(new ReferenceRoleAssignmentAnnotation(
826storage.Resource,
839var roleIds = consumer.Resource.Annotations.OfType<RoleAssignmentAnnotation>()
840.Where(a => a.Target == storage.Resource)
AzureRunAsEmulatorModeTests.cs (9)
14{ "Azure App Configuration", (builder, configure) => builder.AddAzureAppConfiguration("appconfig").RunAsEmulator(_ => configure()).Resource },
15{ "Azure Cosmos DB", (builder, configure) => builder.AddAzureCosmosDB("cosmos").RunAsEmulator(_ => configure()).Resource },
16{ "Azure Cosmos DB classic", (builder, configure) => builder.AddAzureCosmosDB("cosmos").RunAsClassicEmulator(_ => configure()).Resource },
17{ "Azure Event Hubs", (builder, configure) => builder.AddAzureEventHubs("eventhubs").RunAsEmulator(_ => configure()).Resource },
18{ "Azure Kusto", (builder, configure) => builder.AddAzureKustoCluster("kusto").RunAsEmulator(_ => configure()).Resource },
19{ "Azure Service Bus", (builder, configure) => builder.AddAzureServiceBus("servicebus").RunAsEmulator(_ => configure()).Resource },
20{ "Azure SignalR", (builder, configure) => builder.AddAzureSignalR("signalr").RunAsEmulator(_ => configure()).Resource },
21{ "Azure Storage", (builder, configure) => builder.AddAzureStorage("storage").RunAsEmulator(_ => configure()).Resource },
22{ "Azure Web PubSub", (builder, configure) => builder.AddAzureWebPubSub("webpubsub").RunAsEmulator(_ => configure()).Resource },
AzureSandboxesTests.cs (127)
36Assert.Equal("{sandboxes.outputs.id}", sandboxGroup.Resource.IdOutputReference.ValueExpression);
37Assert.Equal("{sandboxes.outputs.name}", sandboxGroup.Resource.NameOutputReference.ValueExpression);
45firstGroup.Resource.Outputs["id"] = "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/example-rg/providers/Microsoft.App/sandboxGroups/first-group";
46firstGroup.Resource.Outputs["location"] = "westus3";
48secondGroup.Resource.Outputs["id"] = "/subscriptions/22222222-2222-2222-2222-222222222222/resourceGroups/other-rg/providers/Microsoft.App/sandboxGroups/second-group";
49secondGroup.Resource.Outputs["location"] = "eastus2";
52var firstSteps = await CreateStepsAsync(app, firstGroup.Resource);
58var secondSteps = await CreateStepsAsync(app, secondGroup.Resource);
106var steps = await CreateStepsAsync(app, sandboxGroup.Resource);
139sandboxGroup.Resource.Outputs["id"] = "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/existing-rg/providers/Microsoft.App/sandboxGroups/existing-group";
140sandboxGroup.Resource.Outputs["location"] = "eastus2";
142var scope = AzureSandboxContainerDeployment.CreateDataPlaneScope(sandboxGroup.Resource);
163var (hostGroupManifest, hostGroupBicep) = await AzureManifestUtils.GetManifestWithBicep(model, hostGroup.Resource);
164var (workerGroupManifest, workerGroupBicep) = await AzureManifestUtils.GetManifestWithBicep(model, workerGroup.Resource);
201var (_, sandbox1Bicep) = await AzureManifestUtils.GetManifestWithBicep(model, sandbox1.Resource);
202var (_, sandbox2Bicep) = await AzureManifestUtils.GetManifestWithBicep(model, sandbox2.Resource);
227Assert.Equal(ManagedServiceIdentityType.SystemAssignedUserAssigned, sandboxGroup.Resource.WorkloadManagedIdentityType);
228Assert.Equal(identity.Resource, Assert.Single(sandboxGroup.Resource.WorkloadUserAssignedIdentities));
239var (_, bicep) = await AzureManifestUtils.GetManifestWithBicep(sandboxGroup.Resource, skipPreparer: true);
252var (_, bicep) = await AzureManifestUtils.GetManifestWithBicep(sandboxGroup.Resource, skipPreparer: true);
268.WithAnnotation(new AppIdentityAnnotation(computeIdentity.Resource))
274Assert.Equal(ManagedServiceIdentityType.UserAssigned, sandboxGroup.Resource.WorkloadManagedIdentityType);
275Assert.Equal(computeIdentity.Resource, Assert.Single(sandboxGroup.Resource.WorkloadUserAssignedIdentities));
277var (_, bicep) = await AzureManifestUtils.GetManifestWithBicep(sandboxGroup.Resource, skipPreparer: true);
290.WithAnnotation(new AppIdentityAnnotation(identity.Resource))
296Assert.Equal(ManagedServiceIdentityType.UserAssigned, sandboxGroup.Resource.WorkloadManagedIdentityType);
297Assert.Equal(identity.Resource, Assert.Single(sandboxGroup.Resource.WorkloadUserAssignedIdentities));
298Assert.Empty(otherGroup.Resource.WorkloadUserAssignedIdentities);
299var (_, bicep) = await AzureManifestUtils.GetManifestWithBicep(sandboxGroup.Resource, skipPreparer: true);
316.WithAnnotation(new AppIdentityAnnotation(identity.Resource))
341var (_, bicep) = await AzureManifestUtils.GetManifestWithBicep(model, sandboxGroup.Resource);
343var annotation = Assert.Single(sandboxGroup.Resource.Annotations.OfType<AzureSandboxGroupAcrPullIdentityAnnotation>());
344Assert.Same(pullIdentity.Resource, annotation.Identity);
365() => AzureManifestUtils.GetManifestWithBicep(model, sandboxGroup.Resource));
423var annotation = Assert.Single(sandboxGroup.Resource.Annotations.OfType<AzureSandboxGroupAcrPullIdentityAnnotation>());
425Assert.Same(registry.Resource, roles.TargetAzureResource);
427Assert.Contains(identity, sandboxGroup.Resource.References);
429var (_, sandboxBicep) = await AzureManifestUtils.GetManifestWithBicep(sandboxGroup.Resource, skipPreparer: true);
468var buildOptionsCallbackCount = container.Resource.Annotations.OfType<ContainerBuildOptionsCallbackAnnotation>().Count();
482Assert.Null(computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource));
484Assert.Equal(buildOptionsCallbackCount, container.Resource.Annotations.OfType<ContainerBuildOptionsCallbackAnnotation>().Count());
589sandboxGroup.Resource.ContainerRegistry!.Outputs["loginServer"] = "example.azurecr.io";
590sandboxGroup.Resource.Outputs[AzureSandboxGroupResource.ImagePullIdentityClientIdOutputName] =
594sandboxGroup.Resource,
598sandboxGroup.Resource,
1170sandboxGroup.Resource.Outputs["id"] = "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/existing-rg/providers/Microsoft.App/sandboxGroups/existing-group";
1171sandboxGroup.Resource.Outputs["location"] = "eastus2";
1172var existingScope = AzureSandboxContainerDeployment.CreateDataPlaneScope(sandboxGroup.Resource);
1175var targetResource = builder.AddContainer("frontend", "example/image").Resource;
1179sandboxGroup.Resource);
2020var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2095defaultResource.Resource.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2097disabledResource.Resource.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2099enabledResource.Resource.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2186var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2212Assert.True(AzureSandboxContainerDeployment.TryResolveEndpointReferenceValue(api.GetEndpoint("http"), sandboxGroup.Resource, out var urlExpression));
2217Assert.True(AzureSandboxContainerDeployment.TryResolveEndpointReferenceValue(api.GetEndpoint("http").Property(EndpointProperty.TargetPort), sandboxGroup.Resource, out var targetPortExpression));
2248var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2287var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2311var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2344var frontendCallbackCount = frontend.Resource.Annotations.OfType<ContainerBuildOptionsCallbackAnnotation>().Count();
2345var backendCallbackCount = backend.Resource.Annotations.OfType<ContainerBuildOptionsCallbackAnnotation>().Count();
2355Assert.Same(sandboxGroup.Resource, computeResource.GetComputeEnvironment());
2356Assert.Same(sandboxGroup.Resource, explicitComputeResource.GetComputeEnvironment());
2396var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2398Assert.Same(sandboxGroup.Resource.ContainerRegistry, deploymentTarget.ContainerRegistry);
2399Assert.Same(sandboxGroup.Resource, deploymentTarget.ComputeEnvironment);
2403Assert.Same(sandboxGroup.Resource, sandboxContainer.Parent);
2434Resource = sandboxGroup.Resource.ContainerRegistry,
2487foreach (var annotation in sandboxGroup.Resource.Annotations.OfType<PipelineConfigurationAnnotation>()
2536Assert.Same(sandboxGroup.Resource, computeResource.GetComputeEnvironment());
2538var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2599var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2656Assert.Same(sandboxGroup.Resource, project.GetComputeEnvironment());
2662project.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2700project.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2726project.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2747project.Resource.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2782project.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2814sandboxGroup.Resource,
2818sandboxGroup.Resource,
2843frontend.Resource.GetDeploymentTargetAnnotation(frontendGroup.Resource)?.DeploymentTarget);
2845backend.Resource.GetDeploymentTargetAnnotation(backendGroup.Resource)?.DeploymentTarget);
2846Assert.Null(frontend.Resource.GetDeploymentTargetAnnotation(backendGroup.Resource));
2847Assert.Null(backend.Resource.GetDeploymentTargetAnnotation(frontendGroup.Resource));
2867var deploymentTarget = computeResource.GetDeploymentTargetAnnotation(sandboxGroup.Resource);
2888container.Resource.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2890var registry = Assert.IsType<AzureContainerRegistryResource>(sandboxGroup.Resource.ContainerRegistry);
2910Assert.Empty(context.GetSteps(container.Resource, WellKnownPipelineTags.PushContainerImage));
2932api.Resource.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
2959var value = await AzureSandboxContainerDeployment.ResolveValueWithEgressHostsAsync(stepContext, web.Resource, endpointExpression);
2960var environment = await AzureSandboxContainerDeployment.ResolveEnvironmentVariablesAsync(stepContext, web.Resource);
2981storage.Resource.Outputs["blobEndpoint"] = "https://storage.blob.core.windows.net/";
2997worker.Resource);
3034worker.Resource);
3059var dependencies = await web.Resource.GetResourceDependenciesAsync(
3062Assert.Contains(api.Resource, dependencies);
3063var steps = await CreateStepsAsync(app, sandboxGroup.Resource);
3070foreach (var annotation in sandboxGroup.Resource.Annotations.OfType<PipelineConfigurationAnnotation>())
3099var steps = await CreateStepsAsync(app, consumerGroup.Resource);
3109foreach (var annotation in consumerGroup.Resource.Annotations.OfType<PipelineConfigurationAnnotation>())
3139var firstDependencies = await first.Resource.GetResourceDependenciesAsync(
3142var secondDependencies = await second.Resource.GetResourceDependenciesAsync(
3145Assert.Contains(second.Resource, firstDependencies);
3146Assert.Contains(first.Resource, secondDependencies);
3147var steps = await CreateStepsAsync(app, sandboxGroup.Resource);
3156foreach (var annotation in sandboxGroup.Resource.Annotations.OfType<PipelineConfigurationAnnotation>())
3189project.Resource);
3193Assert.True(AzureSandboxContainerDeployment.HasModeledCommandConfiguration(project.Resource));
3197Assert.True(AzureSandboxContainerDeployment.HasModeledCommandConfiguration(container.Resource));
3218api.Resource.GetDeploymentTargetAnnotation(sandboxGroup.Resource)?.DeploymentTarget);
3242var command = await AzureSandboxContainerDeployment.ResolveModeledCommandAsync(stepContext, worker.Resource);
3277worker.Resource);
AzureServiceBusExtensionsTests.cs (71)
42var manifest = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
67var manifest = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
99await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
101await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
105await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
107await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
133hb.Configuration["ConnectionStrings:servicebusns"] = await serviceBus.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
140await rns.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
141await rns.WaitForResourceHealthyAsync(serviceBus.Resource.Name, cts.Token);
145await using var sender = serviceBusClient.CreateSender(queueResource.Resource.QueueName);
148await using var receiver = serviceBusClient.CreateReceiver(queueResource.Resource.QueueName);
168serviceBus.Resource.Annotations.OfType<EndpointAnnotation>(),
191var containerImageAnnotation = serviceBus.Resource.Annotations.OfType<ContainerImageAnnotation>().FirstOrDefault();
269var manifest = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
612Assert.Same(serviceBus.Resource.Annotations, sourceResource.Annotations);
614var persistenceAnnotation = Assert.Single(serviceBus.Resource.Annotations.OfType<PersistenceAnnotation>());
655var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceBus.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
671AssertWaitsForHealthy(serviceBus.Resource, sql);
730var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceBus.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
747resource => Assert.Same(sql.Resource, resource));
748AssertWaitsForHealthy(serviceBus.Resource, sql.Resource);
750AllocateContainerNetworkEndpoint(sql.Resource, "sql.dev.internal", 1433);
752var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceBus.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
756Assert.Equal(await sql.Resource.PasswordParameter.GetValueAsync(CancellationToken.None), env["MSSQL_SA_PASSWORD"]);
771AllocateContainerNetworkEndpoint(sql.Resource, "sql.dev.internal", 1433);
773var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceBus.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
792AllocateContainerNetworkEndpoint(sql.Resource, "host.docker.internal", 52133);
794var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceBus.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
808var endpoint = sql.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == "tcp");
809sql.Resource.Annotations.Remove(endpoint);
844AllocateContainerNetworkEndpoint(sql2.Resource, "sql2.dev.internal", 1433);
846var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceBus.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
849Assert.Equal(await sql2.Resource.PasswordParameter.GetValueAsync(CancellationToken.None), env["MSSQL_SA_PASSWORD"]);
852AssertWaitsForHealthy(serviceBus.Resource, sql2.Resource);
854serviceBus.Resource.Annotations.OfType<ResourceRelationshipAnnotation>(),
855relationship => Assert.Same(sql2.Resource, relationship.Resource));
871var waits = serviceBus.Resource.Annotations.OfType<WaitAnnotation>().ToArray();
874wait => Assert.Same(sql1.Resource, wait.Resource),
875wait => Assert.Same(sql2.Resource, wait.Resource));
945var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceBus.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1010Assert.Equal("{sb.outputs.serviceBusEndpoint}", serviceBus.Resource.ConnectionStringExpression.ValueExpression);
1011Assert.Equal("Endpoint={sb.outputs.serviceBusEndpoint};EntityPath=queue", queue.Resource.ConnectionStringExpression.ValueExpression);
1012Assert.Equal("Endpoint={sb.outputs.serviceBusEndpoint};EntityPath=topic", topic.Resource.ConnectionStringExpression.ValueExpression);
1013Assert.Equal("Endpoint={sb.outputs.serviceBusEndpoint};EntityPath=topic/Subscriptions/sub", subscription.Resource.ConnectionStringExpression.ValueExpression);
1027((IResourceWithAzureFunctionsConfig)serviceBus.Resource).ApplyAzureFunctionsConfiguration(target, "sb");
1033((IResourceWithAzureFunctionsConfig)queue.Resource).ApplyAzureFunctionsConfiguration(target, "queue");
1040((IResourceWithAzureFunctionsConfig)topic.Resource).ApplyAzureFunctionsConfiguration(target, "topic");
1047((IResourceWithAzureFunctionsConfig)subscription.Resource).ApplyAzureFunctionsConfiguration(target, "sub");
1083serviceBus.Resource.Outputs["serviceBusEndpoint"] = "mynamespaceEndpoint";
1085var connectionStringResource = (IResourceWithConnectionString)serviceBus.Resource;
1087Assert.Equal("sb", serviceBus.Resource.Name);
1093var manifest = await GetManifestWithBicep(model, serviceBus.Resource);
1176hb.Configuration["ConnectionStrings:servicebusns"] = await serviceBus.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
1179await app.ResourceNotifications.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
1180await app.ResourceNotifications.WaitForResourceHealthyAsync(serviceBus.Resource.Name, cts.Token);
1187await using var sender = serviceBusClient.CreateSender(queueResource.Resource.QueueName);
1190await using var receiver = serviceBusClient.CreateReceiver(queueResource.Resource.QueueName);
1254Assert.True(serviceBus.Resource.IsEmulator());
1255Assert.Contains(serviceBus.Resource.Annotations, a => a is EmulatorResourceAnnotation);
1285_ = serviceBus.Resource.AddAsExistingResource(infra);
1288var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
1307_ = serviceBus.Resource.AddAsExistingResource(infra);
1310var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
1326_ = serviceBus.Resource.AddAsExistingResource(infra);
1329var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
1347_ = serviceBus.Resource.AddAsExistingResource(infra);
1350var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
1367_ = serviceBus.Resource.AddAsExistingResource(infra);
1370var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
AzureSqlExtensionsTests.cs (22)
46var manifest = await AzureManifestUtils.GetManifestWithBicep(sql.Resource, skipPreparer: true);
92Assert.True(sql.Resource.IsContainer(), "The resource should now be a container resource.");
93var serverConnectionString = await sql.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
97var db1ConnectionString = await db1.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
101var db2ConnectionString = await db2.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
105var db3ConnectionString = await db3.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
149var endpoint = Assert.Single(innerSql.Resource.Annotations.OfType<EndpointAnnotation>());
158Assert.True(sql.Resource.IsContainer(), "The resource should now be a container resource.");
159var serverConnectionString = await sql.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
162var db1ConnectionString = await db1.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
165var db2ConnectionString = await db2.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
168var db3ConnectionString = await db3.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
248var manifest = await AzureManifestUtils.GetManifestWithBicep(sql.Resource);
250Assert.True(sql.Resource.TryGetLastAnnotation<ConnectionStringRedirectAnnotation>(out var connectionStringAnnotation));
254Assert.Equal("Server=tcp:myserver,1433;Encrypt=True;Authentication=\"Active Directory Default\"", await sql.Resource.GetConnectionStringAsync(default));
255Assert.Equal("Server=tcp:{sql.outputs.sqlServerFqdn},1433;Encrypt=True;Authentication=\"Active Directory Default\"", sql.Resource.ConnectionStringExpression.ValueExpression);
279var manifest = await AzureManifestUtils.GetManifestWithBicep(sql.Resource);
281Assert.True(sql.Resource.TryGetLastAnnotation<ConnectionStringRedirectAnnotation>(out var connectionStringAnnotation));
285Assert.Equal("Server=tcp:myserver,1433;Encrypt=True;Authentication=\"Active Directory Default\"", await sql.Resource.GetConnectionStringAsync(default));
286Assert.Equal("Server=tcp:{sql.outputs.sqlServerFqdn},1433;Encrypt=True;Authentication=\"Active Directory Default\"", sql.Resource.ConnectionStringExpression.ValueExpression);
327_ = sql.Resource.AddAsExistingResource(infra);
330var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
AzureStorageEmulatorFunctionalTests.cs (23)
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);
178hb.Configuration[$"ConnectionStrings:{blobsResourceName}"] = await blobs.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
179hb.Configuration[$"ConnectionStrings:{blobContainerName}"] = await container.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
180hb.Configuration[$"ConnectionStrings:{queuesResourceName}"] = await queues.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
181hb.Configuration[$"ConnectionStrings:{queueName}"] = await queue.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
193await rns.WaitForResourceHealthyAsync(storage.Resource.Name, cts.Token);
225await rns.WaitForResourceHealthyAsync(blobContainer.Resource.Name, cancellationToken: cts.Token);
229hb.Configuration["ConnectionStrings:BlobConnection"] = await blobs.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
265await rns.WaitForResourceHealthyAsync(queue.Resource.Name, cancellationToken: cts.Token);
269hb.Configuration["ConnectionStrings:QueueConnection"] = await queues.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
AzureStorageExtensionsTests.cs (115)
36var volumeAnnotation = storage.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
62var volumeAnnotation = storage.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
88var volumeAnnotation = storage.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
114var volumeAnnotation = storage.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
133storage.Resource.Annotations.OfType<EndpointAnnotation>(),
147var args = await ArgumentEvaluator.GetArgumentListAsync(storage.Resource);
167var args = await ArgumentEvaluator.GetArgumentListAsync(storage.Resource);
187Assert.True(storage.Resource.IsContainer());
191Assert.Equal(expected, await ((IResourceWithConnectionString)blobs.Resource).ConnectionStringExpression.GetValueAsync(default));
203storage.Resource.Outputs["blobEndpoint"] = blobsConnectionString;
207Assert.Equal(blobsConnectionString, await ((IResourceWithConnectionString)blobs.Resource).ConnectionStringExpression.GetValueAsync(default));
218Assert.Equal("{storage.outputs.blobEndpoint}", blobs.Resource.ConnectionStringExpression.ValueExpression);
235Assert.True(storage.Resource.IsContainer());
240string? blobConnectionString = await ((IResourceWithConnectionString)blobs.Resource).ConnectionStringExpression.GetValueAsync(default);
241string? blobContainerConnectionString = await ((IResourceWithConnectionString)blobContainer.Resource).ConnectionStringExpression.GetValueAsync(default);
257storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
262string? blobsConnectionString = await ((IResourceWithConnectionString)blobs.Resource).ConnectionStringExpression.GetValueAsync(default);
265Assert.Equal(expected, await ((IResourceWithConnectionString)blobContainer.Resource).ConnectionStringExpression.GetValueAsync(default));
276Assert.Equal("Endpoint={storage.outputs.blobEndpoint};ContainerName=myContainer", blobContainer.Resource.ConnectionStringExpression.ValueExpression);
293Assert.True(storage.Resource.IsContainer());
297Assert.Equal(expected, await ((IResourceWithConnectionString)queues.Resource).GetConnectionStringAsync());
309storage.Resource.Outputs["queueEndpoint"] = connectionString;
313Assert.Equal(connectionString, await ((IResourceWithConnectionString)queues.Resource).GetConnectionStringAsync());
324Assert.Equal("{storage.outputs.queueEndpoint}", queues.Resource.ConnectionStringExpression.ValueExpression);
341Assert.True(storage.Resource.IsContainer());
346string? connectionString = await ((IResourceWithConnectionString)queues.Resource).GetConnectionStringAsync();
349Assert.Equal(expected, await ((IResourceWithConnectionString)queue.Resource).GetConnectionStringAsync());
361storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
366string? connectionString = await ((IResourceWithConnectionString)queues.Resource).GetConnectionStringAsync();
369Assert.Equal(expected, await ((IResourceWithConnectionString)queue.Resource).GetConnectionStringAsync());
381Assert.Equal("Endpoint={storage.outputs.queueEndpoint};QueueName=myqueue", queue.Resource.ConnectionStringExpression.ValueExpression);
396var manifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
410var manifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
427Assert.True(storage.Resource.IsContainer());
434=> new(storage.Resource, new EndpointAnnotation(ProtocolType.Tcp, name: name, targetPort: port));
440Assert.Equal(blobqs, blob.Resource.ConnectionStringExpression.ValueExpression);
441Assert.Equal(queueqs, queue.Resource.ConnectionStringExpression.ValueExpression);
442Assert.Equal(tableqs, table.Resource.ConnectionStringExpression.ValueExpression);
449Assert.Equal(Resolve(blobqs, "blob", 10000), await ((IResourceWithConnectionString)blob.Resource).GetConnectionStringAsync());
450Assert.Equal(Resolve(queueqs, "queue", 10001), await ((IResourceWithConnectionString)queue.Resource).GetConnectionStringAsync());
451Assert.Equal(Resolve(tableqs, "table", 10002), await ((IResourceWithConnectionString)table.Resource).GetConnectionStringAsync());
470storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
471storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
472storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
475Assert.Equal("storage", storage.Resource.Name);
477var storageManifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
495var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
504var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
510var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
519var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
525var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
534var tableManifest = await ManifestUtils.GetManifest(table.Resource);
555storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
556storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
557storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
560Assert.Equal("storage", storage.Resource.Name);
562var storageManifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
580var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
589var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
595var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
604var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
610var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
619var tableManifest = await ManifestUtils.GetManifest(table.Resource);
643storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
644storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
645storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
648Assert.Equal("storage", storage.Resource.Name);
652var storageManifest = await GetManifestWithBicep(model, storage.Resource);
718var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
727var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
731var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
740var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
744var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
753var tableManifest = await ManifestUtils.GetManifest(table.Resource);
774storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
775storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
776storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
779Assert.Equal("storage", storage.Resource.Name);
781var storageManifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
800var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
809var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
815var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
824var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
830var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
839var tableManifest = await ManifestUtils.GetManifest(table.Resource);
866Assert.Equal("storage-blobs", blobService.Resource.Name);
867Assert.Equal(blobService.Resource, blobStorageResource);
893Assert.Equal("storage-queues", queueService.Resource.Name);
894Assert.Equal(queueService.Resource, queueStorageResource);
911Assert.Same(blobs.Resource, container1.Resource.Parent);
912Assert.Same(blobs.Resource, container2.Resource.Parent);
928Assert.Same(queues.Resource, q1.Resource.Parent);
929Assert.Same(queues.Resource, q2.Resource.Parent);
945Assert.Same(dataLake.Resource, fs1.Resource.Parent);
946Assert.Same(dataLake.Resource, fs2.Resource.Parent);
971Assert.Equal("blobs", customBlobs.Resource.Name);
972Assert.Same(customBlobService, customBlobs.Resource);
974Assert.Same(defaultBlobService, originals.Resource.Parent);
975Assert.Same(defaultBlobService, derived.Resource.Parent);
991Assert.NotSame(customBlobs.Resource, defaultBlobs.Resource);
992Assert.Equal("blobs", customBlobs.Resource.Name);
993Assert.Equal("storage-blobs", defaultBlobs.Resource.Name);
1008Assert.Same(first.Resource, container.Resource.Parent);
1019Assert.True(storage.Resource.IsEmulator());
1020Assert.Contains(storage.Resource.Annotations, a => a is EmulatorResourceAnnotation);
1050_ = storage.Resource.AddAsExistingResource(infra);
1053var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
AzureUserAssignedIdentityTests.cs (15)
114var annotation = Assert.Single(project.Resource.Annotations.OfType<AppIdentityAnnotation>());
132Assert.Same(identity.Resource, resource);
133var annotation = Assert.Single(project.Resource.Annotations.OfType<AppIdentityAnnotation>());
134Assert.Same(identity.Resource, annotation.IdentityResource);
176Assert.Same(identity.Resource, identityAnnotation.IdentityResource);
223Assert.Same(identity.Resource, identityAnnotation.IdentityResource);
228Assert.Same(storage.Resource, roleAssignmentResource.TargetAzureResource);
281Assert.Same(identity.Resource, identityAnnotation.IdentityResource);
286Assert.Same(storage.Resource, roleAssignmentResource.TargetAzureResource);
364Assert.Same(identity.Resource, identityAnnotation.IdentityResource);
365Assert.Same(identity.Resource, identityAnnotation2.IdentityResource);
372Assert.Same(storage.Resource, roleAssignmentResource.TargetAzureResource);
374Assert.Same(storage.Resource, roleAssignmentResource2.TargetAzureResource);
422_ = userAssignedIdentity.Resource.AddAsExistingResource(infra);
425var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
AzureVirtualNetworkExtensionsTests.cs (80)
22Assert.Equal("myvnet", vnet.Resource.Name);
23Assert.IsType<AzureVirtualNetworkResource>(vnet.Resource);
34Assert.Equal("myvnet", vnet.Resource.Name);
35Assert.Equal("10.1.0.0/16", vnet.Resource.AddressPrefix);
36Assert.Null(vnet.Resource.AddressPrefixParameter);
48Assert.Equal("myvnet", vnet.Resource.Name);
49Assert.Null(vnet.Resource.AddressPrefix);
50Assert.Same(vnetPrefixParam.Resource, vnet.Resource.AddressPrefixParameter);
61var manifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
76Assert.Equal("mysubnet", subnet.Resource.Name);
77Assert.Equal("mysubnet", subnet.Resource.SubnetName);
78Assert.Equal("10.0.1.0/24", subnet.Resource.AddressPrefix);
79Assert.Same(vnet.Resource, subnet.Resource.Parent);
90Assert.Equal("mysubnet", subnet.Resource.Name);
91Assert.Equal("custom-subnet-name", subnet.Resource.SubnetName);
92Assert.Equal("10.0.1.0/24", subnet.Resource.AddressPrefix);
105Assert.Same(vnet.Resource, subnet1.Resource.Parent);
106Assert.Same(vnet.Resource, subnet2.Resource.Parent);
108Assert.NotSame(subnet1.Resource, subnet2.Resource);
121var manifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
135Assert.DoesNotContain(vnet.Resource, builder.Resources);
137Assert.DoesNotContain(subnet.Resource, builder.Resources);
152var subnetAnnotation = env.Resource.Annotations.OfType<DelegatedSubnetAnnotation>().SingleOrDefault();
157var delegationAnnotation = subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>().SingleOrDefault();
171var delegationAnnotation = subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>().SingleOrDefault();
186var delegationAnnotation = subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>().SingleOrDefault();
201var delegationAnnotation = subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>().SingleOrDefault();
226var delegationAnnotation = subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>().Single();
245var delegationAnnotation = Assert.Single(subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
283var subnetAnnotation = environment.Resource.Annotations.OfType<DelegatedSubnetAnnotation>().SingleOrDefault();
287var delegationAnnotation = subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>().SingleOrDefault();
304var subnetAnnotation = Assert.Single(environment.Resource.Annotations.OfType<DelegatedSubnetAnnotation>());
307var delegationAnnotation = Assert.Single(subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
323Assert.Single(environment.Resource.Annotations.OfType<DelegatedSubnetAnnotation>());
324var delegationAnnotation = Assert.Single(subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
341Assert.Single(environment.Resource.Annotations.OfType<DelegatedSubnetAnnotation>());
342var delegationAnnotation = Assert.Single(subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
364Assert.Single(environment.Resource.Annotations.OfType<DelegatedSubnetAnnotation>());
365Assert.Single(firstSubnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
366Assert.Empty(secondSubnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
386Assert.Empty(appServiceEnvironment.Resource.Annotations.OfType<DelegatedSubnetAnnotation>());
388var delegation = Assert.Single(subnet.Resource.Annotations.OfType<AzureSubnetServiceDelegationAnnotation>());
402Assert.Equal("mysubnet", subnet.Resource.Name);
403Assert.Equal("mysubnet", subnet.Resource.SubnetName);
404Assert.Null(subnet.Resource.AddressPrefix);
405Assert.Same(addressPrefixParam.Resource, subnet.Resource.AddressPrefixParameter);
406Assert.Same(vnet.Resource, subnet.Resource.Parent);
418Assert.Equal("mysubnet", subnet.Resource.Name);
419Assert.Equal("custom-subnet-name", subnet.Resource.SubnetName);
420Assert.Null(subnet.Resource.AddressPrefix);
421Assert.Same(addressPrefixParam.Resource, subnet.Resource.AddressPrefixParameter);
433var manifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
448var manifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
462Assert.NotNull(subnet.Resource.NetworkSecurityGroup);
463Assert.Equal("web-nsg", subnet.Resource.NetworkSecurityGroup.Name);
464Assert.Single(subnet.Resource.NetworkSecurityGroup.SecurityRules);
478Assert.Same(nsg.Resource, subnet.Resource.NetworkSecurityGroup);
479Assert.Single(nsg.Resource.SecurityRules);
493var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
510var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
527var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
543var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
557var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
572var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
587var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
603var rule = Assert.Single(subnet.Resource.NetworkSecurityGroup!.SecurityRules);
616var rule = Assert.Single(subnet.Resource.NetworkSecurityGroup!.SecurityRules);
634var vnetManifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
635var nsgManifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource.Subnets[0].NetworkSecurityGroup!);
653var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
713var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
AzureWebPubSubExtensionsTests.cs (48)
36Assert.Equal(hubName, hub.Resource.Name);
37var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
58var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
64Assert.Equal("wps1", wps.Resource.Name);
77Assert.Equal("{wps1.outputs.endpoint}", wps.Resource.ConnectionStringExpression.ValueExpression);
78Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=abc", hub.Resource.ConnectionStringExpression.ValueExpression);
80Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hij", otherHub.Resource.ConnectionStringExpression.ValueExpression);
103var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
109Assert.Equal("wps1", wps.Resource.Name);
133var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
139Assert.Equal("wps1", wps.Resource.Name);
159wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
160var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
165Assert.Equal("wps1", wps.Resource.Name);
186wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
187var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
202useProduction.Resource,
210wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
211var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
241wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
256var connectionStringResource = (IResourceWithConnectionString)wps.Resource;
259var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
266Assert.Equal("wps1", wps.Resource.Name);
282Assert.Equal("hub1", hub1.Resource.Name);
283Assert.Equal("resource2", hub2.Resource.Name);
284Assert.Equal("hub3", hub3.Resource.Name);
285Assert.Equal("hub4", hub4.Resource.Name);
287Assert.Equal("hub1", hub1.Resource.HubName);
288Assert.Equal("hub2", hub2.Resource.HubName);
289Assert.Equal("hub3", hub3.Resource.HubName);
290Assert.Equal("hub4", hub4.Resource.HubName);
292Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub1", hub1.Resource.ConnectionStringExpression.ValueExpression);
293Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub2", hub2.Resource.ConnectionStringExpression.ValueExpression);
294Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub3", hub3.Resource.ConnectionStringExpression.ValueExpression);
295Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub4", hub4.Resource.ConnectionStringExpression.ValueExpression);
309Assert.Same(hub1.Resource, hub2.Resource);
310Assert.Equal("resource1", hub1.Resource.Name);
311Assert.Equal("same-hub", hub1.Resource.HubName);
320wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
330var connectionStringResource = (IResourceWithConnectionString)wps.Resource;
336var manifest = await GetManifestWithBicep(model, wps.Resource);
340Assert.Equal("wps1", wps.Resource.Name);
380wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
393var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
396Assert.Equal("wps1", wps.Resource.Name);
428_ = webPubSub.Resource.AddAsExistingResource(infra);
431var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
BicepUtilitiesTests.cs (55)
39await BicepUtilities.SetParametersAsync(parameters, resource.Resource, builder.ExecutionContext, skipKnownValues: true);
55await BicepUtilities.SetParametersAsync(parameters, resource.Resource, builder.ExecutionContext);
56var originalChecksum = BicepUtilities.GetChecksum(resource.Resource, parameters, null);
61resource.Resource, cached, builder.ExecutionContext, NullLogger.Instance));
68resource.Resource, cached, builder.ExecutionContext, NullLogger.Instance);
75await BicepUtilities.SetParametersAsync(parameters, resource.Resource, builder.ExecutionContext);
88await BicepUtilities.SetParametersAsync(parameters, bicep0.Resource, builder.ExecutionContext);
120.WithParameter("expr", ReferenceExpression.Create($"{param.Resource}/1"))
124await BicepUtilities.SetParametersAsync(parameters, bicep0.Resource, builder.ExecutionContext);
138Assert.True(bicep0.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
143Assert.Equal(connectionStringResource.Resource, r.Resource);
148Assert.Equal(param.Resource, r.Resource);
153Assert.Equal(container.Resource, r.Resource);
163var bicep = builder.AddBicepTemplateString("test", "param value string").Resource;
207await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource, builder.ExecutionContext);
208var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, null);
211await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource, builder.ExecutionContext);
212var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, null);
234await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource, builder.ExecutionContext);
235var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, null);
238await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource, builder.ExecutionContext);
239var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, null);
251bicep0.Resource.Scope = new("rg0");
255bicep1.Resource.Scope = new("rg1");
259await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource, builder.ExecutionContext);
260await BicepUtilities.SetScopeAsync(scope0, bicep0.Resource);
261var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, scope0);
265await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource, builder.ExecutionContext);
266await BicepUtilities.SetScopeAsync(scope1, bicep1.Resource);
267var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, scope1);
279bicep0.Resource.Scope = new("rg0");
283bicep1.Resource.Scope = new("rg0");
287await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource, builder.ExecutionContext);
288await BicepUtilities.SetScopeAsync(scope0, bicep0.Resource);
289var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, scope0);
293await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource, builder.ExecutionContext);
294await BicepUtilities.SetScopeAsync(scope1, bicep1.Resource);
295var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, scope1);
305var bicep1 = builder.AddBicepTemplateString("test1", "param name string").Resource;
306var bicep2 = builder.AddBicepTemplateString("test2", "param name string").Resource;
326var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
351var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
379var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
411var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
432var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
447var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
463var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
478var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
497var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
512var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
526var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
538var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
554var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
579.Resource;
614var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
ExistingAzureResourceTests.cs (38)
23var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
40var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
57var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
77var (manifest, bicep) = await GetManifestWithBicep(model, serviceBus.Resource);
97var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
114var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(storageAccount.Resource);
129var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(storageAccount.Resource);
146var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appConfiguration.Resource);
163var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(eventHubs.Resource);
180var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(keyVault.Resource);
197var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(logAnalytics.Resource);
214var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(postgresSql.Resource);
235var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(postgresSql.Resource);
252var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(search.Resource);
269var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(signalR.Resource);
286var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(webPubSub.Resource);
303var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(sqlServer.Resource);
319var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(sqlServer.Resource);
337var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(redis.Resource);
354var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(redis.Resource);
371var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(redis.Resource);
386var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(redis.Resource);
402var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
425var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(openAI.Resource);
445var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
466var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
482var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(acr.Resource);
499var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(acr.Resource);
521Assert.Null(serviceBus.Resource.GetDeploymentTargetAnnotation());
522Assert.True(serviceBus.Resource.TryGetLastAnnotation<ExistingAzureResourceAnnotation>(out var existingAzureResourceAnnotation));
541Assert.Null(serviceBus.Resource.GetDeploymentTargetAnnotation());
542Assert.True(serviceBus.Resource.TryGetLastAnnotation<ExistingAzureResourceAnnotation>(out var existingAzureResourceAnnotation));
562var (manifest, bicep) = await GetManifestWithBicep(model, serviceBus.Resource);
588resource.Resource.Scope = AzureBicepResourceScope.CreateForSubscription(existingSubscriptionId.Resource);
590var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(resource.Resource, skipPreparer: true);
607resource.Resource.Scope = AzureBicepResourceScope.CreateForTenant();
609var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(resource.Resource, skipPreparer: true);
FoundryExtensionsTests.cs (22)
356.PublishAsync(new ResourceReadyEvent(foundry.Resource, app.Services), cancellation.Token)
360.WaitForResourceAsync(deployment.Resource.Name, KnownResourceStates.Running, cancellation.Token)
364Assert.Equal("Phi-4-mini-instruct-generic-gpu:5", deployment.Resource.LocalModelId);
561Assert.True(foundry.Resource.IsEmulator);
562Assert.False(foundry.Resource.ManageLocalService);
563Assert.Equal(new Uri("http://windows-host:5273/"), foundry.Resource.EmulatorServiceUri);
564Assert.Equal("Endpoint=http://windows-host:5273/;Key=unused", foundry.Resource.ConnectionStringExpression.ValueExpression);
629Assert.Equal("{myAIFoundry.connectionString};Model=gpt-4", deployment.Resource.ConnectionStringExpression.ValueExpression);
640deployment.Resource.LocalModelId = "custom-model-id";
642Assert.Equal("{myAIFoundry.connectionString};Model=custom-model-id", deployment.Resource.ConnectionStringExpression.ValueExpression);
655Assert.Equal("{myAIFoundry.connectionString};Deployment=deployment1", deployment.Resource.ConnectionStringExpression.ValueExpression);
671var manifest = await AzureManifestUtils.GetManifestWithBicep(model, foundry.Resource);
689Assert.Same(foundry.Resource, project.Resource.Parent);
702Assert.Null(project.Resource.ContainerRegistry);
717var (_, bicepText) = await AzureManifestUtils.GetManifestWithBicep(model, project.Resource);
737var (_, bicepText) = await AzureManifestUtils.GetManifestWithBicep(model, project.Resource);
755var (_, bicepText) = await AzureManifestUtils.GetManifestWithBicep(model, foundry.Resource);
802SetFoundryProjectOutputs(project.Resource);
830SetFoundryProjectOutputs(project.Resource);
870SetFoundryProjectOutputs(project.Resource);
910SetFoundryProjectOutputs(project.Resource);
PublicApiTests\CosmosDBPublicApiTests.cs (10)
21var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
41var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
61var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
81var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
101var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
119var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
135var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
153var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
199var action = () => new AzureCosmosDBDatabaseResource(name, databaseName, parent.Resource);
217var action = () => new AzureCosmosDBDatabaseResource(name, databaseName, parent.Resource);
ResourceWithAzureFunctionsConfigTests.cs (36)
16var storageResource = builder.AddAzureStorage("storage").Resource;
28var blobResource = storageResource.AddBlobs("blobs").Resource;
40var queueResource = storageResource.AddQueues("queues").Resource;
51var cosmosResource = builder.AddAzureCosmosDB("cosmos").Resource;
63var dbResource = cosmosResource.AddCosmosDatabase("database").Resource;
76var containerResource = dbResource.AddContainer("container", "/id").Resource;
87var eventHubsResource = builder.AddAzureEventHubs("eventhubs").Resource;
98var serviceBusResource = builder.AddAzureServiceBus("servicebus").Resource;
109var storage = builder.AddAzureStorage("storage").RunAsEmulator().Resource;
127var storage = builder.AddAzureStorage("storage").Resource;
148var blobResource = storage.AddBlobs("blobs").Resource;
165var tableResource = storage.AddTables("tables").Resource;
182var queueResource = storage.AddQueues("queues").Resource;
198var cosmosResource = builder.AddAzureCosmosDB("cosmos").RunAsEmulator().Resource;
214var cosmosResource = builder.AddAzureCosmosDB("cosmos").WithAccessKeyAuthentication().Resource;
230var cosmosResource = builder.AddAzureCosmosDB("cosmos").Resource;
247var dbResource = cosmosResource.AddCosmosDatabase("database").Resource;
256Assert.Equal(cosmosResource.Resource.ConnectionStringExpression.ValueExpression, targetReferenceExpression.ValueExpression);
259Assert.Equal(cosmosResource.Resource.ConnectionStringExpression.ValueExpression, targetReferenceExpression.ValueExpression);
272var containerResource = cosmosResource.AddCosmosDatabase("database").AddContainer("container", "/partitionKey").Resource;
281Assert.Equal(targetReferenceExpression.ValueExpression, cosmosResource.Resource.ConnectionStringExpression.ValueExpression);
284Assert.Equal(targetReferenceExpression.ValueExpression, cosmosResource.Resource.ConnectionStringExpression.ValueExpression);
300var dbResource = cosmosResource.AddCosmosDatabase("database").Resource;
309Assert.Equal(targetReferenceExpression.ValueExpression, cosmosResource.Resource.ConnectionStringExpression.ValueExpression);
322var containerResource = cosmosResource.AddCosmosDatabase("database").AddContainer("container", "/partitionKey").Resource;
331Assert.Equal(targetReferenceExpression.ValueExpression, cosmosResource.Resource.ConnectionStringExpression.ValueExpression);
342var eventHubsResource = builder.AddAzureEventHubs("eventhubs").RunAsEmulator().Resource;
362var eventHubsResource = builder.AddAzureEventHubs("eventhubs").Resource;
382var serviceBusResource = builder.AddAzureServiceBus("servicebus").Resource;
399var queueResource = serviceBusResource.AddServiceBusQueue("ordersqueue").Resource;
418var queueResource = serviceBusResource.AddServiceBusQueue("ordersqueue").Resource;
438var topicResource = serviceBusResource.AddServiceBusTopic("notificationstopic").Resource;
457var topicResource = serviceBusResource.AddServiceBusTopic("notificationstopic").Resource;
478var subscriptionResource = topicResource.AddServiceBusSubscription("usersubscription").Resource;
500var subscriptionResource = topicResource.AddServiceBusSubscription("usersubscription").Resource;
515Assert.Equal(serviceBusResource.Resource.ConnectionStringExpression.ValueExpression, connectionStringExpression.ValueExpression);
Aspire.Hosting.Azure.WebPubSub (9)
Aspire.Hosting.Blazor (44)
BlazorGatewayExtensions.cs (26)
160if (gateway.Resource is ProjectResource)
170else if (gateway.Resource is ExecutableResource executableResource)
295var pathPrefix = wasmApp.Resource.Name;
300var referencedServices = GetServiceDiscoveryReferences(wasmApp.Resource);
306var existingGatewayRefs = GetReferencedResourceNames(gateway.Resource);
318wasmApp.Resource.Parent = gateway.Resource;
331gateway.Resource,
333wasmApp.Resource.ProjectPath,
335browser: wasmApp.Resource.DebuggerBrowser);
355wasmApp.Resource.DebuggerBrowser = browser;
379var annotation = GetOrAddGatewayAppsAnnotation(gateway.Resource);
382GetBlazorStorePath(gateway.ApplicationBuilder), "gateways", gateway.Resource.Name);
391var registeredApps = GetRegisteredApps(gateway.Resource);
392var httpsGatewayEndpoint = GetEndpointIfDefined(gateway.Resource, "https");
393var httpGatewayEndpoint = GetEndpointIfDefined(gateway.Resource, "http");
395?? throw new InvalidOperationException($"The gateway '{gateway.Resource.Name}' must define an HTTP or HTTPS endpoint.");
498gateway.ApplicationBuilder.Eventing.Subscribe<InitializeResourceEvent>(gateway.Resource, (e, ct) =>
501_ = Task.Run(() => WatchGatewayStateAsync(gateway.Resource, notificationService, ct), ct);
530await notificationService.PublishUpdateAsync(reg.AppBuilder.Resource, snapshot => snapshot with
623var publishResourceName = $"{wasmApp.Resource.Name}publish";
624var project = GetProjectInfo(wasmApp.Resource.ProjectPath, gateway.ApplicationBuilder.AppHostDirectory);
626project.SolutionRoot, wasmApp.Resource.ProjectPath).Replace('\\', '/');
648wasmApp.Resource.ProjectPath,
651?? throw new InvalidOperationException($"Unable to determine publish properties for '{wasmApp.Resource.ProjectPath}'.");
657Source = companion.Resource,
Aspire.Hosting.Blazor.Tests (60)
Aspire.Hosting.Browsers (1)
Aspire.Hosting.Browsers.Tests (5)
Aspire.Hosting.Containers.Tests (55)
ContainerResourceBuilderTests.cs (17)
16Assert.Equal("redis-stack", redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().Image);
24Assert.Equal("redis-stack", redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().Image);
25Assert.Equal("1.0.0", redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().Tag);
33container.Resource.Annotations.RemoveAt(0);
36Assert.Equal("new-image", container.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().Image);
37Assert.Equal("latest", container.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().Tag);
45container.Resource.Annotations.Add(new ContainerImageAnnotation { Image = "another-image" });
48Assert.Equal("new-image", container.Resource.Annotations.OfType<ContainerImageAnnotation>().Last().Image);
49Assert.Equal("latest", container.Resource.Annotations.OfType<ContainerImageAnnotation>().Last().Tag);
57Assert.Equal("7.1", redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().Tag);
65Assert.Equal("myregistry.azurecr.io", redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().Registry);
73Assert.Equal("42b5c726e719639fcc1e9dbc13dd843f567dcd37911d0e1abb9f47f2cc1c95cd", redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single().SHA256);
151var annotation = redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single();
163var annotation = redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single();
176var annotation = redis.Resource.Annotations.OfType<ContainerImageAnnotation>().Single();
212var annotation = redis.Resource.Annotations.OfType<ContainerImagePullPolicyAnnotation>().Single();
220var containerImage = builder.Resource.Annotations.OfType<ContainerImageAnnotation>().Single();
Aspire.Hosting.DevTunnels (12)
Aspire.Hosting.DevTunnels.Tests (49)
DevTunnelResourceBuilderExtensionsTests.cs (46)
34var tunnelPort = tunnel.Resource.Ports.FirstOrDefault();
40var values = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(consumer.Resource, serviceProvider: serviceProvider).DefaultTimeout();
54Assert.True(tunnel.Resource.Options.AllowAnonymous);
64Assert.Equal("custom-id", tunnel.Resource.TunnelId);
75var annotation = Assert.Single(tunnel.Resource.Annotations.OfType<PersistenceAnnotation>());
86Assert.Empty(tunnel.Resource.Annotations.OfType<PersistenceAnnotation>());
101Assert.Single(tunnel.Resource.Ports);
102var port = tunnel.Resource.Ports.First();
118var tunnelPort = Assert.Single(tunnel.Resource.Ports);
133var tunnelPort = Assert.Single(tunnel.Resource.Ports);
154var tunnelPort = Assert.Single(tunnel.Resource.Ports);
176var tunnelPort = Assert.Single(tunnel.Resource.Ports);
196var args = await tunnel.Resource.GetArgumentValuesAsync().DefaultTimeout();
229var tunnelPort = Assert.Single(tunnel.Resource.Ports);
237await builder.Eventing.PublishAsync(new BeforeResourceStartedEvent(tunnel.Resource, app.Services)).DefaultTimeout();
271var tunnelPort = Assert.Single(tunnel.Resource.Ports);
279await builder.Eventing.PublishAsync(new BeforeResourceStartedEvent(tunnel.Resource, app.Services)).DefaultTimeout();
314var port = Assert.Single(tunnel.Resource.Ports);
317var monitor = app.Services.GetRequiredKeyedService<DevTunnelMonitor>(tunnel.Resource);
378var port = Assert.Single(tunnel.Resource.Ports);
381var monitor = app.Services.GetRequiredKeyedService<DevTunnelMonitor>(tunnel.Resource);
410var tunnelEndpoint = tunnel.GetEndpoint(target.Resource, "https");
413Assert.Equal(target.Resource, tunnelEndpoint.Resource);
432Assert.Equal(target.Resource, tunnelEndpoint.Resource);
452Assert.Equal(target.Resource, tunnelEndpoint.Resource);
468var endpointRef = tunnel.GetEndpoint(target.Resource, "nonexistent");
514var endpointRef = tunnel.GetEndpoint(target.Resource, "https");
536var httpTunnelEndpoint = tunnel.GetEndpoint(target.Resource, "http");
537var httpsTunnelEndpoint = tunnel.GetEndpoint(target.Resource, "https");
561var port = Assert.Single(tunnel.Resource.Ports);
653var port = Assert.Single(tunnel.Resource.Ports);
700var contextualTargetEndpoint = new EndpointReference(target.Resource, targetEndpoint.EndpointAnnotation, containerNetwork);
703var port = Assert.Single(tunnel.Resource.Ports);
772var tunnelPort = Assert.Single(tunnel.Resource.Ports);
784foreach (var annotation in tunnel.Resource.Annotations.OfType<CommandLineArgsCallbackAnnotation>().ToArray())
786tunnel.Resource.Annotations.Remove(annotation);
809var stopped = await app.ResourceCommands.ExecuteCommandAsync(tunnel.Resource, "stop", cts.Token).DefaultTimeout();
814var restarted = await app.ResourceCommands.ExecuteCommandAsync(tunnel.Resource, "start", cts.Token).DefaultTimeout();
828await app.ResourceNotifications.WaitForResourceHealthyAsync(tunnel.Resource.Name, cts.Token);
849await app.ResourceNotifications.WaitForResourceHealthyAsync(tunnel.Resource.Name, cts.Token);
857var monitor = app.Services.GetRequiredKeyedService<DevTunnelMonitor>(tunnel.Resource);
859var waitForDependency = app.ResourceNotifications.WaitForDependenciesAsync(dependent.Resource, cts.Token);
879var port = Assert.Single(tunnel.Resource.Ports);
883var monitor = app.Services.GetRequiredKeyedService<DevTunnelMonitor>(tunnel.Resource);
884await monitor.StartAsync(tunnel.Resource.TunnelId, CancellationToken.None);
886await monitor.ProcessLogAsync($"Ready to accept connections for tunnel: {tunnel.Resource.TunnelId}", CancellationToken.None);
Aspire.Hosting.Docker (12)
Aspire.Hosting.Docker.Tests (29)
Aspire.Hosting.Dotnet (7)
Aspire.Hosting.Dotnet.Tests (252)
DotnetProjectBuildCoordinatorTests.cs (112)
54AssertBuildDependency(api.Resource, buildResource);
55AssertBuildDependency(worker.Resource, buildResource);
58Assert.Single(api.Resource.Annotations.OfType<SupportsDebuggingAnnotation>()).LaunchConfigurationType);
61Assert.Single(worker.Resource.Annotations.OfType<SupportsDebuggingAnnotation>()).LaunchConfigurationType);
279Assert.Empty(project.Resource.Annotations.OfType<DotnetProgramBuildCompletionAnnotation>());
280Assert.False(Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>()).SuppressBuild);
283Assert.Single(project.Resource.Annotations.OfType<SupportsDebuggingAnnotation>()).LaunchConfigurationType);
284Assert.True(project.Resource.SupportsDebugging(builder.Configuration, out _));
305Assert.True(Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>()).SuppressBuild);
308Assert.Single(project.Resource.Annotations.OfType<SupportsDebuggingAnnotation>()).LaunchConfigurationType);
330Assert.Single(project.Resource.Annotations.OfType<SupportsDebuggingAnnotation>()).LaunchConfigurationType);
351Assert.False(Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>()).SuppressBuild);
354Assert.Single(project.Resource.Annotations.OfType<SupportsDebuggingAnnotation>()).LaunchConfigurationType);
355Assert.True(project.Resource.SupportsDebugging(builder.Configuration, out _));
394AssertBuildDependency(project.Resource, buildResource);
415AssertBuildDependency(file.Resource, buildResource);
462var fileArgs = await ArgumentEvaluator.GetArgumentListAsync(file.Resource, app.Services);
529AssertBuildDependency(project.Resource, finalBuild);
530AssertBuildDependency(file.Resource, finalBuild);
552var fileArgs = await ArgumentEvaluator.GetArgumentListAsync(file.Resource, app.Services);
610AssertBuildDependency(first.Resource, buildResources[1]);
611AssertBuildDependency(second.Resource, buildResources[1]);
613foreach (var (resource, path) in new[] { (first.Resource, firstPath), (second.Resource, secondPath) })
619expected.Add(resource == first.Resource ? firstSentinel : secondSentinel);
662resource.Resource,
696AssertBuildDependency(first.Resource, buildResource);
697AssertBuildDependency(second.Resource, buildResource);
708var metadata = Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>());
710Assert.Empty(project.Resource.Annotations.OfType<WaitAnnotation>());
917Assert.Null(Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>()).BuildWorkingDirectory);
1137AssertBuildDependency(api.Resource, buildResources[1]);
1138AssertBuildDependency(worker.Resource, buildResources[1]);
1357project.Resource,
1393project.Resource,
1397Assert.Same(project.Resource, callbackResource);
1433await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, serviceProvider: app.Services);
1452ForgetCachedCallbackResults(project.Resource);
1454project.Resource,
1457project.Resource,
1462await project.Resource.CreateLaunchConfigurationAsync(callbackContext));
1561resource.Resource.Annotations.Add(
1639var metadata = Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>());
1660project.Resource,
1663project.Resource,
1672await project.Resource.CreateLaunchConfigurationAsync(callbackContext));
1703ForgetCachedCallbackResults(project.Resource);
1714project.Resource,
1723var projectArguments = await ArgumentEvaluator.GetArgumentListAsync(project.Resource, app.Services);
1725project.Resource,
1730await project.Resource.CreateLaunchConfigurationAsync(refreshedCallbackContext));
2000api.Resource,
2003worker.Resource,
2027var metadata = Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>());
2045project.Resource,
2050await project.Resource.CreateLaunchConfigurationAsync(callbackContext));
2059var arguments = await ArgumentEvaluator.GetArgumentListAsync(project.Resource, app.Services);
2062Assert.Equal("resolved-command", project.Resource.Command);
2063Assert.Equal(runtimeWorkingDirectory, project.Resource.WorkingDirectory);
2081var metadata = Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>());
2101var launchTool = Assert.Single(project.Resource.Annotations.OfType<LaunchToolArgsCallbackAnnotation>());
2103var firstArguments = await ArgumentEvaluator.GetArgumentListAsync(project.Resource, app.Services);
2106Assert.Equal(firstSdkWorkingDirectory, project.Resource.WorkingDirectory);
2112var secondArguments = await ArgumentEvaluator.GetArgumentListAsync(project.Resource, app.Services);
2115Assert.Equal(projectDirectory, project.Resource.WorkingDirectory);
2140Assert.Equal(runtimeWorkingDirectory, worker.Resource.WorkingDirectory);
2166project.Resource,
2171await project.Resource.CreateLaunchConfigurationAsync(callbackContext));
2175Assert.Equal(runtimeWorkingDirectory, project.Resource.WorkingDirectory);
2191Assert.True(@event.Model.Resources.Remove(removed.Resource));
2215var index = @event.Model.Resources.IndexOf(replaced.Resource);
2217@event.Model.Resources[index] = new ExecutableResource(replaced.Resource.Name, "dotnet", workspace.Path);
2243Assert.True(@event.Model.Resources.Remove(project.Resource));
2258AssertBuildDependency(file.Resource, buildResource);
2261project.Resource.Annotations
2267project.Resource.Annotations
2321AssertBuildDependency(first.Resource, buildResources[1]);
2322AssertBuildDependency(second.Resource, buildResources[1]);
2566Assert.True(builder.Resources.Remove(removed.Resource));
2572Assert.True(Assert.Single(missing.Resource.Annotations.OfType<DotnetProjectMetadata>()).SuppressBuild);
2573AssertBuildDependency(missing.Resource, primaryBuildResource);
2574AssertBuildDependency(removed.Resource, primaryBuildResource);
2667Assert.Single(first.Resource.Annotations.OfType<DotnetProjectMetadata>()).ProjectPath);
2670Assert.Single(second.Resource.Annotations.OfType<DotnetProjectMetadata>()).ProjectPath);
2671Assert.Equal(Path.GetDirectoryName(coordinatedProjectPath), first.Resource.WorkingDirectory);
2672Assert.Equal(Path.GetDirectoryName(coordinatedProjectPath), second.Resource.WorkingDirectory);
2673Assert.Equal(coordinatedProjectPath, (await ArgumentEvaluator.GetArgumentListAsync(first.Resource))[2]);
2674Assert.Equal(coordinatedProjectPath, (await ArgumentEvaluator.GetArgumentListAsync(second.Resource))[2]);
2817var instances = resource.Resource.GetResolvedResourceNames();
2823resource.Resource.Name,
2831resource.Resource.GetProjectMetadata().ProjectPath,
2873var instances = resource.Resource.GetResolvedResourceNames();
2879resource.Resource.Name,
3040Assert.False(missing.Resource.Annotations.OfType<DotnetProjectMetadata>().Single().SuppressBuild);
3042missing.Resource.Annotations.OfType<SupportsDebuggingAnnotation>(),
3079Assert.False(Assert.Single(missing.Resource.Annotations.OfType<DotnetProjectMetadata>()).SuppressBuild);
3081missing.Resource.Annotations.OfType<SupportsDebuggingAnnotation>(),
3083Assert.False(missing.Resource.SupportsDebugging(builder.Configuration, out _));
3084var args = await ArgumentEvaluator.GetArgumentListAsync(missing.Resource, app.Services);
3148Assert.Equal(["exec", expectedTargetPath], await ArgumentEvaluator.GetArgumentListAsync(project.Resource, app.Services));
3149var metadata = project.Resource.GetProjectMetadata();
3162project.Resource,
3229var metadata = Assert.Single(project.Resource.Annotations.OfType<DotnetProjectMetadata>());
3251var callbackContext = new CommandLineArgsCallbackContext([], project.Resource, startCts.Token)
3256var launchTool = Assert.Single(project.Resource.Annotations.OfType<LaunchToolArgsCallbackAnnotation>());
3288var completion = Assert.Single(project.Resource.Annotations.OfType<DotnetProgramBuildCompletionAnnotation>());
3392var completion = Assert.Single(project.Resource.Annotations.OfType<DotnetProgramBuildCompletionAnnotation>());
3438var completion = Assert.Single(project.Resource.Annotations.OfType<DotnetProgramBuildCompletionAnnotation>());
3472var completion = Assert.Single(project.Resource.Annotations.OfType<DotnetProgramBuildCompletionAnnotation>());
3524var completion = Assert.Single(project.Resource.Annotations.OfType<DotnetProgramBuildCompletionAnnotation>());
3585project.Resource,
3752worker.Resource,
DotnetProjectLaunchProfileTests.cs (24)
38var metadata = resource.Resource.GetProjectMetadata();
41await resource.Resource.CreateLaunchConfigurationAsync(
42LaunchConfigurationTestHelpers.CreateCallbackContext(resource.Resource, ExecutableLaunchMode.Debug)));
45Assert.Same(metadata, resource.Resource.GetProjectMetadata());
46Assert.Single(resource.Resource.Annotations.OfType<IProjectMetadata>());
49var endpoint = Assert.Single(resource.Resource.Annotations.OfType<EndpointAnnotation>());
53resource.Resource, serviceProvider: TestServiceProvider.Instance);
56var arguments = await ArgumentEvaluator.GetArgumentListAsync(resource.Resource);
61Assert.Empty(resource.Resource.Annotations.OfType<EndpointAnnotation>());
89await resource.Resource.CreateLaunchConfigurationAsync(
90LaunchConfigurationTestHelpers.CreateCallbackContext(resource.Resource, ExecutableLaunchMode.Debug)));
96Assert.Equal(port, Assert.Single(resource.Resource.Annotations.OfType<EndpointAnnotation>()).Port);
100Assert.Empty(resource.Resource.Annotations.OfType<EndpointAnnotation>());
138Assert.Equal(port, Assert.Single(resource.Resource.Annotations.OfType<EndpointAnnotation>()).Port);
142Assert.Empty(resource.Resource.Annotations.OfType<EndpointAnnotation>());
180Assert.Equal(5111, Assert.Single(modern.Resource.Annotations.OfType<EndpointAnnotation>()).Port);
183Assert.Equal(5222, Assert.Single(legacy.Resource.Annotations.OfType<EndpointAnnotation>()).Port);
187Assert.Empty(legacy.Resource.Annotations.OfType<EndpointAnnotation>());
211Assert.Equal(5222, Assert.Single(resource.Resource.Annotations.OfType<EndpointAnnotation>()).Port);
215Assert.Empty(resource.Resource.Annotations.OfType<EndpointAnnotation>());
233Assert.Equal(5222, Assert.Single(resource.Resource.Annotations.OfType<EndpointAnnotation>()).Port);
237Assert.Empty(resource.Resource.Annotations.OfType<EndpointAnnotation>());
255Assert.Empty(resource.Resource.Annotations.OfType<EndpointAnnotation>());
273Assert.Empty(resource.Resource.Annotations.OfType<EndpointAnnotation>());
DotnetProjectPathTests.cs (28)
32var metadata = resource.Resource.GetProjectMetadata();
34Assert.Equal(projectPath, relativeResource.Resource.GetProjectMetadata().ProjectPath);
37var arguments = await ArgumentEvaluator.GetArgumentListAsync(resource.Resource);
39Assert.Equal(workspace.Path, resource.Resource.WorkingDirectory);
41Assert.Equal(iconName, Assert.Single(resource.Resource.Annotations.OfType<ResourceIconAnnotation>()).IconName);
42Assert.Equal(iconName, Assert.Single(relativeResource.Resource.Annotations.OfType<ResourceIconAnnotation>()).IconName);
69Assert.Equal(projectPath, absolute.Resource.GetProjectMetadata().ProjectPath);
70Assert.Equal(projectPath, relative.Resource.GetProjectMetadata().ProjectPath);
71Assert.Equal(directory.FullName, absolute.Resource.WorkingDirectory);
72Assert.Equal(directory.FullName, relative.Resource.WorkingDirectory);
73Assert.False(absolute.Resource.GetProjectMetadata().IsFileBasedApp);
75Assert.Equal(iconName, Assert.Single(absolute.Resource.Annotations.OfType<ResourceIconAnnotation>()).IconName);
76Assert.Equal(iconName, Assert.Single(relative.Resource.Annotations.OfType<ResourceIconAnnotation>()).IconName);
79Assert.Equal(projectPath, absolute.Resource.GetProjectMetadata().ProjectPath);
80Assert.Equal(projectPath, relative.Resource.GetProjectMetadata().ProjectPath);
102Path.TrimEndingDirectorySeparator(resource.Resource.GetProjectMetadata().ProjectPath));
132Assert.Equal(directory.FullName, resource.Resource.GetProjectMetadata().ProjectPath);
133Assert.False(resource.Resource.GetProjectMetadata().SuppressBuild);
140new BeforeResourceStartedEvent(resource.Resource, app.Services),
172new BeforeResourceStartedEvent(resource.Resource, app.Services),
205Assert.Equal(includeCSharpProject ? csharpPath : directory.FullName, legacy.Resource.GetProjectMetadata().ProjectPath);
206Assert.Equal(includeCSharpProject ? csharpPath : directory.FullName, legacyFileApp.Resource.GetProjectMetadata().ProjectPath);
207Assert.Equal(directory.FullName, modern.Resource.GetProjectMetadata().ProjectPath);
225Assert.Equal(workspace.Path, legacy.Resource.GetProjectMetadata().ProjectPath);
226Assert.Equal(path, modern.Resource.GetProjectMetadata().ProjectPath);
244var icon = Assert.Single(resource.Resource.Annotations.OfType<ResourceIconAnnotation>());
296new BeforeResourceStartedEvent(resource.Resource, app.Services),
335Assert.Equal(path, excluded.Resource.GetProjectMetadata().ProjectPath);
DotnetProjectResourceTests.cs (57)
40var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
56var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
72Assert.Equal("dotnet", app.Resource.Command);
73Assert.Equal(Path.GetDirectoryName(projectPath), app.Resource.WorkingDirectory);
83Assert.IsAssignableFrom<IResourceWithServiceDiscovery>(app.Resource);
84Assert.IsAssignableFrom<ExecutableResource>(app.Resource);
85Assert.IsAssignableFrom<IComputeResource>(app.Resource);
103.Where(item => ReferenceEquals(item.ModelResource, resource.Resource))
109Assert.True(resource.Resource.TryGetInstances(out var instances));
118Assert.Equal(resource.Resource.Command, executable.Spec.ExecutablePath);
119Assert.Equal(resource.Resource.WorkingDirectory, executable.Spec.WorkingDirectory);
147Assert.True(app.Resource.TryGetLastAnnotation<IProjectMetadata>(out var metadata));
173var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
174var metadata = app.Resource.GetProjectMetadata();
180Assert.True(app.Resource.SupportsDotnetProgramPublishing());
181Assert.IsAssignableFrom<IDotnetProgramResource>(app.Resource);
182Assert.IsAssignableFrom<IContainerFilesDestinationResource>(app.Resource);
192var metadata = resource.Resource.GetProjectMetadata();
194Assert.True(resource.Resource.SupportsDotnetProgramPublishing());
197Assert.Single(resource.Resource.Annotations.OfType<PipelineStepAnnotation>());
198Assert.Single(resource.Resource.Annotations.OfType<PipelineConfigurationAnnotation>());
199Assert.Single(resource.Resource.Annotations.OfType<ContainerBuildOptionsCallbackAnnotation>());
228var manifest = await ManifestUtils.GetManifestOrNull(resource.Resource, workspace.Path);
244var manifest = await ManifestUtils.GetManifest(resource.Resource, workspace.Path);
262var manifest = await ManifestUtils.GetManifest(resource.Resource, workspace.Path);
311Source = assets.Resource,
356await imageBuilder.BuildImageAsync(resource.Resource, cancellation.Token);
411() => imageBuilder.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken));
457Assert.True(app.Resource.TryGetLastAnnotation<IProjectMetadata>(out var metadata));
475Assert.True(app.Resource.TryGetLastAnnotation<IProjectMetadata>(out var metadata));
485var annotation = app.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().SingleOrDefault();
501var launchDefaults = Assert.Single(project.Resource.Annotations.OfType<ProjectLaunchDefaultsAnnotation>());
556var endpoint = Assert.Single(app.Resource.Annotations.OfType<EndpointAnnotation>());
570var resource = builder.AddDotnetProject("testapp", projectPath, o => o.ExcludeLaunchProfile = true).Resource;
584var resource = builder.AddDotnetProject("testapp", appPath, o => o.ExcludeLaunchProfile = true).Resource;
620Assert.True(app.Resource.TryGetLastAnnotation<SupportsDebuggingAnnotation>(out var supportsDebugging));
624app.Resource,
627await app.Resource.CreateLaunchConfigurationAsync(callbackContext));
663app.Resource,
666await app.Resource.CreateLaunchConfigurationAsync(callbackContext));
684var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
700Assert.Empty(app.Resource.Annotations.OfType<SupportsDebuggingAnnotation>());
702var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
746var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
772var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
798var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
817var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
852var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
876var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
908var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
940var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
970var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
1013var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
1041var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
1143await imageBuilder.BuildImageAsync(resource.Resource, cancellation.Token);
1147Assert.Empty(resource.Resource.GetProjectMetadata().BuildEnvironment);
1148Assert.Null(resource.Resource.GetProjectMetadata().BuildWorkingDirectory);
Aspire.Hosting.DotnetTool.Tests (31)
Aspire.Hosting.EntityFrameworkCore (28)
Aspire.Hosting.EntityFrameworkCore.Tests (224)
AddEFMigrationsTests.cs (34)
25Assert.Equal("mymigrations", migrations.Resource.Name);
26Assert.Equal(project.Resource, migrations.Resource.StartupProjectResource);
27Assert.Equal(typeof(TestDbContext).FullName, migrations.Resource.DbContextTypeName);
39Assert.Equal("mymigrations", migrations.Resource.Name);
40Assert.Equal(project.Resource, migrations.Resource.StartupProjectResource);
41Assert.Null(migrations.Resource.DbContextTypeName);
53Assert.Equal("mymigrations", migrations.Resource.Name);
54Assert.Equal(project.Resource, migrations.Resource.StartupProjectResource);
55Assert.Equal(typeof(TestDbContext).FullName, migrations.Resource.DbContextTypeName);
68Assert.Equal("mymigrations", migrations.Resource.Name);
69Assert.Equal(project.Resource, migrations.Resource.StartupProjectResource);
70Assert.Equal(contextTypeName, migrations.Resource.DbContextTypeName);
96Assert.Same(project.Resource, migrations.Resource.StartupProjectResource);
99_ = migrations.Resource.ProjectResource;
127Assert.Same(project.Resource, migrations.Resource.ProjectResource);
139Assert.NotEqual(migrations1.Resource, migrations2.Resource);
140Assert.Equal(typeof(TestDbContext).FullName, migrations1.Resource.DbContextTypeName);
141Assert.Equal(typeof(AnotherDbContext).FullName, migrations2.Resource.DbContextTypeName);
153Assert.NotEqual(migrations1.Resource, migrations2.Resource);
154Assert.Equal("MyApp.Data.AppDbContext", migrations1.Resource.DbContextTypeName);
155Assert.Equal("MyApp.Data.LoggingDbContext", migrations2.Resource.DbContextTypeName);
235var snapshotAnnotation = migrations.Resource.Annotations.OfType<ResourceSnapshotAnnotation>().FirstOrDefault();
248var iconAnnotation = migrations.Resource.Annotations.OfType<ResourceIconAnnotation>().FirstOrDefault();
260Assert.IsAssignableFrom<IResourceWithWaitSupport>(migrations.Resource);
270Assert.False(migrations.Resource.PublishAsMigrationScript);
271Assert.False(migrations.Resource.PublishAsMigrationBundle);
EFBuildCustomizationWarningTests.cs (7)
75migrations.Resource, logger, TestContext.Current.CancellationToken, app.Services, tool.Resource);
97ExpectedArguments(executor, migrations.Resource, "database", "update", noBuild: true),
117migrations.Resource, new TestLogger("EF", sink, level => level >= LogLevel.Information),
138Assert.Empty(startup.Resource.GetProjectMetadata().BuildEnvironment);
150migrations.Resource, new TestLogger("EF", sink, level => level >= LogLevel.Information),
161var expected = ExpectedArguments(executor, migrations.Resource, "migrations", bundle ? "bundle" : "script", noBuild: false);
181migrations.Resource, logger, TestContext.Current.CancellationToken, app.Services, tool.Resource);
EFBuildReadinessTests.cs (18)
36migrations.Resource.ToolResource = tool.Resource;
40migrations.Resource, command, TestContext.Current.CancellationToken);
50Assert.True(app.ResourceNotifications.TryGetCurrentState(migrations.Resource.Name, out var state));
69migrations.Resource.ToolResource = tool.Resource;
80migrations.Resource.Name, KnownResourceStates.FailedToStart, token);
83() => app.ResourceNotifications.WaitForDependenciesAsync(project.Resource, token));
101migrations.Resource.ToolResource = tool.Resource;
108migrations.Resource.Name, succeed ? KnownResourceStates.Finished : KnownResourceStates.FailedToStart, token);
111Assert.False(migrations.Resource.IsExecutingCommand);
115() => app.ResourceNotifications.WaitForDependenciesAsync(project.Resource, token));
141migrations.Resource.ToolResource = tool.Resource;
146migrations.Resource, "ef-database-update", TestContext.Current.CancellationToken);
150Assert.False(migrations.Resource.IsExecutingCommand);
153migrations.Resource, "ef-database-update", TestContext.Current.CancellationToken);
172Assert.Same(target.Resource, migrations.Resource.MigrationsProjectResource);
181migrations.Resource, NullLogger.Instance, TestContext.Current.CancellationToken, app.Services, tool.Resource);
205migrations.Resource, NullLogger.Instance, TestContext.Current.CancellationToken, app.Services, tool.Resource);
EFMigrationConfigurationTests.cs (46)
36Assert.True(migrations.Resource.PublishAsMigrationScript);
47Assert.True(migrations.Resource.PublishAsMigrationBundle);
58Assert.Equal("Data/Migrations", migrations.Resource.MigrationOutputDirectory);
69Assert.Equal("MyApp.Data.Migrations", migrations.Resource.MigrationNamespace);
101Assert.True(migrations.Resource.PublishAsMigrationScript);
123Assert.Equal(typeof(TestDbContext).FullName, migrations.Resource.DbContextTypeName);
124Assert.True(migrations.Resource.PublishAsMigrationScript);
125Assert.True(migrations.Resource.PublishAsMigrationBundle);
126Assert.Equal("CustomDir", migrations.Resource.MigrationOutputDirectory);
127Assert.Equal("MyApp.Migrations", migrations.Resource.MigrationNamespace);
141Assert.Equal(typeof(TestDbContext).FullName, migrations.Resource.DbContextTypeName);
173Assert.False(migrations.Resource.PublishAsMigrationScript);
174Assert.False(migrations.Resource.PublishAsMigrationBundle);
175Assert.Null(migrations.Resource.MigrationOutputDirectory);
176Assert.Null(migrations.Resource.MigrationNamespace);
177Assert.Null(migrations.Resource.MigrationsProjectPath);
188Assert.NotNull(migrations.Resource.MigrationsProjectPath);
190Assert.EndsWith("Target.csproj", migrations.Resource.MigrationsProjectPath);
225Assert.Null(migrations.Resource.MigrationsProjectPath);
248Assert.Equal(target.Resource.GetProjectMetadata().ProjectPath, migrations.Resource.MigrationsProjectPath);
249Assert.Same(target.Resource, migrations.Resource.MigrationsProjectResource);
252Assert.Null(migrations.Resource.MigrationsProjectResource);
255migrations.Resource.MigrationsProjectPath = new Projects.ServiceA().ProjectPath;
256Assert.Null(migrations.Resource.MigrationsProjectResource);
257Assert.Null(migrations.Resource.MigrationsProjectMetadata);
268Assert.Null(migrations.Resource.MigrationsProjectPath);
273Assert.Equal(Path.GetFullPath(Path.Combine(builder.AppHostDirectory, "Target.csproj")), migrations.Resource.MigrationsProjectPath);
275Assert.Equal(Path.GetFullPath(Path.Combine(builder.AppHostDirectory, "Target.csproj")), migrations.Resource.MigrationsProjectPath);
286Assert.True(migrations.Resource.PublishAsMigrationScript);
287Assert.True(migrations.Resource.ScriptIdempotent);
298Assert.True(migrations.Resource.PublishAsMigrationScript);
299Assert.False(migrations.Resource.ScriptIdempotent);
310Assert.True(migrations.Resource.PublishAsMigrationScript);
311Assert.True(migrations.Resource.ScriptNoTransactions);
322Assert.True(migrations.Resource.PublishAsMigrationBundle);
323Assert.Equal("linux-x64", migrations.Resource.BundleTargetRuntime);
334Assert.True(migrations.Resource.PublishAsMigrationBundle);
335Assert.True(migrations.Resource.BundleSelfContained);
347Assert.True(migrations.Resource.PublishAsMigrationScript);
348Assert.True(migrations.Resource.ScriptIdempotent);
349Assert.True(migrations.Resource.ScriptNoTransactions);
350Assert.True(migrations.Resource.PublishAsMigrationBundle);
351Assert.Equal("win-x64", migrations.Resource.BundleTargetRuntime);
352Assert.True(migrations.Resource.BundleSelfContained);
EFMigrationPipelineTests.cs (73)
49migrations.Resource.ToolResource = tool.Resource;
56foreach (var annotation in migrations.Resource.Annotations.OfType<PipelineStepAnnotation>())
61Resource = migrations.Resource
91var steps = await CreateStepsAsync(builder, migrations.Resource);
108var steps = await CreateStepsAsync(builder, migrations.Resource);
124var steps = await CreateStepsAsync(builder, migrations.Resource);
142var steps = await CreateStepsAsync(builder, migrations.Resource);
160var m1Steps = await CreateStepsAsync(builder, m1.Resource);
161var m2Steps = await CreateStepsAsync(builder, m2.Resource);
186var m1Steps = await CreateStepsAsync(builder, m1.Resource);
187var m2Steps = await CreateStepsAsync(builder, m2.Resource);
216var m1Steps = await CreateStepsAsync(builder, m1.Resource);
217var m2Steps = await CreateStepsAsync(builder, m2.Resource);
238var m1Steps = await CreateStepsAsync(builder, m1.Resource);
239var m2Steps = await CreateStepsAsync(builder, m2.Resource);
264var m1Steps = await CreateStepsAsync(builder, m1.Resource);
265var m3Steps = await CreateStepsAsync(builder, m3.Resource);
287var steps = await CreateStepsAsync(builder, migrations.Resource);
290Assert.True(migrations.Resource.PublishAsMigrationBundle);
291Assert.True(migrations.Resource.PublishBundleContainer);
303var waitAnnotations = migrations.Resource.Annotations.OfType<WaitAnnotation>().ToList();
323var waitAnnotations = migrations.Resource.Annotations.OfType<WaitAnnotation>().ToList();
335var waitAnnotations = migrations.Resource.Annotations.OfType<WaitAnnotation>().ToList();
346var startCommand = migrations.Resource.ToolResource.Annotations
363Assert.True(migrations.Resource.PublishAsMigrationBundle);
364Assert.Equal("linux-x64", migrations.Resource.BundleTargetRuntime);
365Assert.True(migrations.Resource.BundleSelfContained);
366Assert.True(migrations.Resource.PublishBundleContainer);
377Assert.True(migrations.Resource.PublishAsMigrationBundle);
378Assert.False(migrations.Resource.PublishBundleContainer);
389Assert.True(migrations.Resource.PublishAsMigrationScript);
390Assert.True(migrations.Resource.ScriptIdempotent);
391Assert.True(migrations.Resource.ScriptNoTransactions);
392Assert.False(migrations.Resource.PublishAsMigrationBundle);
405Assert.Equal("linux-x64", migrations.Resource.BundleTargetRuntime);
418Assert.Equal("linux-arm64", migrations.Resource.BundleTargetRuntime);
431Assert.False(migrations.Resource.BundleSelfContained);
442Assert.Null(migrations.Resource.BundleTargetRuntime);
455Assert.IsAssignableFrom<ContainerResource>(migrations.Resource);
456Assert.IsAssignableFrom<IComputeResource>(migrations.Resource);
457Assert.False(migrations.Resource.IsContainer());
470var dockerfileAnnotation = Assert.Single(migrations.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
476Assert.True(migrations.Resource.IsContainer());
492Assert.Empty(migrations.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
493Assert.False(migrations.Resource.IsContainer());
496Assert.True(migrations.Resource.PublishBundleContainer);
507Assert.Empty(migrations.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
508Assert.False(migrations.Resource.IsContainer());
521var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
540var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
564var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
584migrations.Resource.ResolvedFramework = resolvedFramework;
586var baseImage = EFMigrationResourceBuilderExtensions.ResolveBaseImage(migrations.Resource);
601migrations.Resource.ResolvedFramework = "net11.0";
603var baseImage = EFMigrationResourceBuilderExtensions.ResolveBaseImage(migrations.Resource);
617var baseImage = EFMigrationResourceBuilderExtensions.ResolveBaseImage(migrations.Resource);
631var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
650EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource));
667EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource));
685var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
705var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
724EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource));
738var database = builder.AddResource(new TestChildDatabaseResource("sqldata", server.Resource));
745var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
759var database = builder.AddResource(new TestChildDatabaseResource("sqldata", server.Resource));
766var waitedResources = migrations.Resource.Annotations.OfType<WaitAnnotation>().Select(w => w.Resource).ToList();
767Assert.Contains(server.Resource, waitedResources);
768Assert.Contains((IResource)database.Resource, waitedResources);
771var dockerfile = EFMigrationResourceBuilderExtensions.GenerateDockerfile(migrations.Resource);
783Assert.Equal("mymigrations.exe", EFResourceBuilderExtensions.GetBundleFileName(migrations.Resource));
794Assert.Equal("mymigrations", EFResourceBuilderExtensions.GetBundleFileName(migrations.Resource));
807var steps = await CreateStepsAsync(builder, migrations.Resource);
815Assert.Contains($"build-{migrations.Resource.Name}", generateStep.RequiredBySteps);
Aspire.Hosting.Foundry (102)
PromptAgent\PromptAgentBuilderExtensions.cs (35)
69var agent = new AzurePromptAgentResource(name, model.Resource.DeploymentName, project.Resource, instructions);
152agent.Resource.AddTool(tool.Resource);
179var resource = new CodeInterpreterToolResource(name, project.Resource);
203var resource = new FileSearchToolResource(name, project.Resource)
228var resource = new WebSearchToolResource(name, project.Resource);
250var resource = new ImageGenerationToolResource(name, project.Resource);
278var resource = new ComputerToolResource(name, project.Resource, displayWidth, displayHeight, environment);
311var resource = new AzureAISearchToolResource(name, project.Resource)
336if (tool.Resource.Connection is not null)
339$"Azure AI Search tool '{tool.Resource.Name}' already has a backing resource configured.");
343var projectBuilder = tool.ApplicationBuilder.CreateResourceBuilder(tool.Resource.Project);
348tool.Resource.Connection = connection.Resource;
349tool.Resource.SearchResource = search.Resource;
374var resource = new BingGroundingToolResource(name, project.Resource);
447if (tool.Resource.Connection is not null)
450$"Bing Grounding tool '{tool.Resource.Name}' already has a connection configured.");
456tool.Resource.Connection = connectionBuilder.Resource;
461var projectBuilder = tool.ApplicationBuilder.CreateResourceBuilder(tool.Resource.Project);
462var connection = projectBuilder.AddBingGroundingConnection($"{tool.Resource.Name}-conn", bingResourceId);
463tool.Resource.Connection = connection.Resource;
467var paramProjectBuilder = tool.ApplicationBuilder.CreateResourceBuilder(tool.Resource.Project);
468var paramConnection = paramProjectBuilder.AddBingGroundingConnection($"{tool.Resource.Name}-conn", parameterBuilder);
469tool.Resource.Connection = paramConnection.Resource;
505var resource = new SharePointToolResource(name, project.Resource, projectConnectionIds);
529var resource = new FabricToolResource(name, project.Resource, projectConnectionIds);
568name, project.Resource, functionName, description, parameters,
631name, project.Resource, functionName, parameters, description, strictModeEnabled);
685builder.Resource.AddCustomTool(tool);
Toolbox\FoundryToolboxBuilderExtensions.cs (16)
55var toolbox = new FoundryToolboxResource(name, builder.Resource);
64toolbox.Annotations.Add(new ReferenceRoleAssignmentAnnotation(builder.Resource, roles));
185builder.Resource.AddTool(new FoundryToolboxWebSearchToolDefinition(name, description));
205builder.Resource.Description = description;
325if (builder.Resource.IsExisting)
330var projectBuilder = builder.ApplicationBuilder.CreateResourceBuilder(builder.Resource.Parent);
332builder.Resource.Parent.Name,
333builder.Resource.Name,
335search.Resource.Name);
336var connection = projectBuilder.AddSearchConnection(connectionName, search.Resource);
337builder.Resource.AddTool(new FoundryToolboxAzureAISearchToolDefinition(
339search.Resource,
340connection.Resource,
360foreach (var connection in builder.Resource.Tools
367builder.Resource.ClearTools();
381builder.Resource.AddTool(new FoundryToolboxMcpToolDefinition(name, endpointExpression, options));
Aspire.Hosting.Foundry.Tests (208)
HostedAgentExtensionTests.cs (29)
37Assert.True(app.Resource.TryGetEndpoints(out var endpoints));
52Assert.True(app.Resource.TryGetEndpoints(out var endpoints));
69Assert.True(app.Resource.TryGetEndpoints(out var endpoints));
173var endpoint = Assert.Single(agent.Resource.Annotations.OfType<EndpointAnnotation>());
187var result = await app.ResourceCommands.ExecuteCommandAsync(agent.Resource, "send-message", arguments);
375ReferenceEquals(r.Resource, project.Resource));
388ReferenceEquals(r.Resource, project.Resource));
425SetFoundryProjectOutputs(project.Resource);
453Assert.Same(agent.Resource, hostedAgent.Target);
454Assert.True(agent.Resource.SupportsDotnetProgramPublishing());
455Assert.DoesNotContain(builder.Resources.OfType<ContainerResource>(), resource => resource.Name == agent.Resource.Name);
456Assert.DoesNotContain(agent.Resource.Annotations, annotation => annotation is DockerfileBuildAnnotation);
457Assert.Contains(agent.Resource.Annotations, annotation => annotation is EndpointEnvironmentInjectionFilterAnnotation);
592var hostedAgent = new AzureHostedAgentResource("agent-ha", agent.Resource);
619var hostedAgent = new AzureHostedAgentResource("agent-ha", agent.Resource);
628Assert.Equal(agent.Resource.Name, envVars["RESOURCE_NAME"]);
642var hostedAgent = new AzureHostedAgentResource("agent-ha", agent.Resource);
668() => configuration.ToProjectsAgentVersionCreationOptions(agent.Resource.Name));
680var reference = new ConnectionStringReference(connection.Resource, optional: false);
686var hostedAgent = new AzureHostedAgentResource("agent-ha", agent.Resource);
708var names = ConnectionStringEnvironmentVariableNames.Create(connection.Resource, "my-db-http");
710connection.Resource, optional: false, names, "HttpConnectionStringExpression",
718var hostedAgent = new AzureHostedAgentResource("agent-ha", agent.Resource);
741var hostedAgent = new AzureHostedAgentResource("agent-ha", agent.Resource);
882Assert.Contains(app.Resource.Annotations.OfType<WaitAnnotation>(), w => ReferenceEquals(w.Resource, project.Resource));
897Assert.Null(project.Resource.DefaultContainerRegistry);
931var registryTargets = container.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList();
933Assert.Same(registry.Resource, registryTarget.Registry);
ProjectResourceTests.cs (35)
21Assert.IsType<AzureCognitiveServicesProjectResource>(project.Resource);
22Assert.Equal("my-project", project.Resource.Name);
23Assert.Same(account.Resource, project.Resource.Parent);
34var registry = project.Resource.ContainerRegistry;
36Assert.Same(project.Resource.DefaultContainerRegistry, registry);
49Assert.Null(project.Resource.DefaultContainerRegistry);
50Assert.Null(project.Resource.ContainerRegistry);
63Assert.Same(registry.Resource, project.Resource.ContainerRegistry);
64Assert.True(project.Resource.TryGetLastAnnotation<ContainerRegistryReferenceAnnotation>(out var annotation));
65Assert.Same(registry.Resource, annotation.Registry);
78var defaultRegistry = project.Resource.DefaultContainerRegistry;
88Assert.Same(registry.Resource, registries[0]);
100var defaultRegistry = project.Resource.DefaultContainerRegistry;
110Assert.Null(project.Resource.DefaultContainerRegistry);
120var expr = project.Resource.ConnectionStringExpression;
131var expr = project.Resource.UriExpression;
142var properties = ((IResourceWithConnectionString)project.Resource)
163Assert.Same(appInsights.Resource, project.Resource.AppInsights);
176Assert.Equal("chat", deployment.Resource.Name);
177Assert.Equal("gpt-4", deployment.Resource.ModelName);
191Assert.Equal("chat", deployment.Resource.Name);
210Assert.NotNull(project.Resource.CapabilityHostConfiguration);
211Assert.Equal("cap-host", project.Resource.CapabilityHostConfiguration.Name);
212Assert.Same(cosmosDb.Resource, project.Resource.CapabilityHostConfiguration.CosmosDB);
213Assert.Same(storage.Resource, project.Resource.CapabilityHostConfiguration.Storage);
214Assert.Same(search.Resource, project.Resource.CapabilityHostConfiguration.Search);
234Assert.NotNull(project.Resource.CapabilityHostConfiguration);
235Assert.Same(foundry.Resource, project.Resource.CapabilityHostConfiguration.AzureOpenAI);
PromptAgentTests.cs (80)
33searchTool.Resource.IndexName = "docs";
34searchTool.Resource.Connection!.Outputs["id"] = "/connections/search";
36bingConnection.Resource.Outputs["id"] = "/connections/bing";
49await searchTool.Resource.ToAgentToolAsync(),
50await bingTool.Resource.ToAgentToolAsync(),
51await sharePoint.Resource.ToAgentToolAsync(),
52await fabric.Resource.ToAgentToolAsync(),
53await function.Resource.ToAgentToolAsync()
73Assert.NotNull(agent.Resource);
74Assert.Equal("my-agent", agent.Resource.Name);
75Assert.IsType<AzurePromptAgentResource>(agent.Resource);
88Assert.Equal("gpt41", agent.Resource.Model);
89Assert.Equal("You tell jokes.", agent.Resource.Instructions);
102Assert.Same(project.Resource, agent.Resource.Project);
180project.Resource.Outputs["endpoint"] = "https://account.services.ai.azure.com/api/projects/my-project";
186var command = Assert.Single(agent.Resource.Annotations.OfType<ResourceCommandAnnotation>());
190ResourceName = agent.Resource.Name,
239Assert.Null(agent.Resource.Instructions);
258Assert.Equal(2, agent.Resource.Tools.Count);
259Assert.IsType<CodeInterpreterToolResource>(agent.Resource.Tools[0]);
260Assert.IsType<WebSearchToolResource>(agent.Resource.Tools[1]);
273Assert.Equal("code-interp", tool.Resource.Name);
274Assert.IsType<CodeInterpreterToolResource>(tool.Resource);
275Assert.Same(project.Resource, tool.Resource.Project);
288Assert.IsType<FileSearchToolResource>(tool.Resource);
289Assert.Equal(["store-1", "store-2"], tool.Resource.VectorStoreIds);
302Assert.IsType<WebSearchToolResource>(tool.Resource);
315Assert.IsType<AzureAISearchToolResource>(tool.Resource);
316Assert.Same(project.Resource, tool.Resource.Project);
317Assert.Null(tool.Resource.SearchResource);
330Assert.NotNull(tool.Resource.SearchResource);
331Assert.Same(search.Resource, tool.Resource.SearchResource);
332Assert.NotNull(tool.Resource.Connection);
359Assert.IsType<BingGroundingToolResource>(tool.Resource);
360Assert.Null(tool.Resource.Connection);
374Assert.NotNull(tool.Resource.Connection);
375Assert.Same(connection.Resource, tool.Resource.Connection);
403Assert.NotNull(tool.Resource.Connection);
430Assert.IsType<BingGroundingConnectionResource>(connection.Resource);
443Assert.NotNull(tool.Resource.Connection);
457Assert.IsType<BingGroundingConnectionResource>(connection.Resource);
470Assert.IsType<SharePointToolResource>(tool.Resource);
471Assert.Equal(["conn-1", "conn-2"], tool.Resource.ProjectConnectionIds);
484Assert.IsType<FabricToolResource>(tool.Resource);
485Assert.Equal(["fab-conn-1"], tool.Resource.ProjectConnectionIds);
506Assert.IsType<AzureFunctionToolResource>(tool.Resource);
507Assert.Equal("myFunc", tool.Resource.FunctionName);
524Assert.IsType<FunctionToolResource>(tool.Resource);
525Assert.Equal("get_weather", tool.Resource.FunctionName);
526Assert.Equal("Gets the current weather", tool.Resource.Description);
550Assert.Equal(4, agent.Resource.Tools.Count);
551Assert.IsType<CodeInterpreterToolResource>(agent.Resource.Tools[0]);
552Assert.IsType<WebSearchToolResource>(agent.Resource.Tools[1]);
553Assert.IsType<AzureAISearchToolResource>(agent.Resource.Tools[2]);
554Assert.IsType<SharePointToolResource>(agent.Resource.Tools[3]);
570Assert.Single(agent1.Resource.Tools);
571Assert.Single(agent2.Resource.Tools);
572Assert.Same(codeInterp.Resource, agent1.Resource.Tools[0]);
573Assert.Same(codeInterp.Resource, agent2.Resource.Tools[0]);
605pyapp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
619Assert.IsAssignableFrom<IResourceWithConnectionString>(agent.Resource);
620Assert.IsAssignableFrom<IResourceWithEnvironment>(agent.Resource);
621Assert.IsNotAssignableFrom<IComputeResource>(agent.Resource);
634Assert.IsType<ImageGenerationToolResource>(tool.Resource);
647var computerTool = Assert.IsType<ComputerToolResource>(tool.Resource);
664Assert.Same(project.Resource, ci.Resource.Project);
665Assert.Same(project.Resource, fs.Resource.Project);
666Assert.Same(project.Resource, ws.Resource.Project);
681var annotations = agent.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
698Resource = agent.Resource
ToolboxTests.cs (52)
31Assert.Equal("field-tools", toolbox.Resource.Name);
32Assert.Equal("7", toolbox.Resource.Version);
33Assert.Same(project.Resource, toolbox.Resource.Parent);
34Assert.IsNotAssignableFrom<IResourceWithParent>(toolbox.Resource);
36toolbox.Resource.Annotations.OfType<ResourceRelationshipAnnotation>());
38Assert.Same(project.Resource, parentRelationship.Resource);
42toolbox.Resource.Annotations.OfType<ReferenceRoleAssignmentAnnotation>());
43Assert.Same(project.Resource, consumerRole.Target);
64Assert.True(runToolbox.Resource.IsExisting);
65Assert.False(publishToolbox.Resource.IsExisting);
83Assert.False(runToolbox.Resource.IsExisting);
84Assert.True(publishToolbox.Resource.IsExisting);
98Assert.True(toolbox.Resource.IsExisting);
99Assert.Empty(toolbox.Resource.Tools);
116Assert.Empty(toolbox.Resource.Tools);
133Assert.Empty(toolbox.Resource.Tools);
156toolbox.Resource.Tools,
172Assert.Same(search.Resource, aiSearch.SearchResource);
192pyapp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
222var expression = toolbox.Resource.GetVersionUriExpression("9");
229toolbox.Resource.UriExpression.ValueExpression,
252project.Resource.Outputs["endpoint"] = "https://project.example.com";
253project.Resource.Outputs["APPLICATION_INSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=test;IngestionEndpoint=https://test.example.com/";
275var annotation = Assert.Single(toolbox.Resource.Annotations.OfType<PipelineStepAnnotation>());
280Resource = toolbox.Resource
292Assert.Same(toolbox.Resource, step.Resource);
305var annotation = Assert.Single(toolbox.Resource.Annotations.OfType<PipelineStepAnnotation>());
310Resource = toolbox.Resource
320Assert.Same(toolbox.Resource, beforeStart.Resource);
376var def = Assert.IsType<FoundryToolboxAzureAISearchToolDefinition>(toolbox.Resource.Tools[0]);
484var def = Assert.IsType<FoundryToolboxMcpToolDefinition>(toolbox.Resource.Tools[0]);
517Assert.Single(toolbox.Resource.Tools));
557Assert.Single(toolbox.Resource.Tools));
637ReferenceExpression.Create($"{empty.Resource}"));
747Assert.Single(firstToolbox.Resource.Tools));
749Assert.Single(secondToolbox.Resource.Tools));
764Assert.Single(toolbox.Resource.Tools));
802var replacement = new ContainerResource(mcp.Resource.Name);
803model.Resources.Remove(mcp.Resource);
811var toolboxStepAnnotation = Assert.Single(toolbox.Resource.Annotations.OfType<PipelineStepAnnotation>());
815Resource = toolbox.Resource
834var configAnnotation = Assert.Single(toolbox.Resource.Annotations.OfType<PipelineConfigurationAnnotation>());
853var toolboxStepAnnotation = Assert.Single(toolbox.Resource.Annotations.OfType<PipelineStepAnnotation>());
857Resource = toolbox.Resource
870var configAnnotation = Assert.Single(toolbox.Resource.Annotations.OfType<PipelineConfigurationAnnotation>());
892var toolboxStepAnnotation = Assert.Single(toolbox.Resource.Annotations.OfType<PipelineStepAnnotation>());
896Resource = toolbox.Resource
903Resource = mcp.Resource,
909toolbox.Resource.Annotations.OfType<PipelineConfigurationAnnotation>());
927await notifications.PublishUpdateAsync(mcp.Resource, snapshot => snapshot with
935mcp.Resource,
Aspire.Hosting.Garnet (1)
Aspire.Hosting.Garnet.Tests (21)
Aspire.Hosting.Go (28)
GoHostingExtensions.cs (27)
345Resource = containerBuilder.Resource,
349if (!containerBuilder.Resource.IsExcludedFromPublish())
351WarnIfExistingDockerfileIgnoresPackagePath(resource, containerBuilder.Resource, context.Logger);
363var validationStep = context.GetSteps(containerBuilder.Resource).FirstOrDefault(step => step.Name == validationStepName);
365context.GetSteps(containerBuilder.Resource, WellKnownPipelineTags.BuildCompute).DependsOn(validationStep);
372if (rb.Resource.TryGetAnnotationsOfType<ContainerFilesDestinationAnnotation>(
375var buildSteps = context.GetSteps(rb.Resource, WellKnownPipelineTags.BuildCompute);
419if (builder.Resource.TryGetLastAnnotation<GoModTidyAnnotation>(out _))
430$"{builder.Resource.Name}-mod-tidy", "go", builder.Resource.WorkingDirectory);
443if (builder.Resource.TryGetLastAnnotation<GoModVendorBuilderAnnotation>(out var existingVendor))
469if (builder.Resource.TryGetLastAnnotation<GoModVendorAnnotation>(out _))
479$"{builder.Resource.Name}-mod-vendor", "go", builder.Resource.WorkingDirectory);
487if (builder.Resource.TryGetLastAnnotation<GoModTidyBuilderAnnotation>(out var tidyBuilder))
515if (builder.Resource.TryGetLastAnnotation<GoModDownloadAnnotation>(out _))
525$"{builder.Resource.Name}-mod-download", "go", builder.Resource.WorkingDirectory);
534if (builder.Resource.TryGetLastAnnotation<GoModVendorBuilderAnnotation>(out var vendorBuilder))
538else if (builder.Resource.TryGetLastAnnotation<GoModTidyBuilderAnnotation>(out var tidyBuilder))
563if (builder.Resource.TryGetLastAnnotation<GoVetToolAnnotation>(out _))
573$"{builder.Resource.Name}-vet-tool", "go", builder.Resource.WorkingDirectory);
761var debuggingAnnotation = builder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
764builder.Resource.Annotations.Remove(debuggingAnnotation);
771new ExecutableAnnotation { Command = "dlv", WorkingDirectory = builder.Resource.WorkingDirectory },
791var resource = builder.Resource;
Aspire.Hosting.Go.Tests (83)
AddGoAppTests.cs (47)
32var manifest = await ManifestUtils.GetManifest(app.Resource);
69var manifest = await ManifestUtils.GetManifest(app.Resource);
113var manifest = await ManifestUtils.GetManifest(app.Resource);
137var manifest = await ManifestUtils.GetManifest(app.Resource);
161var manifest = await ManifestUtils.GetManifest(app.Resource);
185var manifest = await ManifestUtils.GetManifest(app.Resource);
213var manifest = await ManifestUtils.GetManifest(app.Resource);
243var manifest = await ManifestUtils.GetManifest(app.Resource);
271var manifest = await ManifestUtils.GetManifest(app.Resource);
296var manifest = await ManifestUtils.GetManifest(app.Resource);
321var manifest = await ManifestUtils.GetManifest(app.Resource);
347var manifest = await ManifestUtils.GetManifest(app.Resource);
374var manifest = await ManifestUtils.GetManifest(app.Resource);
402var manifest = await ManifestUtils.GetManifest(app.Resource);
430var manifest = await ManifestUtils.GetManifest(app.Resource);
462var manifest = await ManifestUtils.GetManifest(app.Resource);
499var commandArguments = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
501Assert.Equal("dlv", app.Resource.Command);
539var executionConfiguration = await ExecutionConfigurationBuilder.Create(app.Resource)
544app.Resource,
583var launchConfig = await CreateLaunchConfigurationAsync(app.Resource);
601var launchConfig = await CreateLaunchConfigurationAsync(app.Resource);
635var commandArguments = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
648var debugAnnotation = app.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().Last();
649Assert.True(app.Resource.HasLaunchToolArgsOwnedBy(debugAnnotation));
667var commandArguments = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
700var commandArguments = await ArgumentEvaluator.GetArgumentListAsync(app.Resource, application.Services);
723var manifest = await ManifestUtils.GetManifest(app.Resource);
753var manifest = await ManifestUtils.GetManifest(app.Resource);
783var manifest = await ManifestUtils.GetManifest(app.Resource);
814var manifest = await ManifestUtils.GetManifest(app.Resource);
935Assert.False(app.Resource.TryGetLastAnnotation<DockerfileBuilderCallbackAnnotation>(out _),
948var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
1007var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
1021var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
1035var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
1228Assert.IsType<GoAppResource>(app.Resource, exactMatch: false);
1229Assert.True(app.Resource is IContainerFilesDestinationResource);
1248api.Resource.TryGetAnnotationsOfType<ContainerFilesDestinationAnnotation>(out var annotations),
1252Assert.Same(source.Resource, annotation.Source);
1340app.Resource.TryGetAnnotationsOfType<RequiredCommandAnnotation>(out var annotations),
1352app.Resource.TryGetAnnotationsOfType<RequiredCommandAnnotation>(out var annotations));
1485Assert.True(app.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var certAnnotation));
1497Assert.True(app.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var certAnnotation));
1513Assert.True(goApp.Resource.TryGetLastAnnotation<CertificateTrustConfigurationCallbackAnnotation>(out var annotation));
1522Resource = goApp.Resource,
1533await using var logs = resourceLoggerService.WatchAsync(goApp.Resource).GetAsyncEnumerator();
GoRunDebuggingTests.cs (14)
36var context = new EnvironmentCallbackContext(builder.ExecutionContext, go.Resource);
37context.EnvironmentVariables["UNRELATED"] = unrelated.Resource;
63var environment = await GetEnvironmentAsync(builder, go.Resource);
115var configuration = await ExecutionConfigurationBuilder.Create(go.Resource)
160var environment = await GetEnvironmentAsync(builder, go.Resource);
204builder.ExecutionContext, go.Resource, cancellationToken: cancellation.Token)
250var configuration = await ExecutionConfigurationBuilder.Create(go.Resource)
265await app.Services.GetRequiredService<ResourceNotificationService>().PublishUpdateAsync(go.Resource, snapshot => snapshot with
295var environment = await GetEnvironmentAsync(builder, go.Resource);
310await Assert.ThrowsAsync<FormatException>(() => GetEnvironmentAsync(builder, go.Resource));
444var environment = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(go.Resource, serviceProvider: app.Services);
445var arguments = await ArgumentEvaluator.GetArgumentListAsync(go.Resource, app.Services);
447using var document = await RunGoAsync(processRunner, go.Resource, arguments, environment);
454using var nativeDocument = await RunGoAsync(processRunner, go.Resource, ["run", "."], nativeEnvironment);
Aspire.Hosting.Java (41)
JavaHostingExtensions.cs (41)
688if (builder.Resource.HasAnnotationOfType<JavaJarPathAnnotation>())
695if (builder.Resource.TryGetLastAnnotation<JavaBuildToolAnnotation>(out var existing) && existing.Tool != tool)
702if (builder.Resource.TryGetLastAnnotation<JavaBuildStepAnnotation>(out var buildStep) && buildStep.Tool != tool)
726.WithCommand(ResolveWrapperInvocation(builder.Resource, tool).Command)
759buildResourceName: $"{builder.Resource.Name}-maven-build",
792buildResourceName: $"{builder.Resource.Name}-gradle-build",
805if (builder.Resource.TryGetLastAnnotation<JavaBuildStepAnnotation>(out var existing) && existing.Tool != tool)
808$"Resource '{builder.Resource.Name}' is already configured to build with {existing.Tool}. " +
812if (builder.Resource.TryGetLastAnnotation<JavaBuildToolAnnotation>(out var launchTool) && launchTool.Tool != tool)
815$"Resource '{builder.Resource.Name}' is already configured to launch with {launchTool.Tool}. " +
824|| launchTool is null && !builder.Resource.HasAnnotationOfType<JavaDetectedBuildToolAnnotation>());
855var resource = builder.Resource;
915foreach (var annotation in builder.Resource.Annotations
922builder.Resource.Annotations.Remove(annotation);
953Path.Combine(builder.Resource.WorkingDirectory, wrapperPath));
959if (builder.Resource.TryGetLastAnnotation<JavaBuildToolAnnotation>(out var buildTool))
961builder.WithCommand(ResolveWrapperInvocation(builder.Resource, buildTool.Tool).Command);
964foreach (var buildStep in builder.Resource.Annotations.OfType<JavaBuildStepAnnotation>())
979.WithCommand(ResolveWrapperInvocation(builder.Resource, buildStep.Tool).Command);
1215var isFirstCall = !builder.Resource.HasAnnotationOfType<JavaOtelAgentAnnotation>();
1230if (!builder.Resource.TryGetLastAnnotation<JavaOtelAgentAnnotation>(out var agent))
1235var authored = ResolveOtelAgentPath(builder.Resource, agent);
1241resolved = Path.GetFullPath(Path.Combine(builder.Resource.WorkingDirectory, authored));
1243else if (JavaDockerfileGenerator.TryGetBuildProducedAgentPath(builder.Resource, out _))
1249if (builder.Resource.HasAnnotationOfType<JavaAuthoredDockerfileAnnotation>())
1252$"Java application '{builder.Resource.Name}' cannot be published because it uses " +
1253$"the Dockerfile in '{builder.Resource.WorkingDirectory}' and its OpenTelemetry " +
1306if (!TryResolveConfiguredBuildTool(builder.Resource, out var tool))
1311var buildArgs = builder.Resource.TryGetLastAnnotation<JavaBuildStepAnnotation>(out var buildStep)
1313: builder.Resource.HasAnnotationOfType<JavaDetectedBuildToolAnnotation>()
1314? ResolveDetectedBuildTool(builder.Resource).Configuration.BuildArgs
1319buildResourceName: $"{builder.Resource.Name}-{(tool is JavaBuildTool.Gradle ? "gradle" : "maven")}-build",
1336=> HasBuildProducedOtelAgent(builder.Resource)
1356=> builder.Resource.HasAnnotationOfType<JavaQuarkusAnnotation>()
1357&& builder.Resource.SupportsDebugging(builder.ApplicationBuilder.Configuration, out _);
1558if (builder.Resource.Annotations.OfType<JavaWrapperValidationAnnotation>().Any(a => a.Tool == tool))
1755var (mainClass, classPaths) = ResolveEntryPointForIde(builder.Resource);
1760JavaExec = TryResolveJavaExecutableForIde(builder.Resource),
1761WorkingDirectory = builder.Resource.WorkingDirectory,
1780: TryResolveIdeProjectName(builder.Resource),
1781BuildTool = TryResolveConfiguredBuildTool(builder.Resource, out var buildTool)
Aspire.Hosting.Java.Tests (168)
AddJavaAppPublishTests.cs (21)
155() => JavaDockerfileGenerator.TryGetBuildProducedAgentPath(app.Resource, out _));
205() => JavaDockerfileGenerator.TryGetBuildProducedAgentPath(app.Resource, out _));
241() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
299() => JavaDockerfileGenerator.TryGetBuildOutputJarPath(app.Resource, out _));
1172() => JavaDockerfileGenerator.ResolveBuildTool(app.Resource, appDirectory.Path));
1195var (tool, args) = JavaDockerfileGenerator.ResolveBuildTool(app.Resource, appDirectory.Path);
1213var (tool, args) = JavaDockerfileGenerator.ResolveBuildTool(app.Resource, appDirectory.Path);
1260() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1281() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1304() => JavaDockerfileGenerator.TryGetPrebuiltJarPath(app.Resource, sourceDir.FullName, out _));
1327() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1346Assert.True(JavaDockerfileGenerator.TryGetPrebuiltJarPath(app.Resource, sourceDir.FullName, out var resolved));
1412() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1439() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
2006() => JavaDockerfileGenerator.TryGetPrebuiltJarPath(app.Resource, tempDir.Path, out _));
2023() => JavaDockerfileGenerator.TryGetBuildProducedAgentPath(app.Resource, out _));
2141() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
2290() => JavaDockerfileGenerator.TryGetBuildOutputJarPath(app.Resource, out _));
2311() => JavaDockerfileGenerator.TryGetBuildOutputJarPath(app.Resource, out _));
2328() => JavaDockerfileGenerator.JavaContainerBuild.Resolve(app.Resource, appDirectory.Path));
2343() => JavaDockerfileGenerator.JavaContainerBuild.Resolve(app.Resource, appDirectory.Path));
AddJavaAppTests.cs (78)
45Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
46Assert.Equal(ExpectedWrapperInvocation.Args(Path.Combine(tempDir.Path, JavaHostingExtensions.s_defaultMavenWrapper), tempDir.Path, "spring-boot:run"), await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
58Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
59Assert.Equal(ExpectedWrapperInvocation.Args(Path.Combine(tempDir.Path, JavaHostingExtensions.s_defaultGradleWrapper), tempDir.Path, "bootRun", "--no-daemon"), await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
69var manifest = await ManifestUtils.GetManifest(app.Resource);
92var manifest = await ManifestUtils.GetManifest(app.Resource);
118Assert.Equal("myapi", app.Resource.Name);
128Assert.Equal("java", app.Resource.Command);
140Assert.Equal(expectedPath, app.Resource.WorkingDirectory);
150Assert.IsAssignableFrom<IResourceWithServiceDiscovery>(app.Resource);
160Assert.IsAssignableFrom<IContainerFilesDestinationResource>(app.Resource);
173async () => await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
187var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
199var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
243var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
257var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
302var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
317var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
321Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
335var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
339Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
357var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
360Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
377var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
380Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
396var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
441var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
550var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
554Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
568var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
572Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
610app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
624app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
639app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
677app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
695app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
712app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
727app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
747new BeforeResourceStartedEvent(app.Resource, built.Services),
766new BeforeResourceStartedEvent(app.Resource, built.Services),
793new BeforeResourceStartedEvent(app.Resource, built.Services),
800Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
803await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
824var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
826using var process = Process.Start(new ProcessStartInfo(app.Resource.Command)
854new BeforeResourceStartedEvent(app.Resource, built.Services),
875Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
878await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
893Assert.True(app.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var certAnnotation));
906Assert.True(javaApp.Resource.TryGetLastAnnotation<CertificateTrustConfigurationCallbackAnnotation>(out var annotation));
916Resource = javaApp.Resource,
944app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
961app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
977app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
984Path.Combine(app.Resource.WorkingDirectory, "target", "agent", "opentelemetry-javaagent.jar"));
999app.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
1016app.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
1139Assert.Same(app.Resource, Assert.Single(builder.Resources));
1140Assert.Null(Assert.Single(app.Resource.Annotations.OfType<JavaBuildStepAnnotation>()).ResourceName);
1154Assert.Contains(relationships, r => r.Type == "Parent" && r.Resource == app.Resource);
1168Assert.Contains(relationships, r => r.Type == "Parent" && r.Resource == app.Resource);
1182var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
1184Assert.Equal("java", app.Resource.Command);
1197var annotation = app.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().SingleOrDefault();
1209var annotation = app.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().SingleOrDefault();
1225app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1261Assert.Empty(app.Resource.Annotations.OfType<WaitAnnotation>());
1262Assert.Null(Assert.Single(app.Resource.Annotations.OfType<JavaBuildStepAnnotation>()).ResourceName);
1275var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
1279app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1293var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
1297app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1311var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
1315Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
1330var manifest = await ManifestUtils.GetManifest(app.Resource);
1347var manifest = await ManifestUtils.GetManifest(app.Resource);
1356var annotation = Assert.Single(app.Resource.Annotations.OfType<SupportsDebuggingAnnotation>());
1361app.Resource,
AddQuarkusAppTests.cs (24)
35app.Resource.Annotations.OfType<WaitAnnotation>(),
51Assert.Empty(app.Resource.Annotations.OfType<WaitAnnotation>());
68Assert.Empty(app.Resource.Annotations.OfType<WaitAnnotation>());
97new BeforeResourceStartedEvent(app.Resource, application.Services),
100Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
101Assert.Equal(ExpectedWrapperInvocation.Args(Path.Combine(tempDir.Path, JavaHostingExtensions.s_defaultMavenWrapper), tempDir.Path, "quarkus:dev"), await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
114new BeforeResourceStartedEvent(app.Resource, application.Services),
117Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
118Assert.Equal(ExpectedWrapperInvocation.Args(Path.Combine(tempDir.Path, JavaHostingExtensions.s_defaultGradleWrapper), tempDir.Path, "quarkusDev"), await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
132Assert.Same(app.Resource, Assert.Single(builder.Resources));
144var endpoint = Assert.Single(app.Resource.Annotations.OfType<EndpointAnnotation>());
161var endpoint = Assert.Single(app.Resource.Annotations.OfType<EndpointAnnotation>());
176TestEndpointAllocator.AllocateEndpoints(app.Resource);
179app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
195app.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
211TestEndpointAllocator.AllocateEndpoints(app.Resource);
214app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
230TestEndpointAllocator.AllocateEndpoints(app.Resource);
233app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
255app.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
272Assert.Empty(app.Resource.Annotations.OfType<HealthCheckAnnotation>());
286new BeforeResourceStartedEvent(app.Resource, application.Services),
306TestEndpointAllocator.AllocateEndpoints(app.Resource);
309app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
AddSpringBootAppTests.cs (35)
22new BeforeResourceStartedEvent(app.Resource, application.Services),
25Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
26Assert.Equal(ExpectedWrapperInvocation.Args(Path.Combine(tempDir.Path, JavaHostingExtensions.s_defaultMavenWrapper), tempDir.Path, "spring-boot:run"), await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
39new BeforeResourceStartedEvent(app.Resource, application.Services),
42Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
43Assert.Equal(ExpectedWrapperInvocation.Args(Path.Combine(tempDir.Path, JavaHostingExtensions.s_defaultGradleWrapper), tempDir.Path, "bootRun"), await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
56new BeforeResourceStartedEvent(app.Resource, application.Services),
59Assert.Equal(ExpectedWrapperInvocation.Command(), app.Resource.Command);
76new BeforeResourceStartedEvent(runApp.Resource, application.Services),
78var runTool = Assert.Single(runApp.Resource.Annotations.OfType<JavaBuildToolAnnotation>()).Tool;
82var (publishTool, _) = JavaDockerfileGenerator.ResolveBuildTool(publishApp.Resource, tempDir.Path);
99Assert.Same(app.Resource, Assert.Single(builder.Resources));
114new BeforeResourceStartedEvent(app.Resource, application.Services),
122await ArgumentEvaluator.GetArgumentListAsync(app.Resource));
137new BeforeResourceStartedEvent(app.Resource, application.Services),
140Assert.Same(app.Resource, Assert.Single(builder.Resources));
141Assert.Equal(["verify"], Assert.Single(app.Resource.Annotations.OfType<JavaBuildStepAnnotation>()).Args);
142Assert.Equal(["spring-boot:run"], Assert.Single(app.Resource.Annotations.OfType<JavaBuildToolAnnotation>()).Args);
156var endpoint = Assert.Single(app.Resource.Annotations.OfType<EndpointAnnotation>());
176Assert.Empty(app.Resource.Annotations.OfType<HealthCheckAnnotation>());
190new BeforeResourceStartedEvent(app.Resource, application.Services),
211new BeforeResourceStartedEvent(runApp.Resource, application.Services),
217() => JavaDockerfileGenerator.ResolveBuildTool(publishApp.Resource, tempDir.Path));
238new BeforeResourceStartedEvent(app.Resource, application.Services),
241TestEndpointAllocator.AllocateEndpoints(app.Resource);
244app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
272TestEndpointAllocator.AllocateEndpoints(app.Resource);
275app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
301app.Resource.Annotations.OfType<WaitAnnotation>(),
324Assert.Empty(app.Resource.Annotations.OfType<WaitAnnotation>());
337TestEndpointAllocator.AllocateEndpoints(app.Resource);
341app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance));
359TestEndpointAllocator.AllocateEndpoints(app.Resource);
362app.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
365Assert.True(Assert.Single(app.Resource.Annotations.OfType<EndpointAnnotation>()).IsExternal);
Aspire.Hosting.JavaScript (66)
Aspire.Hosting.JavaScript.Tests (214)
AddDenoAppTests.cs (93)
26var manifest = await ManifestUtils.GetManifest(denoApp.Resource);
45var exporter = Assert.Single(denoApp.Resource.Annotations.OfType<OtlpExporterAnnotation>());
49var manifest = await ManifestUtils.GetManifest(denoApp.Resource);
72await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
78var dockerBuildAnnotation = denoApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
81Assert.Empty(denoApp.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>());
99await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
119await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
135var dockerBuildAnnotation = denoApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
150await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
187await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
210await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
236await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
254await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
279await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
303await ManifestUtils.GetManifest(app.Resource, workspace.Path);
331var exporter = Assert.Single(app.Resource.Annotations.OfType<OtlpExporterAnnotation>());
334await ManifestUtils.GetManifest(app.Resource, workspace.Path);
358() => ManifestUtils.GetManifest(app.Resource, workspace.Path));
378() => ManifestUtils.GetManifest(app.Resource, workspace.Path));
399await ManifestUtils.GetManifest(app.Resource, workspace.Path);
424await ManifestUtils.GetManifest(app.Resource, workspace.Path);
444await ManifestUtils.GetManifest(app.Resource, workspace.Path);
463await ManifestUtils.GetManifest(app.Resource, workspace.Path);
484await ManifestUtils.GetManifest(app.Resource, workspace.Path);
511() => ManifestUtils.GetManifest(app.Resource, workspace.Path));
530await ManifestUtils.GetManifest(app.Resource, workspace.Path);
551await ManifestUtils.GetManifest(app.Resource, workspace.Path);
582await ManifestUtils.GetManifest(app.Resource, workspace.Path);
618await ManifestUtils.GetManifest(app.Resource, workspace.Path);
639await ManifestUtils.GetManifest(app.Resource, workspace.Path);
662await ManifestUtils.GetManifest(app.Resource, workspace.Path);
684await ManifestUtils.GetManifest(app.Resource, workspace.Path);
706await ManifestUtils.GetManifest(app.Resource, workspace.Path);
744await ManifestUtils.GetManifest(app.Resource, workspace.Path);
765await ManifestUtils.GetManifest(app.Resource, workspace.Path);
871await ManifestUtils.GetManifest(app.Resource, workspace.Path);
892await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
911await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
926var exception = await Assert.ThrowsAsync<InvalidOperationException>(() => ManifestUtils.GetManifest(denoApp.Resource, workspace.Path));
941var exception = await Assert.ThrowsAsync<InvalidOperationException>(() => ManifestUtils.GetManifest(denoApp.Resource, workspace.Path));
959await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
982await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1003await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1028await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1047await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1068await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1088var httpEndpoint = denoApp.Resource.GetEndpoint("http");
1091var manifest = await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1112Assert.Null(denoApp.Resource.GetEndpoint("http").EndpointAnnotation.TargetPort);
1128var initialEnvironmentCallbackCount = denoApp.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Count();
1135Assert.Empty(denoApp.Resource.Annotations.OfType<EndpointAnnotation>());
1136Assert.Equal(initialEnvironmentCallbackCount, denoApp.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Count());
1139.GetEnvironmentVariablesAsync(denoApp.Resource, DistributedApplicationOperation.Run)
1159var endpoint = Assert.Single(denoApp.Resource.Annotations.OfType<EndpointAnnotation>());
1163.GetEnvironmentVariablesAsync(denoApp.Resource, DistributedApplicationOperation.Publish)
1188var endpoint = Assert.Single(denoApp.Resource.Annotations.OfType<EndpointAnnotation>());
1204var callerEndpoint = denoApp.Resource.GetEndpoint("http").EndpointAnnotation;
1205var initialEnvironmentCallbackCount = denoApp.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Count();
1209var endpoint = Assert.Single(denoApp.Resource.Annotations.OfType<EndpointAnnotation>());
1212Assert.Equal(initialEnvironmentCallbackCount, denoApp.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Count());
1215.GetEnvironmentVariablesAsync(denoApp.Resource, DistributedApplicationOperation.Run)
1238var httpEndpoint = denoApp2.Resource.GetEndpoint("http");
1241await ManifestUtils.GetManifest(denoApp2.Resource, workspace.Path);
1515Assert.Contains(app.Resource.Annotations.OfType<WaitAnnotation>(), wait => wait.Resource == installer);
1532Assert.DoesNotContain(app.Resource.Annotations.OfType<WaitAnnotation>(), wait => wait.Resource == installer);
1550Assert.Single(app.Resource.Annotations.OfType<WaitAnnotation>(), wait => wait.Resource == installer);
1585await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1610await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1636await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1655await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
1691() => ManifestUtils.GetManifest(denoApp.Resource, workspace.Path));
2297Assert.Equal("deno", denoApp.Resource.Command);
2357await ManifestUtils.GetManifest(denoApp.Resource, workspace.Path);
2396Assert.True(denoApp.Resource.TryGetLastAnnotation<CertificateTrustConfigurationCallbackAnnotation>(out var annotation));
2404Resource = denoApp.Resource,
2427Assert.True(denoApp.Resource.TryGetLastAnnotation<CertificateTrustConfigurationCallbackAnnotation>(out var annotation));
2433Resource = denoApp.Resource,
2455Assert.True(denoApp.Resource.TryGetLastAnnotation<CertificateTrustConfigurationCallbackAnnotation>(out var annotation));
2461Resource = denoApp.Resource,
2484var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(denoApp.Resource, DistributedApplicationOperation.Run);
2501.GetEnvironmentVariablesAsync(denoApp.Resource, DistributedApplicationOperation.Run);
2515.GetEnvironmentVariablesAsync(denoApp.Resource, DistributedApplicationOperation.Publish);
2531var annotation = denoApp.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().SingleOrDefault();
2544var annotation = denoApp.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().SingleOrDefault();
2557var annotation = denoApp.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().SingleOrDefault();
2570var launchConfig = await CreateLaunchConfigurationAsync(denoApp.Resource);
2591var launchConfig = await CreateLaunchConfigurationAsync(denoApp.Resource);
2610var launchConfig = await CreateLaunchConfigurationAsync(denoApp.Resource);
2629var launchConfig = await CreateLaunchConfigurationAsync(denoApp.Resource);
2645var launchConfig = await CreateLaunchConfigurationAsync(denoApp.Resource);
2662var launchConfig = await CreateLaunchConfigurationAsync(denoApp.Resource);
2680() => CreateLaunchConfigurationAsync(denoApp.Resource, cancellationTokenSource.Token));
AddJavaScriptAppTests.cs (21)
33await ManifestUtils.GetManifest(yarnApp.Resource, workspace.Path);
38var dockerBuildAnnotation = yarnApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
56await ManifestUtils.GetManifest(yarnApp.Resource, workspace.Path);
76await ManifestUtils.GetManifest(yarnApp.Resource, workspace.Path);
96await ManifestUtils.GetManifest(yarnApp.Resource, workspace.Path);
123await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
144await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
184await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
202var exception = await Assert.ThrowsAsync<DistributedApplicationException>(() => ManifestUtils.GetManifest(app.Resource, workspace.Path));
239var exception = await Assert.ThrowsAsync<DistributedApplicationException>(() => ManifestUtils.GetManifest(app.Resource, workspace.Path));
283var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
301var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
320var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
336var exception = await Assert.ThrowsAsync<DistributedApplicationException>(() => ManifestUtils.GetManifest(app.Resource, workspace.Path));
358await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
394await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
429await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
460await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
489await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
561await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
657await ManifestUtils.GetManifest(pnpmApp.Resource, workspace.Path);
AddViteAppTests.cs (29)
35var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
74var dockerBuildAnnotation = nodeApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
77var containerFilesSource = nodeApp.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>().Single();
95await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
100var dockerBuildAnnotation = nodeApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
103var containerFilesSource = nodeApp.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>().Single();
128await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
148var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(nodeApp.Resource, DistributedApplicationOperation.Publish);
176var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(nodeApp.Resource, DistributedApplicationOperation.Publish);
199await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
204var dockerBuildAnnotation = nodeApp.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
207var containerFilesSource = nodeApp.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>().Single();
225await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
230var containerFilesSource = nodeApp.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>().Single();
247await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
252Assert.Empty(nodeApp.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>());
268await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
288await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
308await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
326var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
346var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
371var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
397var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
423var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
440var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
464var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
482var manifest = await ManifestUtils.GetManifest(nodeApp.Resource, workspace.Path);
1054var stepAnnotations = nodeApp.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
1071Assert.True(nodeApp.Resource.TryGetLastAnnotation<SuppressPublishValidationAnnotation>(out _));
RequiredCommandTests.cs (17)
32Assert.Equal(["node"], await GetRequiredCommandsAsync(builder, app.Resource));
45Assert.Equal(["bun", "node"], await GetRequiredCommandsAsync(builder, app.Resource));
57Assert.Equal(["node", "npm"], await GetRequiredCommandsAsync(builder, app.Resource));
71Assert.Equal(["bun"], await GetRequiredCommandsAsync(builder, app.Resource));
81Assert.Equal(["node", "npm"], await GetRequiredCommandsAsync(builder, vite.Resource));
92Assert.Equal(["bun"], await GetRequiredCommandsAsync(builder, vite.Resource));
103Assert.Equal(["node", "npm"], await GetRequiredCommandsAsync(builder, vite.Resource));
114Assert.Equal(["node", "yarn"], await GetRequiredCommandsAsync(builder, vite.Resource));
125Assert.Equal(["node", "pnpm"], await GetRequiredCommandsAsync(builder, vite.Resource));
136Assert.Equal(["bun"], await GetRequiredCommandsAsync(builder, app.Resource));
146Assert.Equal(["bun"], await GetRequiredCommandsAsync(builder, app.Resource));
162Assert.Equal(["bun"], await GetRequiredCommandsAsync(builder, app.Resource));
175Assert.Equal(["deno"], await GetRequiredCommandsAsync(builder, app.Resource));
188Assert.Equal(["node", "npm"], await GetRequiredCommandsAsync(builder, app.Resource));
200Assert.Equal(["bun", "node", "npm"], await GetRequiredCommandsAsync(builder, app.Resource));
212Assert.Equal(["node", "npm"], await GetRequiredCommandsAsync(builder, vite.Resource));
224Assert.Equal(["bun"], await GetRequiredCommandsAsync(builder, vite.Resource));
Aspire.Hosting.Kafka (2)
Aspire.Hosting.Kafka.Tests (22)
Aspire.Hosting.Keycloak (6)
Aspire.Hosting.Keycloak.Tests (9)
Aspire.Hosting.Kubernetes (109)
Aspire.Hosting.Kubernetes.Tests (193)
CertManagerTests.cs (47)
37var spec = Assert.IsType<CertManagerAcmeIssuerSpec>(issuer.Resource.Spec);
54var binding = Assert.IsType<CertManagerExternalAccountBinding>(issuer.Resource.ExternalAccountBinding);
55Assert.Same(hmacKey.Resource, binding.HmacKey);
84certManager.Resource.HelmChart.Values["extraArgs[0]"] = "--cluster-resource-namespace=accounts";
88certManager.Resource.HelmChart.Values["clusterResourceNamespace"] = "INVALID_NAMESPACE";
102await CertManagerExtensions.DeleteExternalAccountBindingSecretAsync(context, issuer.Resource);
121var spec = Assert.IsType<CertManagerAcmeIssuerSpec>(issuer.Resource.Spec);
122Assert.Same(serverUrl.Resource, Assert.Single(spec.ServerUrl.ValueProviders));
128app.Services.GetRequiredService<DistributedApplicationModel>(), certManager.Resource, issuer.Resource,
159var binding = Assert.IsType<CertManagerExternalAccountBinding>(issuer.Resource.ExternalAccountBinding);
160Assert.Same(hmacKey.Resource, binding.HmacKey);
162Assert.Same(keyId.Resource, Assert.Single(binding.KeyId.ValueProviders));
175Assert.Null(issuer.Resource.ExternalAccountBinding);
203certManager.Resource.HelmChart.Namespace = installNamespace;
206certManager.Resource.HelmChart.Values["clusterResourceNamespace"] = clusterNamespace;
210certManager.Resource.HelmChart.Values["namespace"] = chartNamespace;
213Assert.Equal(expected, CertManagerExtensions.GetClusterResourceNamespace(certManager.Resource, validateEabConfiguration: true));
221certManager.Resource.HelmChart.Values["extraArgs[0]"] = "--cluster-resource-namespace=accounts";
224CertManagerExtensions.GetClusterResourceNamespace(certManager.Resource, validateEabConfiguration: true));
241var steps = await PipelineStepTestHelpers.CreateStepsAsync(app.Services, certManager.Resource);
281issuer.Resource, resourceVersion: null, TestContext.Current.CancellationToken);
307issuer.Resource, resourceVersion, TestContext.Current.CancellationToken);
332certManager.Resource.HelmChart.Values["extraArgs[0]"] = "--cluster-resource-namespace=accounts";
334CertManagerExtensions.GetClusterResourceNamespace(certManager.Resource, validateEabConfiguration: false));
353app.Services.GetRequiredService<DistributedApplicationModel>(), certManager.Resource, issuer.Resource,
367Assert.Equal("cert-manager", certManager.Resource.Name);
368Assert.Same(k8s.Resource, certManager.Resource.Parent);
372Assert.Equal("cert-manager-chart", certManager.Resource.HelmChart.Name);
373Assert.Equal("oci://quay.io/jetstack/charts/cert-manager", certManager.Resource.HelmChart.ChartReference);
374Assert.StartsWith("v", certManager.Resource.HelmChart.ChartVersion);
378Assert.Equal("true", certManager.Resource.HelmChart.Values["crds.enabled"]);
379Assert.Equal("true", certManager.Resource.HelmChart.Values["config.enableGatewayAPI"]);
398Assert.Equal("letsencrypt-prod", issuer.Resource.Name);
399Assert.Same(certManager.Resource, issuer.Resource.Parent);
400Assert.Contains(issuer.Resource, certManager.Resource.Issuers);
402var spec = Assert.IsType<CertManagerAcmeIssuerSpec>(issuer.Resource.Spec);
406var solver = Assert.Single(issuer.Resource.Solvers);
419var spec = Assert.IsType<CertManagerAcmeIssuerSpec>(issuer.Resource.Spec);
432var spec = Assert.IsType<CertManagerAcmeIssuerSpec>(issuer.Resource.Spec);
452Assert.Single(gateway.Resource.TlsConfigs);
453Assert.True(gateway.Resource.GatewayAnnotations.TryGetValue(
615Assert.NotNull(certManager.Resource);
KubernetesHelmChartTests.cs (35)
22Assert.Equal("cert-manager", chart.Resource.Name);
23Assert.Equal("oci://quay.io/jetstack/charts/cert-manager", chart.Resource.ChartReference);
24Assert.Equal("1.17.0", chart.Resource.ChartVersion);
25Assert.Equal("env", chart.Resource.Parent.Name);
38Assert.Equal(2, chart.Resource.Values.Count);
39Assert.Equal("true", chart.Resource.Values["crds.enabled"]);
40Assert.Equal("true", chart.Resource.Values["config.enableGatewayAPI"]);
52Assert.Equal("ingress-nginx", chart.Resource.Namespace);
64Assert.Equal("my-nginx", chart.Resource.ReleaseName);
75Assert.Null(chart.Resource.Namespace);
76Assert.Null(chart.Resource.ReleaseName);
88chart.Resource.TryGetAnnotationsOfType<PipelineStepAnnotation>(out var annotations),
102Assert.NotEqual(chart1.Resource.Name, chart2.Resource.Name);
103Assert.Equal("env", chart1.Resource.Parent.Name);
104Assert.Equal("env", chart2.Resource.Parent.Name);
173Assert.Equal(chartReference, chart.Resource.ChartReference);
201Assert.Equal(chartVersion, chart.Resource.ChartVersion);
289Assert.Equal("hello world!", chart.Resource.Values["config.greeting"]);
290Assert.Equal("a,b,c", chart.Resource.Values["config.list"]);
302Assert.Equal("--foo", chart.Resource.Values["args[0]"]);
313Assert.False(chart.Resource.DestroyOnUninstall);
325Assert.True(chart.Resource.DestroyOnUninstall);
355Assert.False(chart.Resource.ForceConflicts);
367Assert.True(chart.Resource.ForceConflicts);
396var steps = await CreateStepsAsync(builder, chart.Resource);
410var steps = await CreateStepsAsync(builder, chart.Resource);
435var steps = await CreateStepsAsync(builder, chart.Resource);
452Assert.Null(chart.Resource.Namespace);
454var steps = await CreateStepsAsync(builder, chart.Resource);
469var steps = await CreateStepsAsync(builder, chart.Resource);
486var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => CreateStepsAsync(builder, chart.Resource));
502var steps = await CreateStepsAsync(builder, chart.Resource);
541Assert.Single(chart.Resource.Values);
542Assert.Equal("value2", chart.Resource.Values["key"]);
KubernetesPersistentVolumeRunModeTests.cs (20)
36var expectedPath = KubernetesPersistentVolumeLocalStorage.GetPath(store, volume.Resource);
41project.Resource,
48executable.Resource,
69firstProject.Resource,
72secondProject.Resource,
94firstProject.Resource,
97secondProject.Resource,
180var firstMount = Assert.Single(firstContainer.Resource.Annotations.OfType<ContainerMountAnnotation>());
181var secondMount = Assert.Single(secondContainer.Resource.Annotations.OfType<ContainerMountAnnotation>());
187firstContainer.Resource,
209var mount = Assert.Single(container.Resource.Annotations.OfType<ContainerMountAnnotation>());
227var mount = Assert.Single(container.Resource.Annotations.OfType<ContainerMountAnnotation>());
259var mount = Assert.Single(container.Resource.Annotations.OfType<ContainerMountAnnotation>());
263container.Resource,
293project.Resource,
297KubernetesPersistentVolumeLocalStorage.GetPath(store, volume.Resource),
318var firstMount = Assert.Single(firstContainer.Resource.Annotations.OfType<ContainerMountAnnotation>());
319var secondMount = Assert.Single(secondContainer.Resource.Annotations.OfType<ContainerMountAnnotation>());
339var mount = Assert.Single(container.Resource.Annotations.OfType<ContainerMountAnnotation>());
353var mount = Assert.Single(container.Resource.Annotations.OfType<ContainerMountAnnotation>());
KubernetesPublisherTests.cs (21)
91.WithArgs("--cs", cs.Resource);
830Assert.Same(project.Resource, Assert.Single(environment.Resource.CapturedHelmImageReferences).Resource);
878Assert.Same(project.Resource, Assert.Single(environment.Resource.CapturedHelmImageReferences).Resource);
880await HelmDeploymentEngine.ResolveAndWriteDeployValuesAsync(workspace.Path, environment.Resource, CancellationToken.None);
947Assert.Same(project.Resource, Assert.Single(environment.Resource.CapturedHelmImageReferences).Resource);
1562mode.Resource,
1612enableTls.Resource,
1623Assert.Contains(environment.Resource.CapturedHelmValues, captured =>
1627captured.Parameter == enableTls.Resource);
1677enableTls.Resource,
1679ReferenceExpression.Create($"{tlsSuffix.Resource}"),
1997Assert.NotNull(data.Resource.GeneratedClaim);
1998var claim = data.Resource.GeneratedClaim!;
2060builder.AddContainer($"{volume.Resource.Name}-service", "nginx")
2070var name = volume.Resource.Name;
2098builder.AddContainer($"{volume.Resource.Name}-service", "nginx")
2108var name = volume.Resource.Name;
2231var localPath = KubernetesPersistentVolumeLocalStorage.GetPath(store, volume.Resource);
Aspire.Hosting.Maui (20)
Aspire.Hosting.Maui.Tests (133)
MauiiOSValidationTests.cs (6)
36.PublishAsync(new BeforeResourceStartedEvent(device.Resource, app.Services), CancellationToken.None)
62.PublishAsync(new BeforeResourceStartedEvent(simulator.Resource, app.Services), CancellationToken.None)
87.PublishAsync(new BeforeResourceStartedEvent(device.Resource, app.Services), CancellationToken.None)
108.PublishAsync(new BeforeResourceStartedEvent(simulator.Resource, app.Services), CancellationToken.None)
127.PublishAsync(new BeforeResourceStartedEvent(device.Resource, app.Services), CancellationToken.None)
146.PublishAsync(new BeforeResourceStartedEvent(simulator.Resource, app.Services), CancellationToken.None)
MauiPlatformExtensionsTests.cs (104)
108Assert.Equal(config.ExpectedDefaultName, platform.Resource.Name);
109var resourceWithParent = Assert.IsAssignableFrom<IResourceWithParent<MauiProjectResource>>(platform.Resource);
110Assert.Same(maui.Resource, resourceWithParent.Parent);
111Assert.IsType(config.ExpectedResourceType, platform.Resource);
131Assert.Equal(customName, platform.Resource.Name);
167var debugSupport = Assert.Single(platform.Resource.Annotations.OfType<SupportsDebuggingAnnotation>());
170var launchConfiguration = await DeserializeLaunchConfigurationAsync(platform.Resource);
198var resource = platform.Resource;
246Assert.IsAssignableFrom<IMauiPlatformResource>(platform.Resource);
266Assert.NotEqual(platform1.Resource.Name, platform2.Resource.Name);
267var parent1 = Assert.IsAssignableFrom<IResourceWithParent<MauiProjectResource>>(platform1.Resource);
268var parent2 = Assert.IsAssignableFrom<IResourceWithParent<MauiProjectResource>>(platform2.Resource);
270Assert.Same(maui.Resource, parent1.Parent);
296.PublishAsync(new BeforeResourceStartedEvent(platform.Resource, app.Services), CancellationToken.None)
321androidEmulator.Resource,
347Assert.NotEqual(androidDevice.Resource.Name, androidEmulator.Resource.Name);
348Assert.IsType<MauiAndroidDeviceResource>(androidDevice.Resource);
349Assert.IsType<MauiAndroidEmulatorResource>(androidEmulator.Resource);
368Assert.Equal("my-device", device.Resource.Name);
369Assert.IsType<MauiAndroidDeviceResource>(device.Resource);
370var launchConfiguration = await GetSingleMauiLaunchConfigurationAsync(device.Resource);
391Assert.Equal("my-emulator", emulator.Resource.Name);
392Assert.IsType<MauiAndroidEmulatorResource>(emulator.Resource);
393var launchConfiguration = await GetSingleMauiLaunchConfigurationAsync(emulator.Resource);
414Assert.Equal("my-device", device.Resource.Name);
415Assert.IsType<MauiiOSDeviceResource>(device.Resource);
416var launchConfiguration = await GetSingleMauiLaunchConfigurationAsync(device.Resource);
442Assert.Equal("my-simulator", simulator.Resource.Name);
443Assert.IsType<MauiiOSSimulatorResource>(simulator.Resource);
444var launchConfiguration = await GetSingleMauiLaunchConfigurationAsync(simulator.Resource);
463var debugSupport = Assert.Single(simulator.Resource.Annotations.OfType<SupportsDebuggingAnnotation>());
467var argsContext = new CommandLineArgsCallbackContext(args, simulator.Resource);
468foreach (var argsAnnotation in simulator.Resource.Annotations.OfType<CommandLineArgsCallbackAnnotation>())
498Assert.NotEqual(device.Resource.Name, simulator.Resource.Name);
499Assert.IsType<MauiiOSDeviceResource>(device.Resource);
500Assert.IsType<MauiiOSSimulatorResource>(simulator.Resource);
520resource = maui.AddiOSDevice().Resource;
524resource = maui.AddiOSSimulator().Resource;
550iosSimulator.Resource,
570? (IResource)maui.AddAndroidEmulator().Resource
571: maui.AddiOSSimulator().Resource;
641resource = maui.AddAndroidDevice().Resource;
645resource = maui.AddAndroidEmulator().Resource;
673var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().FirstOrDefault();
698var annotations = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().ToList();
726platform.Resource,
736var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
753dashboard.Resource.Annotations.Add(new EndpointAnnotation(
764var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
773var dashboardEndpoint = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == KnownEndpointNames.OtlpGrpcEndpointName);
775await appBuilder.Eventing.PublishAsync(new ResourceEndpointsAllocatedEvent(dashboard.Resource, app.Services), CancellationToken.None).DefaultTimeout();
787iosSimulator.Resource,
806dashboard.Resource.Annotations.Add(new EndpointAnnotation(
812dashboard.Resource.Annotations.Add(new EndpointAnnotation(
820var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
824var httpEndpoint = dashboard.Resource.Annotations.OfType<EndpointAnnotation>()
827var grpcEndpoint = dashboard.Resource.Annotations.OfType<EndpointAnnotation>()
832new ResourceEndpointsAllocatedEvent(dashboard.Resource, app.Services),
844new ResourceEndpointsAllocatedEvent(dashboard.Resource, app.Services),
853iosSimulator.Resource,
878dashboard.Resource.Annotations.Add(dashboardEndpoint);
882var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
892new ResourceEndpointsAllocatedEvent(dashboard.Resource, app.Services),
909dashboard.Resource.Annotations.Add(new EndpointAnnotation(
917var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
922.PublishUpdateAsync(dashboard.Resource, snapshot => snapshot with
934var dashboardEndpoint = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single();
942new ResourceEndpointsAllocatedEvent(dashboard.Resource, app.Services),
972dashboard.Resource.Annotations.Add(dashboardEndpoint);
974var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
999await appBuilder.Eventing.PublishAsync(new ResourceEndpointsAllocatedEvent(dashboard.Resource, app.Services), CancellationToken.None).DefaultTimeout();
1010androidEmulator.Resource,
1031var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1046iosSimulator.Resource,
1067var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1086iosSimulator.Resource,
1108var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1113androidEmulator.Resource,
1119appBuilder.Eventing.PublishAsync(new BeforeResourceStartedEvent(tunnelConfig.DevTunnel.Resource, app.Services), CancellationToken.None).DefaultTimeout());
1140var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1145appBuilder.Eventing.PublishAsync(new BeforeResourceStartedEvent(tunnelConfig.DevTunnel.Resource, app.Services), CancellationToken.None).DefaultTimeout());
1165var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1175new BeforeResourceStartedEvent(tunnelConfig.DevTunnel.Resource, app.Services),
1192dashboard.Resource.Annotations.Add(new EndpointAnnotation(
1200var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1205tunnelConfig.DevTunnel.Resource.Name,
1212var dashboardEndpoint = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single();
1219.PublishUpdateAsync(dashboard.Resource, snapshot => snapshot with
1232iosSimulator.Resource,
1239.PublishUpdateAsync(dashboard.Resource, snapshot => snapshot with
1257iosSimulator.Resource,
1274dashboard.Resource.Annotations.Add(new EndpointAnnotation(
1282var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1288iosSimulator.Resource,
1310dashboard.Resource.Annotations.Add(new EndpointAnnotation(
1318var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
1322var dashboardEndpoint = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single();
1330await notificationService.PublishUpdateAsync(dashboard.Resource, snapshot => snapshot with
1336iosSimulator.Resource,
1342new BeforeResourceStartedEvent(tunnelConfig.DevTunnel.Resource, app.Services),
1346await notificationService.PublishUpdateAsync(dashboard.Resource, snapshot => snapshot with
Aspire.Hosting.Milvus (6)
Aspire.Hosting.Milvus.Tests (20)
Aspire.Hosting.MongoDB (72)
MongoDBBuilderExtensions.cs (21)
68var passwordParameter = password?.Resource ?? ParameterResourceBuilderExtensions.CreateDefaultPasswordParameter(builder, $"{name}-password", special: false);
70var mongoServerResource = new MongoDBServerResource(name, userName?.Resource, passwordParameter)
200return builder.WithReplCommand(ct => CreateReplOptionsAsync(builder.Resource, ct));
269builder.Resource.AddDatabase(name, databaseName);
270var mongoDBDatabase = new MongoDBDatabaseResource(name, databaseName, builder.Resource);
317containerName ??= $"{builder.Resource.Name}-mongoexpress";
325.WithEnvironment(context => ConfigureMongoExpressContainer(context, builder.Resource))
328.WithRelationship(builder.Resource, KnownRelationshipTypes.Manages)
350.SingleOrDefault(r => r.Members.Contains(builder.Resource));
469if (builder.Resource.HasAnnotationOfType<MongoDBServerBindAllIpAnnotation>())
519name ??= builder.Resource.ReplicaSetName ?? builder.Resource.Name;
523if (builder.Resource.ReplicaSetName is { } existingName)
525if (!builder.Resource.HasAnnotationOfType<MongoDBSingleMemberReplicaSetAnnotation>())
527throw new InvalidOperationException($"The MongoDB server resource '{builder.Resource.Name}' belongs to the advanced replica set '{existingName}'. Configure it with WithMember instead of WithReplicaSet.");
532: throw new InvalidOperationException($"The MongoDB server resource '{builder.Resource.Name}' is already configured as a member of the replica set '{existingName}' and cannot also be a member of '{name}'.");
535if (!builder.Resource.HasAnnotationOfType<MongoDBServerKeyFileAnnotation>())
537builder.WithKeyFile(CreateReplicaSetKeyFile(builder.ApplicationBuilder, builder.Resource.Name));
559builder.Resource.ReplicaSetName = name;
608if (builder.Resource.TryGetLastAnnotation<MongoDBServerKeyFileAnnotation>(out var existingKeyFile))
612: throw new InvalidOperationException($"The MongoDB server resource '{builder.Resource.Name}' already has a key file configured at '{existingKeyFile.FilePath}'. A MongoDB server can only have one key file; note that adding a server to a replica set gives it the replica set's shared key file.");
Aspire.Hosting.MongoDB.Tests (217)
AddMongoDBTests.cs (44)
25Assert.Single(mongo.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "mongodb_check");
33Assert.Single(db.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "mydb_check");
144Assert.Same(mongo.Resource, wait.Resource);
176Assert.Same(mongo.Resource, wait.Resource);
181Assert.Same(replicaSet.Resource, wait.Resource);
184var memberWait = Assert.Single(replicaSet.Resource.Annotations.OfType<WaitAnnotation>());
185Assert.Same(mongo.Resource, memberWait.Resource);
286Assert.Single(mongoExpress.Annotations.OfType<ResourceRelationshipAnnotation>(), r => r.Type == "Parent" && r.Resource == mongo.Resource);
287Assert.Single(mongoExpress.Annotations.OfType<ResourceRelationshipAnnotation>(), r => r.Type == "Manages" && r.Resource == mongo.Resource);
297var mongoManifest = await ManifestUtils.GetManifest(mongo.Resource);
298var dbManifest = await ManifestUtils.GetManifest(db.Resource);
363Assert.Equal("customers1", db1.Resource.DatabaseName);
364Assert.Equal("customers2", db2.Resource.DatabaseName);
366Assert.Equal("mongodb://admin:{mongo1-password.value}@{mongo1.bindings.tcp.host}:{mongo1.bindings.tcp.port}/customers1?authSource=admin&authMechanism=SCRAM-SHA-256", MongoDBTestHelpers.WithoutTlsFlag(db1.Resource.ConnectionStringExpression.ValueExpression));
367Assert.Equal("mongodb://admin:{mongo1-password.value}@{mongo1.bindings.tcp.host}:{mongo1.bindings.tcp.port}/customers2?authSource=admin&authMechanism=SCRAM-SHA-256", MongoDBTestHelpers.WithoutTlsFlag(db2.Resource.ConnectionStringExpression.ValueExpression));
381Assert.Equal("imports", db1.Resource.DatabaseName);
382Assert.Equal("imports", db2.Resource.DatabaseName);
384Assert.Equal("mongodb://admin:{mongo1-password.value}@{mongo1.bindings.tcp.host}:{mongo1.bindings.tcp.port}/imports?authSource=admin&authMechanism=SCRAM-SHA-256", MongoDBTestHelpers.WithoutTlsFlag(db1.Resource.ConnectionStringExpression.ValueExpression));
385Assert.Equal("mongodb://admin:{mongo2-password.value}@{mongo2.bindings.tcp.host}:{mongo2.bindings.tcp.port}/imports?authSource=admin&authMechanism=SCRAM-SHA-256", MongoDBTestHelpers.WithoutTlsFlag(db2.Resource.ConnectionStringExpression.ValueExpression));
421Assert.True(mongo1.Resource.HasAnnotationOfType<MongoDBServerBindAllIpAnnotation>());
422var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
433Assert.Equal("test", mongo1.Resource.ReplicaSetName);
434Assert.True(mongo1.Resource.HasAnnotationOfType<MongoDBServerReplicaSetAnnotation>());
435var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
448Assert.True(mongo1.Resource.HasAnnotationOfType<MongoDBServerKeyFileAnnotation>());
449var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
465Assert.False(mongo1.Resource.TlsEnabled);
471Assert.True(mongo1.Resource.TlsEnabled);
473var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
479var connectionString = await mongo1.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
496Assert.False(mongo1.Resource.TlsEnabled);
498var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
501var connectionString = await mongo1.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
522var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(mongoExpress.Resource);
543var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(mongoExpress.Resource);
581var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(mongoExpress.Resource);
622Assert.False(mongo1.Resource.TlsEnabled);
624var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
642var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
660var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
672var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
682var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
684Assert.Equal("rs0", mongo1.Resource.ReplicaSetName);
704var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
MongoDbFunctionalTests.cs (27)
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);
133Assert.True(mongodb.Resource.TlsEnabled);
135await app.ResourceNotifications.WaitForResourceAsync(mongoExpress.Resource.Name, KnownResourceStates.Running, cts.Token);
137var endpoint = mongoExpress.Resource.GetEndpoint("http");
175var connectionString = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
176hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = connectionString;
179hb.AddMongoDBClient(db.Resource.Name);
212var password = mongodb1.Resource.PasswordParameter!.Value;
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);
MongoDBReplCommandTests.cs (8)
53var options = await MongoDBBuilderExtensions.CreateReplOptionsAsync(mongo.Resource, TestContext.Current.CancellationToken);
78var options = await MongoDBBuilderExtensions.CreateReplOptionsAsync(mongo.Resource, TestContext.Current.CancellationToken);
98MongoDBBuilderExtensions.CreateReplOptionsAsync(mongo.Resource, TestContext.Current.CancellationToken));
116Resource = mongo.Resource,
125var callback = Assert.Single(mongo.Resource.Annotations.OfType<CertificateTrustConfigurationCallbackAnnotation>());
169await VerifyReplAsync(app, mongo.Resource, "mongosh (mongo)",
190await VerifyReplAsync(app, mongo.Resource, "mongosh (mongo)",
193Assert.True(mongo.Resource.TlsEnabled);
ReplicaSet\AddMongoDBReplicaSetTests.cs (49)
26Assert.Single(rs.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "rs0_check");
50var wait = Assert.Single(rs.Resource.Annotations.OfType<WaitAnnotation>(),
51a => a.Resource == mongo1.Resource);
67var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
173var rs = builder.AddResource(new MongoDBReplicaSetResource("rs0", keyFile.Resource, null, password.Resource));
175var memberAnnotations = member.Resource.Annotations.ToArray();
176var replicaSetAnnotations = rs.Resource.Annotations.ToArray();
177var memberPassword = member.Resource.PasswordParameter;
182Assert.Null(member.Resource.ReplicaSetName);
183Assert.Equal(memberAnnotations, member.Resource.Annotations);
184Assert.Equal(replicaSetAnnotations, rs.Resource.Annotations);
185Assert.Null(member.Resource.UserNameParameter);
186Assert.Same(memberPassword, member.Resource.PasswordParameter);
187Assert.True(member.Resource.PasswordParameterWasGenerated);
198var annotation = Assert.Single(mongo1.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
210var annotation = Assert.Single(mongo1.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
211Assert.Equal(certificatePassword.Resource, annotation.Password);
226var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
242Assert.Equal(50, rs.Resource.Members.Count());
249Assert.Null(tooMany.Resource.ReplicaSetName);
250Assert.False(tooMany.Resource.HasAnnotationOfType<MongoDBServerKeyFileAnnotation>());
251Assert.Equal(50, rs.Resource.Members.Count());
321Assert.Null(mongo1.Resource.ReplicaSetName);
335replicaSet.Resource.IsConfigured = true;
336await notifications.PublishUpdateAsync(replicaSet.Resource, snapshot => snapshot with
347var stoppedResourceEvent = new ResourceEvent(mongo1.Resource, mongo1.Resource.Name, stoppedSnapshot);
348await eventing.PublishAsync(new ResourceStoppedEvent(mongo1.Resource, app.Services, stoppedResourceEvent));
352await eventing.PublishAsync(new BeforeResourceStartedEvent(mongo1.Resource, app.Services));
358await eventing.PublishAsync(new ResourceReadyEvent(mongo1.Resource, app.Services), staleReadyCts.Token);
362await eventing.PublishAsync(new ResourceReadyEvent(mongo1.Resource, app.Services));
368Assert.True(notifications.TryGetCurrentState(replicaSet.Resource.Name, out var resourceEvent));
381var mongo1 = builder.AddMongoDB("mongo1").WithKeyFile(rs.Resource.SharedKeyFileParameter, "/custom/rs.key");
384Assert.Equal("rs0", mongo1.Resource.ReplicaSetName);
385var args = await ArgumentEvaluator.GetArgumentListAsync(mongo1.Resource);
401Assert.Null(mongo1.Resource.ReplicaSetName);
402Assert.False(mongo1.Resource.HasAnnotationOfType<MongoDBServerKeyFileAnnotation>());
406Assert.Equal("rs1", mongo1.Resource.ReplicaSetName);
407Assert.Single(rs.Resource.Members);
420Assert.Same(userName.Resource, mongo1.Resource.UserNameParameter);
421Assert.Same(password.Resource, mongo1.Resource.PasswordParameter);
422Assert.Single(rs.Resource.Members);
432Assert.Same(rs.Resource.SharedPasswordParameter, mongo1.Resource.PasswordParameter);
443var properties = ((IResourceWithConnectionString)rs.Resource).GetConnectionProperties().ToArray();
454Assert.Equal(await rs.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None), uri);
ReplicaSet\MongoDbReplicaSetFunctionalTests.cs (23)
58await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo.Resource.Name, cts.Token);
59await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
61var connectionString = await rs.Resource.ConnectionStringExpression.GetValueAsync(cts.Token);
95await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
97var connectionString = await rs.Resource.ConnectionStringExpression.GetValueAsync(cts.Token);
142await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
144var endpoint = mongoExpress.Resource.GetEndpoint("http");
179await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
181var connectionString = await rs.Resource.ConnectionStringExpression.GetValueAsync(cts.Token);
221await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
223await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo1.Resource.Name, cts.Token);
224await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo2.Resource.Name, cts.Token);
225await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo3.Resource.Name, cts.Token);
227Assert.True(mongo1.Resource.TlsEnabled);
228Assert.True(mongo2.Resource.TlsEnabled);
229Assert.True(mongo3.Resource.TlsEnabled);
231var mongoExpressEndpoint = mongoExpress.Resource.GetEndpoint("http");
311password = await rs.Resource.SharedPasswordParameter.GetValueAsync(cts.Token);
315await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, cts.Token);
317var connectionString = await rs.Resource.ConnectionStringExpression.GetValueAsync(cts.Token);
383await app.ResourceNotifications.WaitForResourceHealthyAsync(rs.Resource.Name, secondPhaseCts.Token);
385var connectionString = await rs.Resource.ConnectionStringExpression.GetValueAsync(secondPhaseCts.Token);
454await app.ResourceNotifications.WaitForResourceAsync(rs.Resource.Name, KnownResourceStates.FailedToStart, cts.Token);
SingleMemberReplicaSetFunctionalTests.cs (24)
51await app.ResourceNotifications.WaitForResourceHealthyAsync(database.Resource.Name, ready.Token);
52Assert.Equal(useTls, mongo.Resource.TlsEnabled);
55using var serverClient = new MongoClient(await mongo.Resource.ConnectionStringExpression.GetValueAsync(operations.Token));
56using var databaseClient = new MongoClient(await database.Resource.ConnectionStringExpression.GetValueAsync(operations.Token));
93await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo.Resource.Name, cts.Token);
94Assert.Equal(useTls, mongo.Resource.TlsEnabled);
96using var client = new MongoClient(await mongo.Resource.ConnectionStringExpression.GetValueAsync(cts.Token));
100await app.ResourceNotifications.WaitForResourceAsync(mongoExpress.Resource.Name, KnownResourceStates.Running, cts.Token);
101using var httpClient = new HttpClient { BaseAddress = new Uri(mongoExpress.Resource.GetEndpoint("http").Url) };
160await app.ResourceNotifications.WaitForResourceAsync(mongo.Resource.Name,
162await app.ResourceNotifications.WaitForResourceAsync(consumer.Resource.Name, KnownResourceStates.Waiting, ready.Token);
166var completed = await app.ResourceNotifications.WaitForResourceAsync(consumer.Resource.Name,
170using var client = new MongoClient(await database.Resource.ConnectionStringExpression.GetValueAsync(ready.Token));
196var running = await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo1.Resource.Name, ready.Token);
197password = (await mongo1.Resource.PasswordParameter!.GetValueAsync(ready.Token))!;
198originalPort = mongo1.Resource.PrimaryEndpoint.Port;
199using var client = new MongoClient(await mongo1.Resource.ConnectionStringExpression.GetValueAsync(ready.Token));
207await app.ResourceNotifications.WaitForResourceAsync(mongo1.Resource.Name, KnownResourceStates.Exited, restart.Token);
209await app.ResourceNotifications.WaitForResourceAsync(mongo1.Resource.Name, KnownResourceStates.Running, restart.Token);
210await app.ResourceNotifications.WaitForResourceHealthyAsync(mongo1.Resource.Name, restart.Token);
217await app.ResourceNotifications.WaitForResourceAsync(mongo1.Resource.Name, KnownResourceStates.Exited, stop.Token);
226await app2.ResourceNotifications.WaitForResourceHealthyAsync(mongo2.Resource.Name, secondReady.Token);
227Assert.Equal(2, new[] { originalPort, mongo2.Resource.PrimaryEndpoint.Port }.Distinct().Count());
229using var secondClient = new MongoClient(await mongo2.Resource.ConnectionStringExpression.GetValueAsync(secondReady.Token));
SingleMemberReplicaSetTests.cs (34)
24var password = mongo.Resource.PasswordParameter;
28Assert.Equal("mongo", mongo.Resource.ReplicaSetName);
29Assert.Same(password, mongo.Resource.PasswordParameter);
30Assert.Same(mongo.Resource, database.Resource.Parent);
33await ArgumentEvaluator.GetArgumentListAsync(mongo.Resource));
34var endpoint = Assert.Single(mongo.Resource.Annotations.OfType<EndpointAnnotation>());
38Assert.Single(mongo.Resource.Annotations.OfType<MongoDBSingleMemberReplicaSetAnnotation>());
40Assert.Single(mongo.Resource.Annotations.OfType<MongoDBServerKeyFileAnnotation>()).Value).Secret);
48var mongo = builder.AddMongoDB("mongo").WithKeyFile(key.Resource, "/etc/custom.key").WithReplicaSet("rs0").WithReplicaSet();
50Assert.Equal("rs0", mongo.Resource.ReplicaSetName);
51Assert.Same(key.Resource, Assert.Single(mongo.Resource.Annotations.OfType<MongoDBServerKeyFileAnnotation>()).Value);
53await ArgumentEvaluator.GetArgumentListAsync(mongo.Resource));
62var annotations = mongo.Resource.Annotations.ToArray();
65Assert.Equal(annotations, mongo.Resource.Annotations);
66Assert.Equal("rs0", mongo.Resource.ReplicaSetName);
77var annotations = mongo.Resource.Annotations.ToArray();
78var password = mongo.Resource.PasswordParameter;
82Assert.Equal(annotations, mongo.Resource.Annotations);
83Assert.Same(password, mongo.Resource.PasswordParameter);
84Assert.Empty(advanced.Resource.Members);
93var annotations = mongo.Resource.Annotations.ToArray();
96Assert.Equal(annotations, mongo.Resource.Annotations);
97Assert.Same(mongo.Resource, Assert.Single(advanced.Resource.Members));
105var annotations = mongo.Resource.Annotations.ToArray();
109Assert.Equal(annotations, mongo.Resource.Annotations);
127Assert.False(mongo.Resource.TlsEnabled);
128Assert.False(mongo.Resource.TlsAllowInvalidCertificates);
130await ArgumentEvaluator.GetArgumentListAsync(mongo.Resource));
132foreach (IResourceWithConnectionString resource in new IResourceWithConnectionString[] { mongo.Resource, database.Resource })
141Assert.Equal(resource == database.Resource ? "orders" : null, url.DatabaseName);
Aspire.Hosting.MySql (9)
Aspire.Hosting.MySql.Tests (75)
AddMySqlTests.cs (23)
23Assert.Equal("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", mysql.Resource.PasswordParameter.Default?.GetType().FullName);
33Assert.NotEqual("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", mysql.Resource.PasswordParameter.Default?.GetType().FullName);
160var mySqlManifest = await ManifestUtils.GetManifest(mysql.Resource);
161var dbManifest = await ManifestUtils.GetManifest(db.Resource);
199var serverManifest = await ManifestUtils.GetManifest(mysql.Resource);
233Assert.Single(phpMyAdmin.Annotations.OfType<ResourceRelationshipAnnotation>(), r => r.Type == "Manages" && r.Resource == mySql1.Resource);
234Assert.Single(phpMyAdmin.Annotations.OfType<ResourceRelationshipAnnotation>(), r => r.Type == "Manages" && r.Resource == mySql2.Resource);
267Assert.Equal($"{mysql.Resource.Name}:{mysql.Resource.PrimaryEndpoint.TargetPort}", config["PMA_HOST"]);
299string pattern1 = $@"\$cfg\['Servers'\]\[\$i\]\['host'\] = '{mysql1.Resource.Name}:{mysql1.Resource.PrimaryEndpoint.TargetPort}';";
300string pattern2 = $@"\$cfg\['Servers'\]\[\$i\]\['host'\] = '{mysql2.Resource.Name}:{mysql2.Resource.PrimaryEndpoint.TargetPort}';";
340Assert.Equal(["db1", "db2"], mysql1.Resource.Databases.Keys);
341Assert.Equal(["customers1", "customers2"], mysql1.Resource.Databases.Values);
343Assert.Equal("customers1", db1.Resource.DatabaseName);
344Assert.Equal("customers2", db2.Resource.DatabaseName);
346Assert.Equal("{mysql1.connectionString};Database=customers1", db1.Resource.ConnectionStringExpression.ValueExpression);
347Assert.Equal("{mysql1.connectionString};Database=customers2", db2.Resource.ConnectionStringExpression.ValueExpression);
361Assert.Equal("imports", db1.Resource.DatabaseName);
362Assert.Equal("imports", db2.Resource.DatabaseName);
364Assert.Equal("{mysql1.connectionString};Database=imports", db1.Resource.ConnectionStringExpression.ValueExpression);
365Assert.Equal("{mysql2.connectionString};Database=imports", db2.Resource.ConnectionStringExpression.ValueExpression);
MySqlFunctionalTests.cs (41)
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);
136var password = mysql1.Resource.PasswordParameter.Value;
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 (2)
Aspire.Hosting.Nats.Tests (34)
NatsFunctionalTests.cs (19)
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);
88var connectionString = await nats.Resource.ConnectionStringExpression.GetValueAsync(default);
89hb.Configuration[$"ConnectionStrings:{nats.Resource.Name}"] = connectionString;
126await app.WaitForTextAsync("Listening for client connections", nats.Resource.Name);
131var connectionString = await nats.Resource.ConnectionStringExpression.GetValueAsync(default);
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 (13)
Aspire.Hosting.OpenAI.Tests (43)
OpenAIExtensionTests.cs (32)
21var parentCs = await parent.Resource.ConnectionStringExpression.GetValueAsync(default);
22var modelCs = await model.Resource.ConnectionStringExpression.GetValueAsync(default);
41var parentCs = await parent.Resource.ConnectionStringExpression.GetValueAsync(default);
42var modelCs = await model.Resource.ConnectionStringExpression.GetValueAsync(default);
61Assert.Equal("chat", model.Resource.Name);
62Assert.Equal("gpt-4o-mini", model.Resource.Model);
73Assert.NotNull(parent.Resource.Key);
74Assert.Equal("openai-openai-apikey", parent.Resource.Key.Name);
75Assert.True(parent.Resource.Key.Secret);
77Assert.NotNull(parent.Resource.Key);
90var expression = openai.Resource.ConnectionStringExpression.ValueExpression;
95var resolved = await openai.Resource.ConnectionStringExpression.GetValueAsync(default);
108var expression = openai.Resource.ConnectionStringExpression.ValueExpression;
114var resolved = await openai.Resource.ConnectionStringExpression.GetValueAsync(default);
134var connectionString = await openai.Resource.ConnectionStringExpression.GetValueAsync(default);
136Assert.Equal(apiKeyParameter.Resource, parent.Resource.Key);
148Assert.NotNull(parent.Resource.Key);
149Assert.Equal("openai-openai-apikey", parent.Resource.Key.Name);
150Assert.True(parent.Resource.Key.Secret);
151Assert.Equal(parent.Resource.Key, parent.Resource.Key);
163var resource = new OpenAIModelResource("test", "gpt-4o-mini", parent.Resource);
168Assert.Equal(parent.Resource.Key, parent.Resource.Key);
198Assert.Equal(apiKey.Resource, parent.Resource.Key);
232var healthCheckAnnotations = openai.Resource.Annotations.OfType<HealthCheckAnnotation>().ToList();
282var connectionString = await openai.Resource.ConnectionStringExpression.GetValueAsync(default);
363Assert.Equal("chat", openai.Resource.Name);
364Assert.Equal(modelName, openai.Resource.Model);
366var connectionString = openai.Resource.ConnectionStringExpression.ValueExpression;
OpenAIFunctionalTests.cs (11)
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);
77Assert.Single(resource.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "resource_check");
80var statusPageHealthCheck = Enumerable.Single(resource.Resource.Annotations, x => x is HealthCheckAnnotation hca && hca.Key == "resource_check");
81resource.Resource.Annotations.Remove(statusPageHealthCheck);
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 (3)
Aspire.Hosting.Oracle.Tests (36)
AddOracleTests.cs (13)
21Assert.Equal("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", orcl.Resource.PasswordParameter.Default?.GetType().FullName);
31Assert.NotEqual("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", orcl.Resource.PasswordParameter.Default?.GetType().FullName);
199var serverManifest = await ManifestUtils.GetManifest(oracleServer.Resource);
200var dbManifest = await ManifestUtils.GetManifest(db.Resource);
238var serverManifest = await ManifestUtils.GetManifest(oracleServer.Resource);
294Assert.Equal("customers1", db1.Resource.DatabaseName);
295Assert.Equal("customers2", db2.Resource.DatabaseName);
297Assert.Equal("{oracle1.connectionString}/customers1", db1.Resource.ConnectionStringExpression.ValueExpression);
298Assert.Equal("{oracle1.connectionString}/customers2", db2.Resource.ConnectionStringExpression.ValueExpression);
312Assert.Equal("imports", db1.Resource.DatabaseName);
313Assert.Equal("imports", db2.Resource.DatabaseName);
315Assert.Equal("{oracle1.connectionString}/imports", db1.Resource.ConnectionStringExpression.ValueExpression);
316Assert.Equal("{oracle2.connectionString}/imports", db2.Resource.ConnectionStringExpression.ValueExpression);
Aspire.Hosting.Orleans (8)
Aspire.Hosting.Orleans.Tests (3)
Aspire.Hosting.PostgreSQL (15)
Aspire.Hosting.PostgreSQL.Tests (96)
AddPostgresTests.cs (37)
22Assert.Single(redis.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "postgres_check");
32Assert.Equal("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", pg.Resource.PasswordParameter.Default?.GetType().FullName);
42Assert.NotEqual("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", pg.Resource.PasswordParameter.Default?.GetType().FullName);
158var connectionStringResource = postgres.Resource as IResourceWithConnectionString;
163Assert.Equal($"Host=localhost;Port=2000;Username=postgres;Password={postgres.Resource.PasswordParameter.Value}", connectionString);
205var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(consumer.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
208Assert.Equal($"Host=postgres.dev.internal;Port=2000;Username=postgres;Password={postgres.Resource.PasswordParameter.Value};Database=db", config["ConnectionStrings__db"]);
274var serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
275var dbManifest = await ManifestUtils.GetManifest(db.Resource);
318var serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
344serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
370serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
535Assert.Equal(pg1.Resource.Name, servers.GetProperty("1").GetProperty("Name").GetString());
543Assert.Equal($"echo '{pg1.Resource.PasswordParameter.Value}'", servers.GetProperty("1").GetProperty("PasswordExecCommand").GetString());
547Assert.Equal(pg2.Resource.Name, servers.GetProperty("2").GetProperty("Name").GetString());
555Assert.Equal($"echo '{pg2.Resource.PasswordParameter.Value}'", servers.GetProperty("2").GetProperty("PasswordExecCommand").GetString());
603Assert.Equal(CreatePgWebBookmarkfileContent(db1.Resource), file.Contents);
610Assert.Equal(CreatePgWebBookmarkfileContent(db2.Resource), file.Contents);
647Assert.Equal("customers1", db1.Resource.DatabaseName);
648Assert.Equal("customers2", db2.Resource.DatabaseName);
650Assert.Equal("{postgres1.connectionString};Database=customers1", db1.Resource.ConnectionStringExpression.ValueExpression);
651Assert.Equal("{postgres1.connectionString};Database=customers2", db2.Resource.ConnectionStringExpression.ValueExpression);
665Assert.Equal("imports", db1.Resource.DatabaseName);
666Assert.Equal("imports", db2.Resource.DatabaseName);
668Assert.Equal("{postgres1.connectionString};Database=imports", db1.Resource.ConnectionStringExpression.ValueExpression);
669Assert.Equal("{postgres2.connectionString};Database=imports", db2.Resource.ConnectionStringExpression.ValueExpression);
714var connectionString = await postgres.Resource.GetConnectionStringAsync();
728var connectionString = await postgres.Resource.GetConnectionStringAsync();
730Assert.Equal($"Host=localhost;Port=2000;Username=user1;Password={postgres.Resource.PasswordParameter.Value}", connectionString);
743var config1 = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(postgres.Resource);
744var config2 = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(postgres.Resource);
825var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
852var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
868var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
881var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
906var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
933var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
PostgresFunctionalTests.cs (46)
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 (38)
PythonAppResourceBuilderExtensions.cs (38)
484ValidateExistingDockerfileEntrypoint(resource, containerBuilder.Resource, entrypointType, entrypoint);
485return context.WriteContainerAsync(containerBuilder.Resource);
500Resource = containerBuilder.Resource,
504if (!containerBuilder.Resource.IsExcludedFromPublish())
506ValidateExistingDockerfileEntrypoint(resource, containerBuilder.Resource, entrypointType, entrypoint);
517var validationStep = context.GetSteps(containerBuilder.Resource).FirstOrDefault(step => step.Name == validationStepName);
519context.GetSteps(containerBuilder.Resource, WellKnownPipelineTags.BuildCompute).DependsOn(validationStep);
525if (resourceBuilder.Resource.TryGetAnnotationsOfType<ContainerFilesDestinationAnnotation>(out var containerFilesAnnotations))
527var buildSteps = context.GetSteps(resourceBuilder.Resource, WellKnownPipelineTags.BuildCompute);
542var resourceToSetup = resourceBuilder.Resource;
957: Path.GetFullPath(virtualEnvironmentPath, builder.Resource.WorkingDirectory);
962if (!builder.Resource.TryGetLastAnnotation<PythonEntrypointAnnotation>(out var entrypointAnnotation))
1018if (!builder.Resource.TryGetLastAnnotation<PythonEntrypointAnnotation>(out var entrypointAnnotation))
1030var workingDirectory = builder.Resource.WorkingDirectory;
1052if (!builder.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var annotation) || annotation.VirtualEnvironment is null)
1128if (!builder.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var pythonEnv) ||
1227if (!builder.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var pythonEnv) ||
1232pythonEnv = builder.Resource.Annotations.OfType<PythonEnvironmentAnnotation>().Last();
1239var workingDirectory = builder.Resource.WorkingDirectory;
1385var installerName = $"{builder.Resource.Name}-installer";
1402var installer = new PythonInstallerResource(installerName, builder.Resource);
1405.WithParentRelationship(builder.Resource)
1420if (!builder.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager) ||
1421!builder.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installCommand))
1430.WithWorkingDirectory(builder.Resource.WorkingDirectory)
1455if (!builder.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var pythonEnv) ||
1463: Path.GetFullPath(pythonEnv.VirtualEnvironment.VirtualEnvironmentPath, builder.Resource.WorkingDirectory);
1466var venvCreatorName = $"{builder.Resource.Name}-venv-creator";
1476var venvCreator = new PythonVenvCreatorResource(venvCreatorName, builder.Resource, venvPath);
1495.WithWorkingDirectory(builder.Resource.WorkingDirectory)
1496.WithParentRelationship(builder.Resource)
1505var venvCreatorName = $"{builder.Resource.Name}-venv-creator";
1510builder.ApplicationBuilder.Resources.Remove(venvCreatorBuilder.Resource);
1536var shouldSkipInstallerWait = installerBuilder?.Resource.TryGetLastAnnotation<ExplicitStartupAnnotation>(out _) ?? false;
1575var isUsingUv = builder.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var pkgMgr) &&
1585if (!builder.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var pythonEnv) ||
1599: Path.GetFullPath(pythonEnv.VirtualEnvironment.VirtualEnvironmentPath, builder.Resource.WorkingDirectory);
1615if (!builder.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var existing))
Aspire.Hosting.Python.Tests (49)
AddPythonAppTests.cs (47)
40var manifest = await ManifestUtils.GetManifest(pyproj.Resource, manifestDirectory: projectDirectory);
78var manifest = await ManifestUtils.GetManifest(pyproj.Resource, manifestDirectory: projectDirectory);
138var environmentVariables = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(pyproj.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
747Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
751Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
771Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
878Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
882Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
909Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
913Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
1185var initialCommand = pythonBuilder.Resource.Command;
1190var newCommand = pythonBuilder.Resource.Command;
1254var exception = await Assert.ThrowsAsync<DistributedApplicationException>(() => ManifestUtils.GetManifest(app.Resource, workspace.Path));
1311builder.AddPythonApp("script-app", sourceDir, "main.py").Resource,
1312builder.AddPythonModule("module-app", sourceDir, "mymodule").Resource,
1313builder.AddPythonExecutable("executable-app", sourceDir, "pytest").Resource,
1314builder.AddUvicornApp("uvicorn-app", sourceDir, "main:app").Resource
1334var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
1349var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
1364var manifest = await ManifestUtils.GetManifest(app.Resource, workspace.Path);
1694var resource = pythonApp.Resource;
1738var resource = pythonApp.Resource;
1778var resource = pythonApp.Resource;
1809var launchConfig = await CreateLaunchConfigurationAsync(pythonApp.Resource);
1830var launchConfig = await CreateLaunchConfigurationAsync(pythonApp.Resource);
1855var launchConfig = await CreateLaunchConfigurationAsync(pythonApp.Resource);
1882var launchConfig = await CreateLaunchConfigurationAsync(pythonApp.Resource);
1908var launchConfig = await CreateLaunchConfigurationAsync(pythonApp.Resource);
1950var resource = pythonApp.Resource;
1981var resource = pythonApp.Resource;
2004pythonApp.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
2026pythonApp.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
2044pythonApp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
2305Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2309Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
2339Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2343Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
2376Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2380Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
2400Assert.False(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out _));
2506Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2541Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2545Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var envAnnotation));
2581Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var envAnnotation));
2611Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var envAnnotation));
2712Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2744Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
Aspire.Hosting.Qdrant (4)
Aspire.Hosting.Qdrant.Tests (30)
AddQdrantTests.cs (16)
31Assert.Equal("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", qd.Resource.ApiKeyParameter.Default?.GetType().FullName);
41Assert.NotEqual("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", qd.Resource.ApiKeyParameter.Default?.GetType().FullName);
165var connectionStringResource = qdrant.Resource as IResourceWithConnectionString;
199var context = new EnvironmentCallbackContext(appBuilder.ExecutionContext, projectA.Resource);
200foreach (var callback in projectA.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>())
210Assert.Same(qdrant.Resource, reference.Resource);
222Assert.Same(qdrant.Resource, reference.Resource);
239Assert.Same(qdrant.Resource, ((IValueWithReferences)httpReference).References.First());
242var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
256var containerConfig = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container1.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
289var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(consumer.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
306var context = new EnvironmentCallbackContext(appBuilder.ExecutionContext, consumer.Resource);
309foreach (var callback in consumer.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>())
331consumer.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
346var serverManifest = await ManifestUtils.GetManifest(qdrant.Resource); // using this method does not get any ExecutionContext.IsPublishMode changes
384var serverManifest = await ManifestUtils.GetManifest(qdrant.Resource); // using this method does not get any ExecutionContext.IsPublishMode changes
Aspire.Hosting.RabbitMQ (5)
Aspire.Hosting.RabbitMQ.Tests (21)
Aspire.Hosting.Radius (25)
Aspire.Hosting.Radius.Tests (96)
Secrets\AddRadiusSecretStoreTests.cs (13)
23Assert.Equal("db-creds", store.Resource.Name);
24Assert.Equal(RadiusSecretStoreType.BasicAuthentication, store.Resource.Type);
47Assert.Same(env.Resource, store.OwningEnvironment);
111Assert.Equal(valid, store.Resource.Name);
123Assert.True(store.Resource.Population.HasInlineData);
124Assert.True(store.Resource.Population.Data.ContainsKey("password"));
187Assert.Equal(reference, store.Resource.Population.ResourceReference);
231Assert.Equal(["k1", "k2", "k3"], store.Resource.Population.Keys);
245Assert.Equal(["ok"], store.Resource.Population.Keys);
259Assert.Equal("app/s", store.Resource.Population.ResourceReference);
260Assert.Equal(["ok"], store.Resource.Population.Keys);
314Assert.Equal([key], store.Resource.Population.Keys);
362Assert.Equal(max, store.Resource.MaterializationTimeout);
Aspire.Hosting.Redis (6)
Aspire.Hosting.Redis.Tests (113)
AddRedisTests.cs (46)
28Assert.Single(redis.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "redis_check");
306foreach (var redis in new[] { redis1.Resource, redis2.Resource })
332foreach (var redis in new[] { redis1.Resource, redis2.Resource, redis3.Resource })
375Assert.Equal($"{redis1.Resource.Name}.dev.internal", item.Value);
380Assert.Equal($"{redis1.Resource.PrimaryEndpoint.TargetPort!.Value}", item.Value);
385Assert.Equal(redis1.Resource.Name, item.Value);
391Assert.Equal(redis1.Resource.PasswordParameter!.Value, item.Value);
397Assert.Equal($"{redis2.Resource.Name}.dev.internal", item.Value);
402Assert.Equal($"{redis2.Resource.PrimaryEndpoint.TargetPort!.Value}", item.Value);
407Assert.Equal(redis2.Resource.Name, item.Value);
413Assert.Equal(redis2.Resource.PasswordParameter!.Value, item.Value);
419Assert.Equal($"{redis3.Resource.Name}.dev.internal", item.Value);
424Assert.Equal($"{redis3.Resource.PrimaryEndpoint.TargetPort!.Value}", item.Value);
429Assert.Equal(redis3.Resource.Name, item.Value);
571Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{redis.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
593Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{password}", config["REDIS_HOSTS"]);
618Assert.Equal($"myredis1:{redis1.Resource.Name}:6379:0:{redis1.Resource.PasswordParameter?.Value},myredis2:myredis2:6379:0:{redis2.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
639var volumeAnnotation = redis.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
664var volumeAnnotation = redis.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
777var args = await ArgumentEvaluator.GetArgumentListAsync(redis.Resource);
785var args = await ArgumentEvaluator.GetArgumentListAsync(builder.Resource);
796Assert.True(redis.Resource.TryGetAnnotationsOfType<CommandLineArgsCallbackAnnotation>(out var argsAnnotations));
861var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
874var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
888var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
891Assert.Equal(password.Resource, annotation.Password);
903var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
919var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
922Assert.Equal(password.Resource, annotation.Password);
940Assert.True(redis.Resource.TlsEnabled);
943var connectionStringExpression = redis.Resource.ConnectionStringExpression;
953var endpoint = Assert.Single(redis.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "tcp");
958var uriExpression = redis.Resource.UriExpression;
977var args = await ArgumentEvaluator.GetArgumentListAsync(redis.Resource, app.Services).AsTask().WaitAsync(TimeSpan.FromSeconds(60));
994Assert.False(redis.Resource.TlsEnabled);
997var expressionBeforeTls = redis.Resource.ConnectionStringExpression;
1014Assert.True(redis.Resource.TlsEnabled);
1023var expressionAfterTls = redis.Resource.ConnectionStringExpression;
1039Assert.False(redis.Resource.TlsEnabled);
1042var connectionStringExpression = redis.Resource.ConnectionStringExpression;
RedisFunctionalTests.cs (57)
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");
87if (redis.Resource.TlsEnabled)
93var path = $"/apiv2/server/R:{redis.Resource.Name}:{endpoint.TargetPort}:0/info";
121commanderBuilder.Resource.Name,
129redis.Resource.Name,
167redis.Resource.Name,
175var startResult = await app.ResourceCommands.ExecuteCommandAsync(commanderBuilder.Resource, KnownResourceCommands.StartCommand);
179commanderBuilder.Resource.Name,
185redis.Resource.Name,
194var stopResult = await app.ResourceCommands.ExecuteCommandAsync(commanderBuilder.Resource, KnownResourceCommands.StopCommand);
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);
316Assert.Equal(redis1.Resource.PrimaryEndpoint.TargetPort, db.Port);
320Assert.Equal(redis2.Resource.Name, db.Name);
321Assert.Equal($"{redis2.Resource.Name}.dev.internal", db.Host);
322Assert.Equal(redis2.Resource.PrimaryEndpoint.TargetPort, db.Port);
326Assert.Equal(redis3.Resource.Name, db.Name);
327Assert.Equal($"{redis3.Resource.Name}.dev.internal", db.Host);
328Assert.Equal(redis3.Resource.PrimaryEndpoint.TargetPort, db.Port);
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);
Aspire.Hosting.RemoteHost.Tests (6)
Aspire.Hosting.Rust (5)
Aspire.Hosting.Rust.Tests (44)
RustPublicApiTests.cs (38)
42var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
55var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
68var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
81var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
98var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
114var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
128var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
140var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
153var args = await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
166await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
169Assert.All(observed, resource => Assert.Same(app.Resource, resource));
184await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
187Assert.All(observed, resource => Assert.Same(app.Resource, resource));
228Assert.True(app.Resource.TryGetLastAnnotation<SupportsDebuggingAnnotation>(out _));
239var launchConfig = await InvokeLaunchConfigurationProducerAsync(builder, app.Resource);
257var launchConfig = await InvokeLaunchConfigurationProducerAsync(builder, app.Resource);
278var launchConfig = await InvokeLaunchConfigurationProducerAsync(builder, app.Resource);
293var launchConfig = await InvokeLaunchConfigurationProducerAsync(builder, app.Resource);
319app.Resource,
343var callbackContext = LaunchConfigurationTestHelpers.CreateCallbackContext(app.Resource);
346() => LaunchConfigurationTestHelpers.InvokeLaunchConfigurationProducerAsync(app.Resource, callbackContext));
366await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
369await app.Resource.CreateLaunchConfigurationAsync(
376await app.Resource.CreateLaunchConfigurationAsync(
405await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
408app.Resource,
411app.Resource,
415await LaunchConfigurationTestHelpers.InvokeLaunchConfigurationProducerAsync(app.Resource, firstContext));
417await LaunchConfigurationTestHelpers.InvokeLaunchConfigurationProducerAsync(app.Resource, secondContext));
437await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
440await app.Resource.CreateLaunchConfigurationAsync(
444await app.Resource.CreateLaunchConfigurationAsync(
476await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
479() => app.Resource.CreateLaunchConfigurationAsync(
483await app.Resource.CreateLaunchConfigurationAsync(
511await ArgumentEvaluator.GetArgumentListAsync(app.Resource);
514var callbackContext = LaunchConfigurationTestHelpers.CreateCallbackContext(app.Resource, cancellationToken: cts.Token);
515var launchTask = LaunchConfigurationTestHelpers.InvokeLaunchConfigurationProducerAsync(app.Resource, callbackContext);
Aspire.Hosting.Seq.Tests (14)
Aspire.Hosting.SqlServer (6)
Aspire.Hosting.SqlServer.Tests (61)
AddSqlServerTests.cs (15)
25Assert.Equal("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", sql.Resource.PasswordParameter.Default?.GetType().FullName);
35Assert.NotEqual("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", sql.Resource.PasswordParameter.Default?.GetType().FullName);
133var serverManifest = await ManifestUtils.GetManifest(sqlServer.Resource);
134var dbManifest = await ManifestUtils.GetManifest(db.Resource);
174var serverManifest = await ManifestUtils.GetManifest(sqlServer.Resource);
231Assert.Equal("customers1", db1.Resource.DatabaseName);
232Assert.Equal("customers2", db2.Resource.DatabaseName);
234Assert.Equal("{sqlserver1.connectionString};Initial Catalog=customers1", db1.Resource.ConnectionStringExpression.ValueExpression);
235Assert.Equal("{sqlserver1.connectionString};Initial Catalog=customers2", db2.Resource.ConnectionStringExpression.ValueExpression);
249Assert.Equal("imports", db1.Resource.DatabaseName);
250Assert.Equal("imports", db2.Resource.DatabaseName);
252Assert.Equal("{sqlserver1.connectionString};Initial Catalog=imports", db1.Resource.ConnectionStringExpression.ValueExpression);
253Assert.Equal("{sqlserver2.connectionString};Initial Catalog=imports", db2.Resource.ConnectionStringExpression.ValueExpression);
321await builder.Eventing.PublishAsync(new ConnectionStringAvailableEvent(sqlServer.Resource, app.Services));
322await builder.Eventing.PublishAsync(new ConnectionStringAvailableEvent(db.Resource, app.Services));
SqlServerFunctionalTests.cs (35)
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);
146var password = sqlserver1.Resource.PasswordParameter.Value;
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 (4)
Aspire.Hosting.Tests (1681)
ApplicationModel\Docker\WithDockerfileBuilderTests.cs (26)
25var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
49var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
68var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
89var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
96Resource = container.Resource,
141var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
147Resource = container.Resource,
177var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
183Resource = container.Resource,
211var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
217Resource = container.Resource,
252var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
258Resource = container.Resource,
287Assert.Equal("mycontainer", container.Resource.Name);
288var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
308Assert.Equal("mycontainer", container.Resource.Name);
309var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
331var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
338Resource = container.Resource,
367var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
374Resource = container.Resource,
399var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
433var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
439Resource = container.Resource,
469var envAnnotation = container.Resource.Annotations.OfType<EnvironmentAnnotation>().FirstOrDefault();
471var endpointAnnotation = container.Resource.Annotations.OfType<EndpointAnnotation>().FirstOrDefault();
Backchannel\AuxiliaryBackchannelRpcTargetTests.cs (57)
134await notificationService.PublishUpdateAsync(resourceWithReplicas.Resource, "myresource-abc123", s => s with
138await notificationService.PublishUpdateAsync(resourceWithReplicas.Resource, "myresource-def456", s => s with
181await notificationService.PublishUpdateAsync(custom.Resource, s => s with
346await notificationService.PublishUpdateAsync(custom.Resource, s => s with
386.WithEnvironment("GOFLAGS", ReferenceExpression.Create($"prefix {flags.Resource} suffix"))
392var executionConfiguration = await ExecutionConfigurationBuilder.Create(custom.Resource)
398await notificationService.PublishUpdateAsync(custom.Resource, s => s with
442await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
445await notificationService.PublishUpdateAsync(owner.Resource, s => s with
485topLevelParameter.Resource.WaitForValueTcs = new TaskCompletionSource<string?>(TaskCreationOptions.RunContinuationsAsynchronously);
486topLevelParameter.Resource.WaitForValueTcs.SetResult("top-level-secret");
491await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
494await notificationService.PublishUpdateAsync(owner.Resource, s => s with
553await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
556await notificationService.PublishUpdateAsync(owner.Resource, s => s with
581var environmentCallback = owner.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Single();
583await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
585await notificationService.PublishUpdateAsync(owner.Resource, s => s with
629await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
632await notificationService.PublishUpdateAsync(owner.Resource, s => s with
655var environmentCallback = owner.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Single();
657await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
659await notificationService.PublishUpdateAsync(owner.Resource, s => s with
699await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
702await notificationService.PublishUpdateAsync(owner.Resource, s => s with
730await notificationService.PublishUpdateAsync(owner.Resource, s => s with
770await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
773await notificationService.PublishUpdateAsync(owner.Resource, s => s with
798await notificationService.PublishUpdateAsync(owner.Resource, s => s with
859await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
862await notificationService.PublishUpdateAsync(mcpResource.Resource, s => s with
866await notificationService.PublishUpdateAsync(owner.Resource, s => s with
905.WithEnvironment(context => context.EnvironmentVariables["SECRET"] = coldSecret.Resource);
913await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
918coldSecret.Resource.WaitForValueTcs = new TaskCompletionSource<string?>(TaskCreationOptions.RunContinuationsAsynchronously);
919coldSecret.Resource.WaitForValueTcs.SetResult("value-b");
922await notificationService.PublishUpdateAsync(owner.Resource, s => s with
979var annotation = owner.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Single();
986.EvaluateOnceAsync(new EnvironmentCallbackContext(executionContext, owner.Resource, new Dictionary<string, object>()))
1034var annotation = owner.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Single();
1043.EvaluateOnceAsync(new EnvironmentCallbackContext(executionContext, owner.Resource, new Dictionary<string, object>()))
1072await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
1075await notificationService.PublishUpdateAsync(owner.Resource, s => s with
1123await PrimeEnvironmentCallbackCacheAsync(owner.Resource, app.Services).DefaultTimeout();
1138await notificationService.PublishUpdateAsync(owner.Resource, s => s with
1154await notificationService.PublishUpdateAsync(owner.Resource, s => s with
1191await notificationService.PublishUpdateAsync(custom.Resource, s => s with
1263await notificationService.PublishUpdateAsync(custom.Resource, s => s with
1276ResourceName = custom.Resource.Name,
1299await notificationService.PublishUpdateAsync(custom.Resource, s => s with
1339await notificationService.PublishUpdateAsync(custom.Resource, s => s with
1392AddSyntheticTerminalAnnotation(custom.Resource, replicaCount: 1);
1398await notificationService.PublishUpdateAsync(custom.Resource, s => s with
1434await notificationService.PublishUpdateAsync(custom.Resource, s => s with
1480await notificationService.PublishUpdateAsync(resourceWithReplicas.Resource, "myresource-abc123", s => s with
1519await notificationService.PublishUpdateAsync(resourceWithReplicas.Resource, "myresource-abc123", s => s with
1987await notificationService.PublishUpdateAsync(hidden.Resource, snapshot => snapshot with
ComputeEnvironmentEndpointResolverTests.cs (35)
20var endpoint = AddHttpEndpoint(agent.Resource, port: 8080, targetPort: 5000);
21agent.Resource.Annotations.Add(new DeploymentTargetAnnotation(owningEnv.Resource) { ComputeEnvironment = owningEnv.Resource });
24endpoint.Property(EndpointProperty.Url), [currentEnv.Resource], out var expression);
40var endpoint = AddHttpEndpoint(agent.Resource, port: 8080, targetPort: 5000);
41agent.Resource.Annotations.Add(new DeploymentTargetAnnotation(owningEnv.Resource) { ComputeEnvironment = owningEnv.Resource });
45endpoint, [currentEnv.Resource], out var expression);
59var endpoint = AddHttpEndpoint(agent.Resource, port: 8080, targetPort: 5000);
60agent.Resource.Annotations.Add(new DeploymentTargetAnnotation(currentEnv.Resource) { ComputeEnvironment = currentEnv.Resource });
63endpoint.Property(EndpointProperty.Url), [currentEnv.Resource], out var expression);
79var endpoint = AddHttpEndpoint(agent.Resource, port: 8080, targetPort: 5000);
82endpoint.Property(EndpointProperty.Url), [currentEnv.Resource], out var expression);
96var endpoint = AddHttpEndpoint(agent.Resource, port: 8080, targetPort: 5000);
99endpoint.Property(EndpointProperty.Url), [currentEnv.Resource], out var expression);
117agent.Resource.Annotations.Add(new DeploymentTargetAnnotation(currentEnv.Resource) { ComputeEnvironment = currentEnv.Resource });
118agent.Resource.Annotations.Add(new DeploymentTargetAnnotation(otherEnv.Resource) { ComputeEnvironment = otherEnv.Resource });
119var endpoint = AddHttpEndpoint(agent.Resource, port: 8080, targetPort: 5000);
122endpoint.Property(EndpointProperty.Url), [currentEnv.Resource], out var expression);
140agent.Resource.Annotations.Add(new DeploymentTargetAnnotation(currentEnv.Resource) { ComputeEnvironment = currentEnv.Resource });
141agent.Resource.Annotations.Add(new DeploymentTargetAnnotation(otherEnv.Resource) { ComputeEnvironment = otherEnv.Resource });
142var endpoint = AddHttpEndpoint(agent.Resource, port: 8080, targetPort: 5000);
146endpoint.Property(EndpointProperty.Url), [currentEnv.Resource], out _));
ContainerRegistryResourceTests.cs (66)
30Assert.Equal("docker-hub", registry.Resource.Name);
32var containerRegistry = registry.Resource as IContainerRegistry;
46Assert.Equal("acr", registry.Resource.Name);
48var containerRegistry = registry.Resource as IContainerRegistry;
64Assert.Equal("my-registry", registry.Resource.Name);
66var containerRegistry = registry.Resource as IContainerRegistry;
81Assert.Equal("my-registry", registry.Resource.Name);
83var containerRegistry = registry.Resource as IContainerRegistry;
207var containerRegistry = registry.Resource as IContainerRegistry;
221var containerRegistry = registry.Resource as IContainerRegistry;
236var containerRegistry = registry.Resource as IContainerRegistry;
252var containerRegistry = registry.Resource as IContainerRegistry;
270var containerRegistry = registry.Resource as IContainerRegistry;
285Assert.IsAssignableFrom<IContainerRegistry>(registry.Resource);
316var annotation = container.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>().SingleOrDefault();
318Assert.Same(registry.Resource, annotation.Registry);
351var pipelineStepAnnotations = container.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
352var pipelineConfigAnnotations = container.Resource.Annotations.OfType<PipelineConfigurationAnnotation>().ToList();
366var pipelineStepAnnotation = Assert.Single(container.Resource.Annotations.OfType<PipelineStepAnnotation>());
371Resource = container.Resource
390var pipelineStepAnnotations = container.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
397Resource = container.Resource
413var annotation = new ContainerRegistryReferenceAnnotation(registry.Resource);
415Assert.Same(registry.Resource, annotation.Registry);
435var containerRegistry = env.Resource.GetContainerRegistry();
436Assert.Same(acr.Resource, containerRegistry);
455var pipelineStepAnnotations = project.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
456var pipelineConfigAnnotations = project.Resource.Annotations.OfType<PipelineConfigurationAnnotation>().ToList();
470var pipelineStepAnnotation = Assert.Single(project.Resource.Annotations.OfType<PipelineStepAnnotation>());
475Resource = project.Resource
494var pipelineStepAnnotation = Assert.Single(project.Resource.Annotations.OfType<PipelineStepAnnotation>());
499Resource = project.Resource
522var annotation = project.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>().FirstOrDefault();
524Assert.Same(registry.Resource, annotation.Registry);
538var annotations = project.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>().ToList();
540Assert.Same(registry1.Resource, annotations[0].Registry);
555Assert.Empty(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
562var registryTargetAnnotation = Assert.Single(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
563Assert.Same(registry.Resource, registryTargetAnnotation.Registry);
583var registryTargetAnnotations = project.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList();
587Assert.Contains(registry1.Resource, registryResources);
588Assert.Contains(registry2.Resource, registryResources);
607var containerRegistry = project.Resource.GetContainerRegistry();
608Assert.Same(registry.Resource, containerRegistry);
630var containerRegistry = project.Resource.GetContainerRegistry();
631Assert.Same(registry2.Resource, containerRegistry);
652var exception = Assert.Throws<InvalidOperationException>(project.Resource.GetContainerRegistry);
666var exception = Assert.Throws<InvalidOperationException>(project.Resource.GetContainerRegistry);
688Assert.Single(project1.Resource.Annotations.OfType<RegistryTargetAnnotation>());
689Assert.Single(project2.Resource.Annotations.OfType<RegistryTargetAnnotation>());
690Assert.Single(container.Resource.Annotations.OfType<RegistryTargetAnnotation>());
712var registryTargetAnnotations = project.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList();
715var containerRegistryRefAnnotation = Assert.Single(project.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>());
716Assert.Same(specificRegistry.Resource, containerRegistryRefAnnotation.Registry);
719var containerRegistry = project.Resource.GetContainerRegistry();
720Assert.Same(specificRegistry.Resource, containerRegistry);
735Assert.Empty(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
742var registryTargetAnnotation = Assert.Single(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
743Assert.Same(acr.Resource, registryTargetAnnotation.Registry);
763Assert.Single(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
764Assert.Single(container.Resource.Annotations.OfType<RegistryTargetAnnotation>());
783var containerRegistry = project.Resource.GetContainerRegistry();
784Assert.Same(acr.Resource, containerRegistry);
804var registryTargetAnnotations = project.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList();
808Assert.Contains(acr.Resource, registryResources);
809Assert.Contains(dockerHub.Resource, registryResources);
Dcp\DcpExecutorTests.cs (166)
304Assert.Same(resource.Resource, Assert.Single(startingEvents).Resource);
346Assert.True(resource.Resource.TryGetInstances(out var instances));
392Assert.True(resource.Resource.TryGetInstances(out var instances));
477.WithReplicas(2).Resource;
911}).Resource;
1533Assert.IsNotAssignableFrom<IComputeResource>(emulator.Resource);
1534Assert.True(emulator.Resource.IsContainer());
1538Assert.Single(kubernetesService.CreatedResources.OfType<Container>(), c => c.AppModelResourceName == emulator.Resource.Name);
4334var allocatedEndpoint = database.Resource.GetEndpoint("tcp").AllocatedEndpoint;
4520Assert.Same(database.Resource, connectionStringAvailableResource);
4568Assert.Same(database.Resource, connectionStringAvailableResource);
4628if (ReferenceEquals(context.Resource, client.Resource))
4674if (ReferenceEquals(context.Resource, client.Resource))
4885HasKnownCommandAnnotations(exe.Resource);
4886HasKnownCommandAnnotations(container.Resource);
4887HasKnownProjectCommandAnnotations(project.Resource);
5041var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
5044projectBuilder.Resource.Annotations.Remove(annotationToRemove);
5563var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
5566projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
5602var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
5605projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
5643var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
5646projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
5687var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
5690projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
5734var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
5737projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
5773Assert.Same(projectBuilder.Resource, Assert.Single(failedResources));
6239var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(resource.Resource, instanceIndex: 0).Name);
6252resource.Resource.Annotations.Add(
6273var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(resource.Resource, instanceIndex: 0).Name);
6286Assert.Same(resource.Resource, failure.Resource);
6803var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
6806projectBuilder.Resource.Annotations.Remove(annotationToRemove);
6843var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
6846projectBuilder.Resource.Annotations.Remove(annotationToRemove);
6893var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
6896projectBuilder.Resource.Annotations.Remove(annotationToRemove);
6953var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
6956projectBuilder.Resource.Annotations.Remove(annotationToRemove);
7005var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7008projectBuilder.Resource.Annotations.Remove(annotationToRemove);
7049var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7052projectBuilder.Resource.Annotations.Remove(annotationToRemove);
7131var projectResource = projectBuilder.Resource;
7132var defaultDebugSupport = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7135projectBuilder.Resource.Annotations.Remove(defaultDebugSupport);
7139projectBuilder.Resource.Annotations.Add(
7266var defaultDebugSupport = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7269projectBuilder.Resource.Annotations.Remove(defaultDebugSupport);
7273projectBuilder.Resource.Annotations.Add(
7376await foreach (var lines in resourceLoggerService.GetAllAsync(projectBuilder.Resource).DefaultTimeout())
7394var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7397projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
7481var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7484projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
7589var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7592projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
7656var defaultAnnotation = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7659projectBuilder.Resource.Annotations.Remove(defaultAnnotation);
7700var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7703projectBuilder.Resource.Annotations.Remove(annotationToRemove);
7766var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7769projectBuilder.Resource.Annotations.Remove(annotationToRemove);
7793var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7796projectBuilder.Resource.Annotations.Remove(annotationToRemove);
7840var annotationToRemove = customProject.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7843customProject.Resource.Annotations.Remove(annotationToRemove);
7890var annotationToRemove = customProject.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7893customProject.Resource.Annotations.Remove(annotationToRemove);
7936var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
7939projectBuilder.Resource.Annotations.Remove(annotationToRemove);
8018var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
8021projectBuilder.Resource.Annotations.Remove(annotationToRemove);
8281projectBuilder.Resource.Annotations.Add(new ProjectLaunchArgsOverrideAnnotation(["build", "/t:Run"]));
8328projectBuilder.Resource.Annotations.Add(new ProjectLaunchArgsOverrideAnnotation(["build", "/t:Run"]));
8365projectBuilder.Resource.Annotations.Add(new ProjectLaunchArgsOverrideAnnotation(["build", "/t:Run"], leadingResourceArgumentToRemove: "run"));
8401projectBuilder.Resource.Annotations.Add(new ProjectLaunchArgsOverrideAnnotation(["build", "/t:Run"], leadingResourceArgumentToRemove: "run"));
8436projectBuilder.Resource.Annotations.Add(new ProjectLaunchArgsOverrideAnnotation(["build", "/t:Run"], leadingResourceArgumentToRemove: "run"));
8481projectBuilder.Resource.Annotations.Add(new ProjectLaunchArgsOverrideAnnotation(["build", "/t:Run"]));
8522var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
8525projectBuilder.Resource.Annotations.Remove(annotationToRemove);
8550var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
8553projectBuilder.Resource.Annotations.Remove(annotationToRemove);
8589var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
8592projectBuilder.Resource.Annotations.Remove(annotationToRemove);
9638await AssertEndpoint(executable.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 5678);
9639await AssertEndpoint(executable.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 8765);
9643await AssertTunneledPort(executable.Resource, "proxied", 5678);
9644await AssertTunneledPort(executable.Resource, "notProxied", 8765);
9658await AssertEndpoint(executable.Resource, endpointName, KnownNetworkIdentifiers.DefaultAspireContainerNetwork, expectedContainerHost, port);
9660await AssertEndpoint(executable.Resource, endpointName, KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, hostPort);
9664.Where(c => c.AppModelResourceName == container.Resource.Name)
9672await AssertEndpoint(executable.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 5678);
9673await AssertEndpoint(executable.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 8765);
9674await AssertEndpoint(executable.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, expectedContainerHost, 5678);
9675await AssertEndpoint(executable.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, expectedContainerHost, 8765);
9678await AssertEndpoint(container.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 15678);
9679await AssertEndpoint(container.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 18765);
9681await AssertEndpoint(container.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 11234);
9682await AssertEndpoint(container.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 18765);
9684await AssertEndpoint(containerWithAlias.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 25678);
9685await AssertEndpoint(containerWithAlias.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 28765);
9687await AssertEndpoint(containerWithAlias.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 21234);
9688await AssertEndpoint(containerWithAlias.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 28765);
9772s => s.AppModelResourceName == executable.Resource.Name
9924var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(resource.Resource, instanceIndex: 0).Name);
9969var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(resource.Resource, instanceIndex: 0).Name);
10026var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(resource.Resource, instanceIndex: 0).Name);
10079var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(resource.Resource, instanceIndex: 0).Name);
10225Assert.Equal(executable.Resource.Name, tunnelService.AppModelResourceName);
10230resource => resource.AppModelResourceName == executable.Resource.Name);
10259target.Resource.Name,
10260target.Resource.Command,
10261target.Resource.WorkingDirectory);
10263distributedAppModel.Resources[distributedAppModel.Resources.IndexOf(target.Resource)] = replacement;
10276Assert.Equal(target.Resource.Name, tunnelService.AppModelResourceName);
10280resource => resource.AppModelResourceName == source.Resource.Name);
10313Assert.Equal(project.Resource.Name, tunnelService.AppModelResourceName);
10317resource => resource.AppModelResourceName == project.Resource.Name);
10352Assert.Equal(target.Resource.Name, tunnelService.AppModelResourceName);
10357resource => resource.AppModelResourceName == source.Resource.Name);
10402Assert.Equal(executable.Resource, failure.Resource);
10409resource => resource.AppModelResourceName == executable.Resource.Name);
10417await foreach (var lines in resourceLoggerService.GetAllAsync(executable.Resource).DefaultTimeout())
10469Assert.Equal(executable.Resource, failure.Resource);
10476resource => resource.AppModelResourceName == executable.Resource.Name);
10517resource => resource.AppModelResourceName == source.Resource.Name);
10556var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(executable.Resource, instanceIndex: 0).Name);
10566resource => resource.AppModelResourceName == executable.Resource.Name);
10609var reference = appExecutor.GetResource(DcpExecutor.GetDcpInstance(executable.Resource, instanceIndex: 0).Name);
10665[containerSource.Resource, executableSource.Resource],
10668.Where(resource => ReferenceEquals(resource, containerSource.Resource) || ReferenceEquals(resource, executableSource.Resource))
10701if (context.Resource == waiting.Resource || context.Resource == waitingConsumingEndpoint.Resource)
10703while (!kubernetesService.CreatedResources.OfType<Container>().Any(c => c.AppModelResourceName == container.Resource.Name))
10719Assert.Single(createdContainers, c => c.AppModelResourceName == container.Resource.Name);
10720Assert.Single(createdContainers, c => c.AppModelResourceName == waiting.Resource.Name);
10721var waitingConsumingContainer = Assert.Single(createdContainers, c => c.AppModelResourceName == waitingConsumingEndpoint.Resource.Name);
10728Assert.Single(tunnelServices, s => s.AppModelResourceName == executableA.Resource.Name);
10729var executableBTunnelService = Assert.Single(tunnelServices, s => s.AppModelResourceName == executableB.Resource.Name);
10762if (context.Resource == tunnelDependentContainer.Resource)
10764while (!kubernetesService.CreatedResources.OfType<Executable>().Any(e => e.AppModelResourceName == upstreamExecutable.Resource.Name))
10770if (context.Resource == downstreamExecutable.Resource)
10772while (!kubernetesService.CreatedResources.OfType<Container>().Any(c => c.AppModelResourceName == tunnelDependentContainer.Resource.Name))
10788var upstreamExecutableResource = Assert.Single(createdResources.OfType<Executable>(), e => e.AppModelResourceName == upstreamExecutable.Resource.Name);
10789var downstreamExecutableResource = Assert.Single(createdResources.OfType<Executable>(), e => e.AppModelResourceName == downstreamExecutable.Resource.Name);
10790var tunnelDependentDcpContainer = Assert.Single(createdResources.OfType<Container>(), c => c.AppModelResourceName == tunnelDependentContainer.Resource.Name);
10801var upstreamTunnelService = Assert.Single(tunnelServices, s => s.AppModelResourceName == upstreamExecutable.Resource.Name);
10977var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
10980projectBuilder.Resource.Annotations.Remove(annotationToRemove);
11019var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
11022projectBuilder.Resource.Annotations.Remove(annotationToRemove);
11057Assert.Same(projectBuilder.Resource, Assert.Single(failedResources));
11069var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
11072projectBuilder.Resource.Annotations.Remove(annotationToRemove);
11144.Resource;
11218.Resource;
11264.Resource;
DebugSupportExtensionsTests.cs (31)
88await executable.Resource.CreateLaunchConfigurationAsync(ExecutableLaunchMode.NoDebug, cts.Token));
91Assert.Same(executable.Resource, observedContext.Resource);
106var launchConfiguration = Assert.IsType<ProjectLaunchConfiguration>(await CreateLaunchConfigurationForTestAsync(project.Resource, ExecutableLaunchMode.Debug));
109Assert.Equal(GetProjectPath(project.Resource), launchConfiguration.ProjectPath);
129var launchConfiguration = Assert.IsType<ProjectLaunchConfiguration>(await CreateLaunchConfigurationForTestAsync(project.Resource, ExecutableLaunchMode.Debug));
143var debugSupport = Assert.Single(project.Resource.Annotations.OfType<SupportsDebuggingAnnotation>());
164var launchConfiguration = Assert.IsType<ProjectLaunchConfiguration>(await CreateLaunchConfigurationForTestAsync(project.Resource, ExecutableLaunchMode.NoDebug));
178var launchConfiguration = Assert.IsType<TestGoLaunchConfiguration>(await CreateLaunchConfigurationForTestAsync(executable.Resource, ExecutableLaunchMode.NoDebug));
198var launchConfiguration = Assert.IsType<TestGoLaunchConfiguration>(await CreateLaunchConfigurationForTestAsync(executable.Resource, ExecutableLaunchMode.Debug));
218await CreateLaunchConfigurationForTestAsync(executable.Resource, ExecutableLaunchMode.Debug, cts.Token);
242await executable.Resource.CreateLaunchConfigurationAsync(ExecutableLaunchMode.NoDebug, cts.Token));
248Assert.Same(executable.Resource, actualContext.Resource);
261() => executable.Resource.CreateLaunchConfigurationAsync(null!, CancellationToken.None));
282executable.Resource,
288await executable.Resource.CreateLaunchConfigurationAsync(callbackContext));
303var exception = await Assert.ThrowsAsync<InvalidOperationException>(() => CreateLaunchConfigurationForTestAsync(executable.Resource, ExecutableLaunchMode.Debug));
316mode => ProjectLaunchConfigurationFactory.Create(executable.Resource, mode),
319var exception = await Assert.ThrowsAsync<InvalidOperationException>(() => CreateLaunchConfigurationForTestAsync(executable.Resource, ExecutableLaunchMode.Debug));
331var exception = await Assert.ThrowsAsync<InvalidOperationException>(() => CreateLaunchConfigurationForTestAsync(executable.Resource, ExecutableLaunchMode.Debug));
344Assert.False(executable.Resource.SupportsDebugging(CreateConfiguration(), out var annotation));
355Assert.False(executable.Resource.SupportsDebugging(CreateConfiguration(debugSessionPort: null), out _));
368Assert.True(project.Resource.SupportsDebugging(CreateConfiguration(), out var annotation));
387Assert.False(fileApp.Resource.SupportsDebugging(configuration, out _));
404Assert.True(fileApp.Resource.SupportsDebugging(configuration, out var annotation));
417Assert.False(executable.Resource.SupportsDebugging(CreateConfiguration(), out _));
433Assert.Equal(expected, executable.Resource.SupportsDebugging(configuration, out _));
449Assert.False(project.Resource.SupportsDebugging(configuration, out _));
461Assert.False(project.Resource.SupportsDebugging(CreateConfiguration(), out _));
473Assert.False(project.Resource.SupportsDebugging(CreateConfiguration(), out _));
490Assert.True(project.Resource.SupportsDebugging(configuration, out _));
491Assert.False(executable.Resource.SupportsDebugging(configuration, out _));
DistributedApplicationModelExtensionsTests.cs (8)
33item => Assert.Equal(container1.Resource, item),
34item => Assert.Equal(container2.Resource, item),
35item => Assert.Equal(project.Resource, item),
36item => Assert.Equal(emulator.Resource, item));
52containerWithDockerfile.Resource.Annotations.Add(new DockerfileBuildAnnotation("/context", "/Dockerfile", null));
56buildOnlyContainer.Resource.Annotations.Add(new DockerfileBuildAnnotation("/context", "/Dockerfile", null) { HasEntrypoint = false });
68item => Assert.Equal(project.Resource, item),
69item => Assert.Equal(containerWithDockerfile.Resource, item));
DistributedApplicationTests.cs (31)
785using var clientA = app.CreateHttpClient(testProgram.ServiceABuilder.Resource.Name, "http");
786using var clientC = app.CreateHttpClient(testProgram.ServiceCBuilder.Resource.Name, "http");
793var uri = app.GetEndpoint(testProgram.ServiceBBuilder.Resource.Name, "http");
1111var dependentRunningResourceEvent = await rns.WaitForResourceAsync(container.Resource.Name, e => e.Snapshot.State?.Text == KnownResourceStates.Running).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
1272using var serviceAClient = app.CreateHttpClientWithResilience(testProgram.ServiceABuilder.Resource.Name, "http");
1712var endpoint = testProgram.ServiceABuilder.Resource.GetEndpoint("http");
1784await app.WaitForTextAsync("Content root path:", resourceName: testProgram.ServiceABuilder.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutDuration);
1787var httpEndPoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "http");
1805var httpsEndpoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "https");
1857using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
1865var sslVal = redis.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1867Assert.Equal($"localhost:{port},password={redis.Resource.PasswordParameter?.Value}{sslVal}", env.Value);
1872if (redis.Resource.TlsEnabled)
1882var otherRedisService = await WaitForAllocatedProxylessServiceAsync(s, redisNoPort.Resource, redisNoPort.Resource.PrimaryEndpoint)
1886sslVal = redisNoPort.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1888Assert.Equal($"localhost:{otherRedisPort},password={redisNoPort.Resource.PasswordParameter?.Value}{sslVal}", otherRedisEnv.Value);
1891if (redisNoPort.Resource.TlsEnabled)
1933using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
1945var sslVal = redis.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1947Assert.Equal($"localhost:{port},password={redis.Resource.PasswordParameter!.Value}{sslVal}", env.Value);
1952if (redis.Resource.TlsEnabled)
1962var otherRedisService = await WaitForAllocatedProxylessServiceAsync(s, redisNoPort.Resource, redisNoPort.Resource.PrimaryEndpoint)
1966sslVal = redisNoPort.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1968Assert.Equal($"localhost:{otherRedisPort},password={redisNoPort.Resource.PasswordParameter!.Value}{sslVal}", otherRedisEnv.Value);
1972if (redisNoPort.Resource.TlsEnabled)
2062await app.ResourceNotifications.WaitForResourceAsync(container.Resource.Name, KnownResourceStates.NotStarted, token)
2064await app.ResourceNotifications.WaitForResourceAsync(executable.Resource.Name, KnownResourceStates.NotStarted, token)
2070var dcpContainer = Assert.Single(containers, c => c.AppModelResourceName == container.Resource.Name);
2079var dcpExecutable = Assert.Single(executables, e => e.AppModelResourceName == executable.Resource.Name);
DotnetProgramPublishingTests.cs (29)
53resource.Resource.Annotations.OfType<DotnetProgramBuildEnvironmentCallbackAnnotation>(),
69Assert.Empty(resource.Resource.Annotations.OfType<DotnetProgramBuildEnvironmentCallbackAnnotation>());
86Assert.False(resource.Resource.SupportsDotnetProgramPublishing());
104Assert.False(resource.Resource.SupportsDotnetProgramPublishing());
117Assert.True(resource.Resource.SupportsDotnetProgramPublishing());
118Assert.Single(resource.Resource.Annotations.OfType<DotnetProgramPublishingAnnotation>());
119Assert.Single(resource.Resource.Annotations.OfType<PipelineStepAnnotation>());
120Assert.Single(resource.Resource.Annotations.OfType<PipelineConfigurationAnnotation>());
121Assert.Single(resource.Resource.Annotations.OfType<ContainerBuildOptionsCallbackAnnotation>());
161resource.Resource,
182Assert.Contains(resource.Resource, model.GetComputeResources());
183Assert.Contains(resource.Resource, model.GetBuildResources());
184Assert.True(resource.Resource.RequiresImageBuild());
210Assert.Contains(resource.Resource, model.GetComputeResources());
211Assert.DoesNotContain(resource.Resource, model.GetBuildResources());
212Assert.DoesNotContain(resource.Resource, model.GetBuildAndPushResources());
213Assert.False(resource.Resource.RequiresImageBuild());
214Assert.True(resource.Resource.SupportsDotnetProgramPublishing());
222var annotation = Assert.Single(resource.Resource.Annotations.OfType<PipelineStepAnnotation>());
226Resource = resource.Resource
232await imageManager.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken);
233await imageManager.BuildImagesAsync([resource.Resource], TestContext.Current.CancellationToken);
262Source = source.Resource,
276() => imageManager.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken));
278() => imageManager.BuildImagesAsync([resource.Resource], TestContext.Current.CancellationToken));
336Source = source.Resource,
416manager.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken)).DefaultTimeout();
445Source = source.Resource,
459resource.Resource, metadata, buildResult, app.Services, logger, TestContext.Current.CancellationToken));
ExpressionResolverTests.cs (10)
128var csRef = new ConnectionStringReference(target.Resource, false);
144var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(source.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
182var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(test.Resource, DistributedApplicationOperation.Run, testServiceProvider).DefaultTimeout();
219var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(test.Resource, DistributedApplicationOperation.Run, testServiceProvider).DefaultTimeout();
244var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(test.Resource, DistributedApplicationOperation.Run, testServiceProvider).DefaultTimeout();
267var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(test.Resource, DistributedApplicationOperation.Run, serviceProvider).DefaultTimeout();
293var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(dep.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
312var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(dep.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
330var endpointAnnotation = dependency.Resource.Annotations.OfType<EndpointAnnotation>().Single();
335_ = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(consumer.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).AsTask().TimeoutAfter(TimeSpan.FromSeconds(2));
ExternalServiceTests.cs (42)
23Assert.Equal("nuget", externalService.Resource.Name);
24Assert.Equal("https://nuget.org/", externalService.Resource.Uri?.ToString());
25Assert.Null(externalService.Resource.UrlParameter);
36Assert.Equal("nuget", externalService.Resource.Name);
37Assert.Equal("https://nuget.org/", externalService.Resource.Uri?.ToString());
38Assert.Null(externalService.Resource.UrlParameter);
49Assert.Equal("nuget", externalService.Resource.Name);
50Assert.Null(externalService.Resource.Uri);
51Assert.NotNull(externalService.Resource.UrlParameter);
52Assert.Equal("nuget-url", externalService.Resource.UrlParameter.Name);
87Assert.Equal("nuget", externalService.Resource.Name);
88Assert.Equal(uriWithPath, externalService.Resource.Uri);
103Assert.Equal("nuget", externalService.Resource.Name);
104Assert.Equal(validUrl, externalService.Resource.Uri?.ToString());
117var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
134var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
153var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
173var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Publish, app.Services).DefaultTimeout();
178Assert.Equal(urlParam.Resource.ValueExpression, urlValue);
196await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
215await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
233Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
234Assert.NotNull(healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")));
249Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
250Assert.NotNull(healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")));
272Assert.True(externalService.Resource.TryGetAnnotationsOfType<ResourceSnapshotAnnotation>(out var snapshotAnnotations));
286Assert.True(externalService.Resource.TryGetAnnotationsOfType<ManifestPublishingCallbackAnnotation>(out var manifestAnnotations));
342externalService.Resource.Name,
369externalService.Resource.Name,
396externalService.Resource.Name,
420Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
421var healthCheckAnnotation = healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external"));
441Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
442var healthCheckAnnotation = healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external"));
466Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
467var healthCheckKey = healthCheckAnnotations.First(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")).Key;
491var manifest = await ManifestUtils.GetManifest(project.Resource);
508Assert.Equal("service", externalService.Resource.Name);
509Assert.Equal(validUrl, externalService.Resource.Uri?.ToString());
523Assert.Equal("service", externalService.Resource.Name);
524Assert.Equal(validUrl, externalService.Resource.Uri?.ToString());
561var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
Health\ResourceHealthCheckServiceTests.cs (30)
33await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
41await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
73await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
81await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
116await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
124await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
163await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
172Assert.Equal(resource.Resource, e1.Resource);
178await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
186await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
200Assert.Equal(resource.Resource, e2.Resource);
229await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
233await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, abortTokenSource.Token).DefaultTimeout();
270await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
313await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
317await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, abortTokenSource.Token).DefaultTimeout();
349await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
355Assert.Equal(resource.Resource, @event.Resource);
380await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
442await app.ResourceNotifications.PublishUpdateAsync(parent.Resource, s => s with
487await app.ResourceNotifications.PublishUpdateAsync(parent.Resource, s => s with
527var child = builder.AddResource(new ChildResource("child", parent.Resource))
538await app.ResourceNotifications.PublishUpdateAsync(parent.Resource, s => s with
546await app.ResourceNotifications.PublishUpdateAsync(child.Resource, s => s with
552Assert.Equal(parentReadyEvent.Resource, parent.Resource);
555Assert.Equal(childReadyEvent.Resource, child.Resource);
582await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
590await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
628await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
636await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s with
Orchestrator\ApplicationOrchestratorTests.cs (103)
42await notifications.PublishUpdateAsync(resource.Resource, resource.Resource.Name,
68CancellationToken.None, KnownResourceTypes.Executable, resource.Resource, resource.Resource.Name,
80var childResource = builder.AddResource(new CustomChildResource("child", parentResource.Resource));
97if (item.Resource == parentResource.Resource)
101else if (item.Resource == childResource.Resource)
145if (item.Resource == parentResource.Resource)
149else if (item.Resource == childResource.Resource)
192applicationEventing.Subscribe<InitializeResourceEvent>(resource.Resource, (@event, ct) =>
210Assert.Equal(resource.Resource, initEvent.Resource);
245if (item.Resource == parent.Resource)
249else if (item.Resource == child.Resource)
254else if (item.Resource == nestedChild.Resource)
258else if (item.Resource == child2.Resource)
311if (item.Resource == firstParent.Resource)
315else if (item.Resource == secondParent.Resource)
319else if (item.Resource == child.Resource)
363if (item.Resource == projectA.Resource)
367else if (item.Resource == projectB.Resource)
413new ChildResourceWithConnectionString("child", new Dictionary<string, string> { { "Namespace", "ns" } }, parentResource.Resource)
416new ChildResourceWithConnectionString("grand-child", new Dictionary<string, string> { { "Database", "db" } }, childResource.Resource)
433applicationEventing.Subscribe<ConnectionStringAvailableEvent>(parentResource.Resource, (_, _) =>
438applicationEventing.Subscribe<ConnectionStringAvailableEvent>(childResource.Resource, (_, _) =>
443applicationEventing.Subscribe<ConnectionStringAvailableEvent>(grandChildResource.Resource, (_, _) =>
449await events.PublishAsync(new OnConnectionStringAvailableContext(CancellationToken.None, parentResource.Resource));
472applicationEventing.Subscribe<ConnectionStringAvailableEvent>(resource.Resource, (_, _) =>
477applicationEventing.Subscribe<BeforeResourceStartedEvent>(resource.Resource, (_, _) =>
486await events.PublishAsync(new OnConnectionStringAvailableContext(CancellationToken.None, resource.Resource));
487await events.PublishAsync(new OnResourceStartingContext(CancellationToken.None, KnownResourceTypes.Executable, resource.Resource, "test-resource-dcp"));
514await applicationEventing.PublishAsync(new ConnectionStringAvailableEvent(resource.Resource, app.Services), CancellationToken.None);
515await applicationEventing.PublishAsync(new ConnectionStringAvailableEvent(resource.Resource, app.Services), CancellationToken.None);
517Assert.True(resourceNotificationService.TryGetCurrentState(resource.Resource.Name, out var currentState));
560container.Resource,
589container.Resource,
614await events.PublishAsync(new OnResourceStartingContext(CancellationToken.None, KnownResourceTypes.Tool, resource.Resource, "tool-dcp"));
645await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
648Assert.True(resourceNotificationService.TryGetCurrentState(waiter.Resource.Name, out var waitingEvent));
653await resourceNotificationService.WaitForResourceAsync(blocker.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
654await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
685CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, waiter.Resource.Name));
687await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
689Assert.True(resourceNotificationService.TryGetCurrentState(dependency.Resource.Name, out var dependencyEvent));
694await resourceNotificationService.WaitForResourceAsync(dependency.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
711waiter.Resource.Annotations.Add(new DcpInstancesAnnotation([
728await resourceNotificationService.PublishUpdateAsync(waiter.Resource, "waiter-def456", s => s with
734CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, "waiter-abc123"));
737waiter.Resource.Name,
743await resourceNotificationService.PublishUpdateAsync(waiter.Resource, "waiter-def456", s => s with
771waiter.Resource.Annotations.Add(new DcpInstancesAnnotation([
788await PublishReplicaStatesAsync(resourceNotificationService, waiter.Resource, KnownResourceStates.NotStarted);
792CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, "waiter-abc123"));
795waiter.Resource.Name,
820waiter.Resource.Annotations.Add(new DcpInstancesAnnotation([
832dcpExecutor.AddResource(waiter.Resource, "waiter-abc123");
833dcpExecutor.AddResource(waiter.Resource, "waiter-def456");
840await PublishReplicaStatesAsync(resourceNotificationService, waiter.Resource, KnownResourceStates.NotStarted);
843CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, "waiter-abc123"));
846waiter.Resource.Name,
873waiter.Resource.Annotations.Add(new DcpInstancesAnnotation([
885dcpExecutor.AddResource(waiter.Resource, "waiter-abc123");
886dcpExecutor.AddResource(waiter.Resource, "waiter-def456");
893await PublishReplicaStatesAsync(resourceNotificationService, waiter.Resource, KnownResourceStates.NotStarted);
897CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, "waiter-abc123"));
900waiter.Resource.Name,
905CancellationToken.None, KnownResourceTypes.Executable, waiter.Resource, "waiter-def456"));
908waiter.Resource.Name,
955await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
958await resourceNotificationService.PublishUpdateAsync(waiter.Resource, s => s with { State = KnownResourceStates.Starting }).DefaultTimeout();
960await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
962Assert.True(resourceNotificationService.TryGetCurrentState(blocker.Resource.Name, out var blockerEvent));
1007waiter.Resource.Name,
1011while (!resourceNotificationService.TryGetCurrentState(waiter.Resource.Name, out var waiterEvent)
1018await resourceNotificationService.PublishUpdateAsync(waiter.Resource, s => s with { State = KnownResourceStates.Starting });
1026await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, cancellationToken).DefaultTimeout();
1028Assert.True(resourceNotificationService.TryGetCurrentState(blocker.Resource.Name, out var blockerEvent));
1046var connectionString = builder.AddConnectionString("cs", ReferenceExpression.Create($"Endpoint={referenced.Resource}"));
1059await resourceNotificationService.WaitForResourceAsync(connectionString.Resource.Name, KnownResourceStates.Waiting, TestContext.Current.CancellationToken).DefaultTimeout();
1063await resourceNotificationService.WaitForResourceAsync(referenced.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1064await resourceNotificationService.WaitForResourceAsync(connectionString.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1095waiter.Resource.Name,
1100Assert.Equal(new[] { blocker.Resource.Name }, Assert.IsAssignableFrom<IEnumerable<string>>(waitingFor));
1106await resourceNotificationService.WaitForResourceAsync(blocker.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1107await resourceNotificationService.WaitForResourceAsync(waiter.Resource.Name, KnownResourceStates.Running, TestContext.Current.CancellationToken).DefaultTimeout();
1339var customChild = builder.AddResource(new CustomChildResource("custom-child", parentContainer.Resource));
1357parentContainer.Resource,
1365var childContainerState = resourceNotificationService.TryGetCurrentState(childContainer.Resource.Name, out var childContainerEvent) ? childContainerEvent.Snapshot.State?.Text : null;
1366var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
1387var customChild = builder.AddResource(new CustomChildResource("custom-child", parentContainer.Resource));
1405parentContainer.Resource,
1413var childProjectState = resourceNotificationService.TryGetCurrentState(childProject.Resource.Name, out var childProjectEvent) ? childProjectEvent.Snapshot.State?.Text : null;
1414var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
1455if (item.Resource == parent.Resource)
1459else if (item.Resource == child.Resource)
1463else if (item.Resource == child2.Resource)
1493parent.WithChildRelationship(child.Resource)
1494.WithChildRelationship(child2.Resource);
1512if (item.Resource == parent.Resource)
1516else if (item.Resource == child.Resource)
1520else if (item.Resource == child2.Resource)
1566if (item.Resource == parentProject.Resource)
1570else if (item.Resource == childProject.Resource)
Orchestrator\RelationshipEvaluatorTests.cs (37)
21manager.WithRelationship(first.Resource, "Manages")
22.WithRelationship(first.Resource, "Manages")
23.WithRelationship(first.Resource, "Observes")
24.WithRelationship(second.Resource, "Manages");
26Assert.Collection(manager.Resource.Annotations.OfType<ResourceRelationshipAnnotation>(),
27relationship => { Assert.Same(first.Resource, relationship.Resource); Assert.Equal("Manages", relationship.Type); },
28relationship => { Assert.Same(first.Resource, relationship.Resource); Assert.Equal("Observes", relationship.Type); },
29relationship => { Assert.Same(second.Resource, relationship.Resource); Assert.Equal("Manages", relationship.Type); });
38var childResource = builder.AddResource(new CustomChildResource("child", parentResource.Resource));
39var grandChildResource = builder.AddResource(new CustomChildResource("grandchild", childResource.Resource));
40var greatGrandChildResource = builder.AddResource(new CustomChildResource("greatgrandchild", grandChildResource.Resource));
54Assert.Collection(parentChildLookup[parentResource.Resource],
55x => Assert.Equal(childResource.Resource, x),
56x => Assert.Equal(childWithAnnotationsResource.Resource, x));
58Assert.Single(parentChildLookup[childResource.Resource], grandChildResource.Resource);
59Assert.Single(parentChildLookup[grandChildResource.Resource], greatGrandChildResource.Resource);
61Assert.Empty(parentChildLookup[greatGrandChildResource.Resource]);
63Assert.Single(parentChildLookup[childWithAnnotationsResource.Resource], grandChildWithAnnotationsResource.Resource);
65Assert.Empty(parentChildLookup[grandChildWithAnnotationsResource.Resource]);
86Assert.Collection(parentChildLookup[parentResource.Resource],
87x => Assert.Equal(child1Resource.Resource, x),
88x => Assert.Equal(child2Resource.Resource, x));
100parentResource.WithChildRelationship(child1Resource.Resource)
101.WithChildRelationship(child2Resource.Resource);
109Assert.Collection(parentChildLookup[parentResource.Resource],
110x => Assert.Equal(child1Resource.Resource, x),
111x => Assert.Equal(child2Resource.Resource, x));
132Assert.Collection(parentChildLookup[parentResource.Resource],
133x => Assert.Equal(child1Resource.Resource, x),
134x => Assert.Equal(child2Resource.Resource, x));
155Assert.Single(parentChildLookup[grandParentResource.Resource], parentResource.Resource);
156Assert.Single(parentChildLookup[parentResource.Resource], childResource.Resource);
ProjectResourceBuilderExtensionTests.cs (19)
53var annotation = project.Resource.Annotations.OfType<PersistenceAnnotation>().Single();
73Assert.Contains(executable.Resource.Name, exception.Message);
93Assert.Contains(project.Resource.Name, exception.Message);
107Assert.Single(project.Resource.Annotations.OfType<ProjectLaunchDefaultsAnnotation>());
122Assert.Contains(project.Resource.Name, exception.Message);
137var exception = Assert.Throws<InvalidOperationException>(project.Resource.GetProjectMetadata);
139Assert.Contains(project.Resource.Name, exception.Message);
154.Resource;
164Assert.Same(password.Resource, context.EnvironmentVariables[KnownAspNetCoreConfigNames.KestrelCertificatesDefaultPassword]);
182.Resource;
205.Resource;
253.GatherAsync(context, project.Resource, NullLogger.Instance, builder.ExecutionContext);
341.GatherAsync(context, project.Resource, NullLogger.Instance, builder.ExecutionContext);
345.GatherAsync(context, project.Resource, NullLogger.Instance, builder.ExecutionContext);
380.Resource;
418.Resource;
455.Resource;
492.Resource;
504Assert.Same(password.Resource, context.EnvironmentVariables[KnownAspNetCoreConfigNames.KestrelCertificatesDefaultPassword]);
Publishing\DotnetProgramArchiveTests.cs (13)
44await BuildAsync(app, resource.Resource, usePipeline, TestContext.Current.CancellationToken).DefaultTimeout();
97var firstBuild = BuildAsync(firstApp, firstResource.Resource, false, TestContext.Current.CancellationToken);
98var secondBuild = BuildAsync(secondApp, secondResource.Resource, false, TestContext.Current.CancellationToken);
139() => BuildAsync(app, resource.Resource, false, TestContext.Current.CancellationToken));
185() => BuildAsync(app, resource.Resource, false, cancellation.Token)).DefaultTimeout();
227() => BuildAsync(app, resource.Resource, false, cancellation.Token)).DefaultTimeout();
232() => BuildAsync(app, resource.Resource, false, cancellation.Token));
267() => BuildAsync(app, resource.Resource, false, TestContext.Current.CancellationToken));
293() => BuildAsync(app, resource.Resource, false, TestContext.Current.CancellationToken));
321() => BuildAsync(app, resource.Resource, false, TestContext.Current.CancellationToken));
359await BuildAsync(app, resource.Resource, false, TestContext.Current.CancellationToken);
361IValueProvider imageReference = new ContainerImageReference(resource.Resource);
386Source = assets.Resource,
Publishing\ResourceContainerImageManagerTests.cs (62)
44await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
81await imageBuilder.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken);
108await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
141await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
180await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
216await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
248await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
286await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
298AssertImageArchiveWasWritten(container.Resource, tempOutputPath);
330await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
343AssertImageArchiveWasWritten(container.Resource, tempOutputPath);
369await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
403await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
436await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
487await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
516await imageBuilder.PushImageAsync(testResource.Resource, cts.Token);
521resource => Assert.Equal(testResource.Resource, resource));
541imageBuilder.PushImageAsync(testResource.Resource, cts.Token));
578await imageBuilder.BuildImagesAsync([servicea.Resource], cts.Token);
609await imageBuilder.BuildImagesAsync([dockerfileResource.Resource], cts.Token);
642await imageBuilder.BuildImagesAsync([dockerfileResource.Resource], cts.Token);
681imageBuilder.BuildImagesAsync([container.Resource], cts.Token));
720imageBuilder.BuildImageAsync(project.Resource, cts.Token));
743() => imageBuilder.BuildImageAsync(project.Resource));
784imageBuilder.BuildImageAsync(project.Resource, cts.Token));
833() => imageBuilder.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken));
873await imageBuilder.BuildImageAsync(resource.Resource);
874await imageBuilder.BuildImageAsync(resource.Resource);
916Source = source.Resource,
950await imageBuilder.BuildImageAsync(resource.Resource);
956IValueProvider imageReference = new ContainerImageReference(resource.Resource);
1004Source = source.Resource,
1018() => imageBuilder.BuildImageAsync(resource.Resource));
1061() => imageBuilder.BuildImageAsync(resource.Resource));
1103() => imageBuilder.BuildImageAsync(resource.Resource));
1135Source = source.Resource,
1146await imageBuilder.BuildImageAsync(resource.Resource);
1196Source = source.Resource,
1203await imageBuilder.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken);
1287await imageBuilder.BuildImageAsync(resource.Resource, TestContext.Current.CancellationToken);
1365await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
1439await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
1535await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
1581var annotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
1588await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
1684var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1725var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1754var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1785var context = await container.Resource.ProcessContainerBuildOptionsCallbackAsync(
1791var dockerfileBuildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
1817var context = await container.Resource.ProcessContainerBuildOptionsCallbackAsync(
1865var context = await container.Resource.ProcessContainerBuildOptionsCallbackAsync(
1898var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1933await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1939Assert.Equal(servicea.Resource, capturedResource);
1982await imageManager.BuildImagesAsync([servicea.Resource], cts.Token);
2028() => imageManager.BuildImagesAsync([servicea.Resource], cts.Token));
2063() => imageManager.BuildImageAsync(container.Resource, cts.Token));
2110() => imageManager.BuildImagesAsync([servicea.Resource, serviceb.Resource], cts.Token));
2145() => imageManager.BuildImagesAsync([servicea.Resource], cts.Token));
2180() => imageBuilder.BuildImageAsync(container.Resource, cts.Token));
ResourceCommandServiceTests.cs (24)
83var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "NotFound");
103var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "NotFound");
124var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "NotFound");
161var resolvedResourceNames = custom.Resource.GetResolvedResourceNames().ToList();
193var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
199var resolvedResourceNames = custom.Resource.GetResolvedResourceNames().ToList();
232var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
237var resourceNames = custom.Resource.GetResolvedResourceNames();
267var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
297var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
335var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
341var resourceNames = custom.Resource.GetResolvedResourceNames();
378var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
401var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
423var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "resource-start");
465var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, legacyCommandName);
483var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "generate-token");
504var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "mycommand");
599custom.Resource,
639custom.Resource,
1729var result = await app.ResourceCommands.ExecuteCommandAsync(custom.Resource, "generate-token");
1755await resourceNotificationService.WaitForResourceAsync(project.Resource.Name, e => KnownResourceStates.BuildableStates.Contains(e.Snapshot.State?.Text), cts.Token).DefaultTimeout(TimeSpan.FromMinutes(2));
1758var result = await app.ResourceCommands.ExecuteCommandAsync(project.Resource, KnownResourceCommands.RebuildCommand).DefaultTimeout(TimeSpan.FromMinutes(2));
1767var secondResult = await app.ResourceCommands.ExecuteCommandAsync(project.Resource, KnownResourceCommands.RebuildCommand).DefaultTimeout(TimeSpan.FromMinutes(2));
ResourceDependencyTests.cs (172)
24var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
26Assert.Contains(redis.Resource, dependencies);
41var dependencies = await frontend.Resource.GetResourceDependenciesAsync(executionContext);
43Assert.Contains(api.Resource, dependencies);
58var dependencies = await frontend.Resource.GetResourceDependenciesAsync(executionContext);
60Assert.Contains(api.Resource, dependencies);
97var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
99Assert.Contains(host.Resource, dependencies);
100Assert.DoesNotContain(nonHost.Resource, dependencies);
115var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
117Assert.Contains(db.Resource, dependencies);
118Assert.Contains(postgres.Resource, dependencies); // Parent of db
128.WithConnectionStringRedirection(redis.Resource);
134var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
136Assert.Contains(redirect.Resource, dependencies);
137Assert.Contains(redis.Resource, dependencies); // The redirect target
149var dependencies = await db.Resource.GetResourceDependenciesAsync(executionContext);
151Assert.Contains(postgres.Resource, dependencies);
164var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
166Assert.Contains(redis.Resource, dependencies);
179var dependencies = await mainContainer.Resource.GetResourceDependenciesAsync(executionContext);
181Assert.Contains(initContainer.Resource, dependencies);
194var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
196Assert.Contains(param.Resource, dependencies);
209var dependencies = await exe.Resource.GetResourceDependenciesAsync(executionContext);
211Assert.Contains(param.Resource, dependencies);
226var dependencies = await executable.Resource.GetResourceDependenciesAsync(
234Assert.Collection(dependencies, dependency => Assert.Same(param.Resource, dependency));
248context.EnvironmentVariables["CONFIG"] = param.Resource;
260var beforePriming = await executable.Resource.GetResourceDependenciesAsync(executionContext, peekOptions);
265var annotation = executable.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>().Single();
267new EnvironmentCallbackContext(executionContext, executable.Resource, new Dictionary<string, object>()));
271var afterPriming = await executable.Resource.GetResourceDependenciesAsync(executionContext, peekOptions);
273Assert.Contains(param.Resource, afterPriming);
288var dependencies = await executable.Resource.GetResourceDependenciesAsync(
292Assert.Collection(dependencies, dependency => Assert.Same(active.Resource, dependency));
305var dependencies = await container.Resource.GetResourceDependenciesAsync(
325var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
327Assert.Contains(host.Resource, dependencies);
328Assert.Contains(port.Resource, dependencies);
329Assert.Contains(password.Resource, dependencies);
345var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
347Assert.Contains(b.Resource, dependencies);
348Assert.Contains(c.Resource, dependencies);
364var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
366Assert.Contains(b.Resource, dependencies);
367Assert.Contains(c.Resource, dependencies);
385var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
387Assert.Contains(b.Resource, dependencies);
388Assert.Contains(c.Resource, dependencies);
405var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
407Assert.Contains(b.Resource, dependencies);
408Assert.Contains(c.Resource, dependencies);
409Assert.Contains(d.Resource, dependencies);
426var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
428Assert.Contains(b.Resource, dependencies);
429Assert.Contains(c.Resource, dependencies);
430Assert.Contains(d.Resource, dependencies);
431Assert.Contains(e.Resource, dependencies);
449var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
450Assert.Contains(b.Resource, dependencies);
451Assert.Contains(c.Resource, dependencies);
452Assert.Contains(d.Resource, dependencies);
470var dependencies = await frontend.Resource.GetResourceDependenciesAsync(executionContext);
472Assert.Contains(backend.Resource, dependencies);
488var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
490Assert.Contains(db.Resource, dependencies);
491Assert.Contains(postgres.Resource, dependencies); // Parent included due to transitive dependency
505var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
507Assert.DoesNotContain(unrelatedResource.Resource, dependencies);
518var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
520Assert.DoesNotContain(container.Resource, dependencies);
534var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
536Assert.DoesNotContain(dependentContainer.Resource, dependencies);
549var dependencies = await db1.Resource.GetResourceDependenciesAsync(executionContext);
551Assert.DoesNotContain(db2.Resource, dependencies);
552Assert.Contains(postgres.Resource, dependencies); // Parent IS included
567var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
569Assert.Contains(b.Resource, dependencies);
570Assert.DoesNotContain(c.Resource, dependencies);
571Assert.DoesNotContain(d.Resource, dependencies);
582var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
598var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
600Assert.Contains(redis.Resource, dependencies);
618var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
620Assert.Contains(b.Resource, dependencies);
621Assert.DoesNotContain(c.Resource, dependencies);
638var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.Recursive);
640Assert.Contains(b.Resource, dependencies);
641Assert.Contains(c.Resource, dependencies);
664var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
667Assert.Contains(b.Resource, dependencies);
682var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
686Assert.Contains(db.Resource, dependencies);
687Assert.Contains(postgres.Resource, dependencies);
707var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
710Assert.Contains(b.Resource, dependencies);
712Assert.DoesNotContain(c.Resource, dependencies);
731var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
733Assert.Contains(b.Resource, dependencies);
734Assert.Contains(c.Resource, dependencies);
754[a.Resource, b.Resource], executionContext);
756Assert.Contains(x.Resource, dependencies);
757Assert.Contains(y.Resource, dependencies);
774[a.Resource, b.Resource], executionContext);
776Assert.Contains(x.Resource, dependencies);
793[a.Resource, b.Resource], executionContext);
796Assert.DoesNotContain(a.Resource, dependencies);
797Assert.DoesNotContain(b.Resource, dependencies);
816[a.Resource, b.Resource], executionContext);
819Assert.Contains(c.Resource, dependencies);
821Assert.DoesNotContain(a.Resource, dependencies);
822Assert.DoesNotContain(b.Resource, dependencies);
846[a.Resource, b.Resource, c.Resource], executionContext);
872[a.Resource, c.Resource], executionContext);
874Assert.Contains(b.Resource, dependencies);
875Assert.Contains(d.Resource, dependencies);
876Assert.DoesNotContain(a.Resource, dependencies);
877Assert.DoesNotContain(c.Resource, dependencies);
903[a.Resource, d.Resource], executionContext, new ResourceDependencyDiscoveryOptions
909Assert.Contains(b.Resource, dependencies);
910Assert.Contains(e.Resource, dependencies);
911Assert.DoesNotContain(c.Resource, dependencies);
912Assert.DoesNotContain(f.Resource, dependencies);
938[a.Resource, b.Resource, c.Resource], executionContext);
941Assert.Contains(d.Resource, dependencies);
942Assert.DoesNotContain(a.Resource, dependencies);
943Assert.DoesNotContain(b.Resource, dependencies);
944Assert.DoesNotContain(c.Resource, dependencies);
961[parent.Resource, child.Resource], executionContext);
964Assert.DoesNotContain(parent.Resource, dependencies);
965Assert.DoesNotContain(child.Resource, dependencies);
989[a.Resource, b.Resource, c.Resource], executionContext);
991Assert.Contains(x.Resource, dependencies);
992Assert.Contains(y.Resource, dependencies);
993Assert.Contains(z.Resource, dependencies);
1013var singleDeps = await a.Resource.GetResourceDependenciesAsync(executionContext);
1014var multiDeps = await ResourceExtensions.GetDependenciesAsync([a.Resource], executionContext);
1034enableTls.Resource,
1043var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
1045Assert.Contains(enableTls.Resource, dependencies);
1046Assert.Contains(tlsSuffix.Resource, dependencies);
1061flag.Resource,
1070var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
1072Assert.Contains(flag.Resource, dependencies);
1073Assert.Contains(primary.Resource, dependencies);
1074Assert.Contains(secondary.Resource, dependencies);
1089innerFlag.Resource,
1095outerFlag.Resource,
1104var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
1106Assert.Contains(outerFlag.Resource, dependencies);
1107Assert.Contains(innerFlag.Resource, dependencies);
1108Assert.Contains(paramA.Resource, dependencies);
1109Assert.Contains(paramB.Resource, dependencies);
1110Assert.Contains(paramC.Resource, dependencies);
1122flag.Resource,
1132var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
1135Assert.Contains(flag.Resource, dependencies);
1136Assert.Contains(param.Resource, dependencies);
ResourceExtensionsTests.cs (56)
43Assert.False(parent.Resource.HasAnnotationOfType<DummyAnnotation>());
44Assert.False(parent.Resource.TryGetAnnotationsOfType<DummyAnnotation>(out var annotations));
55Assert.False(parent.Resource.HasAnnotationOfType<DummyAnnotation>());
56Assert.False(parent.Resource.TryGetAnnotationsOfType<DummyAnnotation>(out var annotations));
67Assert.True(parent.Resource.HasAnnotationOfType<DummyAnnotation>());
68Assert.True(parent.Resource.TryGetAnnotationsOfType<DummyAnnotation>(out var annotations));
79Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
80Assert.True(parent.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
90Assert.False(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
91Assert.False(parent.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
102Assert.False(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
103Assert.False(parent.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
114var child = builder.AddResource(new ChildResource("child", parent.Resource))
117Assert.False(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
118Assert.False(child.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
129var child = builder.AddResource(new ChildResource("child", parent.Resource));
131Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
132Assert.True(child.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
143var child = builder.AddResource(new ChildResource("child", parent.Resource))
146Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
147Assert.True(child.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
158var child = builder.AddResource(new ChildResource("child", parent: parent.Resource))
161var grandchild = builder.AddResource(new ChildResource("grandchild", parent: child.Resource))
164Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
165Assert.True(grandchild.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
178.WithAnnotation(new DeploymentTargetAnnotation(deploymentTarget.Resource)
180ComputeEnvironment = annotationEnvironment.Resource
183var annotation = resource.Resource.GetDeploymentTargetAnnotation(requestedEnvironment.Resource);
194Assert.True(container.Resource.TryGetContainerImageName(out var imageName));
204Assert.True(container.Resource.TryGetContainerImageName(out var imageName));
223var env = await container.Resource.GetEnvironmentVariableValuesAsync().DefaultTimeout();
258var env = await container.Resource.GetEnvironmentVariableValuesAsync().DefaultTimeout();
293var env = await container.Resource.GetEnvironmentVariableValuesAsync(DistributedApplicationOperation.Publish).DefaultTimeout();
327.Resource.GetArgumentValuesAsync().DefaultTimeout();
339.Resource.GetArgumentValuesAsync().DefaultTimeout();
357var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
366Resource = containerResource.Resource,
404var annotations = containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>().ToList();
414Resource = containerResource.Resource,
434Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
440Assert.Single(projectResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
444Assert.Single(executableResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
461var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
471Resource = containerResource.Resource,
488var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
500var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
512Assert.Collection(resource.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>(),
520var annotation = Assert.Single(resource.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>());
524Assert.Collection(resource.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>(),
542var annotation = Assert.Single(resource.Resource.Annotations.OfType<ContainerFileSystemCallbackAnnotation>());
618var result = resource.Resource.TryGetInstances(out var instances);
634var result = resource.Resource.TryGetInstances(out var instances);
655var result = resource.Resource.GetResolvedResourceNames();
670var result = resource.Resource.GetResolvedResourceNames();
684var endpoint = Assert.Single(resource.Resource.ResolveEndpoints());
WaitForTests.cs (67)
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);
66var childResourceBuilder = builder.AddResource(new CustomChildResource("child", parentResourceBuilder.Resource));
108await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
110await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
139await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
141await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
176await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
181await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
217await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
219await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
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);
330await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
335await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, waitingStateCts.Token);
362await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
364await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
369await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
372await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
377await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
409await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
411await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
416await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
419await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
424await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
454await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
459await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
469await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, runningStateCts.Token);
501await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, "Waiting", waitingStateCts.Token);
506await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
516await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, runningStateCts.Token);
556await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, "Waiting", waitingStateCts.Token);
561await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
572await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, runningStateCts.Token);
610await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
615await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
624await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.FailedToStart, runningStateCts.Token);
661await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
664await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, "test0", s => s with
669await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
672await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, "test1", s => s with
677await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
714await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
717await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, "test0", s => s with
722await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
725await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, "test1", s => s with
730await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
763await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
766await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
771await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, waitingStateCts.Token);
783var childResource = builder.AddResource(new CustomChildResource("child", parentResource.Resource));
787Assert.True(containerResource.Resource.TryGetAnnotationsOfType<WaitAnnotation>(out var waitAnnotations));
790a => Assert.Equal(a.Resource, parentResource.Resource),
791a => Assert.Equal(a.Resource, childResource.Resource)
794Assert.True(containerResource.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationshipAnnotations));
797Assert.Equal(childResource.Resource, relationshipAnnotation.Resource);
809Assert.True(resource.Resource.TryGetAnnotationsOfType<WaitAnnotation>(out var waitAnnotations));
812Assert.Equal(dependency.Resource, waitAnnotation.Resource);
825Assert.True(resource.Resource.TryGetAnnotationsOfType<WaitAnnotation>(out var waitAnnotations));
828Assert.Equal(dependency.Resource, waitAnnotation.Resource);
875await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Waiting, waitingStateCts.Token);
878await app.ResourceNotifications.PublishUpdateAsync(dependency.Resource, s => s with
885await app.ResourceNotifications.WaitForResourceAsync(nginx.Resource.Name, KnownResourceStates.Running, runningStateCts.Token);
WithEnvironmentTests.cs (37)
41container.Resource,
70.WithEnvironment("HOST", $"{test.Resource};name=1");
72var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(containerB.Resource).DefaultTimeout();
73var manifestConfig = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(containerB.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
87Assert.True(containerB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
92Assert.Same(container.Resource, r.Resource);
97Assert.Same(test.Resource, r.Resource);
118Assert.True(containerB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
123Assert.Same(container.Resource, r.Resource);
151var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(containerB.Resource).DefaultTimeout();
175var runConfig = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(targetBuilder.Resource, DistributedApplicationOperation.Run).DefaultTimeout();
181var publishConfig = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(targetBuilder.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
186Assert.True(targetBuilder.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
191Assert.Same(sourceBuilder.Resource, r.Resource);
218var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
222Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
227Assert.Same(projectA.Resource, r.Resource);
239var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
255var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
271var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
288var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
292Assert.True(projectA.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
297Assert.Same(parameter.Resource, r.Resource);
311var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource,
328projectA.Resource,
354var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
378var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
394projectA.Resource,
402projectA.Resource,
415var testValue = new TestValueWithReferences("test-value", resourceA.Resource);
421Assert.True(projectA.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
424Assert.Same(resourceA.Resource, relationship.Resource);
428projectA.Resource,
475projectA.Resource,
483projectA.Resource,
490Assert.True(projectA.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
493Assert.Same(container.Resource, relationship.Resource);
WithHttpCommandTests.cs (49)
143await MoveResourceToRunningStateAsync(app, service.Resource);
145var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
205var command = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().FirstOrDefault();
211Assert.Equal($"{resourceBuilder.Resource.Name}-http-http-post-/some-path", command.Name);
238var command = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().FirstOrDefault();
279var command = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().Single();
315var command = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().Single();
375await MoveResourceToRunningStateAsync(app, service.Resource);
387var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand", arguments).DefaultTimeout();
414var commands = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().ToList();
455await MoveResourceToRunningStateAsync(app, service.Resource);
457var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
480await MoveResourceToRunningStateAsync(app, service.Resource);
482var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand", cts.Token).DefaultTimeout();
512await MoveResourceToRunningStateAsync(app, service.Resource);
514var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
547await MoveResourceToRunningStateAsync(app, service.Resource);
549var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
627await app.ResourceNotifications.PublishUpdateAsync(serviceA.Resource, s => s with
631await app.ResourceNotifications.WaitForResourceAsync(serviceA.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
634await MoveResourceToRunningStateAsync(app, serviceB.Resource);
636var result = await app.ResourceCommands.ExecuteCommandAsync(serviceB.Resource, "mycommand").DefaultTimeout();
664Assert.Equal(service.Resource.Name, requestContext.ResourceName);
678await MoveResourceToRunningStateAsync(app, service.Resource);
680var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
708Assert.Equal(service.Resource.Name, resultContext.ResourceName);
722await MoveResourceToRunningStateAsync(app, service.Resource);
724var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
776await MoveResourceToRunningStateAsync(app, service.Resource);
788var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand", arguments).DefaultTimeout();
815await MoveResourceToRunningStateAsync(app, service.Resource);
817var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
841await MoveResourceToRunningStateAsync(app, service.Resource);
843var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
868await MoveResourceToRunningStateAsync(app, service.Resource);
870var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
896await MoveResourceToRunningStateAsync(app, service.Resource);
898var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
923await MoveResourceToRunningStateAsync(app, service.Resource);
925var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
950await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
956service.Resource.Name,
962await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
969service.Resource.Name,
1005await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
1012service.Resource.Name,
1020await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
1027service.Resource.Name,
1082var endpointAnnotation = service.Resource.Annotations.OfType<EndpointAnnotation>().Single();
WithOtlpExporterTests.cs (23)
46container.Resource,
72container.Resource,
92container.Resource,
97var annotation = Assert.Single(container.Resource.Annotations.OfType<OtlpExporterAnnotation>());
114container.Resource,
137container.Resource,
158dashboard.Resource.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: endpointName, uriScheme: "http", port: 18889, isProxied: true, transport: transport));
174var annotation = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == endpointName);
178container.Resource,
195dashboard.Resource.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: KnownEndpointNames.OtlpGrpcEndpointName, uriScheme: "http", port: 18889, isProxied: true, transport: "http2"));
196dashboard.Resource.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: KnownEndpointNames.OtlpHttpEndpointName, uriScheme: "http", port: 18890, isProxied: true));
204var grpcAnnotation = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == KnownEndpointNames.OtlpGrpcEndpointName);
207var httpAnnotation = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == KnownEndpointNames.OtlpHttpEndpointName);
211container.Resource,
234container.Resource,
250dashboard.Resource.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: KnownEndpointNames.OtlpGrpcEndpointName, uriScheme: "http", port: 18889, isProxied: true, transport: "http2"));
259var grpcAnnotation = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == KnownEndpointNames.OtlpGrpcEndpointName);
263executable.Resource,
280dashboard.Resource.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: KnownEndpointNames.OtlpGrpcEndpointName, uriScheme: "http", port: 18889, isProxied: true, transport: "http2"));
294var collectorEndpoint = collector.Resource.GetEndpoint("otlp-grpc");
316var dashboardAnnotation = dashboard.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == KnownEndpointNames.OtlpGrpcEndpointName);
319var collectorAnnotation = collector.Resource.Annotations.OfType<EndpointAnnotation>().Single(e => e.Name == "otlp-grpc");
327container.Resource,
WithProcessCommandTests.cs (47)
71var command = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().Single();
111var command = resource.Resource.Annotations.OfType<ResourceCommandAnnotation>().Single();
124var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "export-command").DefaultTimeout();
190var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "options-callback-command", arguments).DefaultTimeout();
251var command = resource.Resource.Annotations.OfType<ResourceCommandAnnotation>().Single();
269var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "factory-command", arguments).DefaultTimeout();
276Assert.Equal(resource.Resource.Name, capturedContext.ResourceName);
313var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "factory-accepted-exit-code").DefaultTimeout();
334var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "null-process-spec").DefaultTimeout();
384var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "echo-argument", arguments).DefaultTimeout();
390Assert.Equal(resource.Resource.Name, capturedContext.ResourceName);
444ResourceName = resource.Resource.Name,
488var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "async-factory").DefaultTimeout();
522var firstResult = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "repeat").DefaultTimeout();
523var secondResult = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "repeat").DefaultTimeout();
566var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "many-lines").DefaultTimeout();
599var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "display-immediately").DefaultTimeout();
623var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "no-output").DefaultTimeout();
645var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "fail-no-output").DefaultTimeout();
673var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "accepted-exit-code").DefaultTimeout();
711var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "failure-display-immediately").DefaultTimeout();
735var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "log-output").DefaultTimeout();
742var logs = await ConsoleLoggingTestHelpers.WatchForLogsAsync(loggerService, 4, resource.Resource).DefaultTimeout();
791var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "custom-result").DefaultTimeout();
800Assert.Equal(resource.Resource.Name, capturedContext.ResourceName);
833var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "ordered-output").DefaultTimeout();
862var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "fail").DefaultTimeout();
898var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "argument-fidelity").DefaultTimeout();
922var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "stdin").DefaultTimeout();
945var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "path-executable").DefaultTimeout();
969var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "working-directory").DefaultTimeout();
997var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "environment").DefaultTimeout();
1023var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "invalid-environment-name").DefaultTimeout();
1049var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "null-environment-value").DefaultTimeout();
1087var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "export-options").DefaultTimeout();
1125var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "export-accepted-exit-code").DefaultTimeout();
1150var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "export-default-options").DefaultTimeout();
1213var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, $"invalid-export-{i}").DefaultTimeout();
1260var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "default-success-exit-codes").DefaultTimeout();
1284var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "environment-inheritance").DefaultTimeout();
1307var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "missing").DefaultTimeout();
1331var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "process-task-failure").DefaultTimeout();
1354var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "null-process-spec").DefaultTimeout();
1380var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "factory-exception").DefaultTimeout();
1404var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "null-argument").DefaultTimeout();
1442var result = await app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "validation-failure").DefaultTimeout();
1472var commandTask = app.ResourceCommands.ExecuteCommandAsync(resource.Resource, "wait", cts.Token);
WithReferenceTests.cs (68)
36var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(executable.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
61var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(executable.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
88var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(executable.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
113var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
140var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
201project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
224consumer.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
239var endpoint = container.Resource.Annotations.OfType<EndpointAnnotation>().Single();
252var endpoint = container.Resource.Annotations.OfType<EndpointAnnotation>().Single();
297var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
302Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
305Assert.Same(projectA.Resource, r.Resource);
320var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
340var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
370var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
419var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
447var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
473var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
481Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
484Assert.Same(projectA.Resource, r.Resource);
502var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
510Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
513Assert.Same(projectA.Resource, r.Resource);
532var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
554var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
573await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
590var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
609await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
629var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
645var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
661var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
680var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
710var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
716Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
719Assert.Same(resource.Resource, r.Resource);
720Assert.True(resource.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var csRelationships));
725Assert.Same(endpoint.Resource, r.Resource);
730Assert.Same(key.Resource, r.Resource);
735Assert.Same(endpoint.Resource, r.Resource);
740Assert.Same(key.Resource, r.Resource);
762var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
784var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
808var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
825var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
848var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
877var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
900var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
922var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
945var context = new EnvironmentCallbackContext(builder.ExecutionContext, project.Resource);
946foreach (var callback in project.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>())
952Assert.Same(resource.Resource, reference.Resource);
956project.Resource,
986.WithEnvironment("ConnectionStrings__my-db", new ConnectionStringReference(standalone.Resource, optional: false))
990project.Resource,
1030var context = new EnvironmentCallbackContext(builder.ExecutionContext, project.Resource);
1033foreach (var callback in project.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>())
1056var context = new EnvironmentCallbackContext(builder.ExecutionContext, project.Resource);
1059foreach (var callback in project.Resource.Annotations.OfType<EnvironmentCallbackAnnotation>())
1085project.Resource,
1108project.Resource,
1137resource.Resource.ConnectionString = "Host=after";
1141project.Resource,
1189var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
1219var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
1249var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
1270var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
1290var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
1310var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
WithUrlsTests.cs (46)
120if (notification.Resource == custom.Resource && notification.Snapshot.Urls.Length > 0)
136await rns.WaitForResourceAsync(custom.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
196var callback = Assert.Single(surrogateBuilder.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>());
221managed.Resource,
224var callback = Assert.Single(managed.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>());
229Assert.Same(manager.Resource, managementUrl.Endpoint?.Resource);
258var urlsCallback = projectA.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>()
271Assert.Empty(projectA.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>());
275Assert.NotEmpty(projectA.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>());
383var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
407var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
422projectA.WithUrl($"{projectA.Resource.GetEndpoint("https")}/test", "Example")
433var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
461var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
494var urls = projectB.Resource.Annotations.OfType<ResourceUrlAnnotation>();
498Assert.StartsWith($"http://{projectB.Resource.Name.ToLowerInvariant()}{expectedHostSuffix}", u.Url);
537var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
560var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
590var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
608var httpEndpoint = servicea.Resource.GetEndpoint("http");
617servicea.Resource.Name,
631var httpEndpoint = servicea.Resource.GetEndpoint("http");
642servicea.Resource.Name,
675servicea.Resource.Name,
709if (notification.Resource == servicea.Resource && notification.Snapshot.Urls.Length > 0)
725await rns.WaitForResourceAsync(servicea.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
878var allUrls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
939var endpointUrl = project.Resource.Annotations.OfType<ResourceUrlAnnotation>().FirstOrDefault(u => u.Endpoint?.EndpointName == "test");
978var launchProfileUrls = project.Resource.Annotations.OfType<ResourceUrlAnnotation>().Where(u => u.Endpoint?.EndpointName == "http");
1019var endpointUrl = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>().FirstOrDefault(u => u.Endpoint?.EndpointName == "test" && u.Url.EndsWith("/sub-path"));
1036Assert.Same(manager.Resource, url.Endpoint?.Resource);
1052var url = Assert.Single(managed.Resource.Annotations.OfType<ResourceUrlAnnotation>(), u => u.DisplayText == "Manage");
1053Assert.Same(manager.Resource, url.Endpoint?.Resource);
1081var endpointUrl = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>().FirstOrDefault(u => u.Endpoint?.EndpointName == "test" && u.Url.EndsWith("/sub-path"));
1107Endpoint = resourceA.Resource.GetEndpoint("api")
1118resourceB.Resource.Name,
1120&& e.Snapshot.Urls.Length == resourceB.Resource.GetEndpoints().ToArray().Length + 1
1123using var resourceAClient = app.CreateHttpClientWithResilience(resourceA.Resource.Name, "api");
1124using var resourceBClient = app.CreateHttpClientWithResilience(resourceB.Resource.Name, "http");
1159Endpoint = resourceA.Resource.GetEndpoint("api")
1170resourceB.Resource.Name,
1179var startResult = await app.ResourceCommands.ExecuteCommandAsync(resourceA.Resource, KnownResourceCommands.StartCommand).DefaultTimeout(TestConstants.DefaultOrchestratorTestTimeout);
1181using var resourceAClient = app.CreateHttpClientWithResilience(resourceA.Resource.Name, "api");
1185resourceB.Resource.Name,
1190var stopResult = await app.ResourceCommands.ExecuteCommandAsync(resourceA.Resource, KnownResourceCommands.StopCommand).DefaultTimeout(TestConstants.DefaultOrchestratorTestTimeout);
1194resourceB.Resource.Name,
WithVolumeTests.cs (16)
36container.Resource,
42var mount = Assert.Single(container.Resource.Annotations.OfType<ContainerMountAnnotation>());
70var mount = Assert.Single(container.Resource.Annotations.OfType<ContainerMountAnnotation>());
85executable.Resource,
129executable.Resource,
168var expectedPath = VolumeMountPathResolver.GetLocalPath(store, custom.Resource, "data");
171custom.Resource,
211var expectedProjectPath = VolumeMountPathResolver.GetLocalPath(store, project.Resource, "data");
212var expectedExecutablePath = VolumeMountPathResolver.GetLocalPath(store, executable.Resource, "data");
218project.Resource,
221executable.Resource,
241project.Resource,
245executable.Resource,
279project.Resource,
300project.Resource,
318project.Resource,
Aspire.Hosting.TestUtilities (5)
Aspire.Hosting.Valkey (2)
Aspire.Hosting.Valkey.Tests (32)
Aspire.Hosting.Yarp (12)
Aspire.Hosting.Yarp.Tests (39)
AddYarpTests.cs (28)
54var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Run, testProvider);
77var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
103YarpEnvConfigGenerator.PopulateEnvVariables(env, yarp.Resource.Routes, yarp.Resource.Clusters);
126var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Run, testProvider);
148var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, testProvider);
173var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Run, testProvider);
188var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
202var annotation = Assert.Single(yarp.Resource.Annotations.OfType<ContainerFileSystemCallbackAnnotation>());
214var annotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
227var annotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
232Resource = yarp.Resource,
260Assert.Empty(yarp.Resource.Annotations.OfType<ContainerFilesDestinationAnnotation>());
261Assert.Empty(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
278var containerFilesAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<ContainerFilesDestinationAnnotation>());
279Assert.Equal(sourceContainer.Resource, containerFilesAnnotation.Source);
283var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
288Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
305var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
312Resource = yarp.Resource,
335var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
343Resource = yarp.Resource,
368var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
375Resource = yarp.Resource,
406var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
413Resource = yarp.Resource,
446var httpsEndpoint = Assert.Single(yarp.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "https");
471Assert.DoesNotContain(yarp.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "https");
Aspire.Playground.Tests (1)
AzureKusto.AppHost (2)
BicepSample.AppHost (1)
DotnetTool.AppHost (2)
FoundryEndToEnd.AppHost (1)
KafkaBasic.AppHost (2)
ParameterEndToEnd.AppHost (1)
Pipelines.AppHost (1)
Stress.AppHost (9)
Terminals.AppHost (7)
Testing.Tests (17)
WaitFailures.cs (17)
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);
206await app.ResourceNotifications.WaitForDependenciesAsync(consumer.Resource, cts.Token);
228await app.ResourceNotifications.WaitForResourceAsync(dependency.Resource.Name, cancellationToken: cts.Token);
232await app.ResourceNotifications.WaitForDependenciesAsync(consumer.Resource, cts.Token);
252await app.ResourceNotifications.WaitForResourceAsync(dependency.Resource.Name, cancellationToken: cts.Token);
256await app.ResourceNotifications.WaitForDependenciesAsync(consumer.Resource, cancellationToken: cts.Token);
WebPubSub.AppHost (1)