1 implementation of Resource
Aspire.Hosting (1)
3542 references to Resource
Aspire.Hosting (215)
ResourceBuilderExtensions.cs (109)
191builder.WithReferenceRelationship(externalService.Resource);
193if (externalService.Resource.Uri is not null)
195builder.WithEnvironment(name, externalService.Resource.Uri.ToString());
197else if (externalService.Resource.UrlParameter is not null)
204var url = await externalService.Resource.UrlParameter.GetValueAsync(context.CancellationToken).ConfigureAwait(false);
207throw new DistributedApplicationException($"The URL parameter '{externalService.Resource.UrlParameter.Name}' for the external service '{externalService.Resource.Name}' is invalid: {message}");
211context.EnvironmentVariables[name] = externalService.Resource.UrlParameter;
232builder.WithReferenceRelationship(parameter.Resource);
236context.EnvironmentVariables[name] = parameter.Resource;
258builder.WithReferenceRelationship(resource.Resource);
262context.EnvironmentVariables[envVarName] = new ConnectionStringReference(resource.Resource, optional: false);
553var resource = source.Resource;
559builder.Resource.TryGetLastAnnotation<ReferenceEnvironmentInjectionAnnotation>(out var injectionAnnotation);
638ApplyEndpoints(builder, source.Resource);
658ApplyEndpoints(builder, source.Resource, endpointName: null, name);
700builder.Resource.TryGetLastAnnotation<ReferenceEnvironmentInjectionAnnotation>(out var injectionAnnotation);
730builder.WithReferenceRelationship(externalService.Resource);
733builder.Resource.TryGetLastAnnotation<ReferenceEnvironmentInjectionAnnotation>(out var injectionAnnotation);
736if (externalService.Resource.Uri is { } uri)
740var encodedResourceName = EnvironmentVariableNameEncoder.Encode(externalService.Resource.Name);
746var envVarName = $"services__{externalService.Resource.Name}__{uri.Scheme}__0";
750else if (externalService.Resource.UrlParameter is not null)
756var encodedResourceName = EnvironmentVariableNameEncoder.Encode(externalService.Resource.Name);
761discoveryEnvVarName = $"services__{externalService.Resource.Name}__default__0";
764else if (ExternalServiceResource.UrlIsValidForExternalService(await externalService.Resource.UrlParameter.GetValueAsync(context.CancellationToken).ConfigureAwait(false), out var uri, out var message))
766discoveryEnvVarName = $"services__{externalService.Resource.Name}__{uri.Scheme}__0";
772throw new DistributedApplicationException($"The URL parameter '{externalService.Resource.UrlParameter.Name}' for the external service '{externalService.Resource.Name}' is invalid: {message}");
777context.EnvironmentVariables[discoveryEnvVarName] = externalService.Resource.UrlParameter;
782context.EnvironmentVariables[endpointEnvVarName] = externalService.Resource.UrlParameter;
816var endpointReferenceAnnotation = builder.Resource.Annotations
824if (builder.Resource.IsContainer())
884var endpoint = builder.Resource.Annotations
902builder.Resource.Annotations.Add(endpoint);
948if (builder.Resource.Annotations.OfType<EndpointAnnotation>().Any(sb => string.Equals(sb.Name, annotation.Name, StringComparisons.EndpointAnnotationName)))
954if (env is not null && builder.Resource is IResourceWithEndpoints resourceWithEndpoints and IResourceWithEnvironment)
1042if (!builder.Resource.TryGetAnnotationsOfType<EndpointAnnotation>(out var endpoints))
1071return builder.Resource.GetEndpoint(name, contextNetworkID);
1087return builder.Resource.GetEndpoint(name);
1344context.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);
1392context.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);
1422Source = source.Resource,
1459builder.Resource.Annotations
1462.ForEach(w => builder.Resource.Annotations.Remove(w));
1560if (builder.Resource as IResource == dependency.Resource)
1562throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for itself.");
1565if (builder.Resource is IResourceWithParent resourceWithParent && resourceWithParent.Parent == dependency.Resource)
1567throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for its parent '{dependency.Resource.Name}'.");
1570if (dependency.Resource is IResourceWithParent dependencyResourceWithParent)
1583builder.WithRelationship(dependency.Resource, KnownRelationshipTypes.WaitFor);
1586return builder.WithAnnotation(new WaitAnnotation(dependency.Resource, WaitType.WaitUntilHealthy) { WaitBehavior = waitBehavior });
1664if (builder.Resource as IResource == dependency.Resource)
1666throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for itself.");
1669if (builder.Resource is IResourceWithParent resourceWithParent && resourceWithParent.Parent == dependency.Resource)
1671throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for its parent '{dependency.Resource.Name}'.");
1674if (dependency.Resource is IResourceWithParent dependencyResourceWithParent)
1686if (dependency.Resource is ConnectionStringResource cs)
1697builder.WithRelationship(dependency.Resource, KnownRelationshipTypes.WaitFor);
1700return builder.WithAnnotation(new WaitAnnotation(dependency.Resource, WaitType.WaitUntilStarted) { WaitBehavior = waitBehavior });
1762if (builder.Resource as IResource == dependency.Resource)
1764throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for itself.");
1767if (builder.Resource is IResourceWithParent resourceWithParent && resourceWithParent.Parent == dependency.Resource)
1769throw new DistributedApplicationException($"The '{builder.Resource.Name}' resource cannot wait for its parent '{dependency.Resource.Name}'.");
1772builder.WithRelationship(dependency.Resource, KnownRelationshipTypes.WaitFor);
1774return builder.WithAnnotation(new WaitAnnotation(dependency.Resource, WaitType.WaitForCompletion, exitCode));
1819if (builder.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var annotations) && annotations.Any(a => a.Key == key))
1821throw new DistributedApplicationException($"Resource '{builder.Resource.Name}' already has a health check with key '{key}'.");
1904?? throw new DistributedApplicationException($"Could not create HTTP health check for resource '{builder.Resource.Name}' as the endpoint selector returned null.");
1908throw 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.");
1920throw new DistributedApplicationException($"The endpoint '{endpointName}' does not exist on the resource '{builder.Resource.Name}'.");
1934var healthCheckKey = $"{builder.Resource.Name}_{endpointName}_{path}_{statusCode}_check";
2025var existingAnnotation = builder.Resource.Annotations.OfType<ResourceCommandAnnotation>().SingleOrDefault(a => a.Name == name);
2028builder.Resource.Annotations.Remove(existingAnnotation);
2090var existingAnnotation = builder.Resource.Annotations.OfType<ResourceCommandAnnotation>().SingleOrDefault(a => a.Name == name);
2093builder.Resource.Annotations.Remove(existingAnnotation);
2257?? throw new DistributedApplicationException($"Could not create HTTP command for resource '{builder.Resource.Name}' as the endpoint selector returned null.");
2261throw 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.");
2365CertificateAuthorityCollections = { certificateAuthorityCollection.Resource },
2367if (builder.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var existingAnnotation))
2371if (existingCollection != certificateAuthorityCollection.Resource)
2422if (builder.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var existingAnnotation))
2470if (builder.Resource.TryGetLastAnnotation<CertificateAuthorityCollectionAnnotation>(out var existingAnnotation))
2542Password = password?.Resource,
2576Password = password?.Resource,
2679var resource = builder.Resource;
2726var endpoints = builder.Resource.GetEndpoints();
2736throw 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.");
2744throw new DistributedApplicationException($"Could not create {errorDisplayNoun} for resource '{builder.Resource.Name}' as no endpoint was found matching one of the specified names: {endpointNamesString}");
2752var endpoints = builder.Resource.GetEndpoints();
2764throw new DistributedApplicationException($"Could not create HTTP command for resource '{builder.Resource.Name}' as it has no HTTP endpoints.");
2861AddReference(resourceBuilder.Resource);
2892return builder.WithAnnotation(new ResourceRelationshipAnnotation(resourceBuilder.Resource, KnownRelationshipTypes.Reference));
2923return builder.WithParentRelationship(parent.Resource);
2984child.WithRelationship(builder.Resource, KnownRelationshipTypes.Parent);
3071builder.WithAnnotation(new ComputeEnvironmentAnnotation(computeEnvironmentResource.Resource));
3098if (resourceWithArgs.Resource.SupportsDebugging(builder.ApplicationBuilder.Configuration, out _) && argsCallback is not null)
3191var endpoint = endpointSelector() ?? throw new DistributedApplicationException($"Could not create HTTP probe for resource '{builder.Resource.Name}' as the endpoint selector returned null.");
3220if (builder.Resource.Annotations.OfType<ProbeAnnotation>().SingleOrDefault(a => a.Type == probeAnnotation.Type) is { } existingAnnotation)
3222builder.Resource.Annotations.Remove(existingAnnotation);
Aspire.Hosting.Azure (30)
Aspire.Hosting.Azure.AIFoundry (7)
Aspire.Hosting.Azure.AppConfiguration (3)
Aspire.Hosting.Azure.AppContainers (5)
Aspire.Hosting.Azure.ApplicationInsights (1)
Aspire.Hosting.Azure.AppService (12)
Aspire.Hosting.Azure.CognitiveServices (5)
Aspire.Hosting.Azure.ContainerRegistry (5)
Aspire.Hosting.Azure.CosmosDB (23)
Aspire.Hosting.Azure.EventHubs (14)
Aspire.Hosting.Azure.Functions (9)
Aspire.Hosting.Azure.KeyVault (12)
AzureKeyVaultResourceExtensions.cs (11)
237return builder.Resource.GetSecret(secretName);
253return builder.AddSecret(name, name, parameterResource.Resource);
271var secret = new AzureKeyVaultSecretResource(name, name, builder.Resource, parameterResource);
272builder.Resource.Secrets.Add(secret);
292var secret = new AzureKeyVaultSecretResource(name, name, builder.Resource, value);
293builder.Resource.Secrets.Add(secret);
312return builder.AddSecret(name, secretName, parameterResource.Resource);
331var secret = new AzureKeyVaultSecretResource(name, secretName, builder.Resource, parameterResource);
332builder.Resource.Secrets.Add(secret);
353var secret = new AzureKeyVaultSecretResource(name, secretName, builder.Resource, value);
354builder.Resource.Secrets.Add(secret);
Aspire.Hosting.Azure.Kusto (14)
AzureKustoBuilderExtensions.cs (13)
114var kustoDatabase = new AzureKustoReadWriteDatabaseResource(name, databaseName, builder.Resource);
115builder.Resource.Databases.Add(kustoDatabase);
125kcsb = GetConnectionStringBuilder(builder.Resource, connectionString);
168var surrogate = new AzureKustoEmulatorResource(builder.Resource);
227var resource = resourceBuilder.Resource;
350if (resourceBuilder.Resource.IsEmulator)
361.Resource
365throw new DistributedApplicationException($"Connection string for Kusto resource '{resourceBuilder.Resource.Name}' is not set.");
368var result = launcher.TryLaunchKustoExplorer(title: "", resourceBuilder.Resource.Name, connectionString, requestText: "");
376.Resource
380throw new DistributedApplicationException($"Connection string for Kusto resource '{resourceBuilder.Resource.Name}' is not set.");
383var result = launcher.TryLaunchKustoWebExplorer(title: "", resourceBuilder.Resource.Name, connectionString, requestText: "");
394message: $"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 (28)
Aspire.Hosting.Azure.PostgreSQL (24)
Aspire.Hosting.Azure.Redis (20)
Aspire.Hosting.Azure.Search (1)
Aspire.Hosting.Azure.ServiceBus (19)
AzureServiceBusExtensions.cs (18)
178var queue = new AzureServiceBusQueueResource(name, queueName, builder.Resource);
179builder.Resource.Queues.Add(queue);
196configure(builder.Resource);
261var topic = new AzureServiceBusTopicResource(name, topicName, builder.Resource);
262builder.Resource.Topics.Add(topic);
279configure(builder.Resource);
301if (builder.Resource.Topics.FirstOrDefault(x => x.Name == topicName) is { } existingResource)
331var subscription = new AzureServiceBusSubscriptionResource(name, subscriptionName, builder.Resource);
332builder.Resource.Subscriptions.Add(subscription);
349configure(builder.Resource);
384if (builder.Resource.IsEmulator)
400var passwordParameter = ParameterResourceBuilderExtensions.CreateDefaultPasswordParameter(builder.ApplicationBuilder, $"{builder.Resource.Name}-sql-pwd", minLower: 1, minUpper: 1, minNumeric: 1);
414.AddContainer($"{builder.Resource.Name}-mssql",
428var sqlEndpoint = sqlServerResource.Resource.GetEndpoint("tcp");
437var surrogate = new AzureServiceBusEmulatorResource(builder.Resource);
458var customConfigFile = builder.Resource.Annotations.OfType<ConfigFileAnnotation>().FirstOrDefault();
471var tempConfig = JsonNode.Parse(CreateEmulatorConfigJson(builder.Resource));
479var configJsonAnnotations = builder.Resource.Annotations.OfType<ConfigJsonAnnotation>();
Aspire.Hosting.Azure.SignalR (2)
Aspire.Hosting.Azure.Sql (11)
Aspire.Hosting.Azure.Storage (34)
AzureStorageExtensions.cs (33)
182if (builder.Resource.IsHnsEnabled)
215var 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.");
218var 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.");
229foreach (var container in builder.Resource.BlobContainers)
235foreach (var queue in builder.Resource.Queues)
243var healthCheckKey = $"{builder.Resource.Name}_check";
256var surrogate = new AzureStorageEmulatorResource(builder.Resource);
278return builder.WithBindMount(path ?? $".azurite/{builder.Resource.Name}", "/data", isReadOnly);
384if (string.Equals(name, builder.Resource.Name + "-blobs", StringComparisons.ResourceName))
405builder.Resource.IsHnsEnabled = true;
407if (string.Equals(name, builder.Resource.Name + "-data-lake", StringComparisons.ResourceName))
444var name = builder.Resource.Name + "-blobs";
446return builder.Resource.BlobStorageBuilder ??= CreateBlobService(builder, name);
453var name = builder.Resource.Name + "-data-lake";
455return builder.Resource.DataLakeStorageBuilder ??= CreateDataLakeService(builder, name);
473AzureBlobStorageContainerResource resource = new(name, blobContainerName, GetBlobService(builder).Resource);
474builder.Resource.BlobContainers.Add(resource);
508builder.Resource.IsHnsEnabled = true;
512AzureDataLakeStorageFileSystemResource resource = new(name, dataLakeFileSystemName, GetDataLakeService(builder).Resource);
513builder.Resource.DataLakeFileSystems.Add(resource);
534AzureBlobStorageContainerResource resource = new(name, blobContainerName, builder.Resource);
535builder.Resource.Parent.BlobContainers.Add(resource);
582if (string.Equals(name, builder.Resource.Name + "-queues", StringComparisons.ResourceName))
601var name = builder.Resource.Name + "-queues";
603return builder.Resource.QueueStorageBuilder ??= CreateQueueService(builder, name);
621AzureQueueStorageQueueResource resource = new(name, queueName, builder.GetQueueService().Resource);
622builder.Resource.Queues.Add(resource);
760var resource = new AzureBlobStorageResource(name, builder.Resource);
785var resource = new AzureDataLakeStorageResource(name, builder.Resource);
793var resource = new AzureTableStorageResource(name, builder.Resource);
799var resource = new AzureQueueStorageResource(name, builder.Resource);
Aspire.Hosting.Azure.Tests (1005)
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";
95var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(serviceA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
112var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
127var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(appInsights.Resource);
AzureContainerAppsTests.cs (24)
112Assert.Same(env.Resource, target.ComputeEnvironment);
154Assert.Same(infra.Resource, target.ComputeEnvironment);
185Assert.Same(env.Resource, target?.ComputeEnvironment);
304.WithEnvironment("DATABASE_URL", pgContainer.Resource.UriExpression);
800var target = container.Resource.GetDeploymentTargetAnnotation()?.DeploymentTarget as AzureBicepResource;
1407var (manifest, bicep) = await GetManifestWithBicep(sql.Resource);
1524var managedEnvironment = (ContainerAppManagedEnvironment)env.Resource.AddAsExistingResource(infra);
1536var (manifest, bicep) = await GetManifestWithBicep(azResource.Resource);
1626Assert.IsAssignableFrom<IAzureComputeEnvironmentResource>(env.Resource);
1627Assert.IsAssignableFrom<IComputeEnvironmentResource>(env.Resource);
2096var dockerFileAnnotation = c.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
2160var endpointReferenceEx = env.Resource.GetHostAddressExpression(project.GetEndpoint("http"));
2166Assert.Equal(env.Resource, output.Resource);
2249var containerRegistryInterface = env.Resource as IContainerRegistry;
2327var webappAcaTarget = webappAcaResource.GetDeploymentTargetAnnotation(aca.Resource);
2329Assert.Same(aca.Resource, webappAcaTarget.ComputeEnvironment);
2333var webappServiceTarget = webappServiceResource.GetDeploymentTargetAnnotation(appService.Resource);
2335Assert.Same(appService.Resource, webappServiceTarget.ComputeEnvironment);
2339var containerAcaTarget = containerAcaResource.GetDeploymentTargetAnnotation(aca.Resource);
2341Assert.Same(aca.Resource, containerAcaTarget.ComputeEnvironment);
2347var containerAppServiceAcaTarget = containerAppServiceResource.GetDeploymentTargetAnnotation(aca.Resource);
2351Assert.Null(webappAcaResource.GetDeploymentTargetAnnotation(appService.Resource));
2352Assert.Null(webappServiceResource.GetDeploymentTargetAnnotation(aca.Resource));
2353Assert.Null(containerAcaResource.GetDeploymentTargetAnnotation(appService.Resource));
AzureCosmosDBEmulatorFunctionalTests.cs (21)
47await 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);
93await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
97hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await cosmos.Resource.ConnectionStringExpression.GetValueAsync(default);
98hb.AddAzureCosmosClient(db.Resource.Name);
99hb.AddCosmosDbContext<EFCoreCosmosDbContext>(db.Resource.Name, databaseName);
174await rns.WaitForResourceHealthyAsync(cosmos1.Resource.Name, cts.Token);
182[$"ConnectionStrings:{cosmos1.Resource.Name}"] = await cosmos1.Resource.ConnectionStringExpression.GetValueAsync(default)
185hb.AddAzureCosmosClient(cosmos1.Resource.Name);
222await rns.WaitForResourceHealthyAsync(cosmos2.Resource.Name, cts.Token);
231[$"ConnectionStrings:{cosmos2.Resource.Name}"] = await cosmos2.Resource.ConnectionStringExpression.GetValueAsync(default)
234hb.AddAzureCosmosClient(cosmos2.Resource.Name);
292await rns.WaitForResourceHealthyAsync(cosmos.Resource.Name, cts.Token);
296hb.Configuration[$"ConnectionStrings:{cosmos.Resource.Name}"] = await cosmos.Resource.ConnectionStringExpression.GetValueAsync(default);
297hb.AddAzureCosmosClient(cosmos.Resource.Name);
AzureCosmosDBExtensionsTests.cs (64)
36var endpointAnnotation = cosmos.Resource.Annotations.OfType<EndpointAnnotation>().FirstOrDefault();
57var containerImageAnnotation = cosmos.Resource.Annotations.OfType<ContainerImageAnnotation>().FirstOrDefault();
74var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
105Assert.Equal("{cosmos.outputs.connectionString}", cosmos.Resource.ConnectionStringExpression.ValueExpression);
108Assert.Equal("AccountEndpoint={cosmos.outputs.connectionString};Database=db1", db1.Resource.ConnectionStringExpression.ValueExpression);
109Assert.Equal("AccountEndpoint={cosmos.outputs.connectionString};Database=db1;Container=container1", container1.Resource.ConnectionStringExpression.ValueExpression);
135Assert.DoesNotContain(";Database=db1", cosmos.Resource.ConnectionStringExpression.ValueExpression);
136Assert.DoesNotContain(";Database=db1;Container=container1", cosmos.Resource.ConnectionStringExpression.ValueExpression);
137Assert.Contains(";Database=db1", db1.Resource.ConnectionStringExpression.ValueExpression);
138Assert.Contains(";Database=db1;Container=container1", container1.Resource.ConnectionStringExpression.ValueExpression);
140Assert.Contains(";Database=db", db2.Resource.ConnectionStringExpression.ValueExpression);
141Assert.Contains(";Database=db;Container=container", container2.Resource.ConnectionStringExpression.ValueExpression);
154((IResourceWithAzureFunctionsConfig)cosmos.Resource).ApplyAzureFunctionsConfiguration(target, "cosmos");
161((IResourceWithAzureFunctionsConfig)db1.Resource).ApplyAzureFunctionsConfiguration(target, "db1");
170((IResourceWithAzureFunctionsConfig)container1.Resource).ApplyAzureFunctionsConfiguration(target, "container1");
205var manifest = await GetManifestWithBicep(model, cosmos.Resource);
255Assert.Equal("{cosmos-kv.secrets.connectionstrings--cosmos}", cosmos.Resource.ConnectionStringExpression.ValueExpression);
256Assert.Equal("{cosmos-kv.secrets.connectionstrings--db1}", database.Resource.ConnectionStringExpression.ValueExpression);
257Assert.Equal("{cosmos-kv.secrets.connectionstrings--container1}", container.Resource.ConnectionStringExpression.ValueExpression);
259var manifest = await GetManifestWithBicep(cosmos.Resource);
274Assert.True(cosmos.Resource.IsContainer());
276var csExpr = cosmos.Resource.ConnectionStringExpression;
282Assert.Equal(cs, await ((IResourceWithConnectionString)cosmos.Resource).GetConnectionStringAsync());
352var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
363var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
365Assert.Equal("cosmos", cosmos.Resource.Name);
383cosmos.Resource.Outputs["connectionString"] = "mycosmosconnectionstring";
385var manifest = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
406var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
408Assert.Equal("cosmos", cosmos.Resource.Name);
446kv.Resource.SecretResolver = (secretRef, _) =>
456var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
467var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
469Assert.Equal("cosmos", cosmos.Resource.Name);
487cosmos.Resource.Outputs["connectionString"] = "mycosmosconnectionstring";
489var manifest = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
508var connectionStringResource = (IResourceWithConnectionString)cosmos.Resource;
510Assert.Equal("cosmos", cosmos.Resource.Name);
521var manifest = await AzureManifestUtils.GetManifestWithBicep(cosmos.Resource);
533Assert.True(cosmos.Resource.IsEmulator());
534Assert.Contains(cosmos.Resource.Annotations, a => a is EmulatorResourceAnnotation);
545Assert.True(cosmos.Resource.IsEmulator());
546Assert.Contains(cosmos.Resource.Annotations, a => a is EmulatorResourceAnnotation);
576_ = cosmosdb.Resource.AddAsExistingResource(infra);
579var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
606Assert.NotNull(cosmos.Resource.ConnectionStringSecretOutput);
607Assert.Same(cosmos.Resource, cosmos.Resource.ConnectionStringSecretOutput.SecretOwner);
609Assert.NotNull(cosmos.Resource.PrimaryAccessKeySecretOutput);
610Assert.Same(cosmos.Resource, cosmos.Resource.PrimaryAccessKeySecretOutput.SecretOwner);
613var references = ((IValueWithReferences)cosmos.Resource.ConnectionStringSecretOutput).References.ToList();
614Assert.Contains(cosmos.Resource, references);
615Assert.Contains(cosmos.Resource.ConnectionStringSecretOutput.Resource, references);
626Assert.Contains(cosmos.Resource.Annotations, a => a is HttpsCertificateConfigurationCallbackAnnotation);
637Assert.DoesNotContain(cosmos.Resource.Annotations, a => a is HttpsCertificateConfigurationCallbackAnnotation);
648cosmos.Resource.Annotations.OfType<HttpsCertificateConfigurationCallbackAnnotation>());
656Resource = cosmos.Resource,
682cosmos.Resource.Annotations.OfType<HttpsCertificateConfigurationCallbackAnnotation>());
691Resource = cosmos.Resource,
737var emulatorEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "emulator");
769var emulatorEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "emulator");
798var dataExplorerEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "data-explorer");
828var dataExplorerEndpoint = Assert.Single(cosmos.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "data-explorer");
AzureDeployerTests.cs (49)
167var dockerFileAnnotation = c.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
291Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
292Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
293Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
294Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
295Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
352Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
353Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
354Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
355Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
356Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
419Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
420Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
421Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
422Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
423Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
526Assert.Equal("acaregistry", acaEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
527Assert.Equal("acaregistry.azurecr.io", acaEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
528Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aca-identity", acaEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
529Assert.Equal("aca.westus.azurecontainerapps.io", acaEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
530Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.App/managedEnvironments/acaenv", acaEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
533Assert.Equal("aasregistry", aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
534Assert.Equal("aasregistry.azurecr.io", aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
535Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aas-identity", aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
536Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.Web/serverfarms/aasplan", aasEnv.Resource.Outputs["planId"]);
537Assert.Equal("aas-client-id", aasEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_CLIENT_ID"]);
599var setValue = await param.Resource.GetValueAsync(default);
673var setValue = await param.Resource.GetValueAsync(default);
723Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
724Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
725Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
726Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
727Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
786Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
787Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
997Assert.Equal("testregistry", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_NAME"]);
998Assert.Equal("testregistry.azurecr.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_ENDPOINT"]);
999Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID"]);
1000Assert.Equal("test.westus.azurecontainerapps.io", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
1001Assert.Equal("/subscriptions/test/resourceGroups/test-rg/providers/Microsoft.App/managedEnvironments/testenv", containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
1004var funcAppDeployment = Assert.IsAssignableFrom<AzureProvisioningResource>(funcApp.Resource.GetDeploymentTargetAnnotation()?.DeploymentTarget);
1006Assert.Equal(await ((BicepOutputReference)funcAppDeployment.Parameters["env_outputs_azure_container_apps_environment_default_domain"]!).GetValueAsync(), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN"]);
1007Assert.Equal(await ((BicepOutputReference)funcAppDeployment.Parameters["env_outputs_azure_container_apps_environment_id"]!).GetValueAsync(), containerAppEnv.Resource.Outputs["AZURE_CONTAINER_APPS_ENVIRONMENT_ID"]);
1606Assert.Equal("secret-key-12345", await regularParam.Resource.GetValueAsync(default));
1607Assert.Equal("Server=localhost;Database=mydb", await connectionStringParam.Resource.GetValueAsync(default));
1608Assert.Equal("custom-value-xyz", await customKeyParam.Resource.GetValueAsync(default));
1661Assert.Equal("secret-key-12345", await regularParam.Resource.GetValueAsync(default));
1662Assert.Equal("Server=localhost;Database=mydb", await connectionStringParam.Resource.GetValueAsync(default));
1663Assert.Equal("custom-value-xyz", await customKeyParam.Resource.GetValueAsync(default));
AzureEventHubsExtensionsTests.cs (33)
46await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
47await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
51await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
53await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
76await app.ResourceNotifications.WaitForResourceHealthyAsync(eventHubns.Resource.Name, cts.Token);
82hb.Configuration["ConnectionStrings:hub"] = await eventHub.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
88hb.Configuration["ConnectionStrings:eventhubns"] = await eventHubns.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
89hb.AddAzureEventHubProducerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
90hb.AddAzureEventHubConsumerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
128await app.ResourceNotifications.WaitForResourceHealthyAsync(eventHubns.Resource.Name, cts.Token);
134hb.Configuration["ConnectionStrings:eventhubns"] = await eventHubns.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
135hb.AddAzureEventHubProducerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
136hb.AddAzureEventHubConsumerClient("eventhubns", settings => settings.EventHubName = eventHub.Resource.HubName);
140hb.Configuration["ConnectionStrings:eventhubns"] = await eventHubns.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None) + $";EntityPath={hubName};";
166var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
185var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
204var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
223var volumeAnnotation = eventHubs.Resource.Annotations.OfType<ContainerMountAnnotation>().Single(a => !a.Target.Contains("Config.json"));
242var endpoints = eventHubs.Resource.Annotations.OfType<EndpointAnnotation>().ToList();
270var containerImageAnnotation = eventHubs.Resource.Annotations.OfType<ContainerImageAnnotation>().FirstOrDefault();
290var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(model, eventHubs.Resource);
323var manifest = await AzureManifestUtils.GetManifestWithBicep(eventHubs.Resource);
521serviceBus.Resource.TryGetLastAnnotation<ContainerLifetimeAnnotation>(out var sbLifetimeAnnotation);
546Assert.Equal("{eh.outputs.eventHubsEndpoint}", eventHubs.Resource.ConnectionStringExpression.ValueExpression);
547Assert.Equal("Endpoint={eh.outputs.eventHubsEndpoint};EntityPath=hub1", eventHub.Resource.ConnectionStringExpression.ValueExpression);
548Assert.Equal("Endpoint={eh.outputs.eventHubsEndpoint};EntityPath=hub1;ConsumerGroup=cg1", consumerGroup.Resource.ConnectionStringExpression.ValueExpression);
561((IResourceWithAzureFunctionsConfig)eventHubs.Resource).ApplyAzureFunctionsConfiguration(target, "eh");
571((IResourceWithAzureFunctionsConfig)eventHub.Resource).ApplyAzureFunctionsConfiguration(target, "hub1");
587((IResourceWithAzureFunctionsConfig)consumerGroup.Resource).ApplyAzureFunctionsConfiguration(target, "cg1");
617Assert.True(eventHubs.Resource.IsEmulator());
618Assert.Contains(eventHubs.Resource.Annotations, a => a is EmulatorResourceAnnotation);
648_ = eventHubs.Resource.AddAsExistingResource(infra);
651var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
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);
AzureServiceBusExtensionsTests.cs (36)
39var manifest = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
64var manifest = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
96await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
98await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
102await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
104await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
130hb.Configuration["ConnectionStrings:servicebusns"] = await serviceBus.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
137await rns.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
138await rns.WaitForResourceHealthyAsync(serviceBus.Resource.Name, cts.Token);
142await using var sender = serviceBusClient.CreateSender(queueResource.Resource.QueueName);
145await using var receiver = serviceBusClient.CreateReceiver(queueResource.Resource.QueueName);
165serviceBus.Resource.Annotations.OfType<EndpointAnnotation>(),
188var containerImageAnnotation = serviceBus.Resource.Annotations.OfType<ContainerImageAnnotation>().FirstOrDefault();
266var manifest = await AzureManifestUtils.GetManifestWithBicep(serviceBus.Resource);
618serviceBus.Resource.TryGetLastAnnotation<ContainerLifetimeAnnotation>(out var sbLifetimeAnnotation);
645Assert.Equal("{sb.outputs.serviceBusEndpoint}", serviceBus.Resource.ConnectionStringExpression.ValueExpression);
646Assert.Equal("Endpoint={sb.outputs.serviceBusEndpoint};EntityPath=queue", queue.Resource.ConnectionStringExpression.ValueExpression);
647Assert.Equal("Endpoint={sb.outputs.serviceBusEndpoint};EntityPath=topic", topic.Resource.ConnectionStringExpression.ValueExpression);
648Assert.Equal("Endpoint={sb.outputs.serviceBusEndpoint};EntityPath=topic/Subscriptions/sub", subscription.Resource.ConnectionStringExpression.ValueExpression);
662((IResourceWithAzureFunctionsConfig)serviceBus.Resource).ApplyAzureFunctionsConfiguration(target, "sb");
668((IResourceWithAzureFunctionsConfig)queue.Resource).ApplyAzureFunctionsConfiguration(target, "queue");
675((IResourceWithAzureFunctionsConfig)topic.Resource).ApplyAzureFunctionsConfiguration(target, "topic");
682((IResourceWithAzureFunctionsConfig)subscription.Resource).ApplyAzureFunctionsConfiguration(target, "sub");
718serviceBus.Resource.Outputs["serviceBusEndpoint"] = "mynamespaceEndpoint";
720var connectionStringResource = (IResourceWithConnectionString)serviceBus.Resource;
722Assert.Equal("sb", serviceBus.Resource.Name);
728var manifest = await GetManifestWithBicep(model, serviceBus.Resource);
811hb.Configuration["ConnectionStrings:servicebusns"] = await serviceBus.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
814await app.ResourceNotifications.WaitForResourceAsync(serviceBus.Resource.Name, KnownResourceStates.Running, cts.Token);
815await app.ResourceNotifications.WaitForResourceHealthyAsync(serviceBus.Resource.Name, cts.Token);
822await using var sender = serviceBusClient.CreateSender(queueResource.Resource.QueueName);
825await using var receiver = serviceBusClient.CreateReceiver(queueResource.Resource.QueueName);
889Assert.True(serviceBus.Resource.IsEmulator());
890Assert.Contains(serviceBus.Resource.Annotations, a => a is EmulatorResourceAnnotation);
920_ = serviceBus.Resource.AddAsExistingResource(infra);
923var (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)
49await rns.WaitForResourceAsync(storage.Resource.Name, KnownResourceStates.Running, cts.Token);
51await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
55await rns.WaitForResourceHealthyAsync(blobs.Resource.Name, cts.Token);
56await rns.WaitForResourceHealthyAsync(queues.Resource.Name, cts.Token);
57await rns.WaitForResourceHealthyAsync(tables.Resource.Name, cts.Token);
59await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
94await rns.WaitForResourceAsync(storage.Resource.Name, KnownResourceStates.Running, cts.Token);
96await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
100await rns.WaitForResourceHealthyAsync(blobContainer.Resource.Name, cts.Token);
102await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
137await rns.WaitForResourceAsync(storage.Resource.Name, KnownResourceStates.Running, cts.Token);
139await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
143await rns.WaitForResourceHealthyAsync(testQueue.Resource.Name, cts.Token);
145await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
176hb.Configuration[$"ConnectionStrings:{blobsResourceName}"] = await blobs.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
177hb.Configuration[$"ConnectionStrings:{blobContainerName}"] = await container.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
178hb.Configuration[$"ConnectionStrings:{queuesResourceName}"] = await queues.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
179hb.Configuration[$"ConnectionStrings:{queueName}"] = await queue.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
191await rns.WaitForResourceHealthyAsync(storage.Resource.Name, cts.Token);
223await rns.WaitForResourceHealthyAsync(blobContainer.Resource.Name, cancellationToken: cts.Token);
227hb.Configuration["ConnectionStrings:BlobConnection"] = await blobs.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
263await rns.WaitForResourceHealthyAsync(queue.Resource.Name, cancellationToken: cts.Token);
267hb.Configuration["ConnectionStrings:QueueConnection"] = await queues.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None);
AzureStorageExtensionsTests.cs (92)
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);
413Assert.True(storage.Resource.IsContainer());
420=> new(storage.Resource, new EndpointAnnotation(ProtocolType.Tcp, name: name, targetPort: port));
426Assert.Equal(blobqs, blob.Resource.ConnectionStringExpression.ValueExpression);
427Assert.Equal(queueqs, queue.Resource.ConnectionStringExpression.ValueExpression);
428Assert.Equal(tableqs, table.Resource.ConnectionStringExpression.ValueExpression);
435Assert.Equal(Resolve(blobqs, "blob", 10000), await ((IResourceWithConnectionString)blob.Resource).GetConnectionStringAsync());
436Assert.Equal(Resolve(queueqs, "queue", 10001), await ((IResourceWithConnectionString)queue.Resource).GetConnectionStringAsync());
437Assert.Equal(Resolve(tableqs, "table", 10002), await ((IResourceWithConnectionString)table.Resource).GetConnectionStringAsync());
456storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
457storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
458storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
461Assert.Equal("storage", storage.Resource.Name);
463var storageManifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
481var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
490var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
496var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
505var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
511var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
520var tableManifest = await ManifestUtils.GetManifest(table.Resource);
541storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
542storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
543storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
546Assert.Equal("storage", storage.Resource.Name);
548var storageManifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
566var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
575var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
581var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
590var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
596var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
605var tableManifest = await ManifestUtils.GetManifest(table.Resource);
629storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
630storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
631storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
634Assert.Equal("storage", storage.Resource.Name);
638var storageManifest = await GetManifestWithBicep(model, storage.Resource);
704var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
713var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
717var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
726var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
730var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
739var tableManifest = await ManifestUtils.GetManifest(table.Resource);
760storage.Resource.Outputs["blobEndpoint"] = "https://myblob";
761storage.Resource.Outputs["queueEndpoint"] = "https://myqueue";
762storage.Resource.Outputs["tableEndpoint"] = "https://mytable";
765Assert.Equal("storage", storage.Resource.Name);
767var storageManifest = await AzureManifestUtils.GetManifestWithBicep(storage.Resource);
786var connectionStringBlobResource = (IResourceWithConnectionString)blob.Resource;
795var blobManifest = await ManifestUtils.GetManifest(blob.Resource);
801var connectionStringQueueResource = (IResourceWithConnectionString)queue.Resource;
810var queueManifest = await ManifestUtils.GetManifest(queue.Resource);
816var connectionStringTableResource = (IResourceWithConnectionString)table.Resource;
825var tableManifest = await ManifestUtils.GetManifest(table.Resource);
852Assert.Equal("storage-blobs", blobService.Resource.Name);
853Assert.Equal(blobService.Resource, blobStorageResource);
879Assert.Equal("storage-queues", queueService.Resource.Name);
880Assert.Equal(queueService.Resource, queueStorageResource);
891Assert.True(storage.Resource.IsEmulator());
892Assert.Contains(storage.Resource.Annotations, a => a is EmulatorResourceAnnotation);
922_ = storage.Resource.AddAsExistingResource(infra);
925var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
AzureVirtualNetworkExtensionsTests.cs (62)
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();
172Assert.Equal("mysubnet", subnet.Resource.Name);
173Assert.Equal("mysubnet", subnet.Resource.SubnetName);
174Assert.Null(subnet.Resource.AddressPrefix);
175Assert.Same(addressPrefixParam.Resource, subnet.Resource.AddressPrefixParameter);
176Assert.Same(vnet.Resource, subnet.Resource.Parent);
188Assert.Equal("mysubnet", subnet.Resource.Name);
189Assert.Equal("custom-subnet-name", subnet.Resource.SubnetName);
190Assert.Null(subnet.Resource.AddressPrefix);
191Assert.Same(addressPrefixParam.Resource, subnet.Resource.AddressPrefixParameter);
203var manifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
218var manifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
232Assert.NotNull(subnet.Resource.NetworkSecurityGroup);
233Assert.Equal("web-nsg", subnet.Resource.NetworkSecurityGroup.Name);
234Assert.Single(subnet.Resource.NetworkSecurityGroup.SecurityRules);
248Assert.Same(nsg.Resource, subnet.Resource.NetworkSecurityGroup);
249Assert.Single(nsg.Resource.SecurityRules);
263var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
280var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
297var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
313var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
327var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
342var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
357var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
373var rule = Assert.Single(subnet.Resource.NetworkSecurityGroup!.SecurityRules);
386var rule = Assert.Single(subnet.Resource.NetworkSecurityGroup!.SecurityRules);
404var vnetManifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource);
405var nsgManifest = await AzureManifestUtils.GetManifestWithBicep(vnet.Resource.Subnets[0].NetworkSecurityGroup!);
423var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
483var rules = subnet.Resource.NetworkSecurityGroup!.SecurityRules;
AzureWebPubSubExtensionsTests.cs (43)
35Assert.Equal(hubName, hub.Resource.Name);
36var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
57var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
63Assert.Equal("wps1", wps.Resource.Name);
76Assert.Equal("{wps1.outputs.endpoint}", wps.Resource.ConnectionStringExpression.ValueExpression);
77Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=abc", hub.Resource.ConnectionStringExpression.ValueExpression);
79Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hij", otherHub.Resource.ConnectionStringExpression.ValueExpression);
102var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
108Assert.Equal("wps1", wps.Resource.Name);
132var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
138Assert.Equal("wps1", wps.Resource.Name);
158wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
159var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
164Assert.Equal("wps1", wps.Resource.Name);
193wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
208var connectionStringResource = (IResourceWithConnectionString)wps.Resource;
211var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
218Assert.Equal("wps1", wps.Resource.Name);
234Assert.Equal("hub1", hub1.Resource.Name);
235Assert.Equal("resource2", hub2.Resource.Name);
236Assert.Equal("hub3", hub3.Resource.Name);
237Assert.Equal("hub4", hub4.Resource.Name);
239Assert.Equal("hub1", hub1.Resource.HubName);
240Assert.Equal("hub2", hub2.Resource.HubName);
241Assert.Equal("hub3", hub3.Resource.HubName);
242Assert.Equal("hub4", hub4.Resource.HubName);
244Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub1", hub1.Resource.ConnectionStringExpression.ValueExpression);
245Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub2", hub2.Resource.ConnectionStringExpression.ValueExpression);
246Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub3", hub3.Resource.ConnectionStringExpression.ValueExpression);
247Assert.Equal("Endpoint={wps1.outputs.endpoint};Hub=hub4", hub4.Resource.ConnectionStringExpression.ValueExpression);
261Assert.Same(hub1.Resource, hub2.Resource);
262Assert.Equal("resource1", hub1.Resource.Name);
263Assert.Equal("same-hub", hub1.Resource.HubName);
272wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
282var connectionStringResource = (IResourceWithConnectionString)wps.Resource;
288var manifest = await GetManifestWithBicep(model, wps.Resource);
292Assert.Equal("wps1", wps.Resource.Name);
332wps.Resource.Outputs["endpoint"] = "https://mywebpubsubendpoint";
345var manifest = await AzureManifestUtils.GetManifestWithBicep(wps.Resource);
348Assert.Equal("wps1", wps.Resource.Name);
380_ = webPubSub.Resource.AddAsExistingResource(infra);
383var (manifest, bicep) = await AzureManifestUtils.GetManifestWithBicep(module.Resource, skipPreparer: true);
BicepUtilitiesTests.cs (43)
23await BicepUtilities.SetParametersAsync(parameters, bicep0.Resource);
55.WithParameter("expr", ReferenceExpression.Create($"{param.Resource}/1"))
59await BicepUtilities.SetParametersAsync(parameters, bicep0.Resource);
73Assert.True(bicep0.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
78Assert.Equal(connectionStringResource.Resource, r.Resource);
83Assert.Equal(param.Resource, r.Resource);
88Assert.Equal(container.Resource, r.Resource);
110await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource);
111var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, null);
114await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource);
115var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, null);
137await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource);
138var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, null);
141await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource);
142var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, null);
154bicep0.Resource.Scope = new("rg0");
158bicep1.Resource.Scope = new("rg1");
162await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource);
163await BicepUtilities.SetScopeAsync(scope0, bicep0.Resource);
164var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, scope0);
168await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource);
169await BicepUtilities.SetScopeAsync(scope1, bicep1.Resource);
170var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, scope1);
182bicep0.Resource.Scope = new("rg0");
186bicep1.Resource.Scope = new("rg0");
190await BicepUtilities.SetParametersAsync(parameters0, bicep0.Resource);
191await BicepUtilities.SetScopeAsync(scope0, bicep0.Resource);
192var checkSum0 = BicepUtilities.GetChecksum(bicep0.Resource, parameters0, scope0);
196await BicepUtilities.SetParametersAsync(parameters1, bicep1.Resource);
197await BicepUtilities.SetScopeAsync(scope1, bicep1.Resource);
198var checkSum1 = BicepUtilities.GetChecksum(bicep1.Resource, parameters1, scope1);
208var bicep1 = builder.AddBicepTemplateString("test1", "param name string").Resource;
209var bicep2 = builder.AddBicepTemplateString("test2", "param name string").Resource;
229var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
254var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
282var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
314var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
336var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
354var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
372var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
387var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
408var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
441var bicep = builder.AddBicepTemplateString("test", "param name string").Resource;
ExistingAzureResourceTests.cs (28)
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);
PublicApiTests\CosmosDBPublicApiTests.cs (10)
22var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
42var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
62var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
82var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
102var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
120var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
136var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
154var parent = new AzureCosmosDBDatabaseResource("database", "cosmos-db", resource.Resource);
200var action = () => new AzureCosmosDBDatabaseResource(name, databaseName, parent.Resource);
218var 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 (5)
Aspire.Hosting.Containers.Tests (50)
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 (11)
Aspire.Hosting.DevTunnels.Tests (14)
DevTunnelResourceBuilderExtensionsTests.cs (14)
26var tunnelPort = tunnel.Resource.Ports.FirstOrDefault();
31var values = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(consumer.Resource, serviceProvider: builder.Services.BuildServiceProvider()).DefaultTimeout();
45Assert.True(tunnel.Resource.Options.AllowAnonymous);
55Assert.Equal("custom-id", tunnel.Resource.TunnelId);
68Assert.Single(tunnel.Resource.Ports);
69var port = tunnel.Resource.Ports.First();
83var tunnelEndpoint = tunnel.GetEndpoint(target.Resource, "https");
86Assert.Equal(target.Resource, tunnelEndpoint.Resource);
103Assert.Equal(target.Resource, tunnelEndpoint.Resource);
121Assert.Equal(target.Resource, tunnelEndpoint.Resource);
135var endpointRef = tunnel.GetEndpoint(target.Resource, "nonexistent");
175var endpointRef = tunnel.GetEndpoint(target.Resource, "https");
195var httpTunnelEndpoint = tunnel.GetEndpoint(target.Resource, "http");
196var httpsTunnelEndpoint = tunnel.GetEndpoint(target.Resource, "https");
Aspire.Hosting.Docker (12)
Aspire.Hosting.Docker.Tests (25)
Aspire.Hosting.DotnetTool.Tests (28)
Aspire.Hosting.Garnet (1)
Aspire.Hosting.Garnet.Tests (21)
Aspire.Hosting.GitHub.Models (12)
Aspire.Hosting.GitHub.Models.Tests (37)
GitHubModelsExtensionTests.cs (33)
20Assert.Equal("github", github.Resource.Name);
21Assert.Equal("openai/gpt-4o-mini", github.Resource.Model);
32Assert.NotNull(github.Resource.Key);
33Assert.Equal("mymodel-gh-apikey", github.Resource.Key.Name);
34Assert.True(github.Resource.Key.Secret);
45var connectionString = github.Resource.ConnectionStringExpression.ValueExpression;
57var connectionString = github.Resource.ConnectionStringExpression.ValueExpression;
78var connectionString = await github.Resource.ConnectionStringExpression.GetValueAsync(default);
80Assert.Equal(apiKeyParameter.Resource, github.Resource.Key);
91Assert.NotNull(github.Resource.Key);
92Assert.Equal("github-gh-apikey", github.Resource.Key.Name);
93Assert.True(github.Resource.Key.Secret);
104Assert.Null(github.Resource.Organization);
118Assert.NotNull(github.Resource.Organization);
119Assert.Equal("github-org", github.Resource.Organization.Name);
120Assert.Equal(orgParameter.Resource, github.Resource.Organization);
134var connectionString = github.Resource.ConnectionStringExpression.ValueExpression;
154var connectionString = await github.Resource.ConnectionStringExpression.GetValueAsync(default);
169var connectionString = github.Resource.ConnectionStringExpression.ValueExpression;
188var resource = new GitHubModelResource("test", "openai/gpt-4o-mini", orgParameter.Resource, apiKeyParameter.Resource);
192Assert.Equal(orgParameter.Resource, resource.Organization);
193Assert.Equal(apiKeyParameter.Resource, resource.Key);
204var resource = new GitHubModelResource("test", "openai/gpt-4o-mini", null, apiKeyParameter.Resource);
209Assert.Equal(apiKeyParameter.Resource, resource.Key);
223var resource = new GitHubModelResource("test", "openai/gpt-4o-mini", null, apiKeyParameter.Resource);
226resource.Organization = orgParameter.Resource;
227Assert.Equal(orgParameter.Resource, resource.Organization);
255Assert.Equal(apiKey.Resource, github.Resource.Key);
287var healthCheckAnnotations = github.Resource.Annotations.OfType<HealthCheckAnnotation>().ToList();
Aspire.Hosting.JavaScript (23)
Aspire.Hosting.JavaScript.Tests (33)
Aspire.Hosting.Kafka.Tests (17)
Aspire.Hosting.Keycloak (6)
Aspire.Hosting.Keycloak.Tests (7)
Aspire.Hosting.Kubernetes (1)
Aspire.Hosting.Kubernetes.Tests (14)
Aspire.Hosting.Maui (18)
Aspire.Hosting.Maui.Tests (39)
MauiPlatformExtensionsTests.cs (39)
72Assert.Equal(config.ExpectedDefaultName, platform.Resource.Name);
73var resourceWithParent = Assert.IsAssignableFrom<IResourceWithParent<MauiProjectResource>>(platform.Resource);
74Assert.Same(maui.Resource, resourceWithParent.Parent);
75Assert.IsType(config.ExpectedResourceType, platform.Resource);
101Assert.Equal(customName, platform.Resource.Name);
152var resource = platform.Resource;
188Assert.IsAssignableFrom<IMauiPlatformResource>(platform.Resource);
214Assert.NotEqual(platform1.Resource.Name, platform2.Resource.Name);
215var parent1 = Assert.IsAssignableFrom<IResourceWithParent<MauiProjectResource>>(platform1.Resource);
216var parent2 = Assert.IsAssignableFrom<IResourceWithParent<MauiProjectResource>>(platform2.Resource);
218Assert.Same(maui.Resource, parent1.Parent);
250.PublishAsync(new BeforeResourceStartedEvent(platform.Resource, app.Services), CancellationToken.None);
280androidEmulator.Resource,
312Assert.NotEqual(androidDevice.Resource.Name, androidEmulator.Resource.Name);
313Assert.IsType<MauiAndroidDeviceResource>(androidDevice.Resource);
314Assert.IsType<MauiAndroidEmulatorResource>(androidEmulator.Resource);
339Assert.Equal("my-device", device.Resource.Name);
340Assert.IsType<MauiAndroidDeviceResource>(device.Resource);
365Assert.Equal("my-emulator", emulator.Resource.Name);
366Assert.IsType<MauiAndroidEmulatorResource>(emulator.Resource);
391Assert.Equal("my-device", device.Resource.Name);
392Assert.IsType<MauiiOSDeviceResource>(device.Resource);
417Assert.Equal("my-simulator", simulator.Resource.Name);
418Assert.IsType<MauiiOSSimulatorResource>(simulator.Resource);
445Assert.NotEqual(device.Resource.Name, simulator.Resource.Name);
446Assert.IsType<MauiiOSDeviceResource>(device.Resource);
447Assert.IsType<MauiiOSSimulatorResource>(simulator.Resource);
473resource = maui.AddiOSDevice().Resource;
477resource = maui.AddiOSSimulator().Resource;
509iosSimulator.Resource,
540resource = maui.AddAndroidDevice().Resource;
544resource = maui.AddAndroidEmulator().Resource;
578var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().FirstOrDefault();
609var annotations = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().ToList();
643platform.Resource,
653var tunnelConfig = maui.Resource.Annotations.OfType<OtlpDevTunnelConfigurationAnnotation>().Single();
Aspire.Hosting.Milvus (5)
Aspire.Hosting.Milvus.Tests (18)
Aspire.Hosting.MongoDB (6)
Aspire.Hosting.MongoDB.Tests (33)
AddMongoDBTests.cs (12)
19Assert.Single(mongo.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "mongodb_check");
27Assert.Single(db.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "mydb_check");
215var mongoManifest = await ManifestUtils.GetManifest(mongo.Resource);
216var dbManifest = await ManifestUtils.GetManifest(db.Resource);
281Assert.Equal("customers1", db1.Resource.DatabaseName);
282Assert.Equal("customers2", db2.Resource.DatabaseName);
284Assert.Equal("mongodb://admin:{mongo1-password.value}@{mongo1.bindings.tcp.host}:{mongo1.bindings.tcp.port}/customers1?authSource=admin&authMechanism=SCRAM-SHA-256", db1.Resource.ConnectionStringExpression.ValueExpression);
285Assert.Equal("mongodb://admin:{mongo1-password.value}@{mongo1.bindings.tcp.host}:{mongo1.bindings.tcp.port}/customers2?authSource=admin&authMechanism=SCRAM-SHA-256", db2.Resource.ConnectionStringExpression.ValueExpression);
299Assert.Equal("imports", db1.Resource.DatabaseName);
300Assert.Equal("imports", db2.Resource.DatabaseName);
302Assert.Equal("mongodb://admin:{mongo1-password.value}@{mongo1.bindings.tcp.host}:{mongo1.bindings.tcp.port}/imports?authSource=admin&authMechanism=SCRAM-SHA-256", db1.Resource.ConnectionStringExpression.ValueExpression);
303Assert.Equal("mongodb://admin:{mongo2-password.value}@{mongo2.bindings.tcp.host}:{mongo2.bindings.tcp.port}/imports?authSource=admin&authMechanism=SCRAM-SHA-256", db2.Resource.ConnectionStringExpression.ValueExpression);
Aspire.Hosting.MySql (6)
Aspire.Hosting.MySql.Tests (62)
AddMySqlTests.cs (21)
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);
251Assert.Equal($"{mysql.Resource.Name}:{mysql.Resource.PrimaryEndpoint.TargetPort}", config["PMA_HOST"]);
283string pattern1 = $@"\$cfg\['Servers'\]\[\$i\]\['host'\] = '{mysql1.Resource.Name}:{mysql1.Resource.PrimaryEndpoint.TargetPort}';";
284string pattern2 = $@"\$cfg\['Servers'\]\[\$i\]\['host'\] = '{mysql2.Resource.Name}:{mysql2.Resource.PrimaryEndpoint.TargetPort}';";
324Assert.Equal(["db1", "db2"], mysql1.Resource.Databases.Keys);
325Assert.Equal(["customers1", "customers2"], mysql1.Resource.Databases.Values);
327Assert.Equal("customers1", db1.Resource.DatabaseName);
328Assert.Equal("customers2", db2.Resource.DatabaseName);
330Assert.Equal("{mysql1.connectionString};Database=customers1", db1.Resource.ConnectionStringExpression.ValueExpression);
331Assert.Equal("{mysql1.connectionString};Database=customers2", db2.Resource.ConnectionStringExpression.ValueExpression);
345Assert.Equal("imports", db1.Resource.DatabaseName);
346Assert.Equal("imports", db2.Resource.DatabaseName);
348Assert.Equal("{mysql1.connectionString};Database=imports", db1.Resource.ConnectionStringExpression.ValueExpression);
349Assert.Equal("{mysql2.connectionString};Database=imports", db2.Resource.ConnectionStringExpression.ValueExpression);
MySqlFunctionalTests.cs (40)
49await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
51await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
55await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
57await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
91[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
94hb.AddMySqlDataSource(db.Resource.Name);
134var password = mysql1.Resource.PasswordParameter.Value;
168[$"ConnectionStrings:{db1.Resource.Name}"] = await db1.Resource.ConnectionStringExpression.GetValueAsync(default)
171hb.AddMySqlDataSource(db1.Resource.Name);
238[$"ConnectionStrings:{db2.Resource.Name}"] = await db2.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
241hb.AddMySqlDataSource(db2.Resource.Name);
341[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
344hb.AddMySqlDataSource(db.Resource.Name);
427[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
430hb.AddMySqlDataSource(db.Resource.Name);
498[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(cts.Token)
501hb.AddMySqlDbContext<TestDbContext>(db.Resource.Name);
656hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
658hb.AddMySqlDataSource(newDb.Resource.Name);
664await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
732hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
734hb.AddMySqlDataSource(newDb.Resource.Name);
740await app.ResourceNotifications.WaitForResourceHealthyAsync(mysql.Resource.Name, cts.Token);
792hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
793hb.AddKeyedMySqlDataSource(db.Resource.Name);
802await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
804var conn = host.Services.GetRequiredKeyedService<MySqlConnection>(db.Resource.Name);
835hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
836hb.AddMySqlDataSource(newDb.Resource.Name);
841await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
Aspire.Hosting.Nats (2)
Aspire.Hosting.Nats.Tests (34)
NatsFunctionalTests.cs (19)
35await app.WaitForTextAsync("Listening for client connections", nats.Resource.Name);
40hb.Configuration[$"ConnectionStrings:{nats.Resource.Name}"] = await nats.Resource.ConnectionStringExpression.GetValueAsync(default);
81await app.WaitForTextAsync("Listening for client connections", nats.Resource.Name);
86var connectionString = await nats.Resource.ConnectionStringExpression.GetValueAsync(default);
87hb.Configuration[$"ConnectionStrings:{nats.Resource.Name}"] = connectionString;
124await app.WaitForTextAsync("Listening for client connections", nats.Resource.Name);
129var connectionString = await nats.Resource.ConnectionStringExpression.GetValueAsync(default);
134hb.Configuration[$"ConnectionStrings:{nats.Resource.Name}"] = modifiedConnectionString;
187await app.WaitForTextAsync("Listening for client connections", nats1.Resource.Name);
193hb.Configuration[$"ConnectionStrings:{nats1.Resource.Name}"] = await nats1.Resource.ConnectionStringExpression.GetValueAsync(default);
236await app.WaitForTextAsync("Listening for client connections", nats2.Resource.Name);
242hb.Configuration[$"ConnectionStrings:{nats2.Resource.Name}"] = await nats2.Resource.ConnectionStringExpression.GetValueAsync(default);
347await app.ResourceNotifications.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
349await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
353await app.ResourceNotifications.WaitForResourceHealthyAsync(resource.Resource.Name, cts.Token);
355await 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 (7)
Aspire.Hosting.PostgreSQL (14)
Aspire.Hosting.PostgreSQL.Tests (83)
AddPostgresTests.cs (35)
21Assert.Single(redis.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "postgres_check");
31Assert.Equal("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", pg.Resource.PasswordParameter.Default?.GetType().FullName);
41Assert.NotEqual("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", pg.Resource.PasswordParameter.Default?.GetType().FullName);
157var connectionStringResource = postgres.Resource as IResourceWithConnectionString;
162Assert.Equal($"Host=localhost;Port=2000;Username=postgres;Password={postgres.Resource.PasswordParameter.Value}", connectionString);
250var serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
251var dbManifest = await ManifestUtils.GetManifest(db.Resource);
294var serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
320serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
346serverManifest = await ManifestUtils.GetManifest(pgServer.Resource);
489Assert.Equal(pg1.Resource.Name, servers.GetProperty("1").GetProperty("Name").GetString());
497Assert.Equal($"echo '{pg1.Resource.PasswordParameter.Value}'", servers.GetProperty("1").GetProperty("PasswordExecCommand").GetString());
501Assert.Equal(pg2.Resource.Name, servers.GetProperty("2").GetProperty("Name").GetString());
509Assert.Equal($"echo '{pg2.Resource.PasswordParameter.Value}'", servers.GetProperty("2").GetProperty("PasswordExecCommand").GetString());
557Assert.Equal(CreatePgWebBookmarkfileContent(db1.Resource), file.Contents);
564Assert.Equal(CreatePgWebBookmarkfileContent(db2.Resource), file.Contents);
601Assert.Equal("customers1", db1.Resource.DatabaseName);
602Assert.Equal("customers2", db2.Resource.DatabaseName);
604Assert.Equal("{postgres1.connectionString};Database=customers1", db1.Resource.ConnectionStringExpression.ValueExpression);
605Assert.Equal("{postgres1.connectionString};Database=customers2", db2.Resource.ConnectionStringExpression.ValueExpression);
619Assert.Equal("imports", db1.Resource.DatabaseName);
620Assert.Equal("imports", db2.Resource.DatabaseName);
622Assert.Equal("{postgres1.connectionString};Database=imports", db1.Resource.ConnectionStringExpression.ValueExpression);
623Assert.Equal("{postgres2.connectionString};Database=imports", db2.Resource.ConnectionStringExpression.ValueExpression);
668var connectionString = await postgres.Resource.GetConnectionStringAsync();
682var connectionString = await postgres.Resource.GetConnectionStringAsync();
684Assert.Equal($"Host=localhost;Port=2000;Username=user1;Password={postgres.Resource.PasswordParameter.Value}", connectionString);
697var config1 = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(postgres.Resource);
698var config2 = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(postgres.Resource);
759var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
786var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
802var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
815var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
840var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
867var volumeAnnotation = postgres.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
PostgresFunctionalTests.cs (45)
52await app.ResourceNotifications.WaitForResourceAsync(postgres.Resource.Name, KnownResourceStates.Running).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
55await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
61await app.ResourceNotifications.WaitForResourceHealthyAsync(postgres.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
64await app.ResourceNotifications.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
86await app.WaitForTextAsync("Listening at", resourceName: adminBuilder.Resource.Name);
88var client = app.CreateHttpClient(adminBuilder.Resource.Name, "http");
119[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
122hb.AddNpgsqlDataSource(db.Resource.Name);
128await app.ResourceNotifications.WaitForResourceHealthyAsync(postgres.Resource.Name, cts.Token);
165var client = app.CreateHttpClient(pgWebBuilder.Resource.Name, "http");
167await app.ResourceNotifications.WaitForResourceHealthyAsync(pgWebBuilder.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
233await app.ResourceNotifications.WaitForResourceHealthyAsync(db1.Resource.Name, cts.Token);
242[$"ConnectionStrings:{db1.Resource.Name}"] = await db1.Resource.ConnectionStringExpression.GetValueAsync(default)
245hb.AddNpgsqlDataSource(db1.Resource.Name);
296await app.ResourceNotifications.WaitForResourceHealthyAsync(db2.Resource.Name, cts.Token);
305[$"ConnectionStrings:{db2.Resource.Name}"] = await db2.Resource.ConnectionStringExpression.GetValueAsync(default)
308hb.AddNpgsqlDataSource(db2.Resource.Name);
400[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
403hb.AddNpgsqlDataSource(db.Resource.Name);
409await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
486[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default)
489hb.AddNpgsqlDataSource(db.Resource.Name);
495await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
614hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
616hb.AddNpgsqlDataSource(newDb.Resource.Name);
622await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
656hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
658hb.AddNpgsqlDataSource(newDb.Resource.Name);
664await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
726hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
728hb.AddNpgsqlDataSource(newDb.Resource.Name);
734await app.ResourceNotifications.WaitForResourceHealthyAsync(postgres.Resource.Name, cts.Token);
786hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
787hb.AddKeyedNpgsqlDataSource(db.Resource.Name);
796await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
798var conn = host.Services.GetRequiredKeyedService<NpgsqlConnection>(db.Resource.Name);
Aspire.Hosting.Python (33)
Aspire.Hosting.Python.Tests (36)
AddPythonAppTests.cs (34)
38var manifest = await ManifestUtils.GetManifest(pyproj.Resource, manifestDirectory: projectDirectory);
76var manifest = await ManifestUtils.GetManifest(pyproj.Resource, manifestDirectory: projectDirectory);
136var environmentVariables = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(pyproj.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
733Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
737Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
757Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
864Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
868Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
895Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
899Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
1175var initialCommand = pythonBuilder.Resource.Command;
1180var newCommand = pythonBuilder.Resource.Command;
1398var resource = pythonApp.Resource;
1436var resource = pythonApp.Resource;
1476var resource = pythonApp.Resource;
1513var resource = pythonApp.Resource;
1544var resource = pythonApp.Resource;
1567pythonApp.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1589pythonApp.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
1607pythonApp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
1863Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
1867Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
1897Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
1901Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
1934Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
1938Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonInstallCommandAnnotation>(out var installAnnotation));
1958Assert.False(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out _));
2064Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2099Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2103Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var envAnnotation));
2139Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var envAnnotation));
2169Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonEnvironmentAnnotation>(out var envAnnotation));
2270Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
2302Assert.True(pythonApp.Resource.TryGetLastAnnotation<PythonPackageManagerAnnotation>(out var packageManager));
Aspire.Hosting.Qdrant (5)
Aspire.Hosting.Qdrant.Tests (21)
Aspire.Hosting.RabbitMQ (5)
Aspire.Hosting.RabbitMQ.Tests (21)
Aspire.Hosting.Redis (5)
Aspire.Hosting.Redis.Tests (80)
AddRedisTests.cs (35)
24Assert.Single(redis.Resource.Annotations, a => a is HealthCheckAnnotation hca && hca.Key == "redis_check");
140var manifest = await ManifestUtils.GetManifest(redis.Resource);
174var manifest = await ManifestUtils.GetManifest(redis.Resource);
209var manifest = await ManifestUtils.GetManifest(redis.Resource);
244var manifest = await ManifestUtils.GetManifest(redis.Resource);
327Assert.Equal($"{redis1.Resource.Name}.dev.internal", item.Value);
332Assert.Equal($"{redis1.Resource.PrimaryEndpoint.TargetPort!.Value}", item.Value);
337Assert.Equal(redis1.Resource.Name, item.Value);
343Assert.Equal(redis1.Resource.PasswordParameter!.Value, item.Value);
349Assert.Equal($"{redis2.Resource.Name}.dev.internal", item.Value);
354Assert.Equal($"{redis2.Resource.PrimaryEndpoint.TargetPort!.Value}", item.Value);
359Assert.Equal(redis2.Resource.Name, item.Value);
365Assert.Equal(redis2.Resource.PasswordParameter!.Value, item.Value);
371Assert.Equal($"{redis3.Resource.Name}.dev.internal", item.Value);
376Assert.Equal($"{redis3.Resource.PrimaryEndpoint.TargetPort!.Value}", item.Value);
381Assert.Equal(redis3.Resource.Name, item.Value);
521Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{redis.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
543Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{password}", config["REDIS_HOSTS"]);
568Assert.Equal($"myredis1:{redis1.Resource.Name}:6379:0:{redis1.Resource.PasswordParameter?.Value},myredis2:myredis2:6379:0:{redis2.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
589var volumeAnnotation = redis.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
614var volumeAnnotation = redis.Resource.Annotations.OfType<ContainerMountAnnotation>().Single();
684var args = await ArgumentEvaluator.GetArgumentListAsync(builder.Resource);
695Assert.True(redis.Resource.TryGetAnnotationsOfType<CommandLineArgsCallbackAnnotation>(out var argsAnnotations));
758var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
771var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
785var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
788Assert.Equal(password.Resource, annotation.Password);
800var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
816var annotation = Assert.Single(redis.Resource.Annotations.OfType<HttpsCertificateAnnotation>());
819Assert.Equal(password.Resource, annotation.Password);
837Assert.True(redis.Resource.TlsEnabled);
852Assert.False(redis.Resource.TlsEnabled);
RedisFunctionalTests.cs (45)
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);
80await app.WaitForTextAsync("Redis Connection", resourceName: commanderBuilder.Resource.Name);
82var client = app.CreateHttpClient(commanderBuilder.Resource.Name, "http");
85if (redis.Resource.TlsEnabled)
91var path = $"/apiv2/server/R:{redis.Resource.Name}:{endpoint.TargetPort}:0/info";
113[$"ConnectionStrings:{redis.Resource.Name}"] = await redis.Resource.GetConnectionStringAsync()
116hb.AddRedisClient(redis.Resource.Name);
152await rns.WaitForResourceAsync(redisInsightBuilder.Resource.Name, KnownResourceStates.Running).WaitAsync(cts.Token);
154var client = app.CreateHttpClient(redisInsightBuilder.Resource.Name, "http");
170Assert.Equal(redis1.Resource.Name, db.Name);
171Assert.Equal($"{redis1.Resource.Name}.dev.internal", db.Host);
172Assert.Equal(redis1.Resource.PrimaryEndpoint.TargetPort, db.Port);
176Assert.Equal(redis2.Resource.Name, db.Name);
177Assert.Equal($"{redis2.Resource.Name}.dev.internal", db.Host);
178Assert.Equal(redis2.Resource.PrimaryEndpoint.TargetPort, db.Port);
182Assert.Equal(redis3.Resource.Name, db.Name);
183Assert.Equal($"{redis3.Resource.Name}.dev.internal", db.Host);
184Assert.Equal(redis3.Resource.PrimaryEndpoint.TargetPort, db.Port);
220[$"ConnectionStrings:{redis1.Resource.Name}"] = $"{await redis1.Resource.GetConnectionStringAsync()},allowAdmin=true"
223hb.AddRedisClient(redis1.Resource.Name);
257[$"ConnectionStrings:{redis2.Resource.Name}"] = await redis2.Resource.GetConnectionStringAsync()
260hb.AddRedisClient(redis2.Resource.Name);
305[$"ConnectionStrings:{redis1.Resource.Name}"] = $"{await redis1.Resource.GetConnectionStringAsync()},allowAdmin=true"
308hb.AddRedisClient(redis1.Resource.Name);
340[$"ConnectionStrings:{redis2.Resource.Name}"] = await redis2.Resource.GetConnectionStringAsync()
343hb.AddRedisClient(redis2.Resource.Name);
390[$"ConnectionStrings:{redis1.Resource.Name}"] = $"{await redis1.Resource.GetConnectionStringAsync()},allowAdmin=true"
393hb.AddRedisClient(redis1.Resource.Name);
421[$"ConnectionStrings:{redis2.Resource.Name}"] = await redis2.Resource.GetConnectionStringAsync()
424hb.AddRedisClient(redis2.Resource.Name);
489await rns.WaitForResourceAsync(redisInsightBuilder1.Resource.Name, KnownResourceStates.Running).WaitAsync(cts.Token);
493var httpClient = app.CreateHttpClient(redisInsightBuilder1.Resource.Name, "http");
524await rns.WaitForResourceAsync(redisInsightBuilder2.Resource.Name, KnownResourceStates.Running).WaitAsync(cts.Token);
528var httpClient = app.CreateHttpClient(redisInsightBuilder2.Resource.Name, "http");
627await app.ResourceNotifications.WaitForResourceHealthyAsync(redis.Resource.Name, cts.Token);
Aspire.Hosting.Seq.Tests (14)
Aspire.Hosting.SqlServer (5)
Aspire.Hosting.SqlServer.Tests (47)
AddSqlServerTests.cs (13)
21Assert.Equal("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", sql.Resource.PasswordParameter.Default?.GetType().FullName);
31Assert.NotEqual("Aspire.Hosting.ApplicationModel.UserSecretsParameterDefault", sql.Resource.PasswordParameter.Default?.GetType().FullName);
129var serverManifest = await ManifestUtils.GetManifest(sqlServer.Resource);
130var dbManifest = await ManifestUtils.GetManifest(db.Resource);
170var serverManifest = await ManifestUtils.GetManifest(sqlServer.Resource);
227Assert.Equal("customers1", db1.Resource.DatabaseName);
228Assert.Equal("customers2", db2.Resource.DatabaseName);
230Assert.Equal("{sqlserver1.connectionString};Initial Catalog=customers1", db1.Resource.ConnectionStringExpression.ValueExpression);
231Assert.Equal("{sqlserver1.connectionString};Initial Catalog=customers2", db2.Resource.ConnectionStringExpression.ValueExpression);
245Assert.Equal("imports", db1.Resource.DatabaseName);
246Assert.Equal("imports", db2.Resource.DatabaseName);
248Assert.Equal("{sqlserver1.connectionString};Initial Catalog=imports", db1.Resource.ConnectionStringExpression.ValueExpression);
249Assert.Equal("{sqlserver2.connectionString};Initial Catalog=imports", db2.Resource.ConnectionStringExpression.ValueExpression);
SqlServerFunctionalTests.cs (34)
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);
81hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
83hb.AddSqlServerDbContext<TestDbContext>(newDb.Resource.Name);
84hb.AddSqlServerClient(newDb.Resource.Name);
143var password = sqlserver1.Resource.PasswordParameter.Value;
181await app1.ResourceNotifications.WaitForResourceHealthyAsync(db1.Resource.Name, cts.Token);
190[$"ConnectionStrings:{db1.Resource.Name}"] = await db1.Resource.ConnectionStringExpression.GetValueAsync(default),
193hb1.AddSqlServerClient(db1.Resource.Name);
267await app2.ResourceNotifications.WaitForResourceHealthyAsync(db2.Resource.Name, cts.Token);
276[$"ConnectionStrings:{db2.Resource.Name}"] = await db2.Resource.ConnectionStringExpression.GetValueAsync(default),
279hb2.AddSqlServerClient(db2.Resource.Name);
373hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
375hb.AddSqlServerClient(newDb.Resource.Name);
381await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
427hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
429hb.AddSqlServerClient(newDb.Resource.Name);
435await app.ResourceNotifications.WaitForResourceHealthyAsync(newDb.Resource.Name, cts.Token);
500hb.Configuration[$"ConnectionStrings:{newDb.Resource.Name}"] = await newDb.Resource.ConnectionStringExpression.GetValueAsync(default);
502hb.AddSqlServerClient(newDb.Resource.Name);
508await app.ResourceNotifications.WaitForResourceHealthyAsync(sqlserver.Resource.Name, cts.Token);
561hb.Configuration[$"ConnectionStrings:{db.Resource.Name}"] = await db.Resource.ConnectionStringExpression.GetValueAsync(default);
562hb.AddKeyedSqlServerClient(db.Resource.Name);
571await app.ResourceNotifications.WaitForResourceHealthyAsync(db.Resource.Name, cts.Token);
573var conn = host.Services.GetRequiredKeyedService<SqlConnection>(db.Resource.Name);
Aspire.Hosting.Testing.Tests (2)
Aspire.Hosting.Tests (900)
ApplicationModel\Docker\WithDockerfileBuilderTests.cs (26)
27var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
51var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
70var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
91var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
98Resource = container.Resource,
143var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
149Resource = container.Resource,
179var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
185Resource = container.Resource,
213var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
219Resource = container.Resource,
254var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
260Resource = container.Resource,
289Assert.Equal("mycontainer", container.Resource.Name);
290var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
310Assert.Equal("mycontainer", container.Resource.Name);
311var callbackAnnotation = container.Resource.Annotations.OfType<DockerfileBuilderCallbackAnnotation>().LastOrDefault();
333var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
340Resource = container.Resource,
369var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
376Resource = container.Resource,
401var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
435var buildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().LastOrDefault();
441Resource = container.Resource,
471var envAnnotation = container.Resource.Annotations.OfType<EnvironmentAnnotation>().FirstOrDefault();
473var endpointAnnotation = container.Resource.Annotations.OfType<EndpointAnnotation>().FirstOrDefault();
ContainerRegistryResourceTests.cs (66)
23Assert.Equal("docker-hub", registry.Resource.Name);
25var containerRegistry = registry.Resource as IContainerRegistry;
39Assert.Equal("acr", registry.Resource.Name);
41var containerRegistry = registry.Resource as IContainerRegistry;
57Assert.Equal("my-registry", registry.Resource.Name);
59var containerRegistry = registry.Resource as IContainerRegistry;
74Assert.Equal("my-registry", registry.Resource.Name);
76var containerRegistry = registry.Resource as IContainerRegistry;
200var containerRegistry = registry.Resource as IContainerRegistry;
214var containerRegistry = registry.Resource as IContainerRegistry;
229var containerRegistry = registry.Resource as IContainerRegistry;
245var containerRegistry = registry.Resource as IContainerRegistry;
263var containerRegistry = registry.Resource as IContainerRegistry;
278Assert.IsAssignableFrom<IContainerRegistry>(registry.Resource);
309var annotation = container.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>().SingleOrDefault();
311Assert.Same(registry.Resource, annotation.Registry);
344var pipelineStepAnnotations = container.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
345var pipelineConfigAnnotations = container.Resource.Annotations.OfType<PipelineConfigurationAnnotation>().ToList();
359var pipelineStepAnnotations = project.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
360var pipelineConfigAnnotations = project.Resource.Annotations.OfType<PipelineConfigurationAnnotation>().ToList();
374var pipelineStepAnnotation = Assert.Single(project.Resource.Annotations.OfType<PipelineStepAnnotation>());
379Resource = project.Resource
398var pipelineStepAnnotation = Assert.Single(container.Resource.Annotations.OfType<PipelineStepAnnotation>());
403Resource = container.Resource
422var pipelineStepAnnotations = container.Resource.Annotations.OfType<PipelineStepAnnotation>().ToList();
429Resource = container.Resource
446var pipelineStepAnnotation = Assert.Single(project.Resource.Annotations.OfType<PipelineStepAnnotation>());
451Resource = project.Resource
474var annotation = project.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>().FirstOrDefault();
476Assert.Same(registry.Resource, annotation.Registry);
490var annotations = project.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>().ToList();
492Assert.Same(registry1.Resource, annotations[0].Registry);
502var annotation = new ContainerRegistryReferenceAnnotation(registry.Resource);
504Assert.Same(registry.Resource, annotation.Registry);
519Assert.Empty(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
526var registryTargetAnnotation = Assert.Single(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
527Assert.Same(registry.Resource, registryTargetAnnotation.Registry);
547var registryTargetAnnotations = project.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList();
551Assert.Contains(registry1.Resource, registryResources);
552Assert.Contains(registry2.Resource, registryResources);
571var containerRegistry = project.Resource.GetContainerRegistry();
572Assert.Same(registry.Resource, containerRegistry);
594var containerRegistry = project.Resource.GetContainerRegistry();
595Assert.Same(registry2.Resource, containerRegistry);
616var exception = Assert.Throws<InvalidOperationException>(project.Resource.GetContainerRegistry);
630var exception = Assert.Throws<InvalidOperationException>(project.Resource.GetContainerRegistry);
652Assert.Single(project1.Resource.Annotations.OfType<RegistryTargetAnnotation>());
653Assert.Single(project2.Resource.Annotations.OfType<RegistryTargetAnnotation>());
654Assert.Single(container.Resource.Annotations.OfType<RegistryTargetAnnotation>());
676var registryTargetAnnotations = project.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList();
679var containerRegistryRefAnnotation = Assert.Single(project.Resource.Annotations.OfType<ContainerRegistryReferenceAnnotation>());
680Assert.Same(specificRegistry.Resource, containerRegistryRefAnnotation.Registry);
683var containerRegistry = project.Resource.GetContainerRegistry();
684Assert.Same(specificRegistry.Resource, containerRegistry);
699Assert.Empty(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
706var registryTargetAnnotation = Assert.Single(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
707Assert.Same(acr.Resource, registryTargetAnnotation.Registry);
727Assert.Single(project.Resource.Annotations.OfType<RegistryTargetAnnotation>());
728Assert.Single(container.Resource.Annotations.OfType<RegistryTargetAnnotation>());
747var containerRegistry = project.Resource.GetContainerRegistry();
748Assert.Same(acr.Resource, containerRegistry);
768var containerRegistry = env.Resource.GetContainerRegistry();
769Assert.Same(acr.Resource, containerRegistry);
789var registryTargetAnnotations = project.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList();
793Assert.Contains(acr.Resource, registryResources);
794Assert.Contains(dockerHub.Resource, registryResources);
Dcp\DcpExecutorTests.cs (30)
61.WithReplicas(2).Resource;
223}).Resource;
1277HasKnownCommandAnnotations(exe.Resource);
1278HasKnownCommandAnnotations(container.Resource);
1279HasKnownCommandAnnotations(project.Resource);
2148var annotationToRemove = projectBuilder.Resource.Annotations.OfType<SupportsDebuggingAnnotation>().FirstOrDefault();
2151projectBuilder.Resource.Annotations.Remove(annotationToRemove);
2223await AssertEndpoint(executable.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 5678);
2224await AssertEndpoint(executable.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 8765);
2228await AssertTunneledPort(executable.Resource, "proxied", 5678);
2229await AssertTunneledPort(executable.Resource, "notProxied", 8765);
2243await AssertEndpoint(executable.Resource, endpointName, KnownNetworkIdentifiers.DefaultAspireContainerNetwork, expectedContainerHost, port);
2245await AssertEndpoint(executable.Resource, endpointName, KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, hostPort);
2249.Where(c => c.AppModelResourceName == container.Resource.Name)
2257await AssertEndpoint(executable.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 5678);
2258await AssertEndpoint(executable.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 8765);
2259await AssertEndpoint(executable.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, expectedContainerHost, 5678);
2260await AssertEndpoint(executable.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, expectedContainerHost, 8765);
2263await AssertEndpoint(container.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 15678);
2264await AssertEndpoint(container.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 18765);
2266await AssertEndpoint(container.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 11234);
2267await AssertEndpoint(container.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{container.Resource.Name}.dev.internal", 18765);
2269await AssertEndpoint(containerWithAlias.Resource, "proxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 25678);
2270await AssertEndpoint(containerWithAlias.Resource, "notProxied", KnownNetworkIdentifiers.LocalhostNetwork, KnownHostNames.Localhost, 28765);
2272await AssertEndpoint(containerWithAlias.Resource, "proxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 21234);
2273await AssertEndpoint(containerWithAlias.Resource, "notProxied", KnownNetworkIdentifiers.DefaultAspireContainerNetwork, $"{containerWithAlias.Resource.Name}.dev.internal", 28765);
DistributedApplicationModelExtensionsTests.cs (8)
32item => Assert.Equal(container1.Resource, item),
33item => Assert.Equal(container2.Resource, item),
34item => Assert.Equal(project.Resource, item),
35item => Assert.Equal(emulator.Resource, item));
51containerWithDockerfile.Resource.Annotations.Add(new DockerfileBuildAnnotation("/context", "/Dockerfile", null));
55buildOnlyContainer.Resource.Annotations.Add(new DockerfileBuildAnnotation("/context", "/Dockerfile", null) { HasEntrypoint = false });
67item => Assert.Equal(project.Resource, item),
68item => Assert.Equal(containerWithDockerfile.Resource, item));
DistributedApplicationTests.cs (21)
636using var clientA = app.CreateHttpClient(testProgram.ServiceABuilder.Resource.Name, "http");
637using var clientC = app.CreateHttpClient(testProgram.ServiceCBuilder.Resource.Name, "http");
644var uri = app.GetEndpoint(testProgram.ServiceBBuilder.Resource.Name, "http");
962var dependentRunningResourceEvent = await rns.WaitForResourceAsync(container.Resource.Name, e => e.Snapshot.State?.Text == KnownResourceStates.Running).DefaultTimeout(TestConstants.LongTimeoutTimeSpan);
1564await app.WaitForTextAsync("Content root path:", resourceName: testProgram.ServiceABuilder.Resource.Name).DefaultTimeout(TestConstants.LongTimeoutDuration);
1567var httpEndPoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "http");
1585var httpsEndpoint = app.GetEndpoint(testProgram.ServiceABuilder.Resource.Name, endpointName: "https");
1635using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
1643var sslVal = redis.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1645Assert.Equal($"localhost:{port},password={redis.Resource.PasswordParameter?.Value}{sslVal}", env.Value);
1650if (redis.Resource.TlsEnabled)
1661sslVal = redisNoPort.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1663Assert.Equal($"localhost:6379,password={redisNoPort.Resource.PasswordParameter?.Value}{sslVal}", otherRedisEnv.Value);
1666if (redisNoPort.Resource.TlsEnabled)
1704using var clientA = app.CreateHttpClient(servicea.Resource.Name, "http");
1716var sslVal = redis.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1718Assert.Equal($"localhost:{port},password={redis.Resource.PasswordParameter!.Value}{sslVal}", env.Value);
1723if (redis.Resource.TlsEnabled)
1734sslVal = redisNoPort.Resource.TlsEnabled ? ",ssl=true" : string.Empty;
1736Assert.Equal($"localhost:6379,password={redisNoPort.Resource.PasswordParameter!.Value}{sslVal}", otherRedisEnv.Value);
1740if (redisNoPort.Resource.TlsEnabled)
ExpressionResolverTests.cs (8)
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();
207var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(test.Resource, DistributedApplicationOperation.Run, testServiceProvider).DefaultTimeout();
233var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(dep.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
252var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(dep.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
270var endpointAnnotation = dependency.Resource.Annotations.OfType<EndpointAnnotation>().Single();
275_ = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(consumer.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).AsTask().TimeoutAfter(TimeSpan.FromSeconds(2));
ExternalServiceTests.cs (37)
22Assert.Equal("nuget", externalService.Resource.Name);
23Assert.Equal("https://nuget.org/", externalService.Resource.Uri?.ToString());
24Assert.Null(externalService.Resource.UrlParameter);
35Assert.Equal("nuget", externalService.Resource.Name);
36Assert.Equal("https://nuget.org/", externalService.Resource.Uri?.ToString());
37Assert.Null(externalService.Resource.UrlParameter);
48Assert.Equal("nuget", externalService.Resource.Name);
49Assert.Null(externalService.Resource.Uri);
50Assert.NotNull(externalService.Resource.UrlParameter);
51Assert.Equal("nuget-url", externalService.Resource.UrlParameter.Name);
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();
212Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
213Assert.NotNull(healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")));
228Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
229Assert.NotNull(healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")));
251Assert.True(externalService.Resource.TryGetAnnotationsOfType<ResourceSnapshotAnnotation>(out var snapshotAnnotations));
265Assert.True(externalService.Resource.TryGetAnnotationsOfType<ManifestPublishingCallbackAnnotation>(out var manifestAnnotations));
322externalService.Resource.Name,
349externalService.Resource.Name,
376externalService.Resource.Name,
400Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
401var healthCheckAnnotation = healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external"));
421Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
422var healthCheckAnnotation = healthCheckAnnotations.FirstOrDefault(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external"));
446Assert.True(externalService.Resource.TryGetAnnotationsOfType<HealthCheckAnnotation>(out var healthCheckAnnotations));
447var healthCheckKey = healthCheckAnnotations.First(hc => hc.Key.StartsWith($"{externalService.Resource.Name}_external")).Key;
471var manifest = await ManifestUtils.GetManifest(project.Resource);
488Assert.Equal("service", externalService.Resource.Name);
489Assert.Equal(validUrl, externalService.Resource.Uri?.ToString());
539var 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 (43)
35var childResource = builder.AddResource(new CustomChildResource("child", parentResource.Resource));
52if (item.Resource == parentResource.Resource)
56else if (item.Resource == childResource.Resource)
100if (item.Resource == parentResource.Resource)
104else if (item.Resource == childResource.Resource)
147applicationEventing.Subscribe<InitializeResourceEvent>(resource.Resource, (@event, ct) =>
165Assert.Equal(resource.Resource, initEvent.Resource);
200if (item.Resource == parent.Resource)
204else if (item.Resource == child.Resource)
209else if (item.Resource == nestedChild.Resource)
213else if (item.Resource == child2.Resource)
266if (item.Resource == firstParent.Resource)
270else if (item.Resource == secondParent.Resource)
274else if (item.Resource == child.Resource)
318if (item.Resource == projectA.Resource)
322else if (item.Resource == projectB.Resource)
368new ChildResourceWithConnectionString("child", new Dictionary<string, string> { { "Namespace", "ns" } }, parentResource.Resource)
371new ChildResourceWithConnectionString("grand-child", new Dictionary<string, string> { { "Database", "db" } }, childResource.Resource)
388applicationEventing.Subscribe<ConnectionStringAvailableEvent>(parentResource.Resource, (_, _) =>
393applicationEventing.Subscribe<ConnectionStringAvailableEvent>(childResource.Resource, (_, _) =>
398applicationEventing.Subscribe<ConnectionStringAvailableEvent>(grandChildResource.Resource, (_, _) =>
404await events.PublishAsync(new OnResourceStartingContext(CancellationToken.None, KnownResourceTypes.Container, parentResource.Resource, parentResource.Resource.Name));
435if (item.Resource == resource.Resource)
449await applicationEventing.PublishAsync(new ConnectionStringAvailableEvent(resource.Resource, app.Services), CancellationToken.None);
607var customChild = builder.AddResource(new CustomChildResource("custom-child", parentContainer.Resource));
625parentContainer.Resource,
632var childContainerState = resourceNotificationService.TryGetCurrentState(childContainer.Resource.Name, out var childContainerEvent) ? childContainerEvent.Snapshot.State?.Text : null;
633var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
654var customChild = builder.AddResource(new CustomChildResource("custom-child", parentContainer.Resource));
672parentContainer.Resource,
679var childProjectState = resourceNotificationService.TryGetCurrentState(childProject.Resource.Name, out var childProjectEvent) ? childProjectEvent.Snapshot.State?.Text : null;
680var customChildState = resourceNotificationService.TryGetCurrentState(customChild.Resource.Name, out var customChildEvent) ? customChildEvent.Snapshot.State?.Text : null;
721if (item.Resource == parent.Resource)
725else if (item.Resource == child.Resource)
729else if (item.Resource == child2.Resource)
759parent.WithChildRelationship(child.Resource)
760.WithChildRelationship(child2.Resource);
778if (item.Resource == parent.Resource)
782else if (item.Resource == child.Resource)
786else if (item.Resource == child2.Resource)
832if (item.Resource == parentProject.Resource)
836else if (item.Resource == childProject.Resource)
Orchestrator\RelationshipEvaluatorTests.cs (29)
18var childResource = builder.AddResource(new CustomChildResource("child", parentResource.Resource));
19var grandChildResource = builder.AddResource(new CustomChildResource("grandchild", childResource.Resource));
20var greatGrandChildResource = builder.AddResource(new CustomChildResource("greatgrandchild", grandChildResource.Resource));
34Assert.Collection(parentChildLookup[parentResource.Resource],
35x => Assert.Equal(childResource.Resource, x),
36x => Assert.Equal(childWithAnnotationsResource.Resource, x));
38Assert.Single(parentChildLookup[childResource.Resource], grandChildResource.Resource);
39Assert.Single(parentChildLookup[grandChildResource.Resource], greatGrandChildResource.Resource);
41Assert.Empty(parentChildLookup[greatGrandChildResource.Resource]);
43Assert.Single(parentChildLookup[childWithAnnotationsResource.Resource], grandChildWithAnnotationsResource.Resource);
45Assert.Empty(parentChildLookup[grandChildWithAnnotationsResource.Resource]);
66Assert.Collection(parentChildLookup[parentResource.Resource],
67x => Assert.Equal(child1Resource.Resource, x),
68x => Assert.Equal(child2Resource.Resource, x));
80parentResource.WithChildRelationship(child1Resource.Resource)
81.WithChildRelationship(child2Resource.Resource);
89Assert.Collection(parentChildLookup[parentResource.Resource],
90x => Assert.Equal(child1Resource.Resource, x),
91x => Assert.Equal(child2Resource.Resource, x));
112Assert.Collection(parentChildLookup[parentResource.Resource],
113x => Assert.Equal(child1Resource.Resource, x),
114x => Assert.Equal(child2Resource.Resource, x));
135Assert.Single(parentChildLookup[grandParentResource.Resource], parentResource.Resource);
136Assert.Single(parentChildLookup[parentResource.Resource], childResource.Resource);
Publishing\ResourceContainerImageManagerTests.cs (39)
39await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
71await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
102await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
139await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
173await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
203await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
239await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
278await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
313await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
345await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
376await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
426await imageBuilder.BuildImageAsync(servicea.Resource, cts.Token);
455await imageBuilder.PushImageAsync(testResource.Resource, cts.Token);
460resource => Assert.Equal(testResource.Resource, resource));
480imageBuilder.PushImageAsync(testResource.Resource, cts.Token));
515await imageBuilder.BuildImagesAsync([servicea.Resource], cts.Token);
544await imageBuilder.BuildImagesAsync([dockerfileResource.Resource], cts.Token);
576await imageBuilder.BuildImagesAsync([dockerfileResource.Resource], cts.Token);
613imageBuilder.BuildImagesAsync([container.Resource], cts.Token));
658await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
731await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
826await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
871var annotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
878await imageBuilder.BuildImageAsync(container.Resource, cts.Token);
972var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1011var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1038var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1065var context = await container.Resource.ProcessContainerBuildOptionsCallbackAsync(
1070var dockerfileBuildAnnotation = container.Resource.Annotations.OfType<DockerfileBuildAnnotation>().Single();
1114var context = await container.Resource.ProcessContainerBuildOptionsCallbackAsync(
1145var context = await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1178await servicea.Resource.ProcessContainerBuildOptionsCallbackAsync(
1184Assert.Equal(servicea.Resource, capturedResource);
1225await imageManager.BuildImagesAsync([servicea.Resource], cts.Token);
1269() => imageManager.BuildImagesAsync([servicea.Resource], cts.Token));
1302() => imageManager.BuildImageAsync(container.Resource, cts.Token));
1345() => imageManager.BuildImagesAsync([servicea.Resource, serviceb.Resource], cts.Token));
1378() => imageManager.BuildImagesAsync([servicea.Resource], cts.Token));
ResourceDependencyTests.cs (137)
21var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
23Assert.Contains(redis.Resource, dependencies);
38var dependencies = await frontend.Resource.GetResourceDependenciesAsync(executionContext);
40Assert.Contains(api.Resource, dependencies);
55var dependencies = await frontend.Resource.GetResourceDependenciesAsync(executionContext);
57Assert.Contains(api.Resource, dependencies);
72var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
74Assert.Contains(db.Resource, dependencies);
75Assert.Contains(postgres.Resource, dependencies); // Parent of db
85.WithConnectionStringRedirection(redis.Resource);
91var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
93Assert.Contains(redirect.Resource, dependencies);
94Assert.Contains(redis.Resource, dependencies); // The redirect target
106var dependencies = await db.Resource.GetResourceDependenciesAsync(executionContext);
108Assert.Contains(postgres.Resource, dependencies);
121var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
123Assert.Contains(redis.Resource, dependencies);
136var dependencies = await mainContainer.Resource.GetResourceDependenciesAsync(executionContext);
138Assert.Contains(initContainer.Resource, dependencies);
151var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
153Assert.Contains(param.Resource, dependencies);
166var dependencies = await exe.Resource.GetResourceDependenciesAsync(executionContext);
168Assert.Contains(param.Resource, dependencies);
184var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
186Assert.Contains(host.Resource, dependencies);
187Assert.Contains(port.Resource, dependencies);
188Assert.Contains(password.Resource, dependencies);
204var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
206Assert.Contains(b.Resource, dependencies);
207Assert.Contains(c.Resource, dependencies);
223var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
225Assert.Contains(b.Resource, dependencies);
226Assert.Contains(c.Resource, dependencies);
244var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
246Assert.Contains(b.Resource, dependencies);
247Assert.Contains(c.Resource, dependencies);
264var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
266Assert.Contains(b.Resource, dependencies);
267Assert.Contains(c.Resource, dependencies);
268Assert.Contains(d.Resource, dependencies);
285var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
287Assert.Contains(b.Resource, dependencies);
288Assert.Contains(c.Resource, dependencies);
289Assert.Contains(d.Resource, dependencies);
290Assert.Contains(e.Resource, dependencies);
308var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
309Assert.Contains(b.Resource, dependencies);
310Assert.Contains(c.Resource, dependencies);
311Assert.Contains(d.Resource, dependencies);
329var dependencies = await frontend.Resource.GetResourceDependenciesAsync(executionContext);
331Assert.Contains(backend.Resource, dependencies);
347var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
349Assert.Contains(db.Resource, dependencies);
350Assert.Contains(postgres.Resource, dependencies); // Parent included due to transitive dependency
364var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
366Assert.DoesNotContain(unrelatedResource.Resource, dependencies);
377var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
379Assert.DoesNotContain(container.Resource, dependencies);
393var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
395Assert.DoesNotContain(dependentContainer.Resource, dependencies);
408var dependencies = await db1.Resource.GetResourceDependenciesAsync(executionContext);
410Assert.DoesNotContain(db2.Resource, dependencies);
411Assert.Contains(postgres.Resource, dependencies); // Parent IS included
426var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
428Assert.Contains(b.Resource, dependencies);
429Assert.DoesNotContain(c.Resource, dependencies);
430Assert.DoesNotContain(d.Resource, dependencies);
441var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
457var dependencies = await container.Resource.GetResourceDependenciesAsync(executionContext);
459Assert.Contains(redis.Resource, dependencies);
477var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
479Assert.Contains(b.Resource, dependencies);
480Assert.DoesNotContain(c.Resource, dependencies);
497var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.Recursive);
499Assert.Contains(b.Resource, dependencies);
500Assert.Contains(c.Resource, dependencies);
523var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
526Assert.Contains(b.Resource, dependencies);
541var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
545Assert.Contains(db.Resource, dependencies);
546Assert.Contains(postgres.Resource, dependencies);
566var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
569Assert.Contains(b.Resource, dependencies);
571Assert.DoesNotContain(c.Resource, dependencies);
590var dependencies = await a.Resource.GetResourceDependenciesAsync(executionContext);
592Assert.Contains(b.Resource, dependencies);
593Assert.Contains(c.Resource, dependencies);
613[a.Resource, b.Resource], executionContext);
615Assert.Contains(x.Resource, dependencies);
616Assert.Contains(y.Resource, dependencies);
633[a.Resource, b.Resource], executionContext);
635Assert.Contains(x.Resource, dependencies);
652[a.Resource, b.Resource], executionContext);
655Assert.DoesNotContain(a.Resource, dependencies);
656Assert.DoesNotContain(b.Resource, dependencies);
675[a.Resource, b.Resource], executionContext);
678Assert.Contains(c.Resource, dependencies);
680Assert.DoesNotContain(a.Resource, dependencies);
681Assert.DoesNotContain(b.Resource, dependencies);
705[a.Resource, b.Resource, c.Resource], executionContext);
731[a.Resource, c.Resource], executionContext);
733Assert.Contains(b.Resource, dependencies);
734Assert.Contains(d.Resource, dependencies);
735Assert.DoesNotContain(a.Resource, dependencies);
736Assert.DoesNotContain(c.Resource, dependencies);
762[a.Resource, d.Resource], executionContext, ResourceDependencyDiscoveryMode.DirectOnly);
765Assert.Contains(b.Resource, dependencies);
766Assert.Contains(e.Resource, dependencies);
767Assert.DoesNotContain(c.Resource, dependencies);
768Assert.DoesNotContain(f.Resource, dependencies);
794[a.Resource, b.Resource, c.Resource], executionContext);
797Assert.Contains(d.Resource, dependencies);
798Assert.DoesNotContain(a.Resource, dependencies);
799Assert.DoesNotContain(b.Resource, dependencies);
800Assert.DoesNotContain(c.Resource, dependencies);
817[parent.Resource, child.Resource], executionContext);
820Assert.DoesNotContain(parent.Resource, dependencies);
821Assert.DoesNotContain(child.Resource, dependencies);
845[a.Resource, b.Resource, c.Resource], executionContext);
847Assert.Contains(x.Resource, dependencies);
848Assert.Contains(y.Resource, dependencies);
849Assert.Contains(z.Resource, dependencies);
869var singleDeps = await a.Resource.GetResourceDependenciesAsync(executionContext);
870var multiDeps = await ResourceExtensions.GetDependenciesAsync([a.Resource], executionContext);
ResourceExtensionsTests.cs (50)
21Assert.False(parent.Resource.HasAnnotationOfType<DummyAnnotation>());
22Assert.False(parent.Resource.TryGetAnnotationsOfType<DummyAnnotation>(out var annotations));
33Assert.False(parent.Resource.HasAnnotationOfType<DummyAnnotation>());
34Assert.False(parent.Resource.TryGetAnnotationsOfType<DummyAnnotation>(out var annotations));
45Assert.True(parent.Resource.HasAnnotationOfType<DummyAnnotation>());
46Assert.True(parent.Resource.TryGetAnnotationsOfType<DummyAnnotation>(out var annotations));
57Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
58Assert.True(parent.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
68Assert.False(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
69Assert.False(parent.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
80Assert.False(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
81Assert.False(parent.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
92var child = builder.AddResource(new ChildResource("child", parent.Resource))
95Assert.False(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
96Assert.False(child.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
107var child = builder.AddResource(new ChildResource("child", parent.Resource));
109Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
110Assert.True(child.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
121var child = builder.AddResource(new ChildResource("child", parent.Resource))
124Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
125Assert.True(child.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
136var child = builder.AddResource(new ChildResource("child", parent: parent.Resource))
139var grandchild = builder.AddResource(new ChildResource("grandchild", parent: child.Resource))
142Assert.True(parent.Resource.HasAnnotationIncludingAncestorsOfType<DummyAnnotation>());
143Assert.True(grandchild.Resource.TryGetAnnotationsIncludingAncestorsOfType<DummyAnnotation>(out var annotations));
153Assert.True(container.Resource.TryGetContainerImageName(out var imageName));
163Assert.True(container.Resource.TryGetContainerImageName(out var imageName));
182var env = await container.Resource.GetEnvironmentVariableValuesAsync().DefaultTimeout();
217var env = await container.Resource.GetEnvironmentVariableValuesAsync().DefaultTimeout();
252var env = await container.Resource.GetEnvironmentVariableValuesAsync(DistributedApplicationOperation.Publish).DefaultTimeout();
286.Resource.GetArgumentValuesAsync().DefaultTimeout();
298.Resource.GetArgumentValuesAsync().DefaultTimeout();
316var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
325Resource = containerResource.Resource,
363var annotations = containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>().ToList();
373Resource = containerResource.Resource,
393Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
397Assert.Single(projectResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
401Assert.Single(executableResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
418var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
428Resource = containerResource.Resource,
445var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
457var annotation = Assert.Single(containerResource.Resource.Annotations.OfType<ContainerImagePushOptionsCallbackAnnotation>());
469Assert.Collection(resource.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>(),
477var annotation = Assert.Single(resource.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>());
481Assert.Collection(resource.Resource.Annotations.OfType<ContainerFilesSourceAnnotation>(),
527var result = resource.Resource.TryGetInstances(out var instances);
543var result = resource.Resource.TryGetInstances(out var instances);
564var result = resource.Resource.GetResolvedResourceNames();
579var result = resource.Resource.GetResolvedResourceNames();
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)
33container.Resource,
55var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
59Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
64Assert.Same(projectA.Resource, r.Resource);
76var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
92var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(project.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
108var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
125var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
129Assert.True(projectA.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
134Assert.Same(parameter.Resource, r.Resource);
148var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource,
165projectA.Resource,
191var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
215var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
242.WithEnvironment("HOST", $"{test.Resource};name=1");
244var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(containerB.Resource).DefaultTimeout();
245var manifestConfig = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(containerB.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
259Assert.True(containerB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
264Assert.Same(container.Resource, r.Resource);
269Assert.Same(test.Resource, r.Resource);
290Assert.True(containerB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
295Assert.Same(container.Resource, r.Resource);
323var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(containerB.Resource).DefaultTimeout();
347var runConfig = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(targetBuilder.Resource, DistributedApplicationOperation.Run).DefaultTimeout();
353var publishConfig = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(targetBuilder.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
358Assert.True(targetBuilder.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
363Assert.Same(sourceBuilder.Resource, r.Resource);
378projectA.Resource,
386projectA.Resource,
399var testValue = new TestValueWithReferences("test-value", resourceA.Resource);
405Assert.True(projectA.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
408Assert.Same(resourceA.Resource, relationship.Resource);
412projectA.Resource,
459projectA.Resource,
467projectA.Resource,
474Assert.True(projectA.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
477Assert.Same(container.Resource, relationship.Resource);
WithHttpCommandTests.cs (29)
91var command = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().FirstOrDefault();
97Assert.Equal($"{resourceBuilder.Resource.Name}-http-http-post-/some-path", command.Name);
124var command = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().FirstOrDefault();
154var commands = resourceBuilder.Resource.Annotations.OfType<ResourceCommandAnnotation>().ToList();
195await MoveResourceToRunningStateAsync(app, service.Resource);
197var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
227await MoveResourceToRunningStateAsync(app, service.Resource);
229var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
252await MoveResourceToRunningStateAsync(app, service.Resource);
254var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
298await app.ResourceNotifications.PublishUpdateAsync(serviceA.Resource, s => s with
302await app.ResourceNotifications.WaitForResourceAsync(serviceA.Resource.Name, KnownResourceStates.Running).DefaultTimeout();
305await MoveResourceToRunningStateAsync(app, serviceB.Resource);
307var result = await app.ResourceCommands.ExecuteCommandAsync(serviceB.Resource, "mycommand").DefaultTimeout();
335Assert.Equal(service.Resource.Name, requestContext.ResourceName);
349await MoveResourceToRunningStateAsync(app, service.Resource);
351var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
379Assert.Equal(service.Resource.Name, resultContext.ResourceName);
393await MoveResourceToRunningStateAsync(app, service.Resource);
395var result = await app.ResourceCommands.ExecuteCommandAsync(service.Resource, "mycommand").DefaultTimeout();
419await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
425service.Resource.Name,
431await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
438service.Resource.Name,
474await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
481service.Resource.Name,
489await app.ResourceNotifications.PublishUpdateAsync(service.Resource, s => s with
496service.Resource.Name,
551var endpointAnnotation = service.Resource.Annotations.OfType<EndpointAnnotation>().Single();
WithReferenceTests.cs (41)
29var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
34Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
37Assert.Same(projectA.Resource, r.Resource);
52var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
72var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
102var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
151var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
179var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
205var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
213Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
216Assert.Same(projectA.Resource, r.Resource);
234var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
242Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
245Assert.Same(projectA.Resource, r.Resource);
260await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
277var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
296await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
316var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
332var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
348var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Publish).DefaultTimeout();
367var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
397var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
403Assert.True(projectB.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var relationships));
406Assert.Same(resource.Resource, r.Resource);
407Assert.True(resource.Resource.TryGetAnnotationsOfType<ResourceRelationshipAnnotation>(out var csRelationships));
412Assert.Same(endpoint.Resource, r.Resource);
417Assert.Same(key.Resource, r.Resource);
422Assert.Same(endpoint.Resource, r.Resource);
427Assert.Same(key.Resource, r.Resource);
449var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
471var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
503var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectA.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
526var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
551var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(executable.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
576var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(executable.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
603var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(executable.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
628var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
655var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
684var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
707var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
729var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout();
WithUrlsTests.cs (30)
27var urlsCallback = projectA.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>()
40Assert.Empty(projectA.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>());
44Assert.NotEmpty(projectA.Resource.Annotations.OfType<ResourceUrlsCallbackAnnotation>());
152var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
176var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
191projectA.WithUrl($"{projectA.Resource.GetEndpoint("https")}/test", "Example")
202var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
230var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
263var urls = projectB.Resource.Annotations.OfType<ResourceUrlAnnotation>();
267Assert.StartsWith($"http://{projectB.Resource.Name.ToLowerInvariant()}{expectedHostSuffix}", u.Url);
306var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
329var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
359var urls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
377var httpEndpoint = servicea.Resource.GetEndpoint("http");
387servicea.Resource.Name,
402var httpEndpoint = servicea.Resource.GetEndpoint("http");
414servicea.Resource.Name,
447servicea.Resource.Name,
482if (notification.Resource == servicea.Resource && notification.Snapshot.Urls.Length > 0)
498await rns.WaitForResourceAsync(servicea.Resource.Name, KnownResourceStates.Running, cts.Token);
600if (notification.Resource == custom.Resource && notification.Snapshot.Urls.Length > 0)
616await rns.WaitForResourceAsync(custom.Resource.Name, KnownResourceStates.Running, cts.Token);
771var allUrls = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>();
832var endpointUrl = project.Resource.Annotations.OfType<ResourceUrlAnnotation>().FirstOrDefault(u => u.Endpoint?.EndpointName == "test");
871var launchProfileUrls = project.Resource.Annotations.OfType<ResourceUrlAnnotation>().Where(u => u.Endpoint?.EndpointName == "http");
912var endpointUrl = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>().FirstOrDefault(u => u.Endpoint?.EndpointName == "test" && u.Url.EndsWith("/sub-path"));
942var endpointUrl = projectA.Resource.Annotations.OfType<ResourceUrlAnnotation>().FirstOrDefault(u => u.Endpoint?.EndpointName == "test" && u.Url.EndsWith("/sub-path"));
968Endpoint = resourceA.Resource.GetEndpoint("api")
979resourceB.Resource.Name,
981&& e.Snapshot.Urls.Length == resourceB.Resource.GetEndpoints().ToArray().Length + 1
Aspire.Hosting.Valkey (1)
Aspire.Hosting.Valkey.Tests (22)
Aspire.Hosting.Yarp (12)
Aspire.Hosting.Yarp.Tests (32)
AddYarpTests.cs (26)
54var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Run, testProvider);
77var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
103var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Run, testProvider);
125var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, testProvider);
150var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Run, testProvider);
165var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
179var annotation = Assert.Single(yarp.Resource.Annotations.OfType<ContainerFileSystemCallbackAnnotation>());
191var annotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
204var annotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
209Resource = yarp.Resource,
237Assert.Empty(yarp.Resource.Annotations.OfType<ContainerFilesDestinationAnnotation>());
238Assert.Empty(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
255var containerFilesAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<ContainerFilesDestinationAnnotation>());
256Assert.Equal(sourceContainer.Resource, containerFilesAnnotation.Source);
260var env = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(yarp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
265Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
282var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
289Resource = yarp.Resource,
312var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
320Resource = yarp.Resource,
345var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
352Resource = yarp.Resource,
383var buildAnnotation = Assert.Single(yarp.Resource.Annotations.OfType<DockerfileBuildAnnotation>());
390Resource = yarp.Resource,
423var httpsEndpoint = Assert.Single(yarp.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "https");
448Assert.DoesNotContain(yarp.Resource.Annotations.OfType<EndpointAnnotation>(), e => e.Name == "https");
Aspire.Playground.Tests (1)
AzureAIFoundryEndToEnd.AppHost (1)
AzureKusto.AppHost (2)
BicepSample.AppHost (1)
DotnetTool.AppHost (2)
KafkaBasic.AppHost (2)
ParameterEndToEnd.AppHost (1)
Pipelines.AppHost (1)
Stress.AppHost (2)
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);