1 write to Spec
Aspire.Hosting (1)
Dcp\Model\ModelCommon.cs (1)
150
Spec
= spec;
238 references to Spec
Aspire.Hosting (65)
Dcp\DcpExecutor.cs (40)
177
.Where(sr => !sr.HasCompleteAddress && sr.
Spec
.AddressAllocationMode != AddressAllocationModes.Proxyless);
560
if (container.
Spec
.Start == false && (container.Status?.State == null || container.Status?.State == ContainerState.Pending))
858
var containerNetworkName = (ctp.DcpResource as ContainerNetworkTunnelProxy)?.
Spec
.ContainerNetworkName;
1054
network.
Spec
.Persistent = true;
1057
network.
Spec
.NetworkName = $"{DefaultAspirePersistentNetworkName}-{_nameGenerator.GetProjectHashSuffix()}";
1061
network.
Spec
.NetworkName = $"{DefaultAspireNetworkName}-{DcpNameGenerator.GetRandomNameSuffix()}";
1067
network.
Spec
.NetworkName += $"-{shortApplicationName}"; // Limit to 32 characters to avoid exceeding resource name length limits.
1099
svc.
Spec
.Port = port;
1100
svc.
Spec
.Protocol = PortProtocol.FromProtocolType(endpoint.Protocol);
1103
svc.
Spec
.Address = KnownHostNames.Localhost;
1107
svc.
Spec
.Address = endpoint.TargetHost;
1112
svc.
Spec
.AddressAllocationMode = AddressAllocationModes.Proxyless;
1151
tunnelProxy.
Spec
.ContainerNetworkName = KnownNetworkIdentifiers.DefaultAspireContainerNetwork.Value;
1152
tunnelProxy.
Spec
.Aliases = [ContainerHostName];
1153
tunnelProxy.
Spec
.Tunnels = [];
1193
svc.
Spec
.AddressAllocationMode = AddressAllocationModes.Proxyless;
1194
svc.
Spec
.Protocol = PortProtocol.TCP;
1219
tunnelProxy?.
Spec
?.Tunnels?.Add(tunnelConfig);
1224
svc.Annotate(CustomResource.ContainerNetworkAnnotation, tunnelProxy?.
Spec
?.ContainerNetworkName ?? KnownNetworkIdentifiers.DefaultAspireContainerNetwork.Value);
1291
exe.
Spec
.WorkingDirectory = executable.WorkingDirectory;
1292
exe.
Spec
.ExecutionType = ExecutionType.Process;
1304
exe.
Spec
.ExecutionType = ExecutionType.IDE;
1309
exe.
Spec
.ExecutionType = ExecutionType.Process;
1339
exeSpec.
Spec
.WorkingDirectory = Path.GetDirectoryName(projectMetadata.ProjectPath);
1358
exeSpec.
Spec
.ExecutionType = ExecutionType.IDE;
1369
exeSpec.
Spec
.ExecutionType = ExecutionType.Process;
1571
var spec = containerExe.
Spec
;
1594
var spec = exe.
Spec
;
1665
exe.
Spec
.PemCertificates = pemCertificates;
1793
ctr.
Spec
.ContainerName = containerObjectInstance.Name; // Use the same name for container orchestrator (Docker, Podman) resource and DCP object name.
1797
ctr.
Spec
.Persistent = true;
1802
ctr.
Spec
.PullPolicy = pullPolicy switch
1822
ctr.
Spec
.Networks = new List<ContainerNetworkConnection>
1907
container.
Spec
.Start = false;
1942
var spec = dcpContainerResource.
Spec
;
2163
dcpContainerResource.
Spec
.Build = new()
2204
dcpContainerResource.
Spec
.Build = new()
2345
patch = CreatePatch(c, obj => obj.
Spec
.Stop = true);
2360
patch = CreatePatch(e, obj => obj.
Spec
.Stop = true);
2423
c.
Spec
.Start = true;
Dcp\Model\ExecutableReplicaSet.cs (1)
109
ers.
Spec
.Template.Spec.ExecutablePath = executablePath;
Dcp\Model\Service.cs (6)
89
public int? AllocatedPort =>
Spec
.Port ?? Status?.EffectivePort;
90
public string? AllocatedAddress =>
Spec
.Address ?? Status?.EffectiveAddress;
97
Spec
.Port = other.
Spec
.Port;
98
Spec
.Address = other.
Spec
.Address;
Dcp\ResourceSnapshotBuilder.cs (18)
26
var environment = GetEnvironmentVariables(container.Status?.EffectiveEnv ?? container.
Spec
.Env, container.
Spec
.Env);
29
if (container.
Spec
.Start is false && (state == null || state == ContainerState.Pending))
52
new(KnownProperties.Container.Image, container.
Spec
.Image),
54
new(KnownProperties.Container.Command, container.
Spec
.Command),
72
if (container.
Spec
.Ports is null)
78
foreach (var port in container.
Spec
.Ports)
90
return (container.
Spec
.Persistent ?? false) ? ContainerLifetime.Persistent : ContainerLifetime.Session;
100
var environment = GetEnvironmentVariables(executable.Status?.EffectiveEnv, executable.
Spec
.Env);
115
new(KnownProperties.Executable.WorkDir, executable.
Spec
.WorkingDirectory),
148
var environment = GetEnvironmentVariables(executable.Status?.EffectiveEnv, executable.
Spec
.Env);
166
new(KnownProperties.Executable.Path, executable.
Spec
.ExecutablePath),
167
new(KnownProperties.Executable.WorkDir, executable.
Spec
.WorkingDirectory),
190
new(KnownProperties.Executable.Path, executable.
Spec
.ExecutablePath),
191
new(KnownProperties.Executable.WorkDir, executable.
Spec
.WorkingDirectory),
267
e.Value.
Spec
.ServiceName == serviceName
299
var isActive = _resourceState.EndpointsMap.Any(e => e.Value.
Spec
.ServiceName == endpointOwnerEndpoint?.Metadata.Name);
328
return container.
Spec
.VolumeMounts?.Select(v => new VolumeSnapshot(v.Source, v.Target ?? "", v.Type, v.IsReadOnly)).ToImmutableArray() ?? [];
Aspire.Hosting.Containers.Tests (12)
WithDockerfileTests.cs (12)
216
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
217
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
249
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
250
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
478
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
479
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
480
Assert.Null(container!.
Spec
!.Build!.Stage);
482
container!.
Spec
!.Build!.Args!,
549
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
550
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
551
Assert.Null(container!.
Spec
!.Build!.Stage);
553
container!.
Spec
!.Build!.Args!,
Aspire.Hosting.Tests (161)
Dcp\DcpExecutorTests.cs (76)
161
var callArgs = executionType == ExecutionType.IDE ? exe.
Spec
.Args : exe.
Spec
.Args![^(expectedArgs?.Length ?? 0)..];
202
var callCount1 = exe1.
Spec
.Env!.Single(e => e.Name == "CALL_COUNT");
205
Assert.Single(exe1.
Spec
.Args!, a => a == "--no-build");
206
Assert.Single(exe1.
Spec
.Args!, a => a == "--test");
220
var callCount2 = exe2.
Spec
.Env!.Single(e => e.Name == "CALL_COUNT");
223
Assert.Single(exe2.
Spec
.Args!, a => a == "--no-build");
224
Assert.Single(exe2.
Spec
.Args!, a => a == "--test");
251
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
255
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_NO_TARGET_PORT").Value;
283
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
287
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
315
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
319
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
348
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
352
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
404
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
408
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
438
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
442
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
472
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
476
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
877
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
881
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_NO_TARGET_PORT").Value;
886
var aspnetCoreUrls = dcpExe.
Spec
.Env?.Single(v => v.Name == "ASPNETCORE_URLS").Value;
922
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
926
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
955
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
957
Assert.NotNull(dcpCtr.
Spec
.Ports);
958
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort is null && p.ContainerPort == desiredTargetPort);
961
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
990
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
992
Assert.NotNull(dcpCtr.
Spec
.Ports);
993
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort is null && p.ContainerPort == desiredTargetPort);
996
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
1070
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1072
Assert.NotNull(dcpCtr.
Spec
.Ports);
1073
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredPort && p.ContainerPort == desiredPort);
1076
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
1106
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1108
Assert.NotNull(dcpCtr.
Spec
.Ports);
1109
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredTargetPort && p.ContainerPort == desiredTargetPort);
1112
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
1143
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1145
Assert.NotNull(dcpCtr.
Spec
.Ports);
1146
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredPort && p.ContainerPort == desiredTargetPort);
1149
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
1180
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1182
Assert.NotNull(dcpCtr.
Spec
.Ports);
1183
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredPort && p.ContainerPort == desiredTargetPort && p.Protocol == "UDP");
1186
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_AND_PROTOCOL_SET").Value;
1268
Assert.Null(implicitDefaultContainer.
Spec
.PullPolicy);
1271
Assert.Null(explicitDefaultContainer.
Spec
.PullPolicy);
1274
Assert.Equal(ContainerPullPolicy.Always, explicitAlwaysContainer.
Spec
.PullPolicy);
1277
Assert.Equal(ContainerPullPolicy.Missing, explicitMissingContainer.
Spec
.PullPolicy);
1455
Assert.NotNull(exe.
Spec
.Env);
1456
var effectiveLaunchProfileEnv = exe.
Spec
.Env.SingleOrDefault(v => v.Name == "DOTNET_LAUNCH_PROFILE")?.Value;
1487
var envVal = exe.
Spec
.Env!.SingleOrDefault(e => e.Name == "DOTNET_LAUNCH_PROFILE")?.Value;
1518
var envVal = exe.
Spec
.Env!.SingleOrDefault(e => e.Name == "DOTNET_LAUNCH_PROFILE")?.Value;
1549
Assert.DoesNotContain(exe.
Spec
.Env ?? [], e => e.Name == "DOTNET_LAUNCH_PROFILE");
1579
Assert.DoesNotContain(exe.
Spec
.Env ?? [], e => e.Name == "DOTNET_LAUNCH_PROFILE");
1654
Assert.Equal(ExecutionType.IDE, debuggableExe.
Spec
.ExecutionType);
1661
Assert.Equal(ExecutionType.Process, nonDebuggableExe.
Spec
.ExecutionType);
1698
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1735
Assert.Equal(ExecutionType.Process, debuggableExe.
Spec
.ExecutionType);
1739
Assert.Equal(ExecutionType.Process, nonDebuggableExe.
Spec
.ExecutionType);
1776
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1812
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1854
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1896
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1938
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
1975
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
2012
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
2055
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
2083
Assert.NotNull(container.
Spec
.Networks);
2084
var network = Assert.Single(container.
Spec
.Networks);
Dcp\TestKubernetesService.cs (6)
77
svc.Status.EffectiveAddress = svc.
Spec
.Address ?? "localhost";
78
svc.Status.EffectivePort = svc.
Spec
.Port ?? Interlocked.Increment(ref _nextPort);
202
if (eu.
Spec
.Stop == true)
204
exe.
Spec
.Stop = true;
215
if (cu.
Spec
.Stop == true)
217
ctr.
Spec
.Stop = true;
DistributedApplicationTests.cs (79)
694
Assert.Equal(RedisImageSource, item.
Spec
.Image);
695
Assert.Equal(["redis-cli", "-h", "host.docker.internal", "-p", "9999", "MONITOR"], item.
Spec
.Args);
696
Assert.Equal(["--add-host", "testlocalhost:127.0.0.1"], item.
Spec
.RunArgs);
751
Assert.Equal(RedisImageSource, item.
Spec
.Image);
761
item.
Spec
.CreateFiles);
794
Assert.NotNull(redisContainer.
Spec
.Args);
795
Assert.Equal(2, redisContainer.
Spec
.Args.Count);
797
Assert.Equal("-c", redisContainer.
Spec
.Args[0]);
798
Assert.Contains("--tls-cert-file", redisContainer.
Spec
.Args[1]);
799
Assert.Contains("--tls-key-file", redisContainer.
Spec
.Args[1]);
800
Assert.Contains("--tls-auth-clients", redisContainer.
Spec
.Args[1]);
801
Assert.Contains("--tls-port", redisContainer.
Spec
.Args[1]);
802
Assert.Contains("--port", redisContainer.
Spec
.Args[1]);
805
Assert.NotNull(redisContainer.
Spec
.Ports);
806
Assert.Contains(redisContainer.
Spec
.Ports, p => p.ContainerPort == 6380);
807
Assert.Contains(redisContainer.
Spec
.Ports, p => p.ContainerPort == 6379);
870
Assert.Equal(RedisImageSource, item.
Spec
.Image);
874
Assert.NotNull(item.
Spec
.Env);
877
Assert.DoesNotContain(item.
Spec
.Env, e => e.Name == "SSL_CERT_FILE");
881
Assert.Collection(item.
Spec
.Env.Where(e => e.Name == "SSL_CERT_FILE"),
889
Assert.Collection(item.
Spec
.Env.Where(e => e.Name == "SSL_CERT_DIR"),
907
Assert.Empty(item.
Spec
?.PemCertificates?.Certificates ?? []);
913
var foundCert = Assert.Single(item.
Spec
?.PemCertificates?.Certificates ?? [], c => string.Equals(c.Thumbprint, cert.Thumbprint, StringComparison.Ordinal));
922
Assert.Equal(expectedDefaultBundleFiles.Count, item.
Spec
?.PemCertificates?.OverwriteBundlePaths?.Count ?? 0);
925
Assert.Contains(bundlePath, item.
Spec
?.PemCertificates?.OverwriteBundlePaths ?? []);
931
Assert.Empty(item.
Spec
?.PemCertificates?.Certificates ?? []);
1000
r => r.
Spec
.Env != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1003
Assert.NotNull(redisContainer.
Spec
.Env);
1006
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_ENV_VAR" && e.Value == "InitialValue");
1007
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "CALLBACK_ADDED_VAR" && e.Value == "CallbackValue");
1008
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_REFERENCE_EXPRESSION" && e.Value == $"{value}_AppendedInCallback");
1040
r => r.
Spec
.Env != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1043
Assert.NotNull(redisContainer.
Spec
.Env);
1046
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_ENV_VAR" && e.Value == "InitialValue");
1047
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_REFERENCE_EXPRESSION" && e.Value == $"{value}");
1171
Assert.Equal(RedisImageSource, redisContainer.
Spec
.Image);
1172
Assert.Equal("6379", GetEnv(redisContainer.
Spec
.Env, "REDIS_PORT"));
1175
Assert.Equal($"{{{{- portForServing \"{testName}-servicea-http0-{suffix}\" -}}}}", GetEnv(serviceA.
Spec
.Env, "PORT0"));
1180
Assert.Equal($"{{{{- portForServing \"{testName}-nodeapp-{suffix}\" -}}}}", GetEnv(nodeApp.
Spec
.Env, "PORT"));
1246
Assert.Equal("BrowserToken", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__FRONTEND__AUTHMODE"));
1247
Assert.Equal("ThisIsATestToken", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__FRONTEND__BROWSERTOKEN"));
1249
Assert.Equal("ApiKey", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__OTLP__AUTHMODE"));
1250
var keyBytes = Convert.FromHexString(GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__OTLP__PRIMARYAPIKEY")!);
1284
Assert.Equal("Unsecured", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__FRONTEND__AUTHMODE"));
1285
Assert.Equal("Unsecured", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__OTLP__AUTHMODE"));
1317
Assert.Equal(RedisImageSource, redisContainer.
Spec
.Image);
1318
Assert.Equal("bob", redisContainer.
Spec
.Command);
1343
$"{testName}-redis-{ReplicaIdRegex}-{suffix}", r => r.
Spec
.VolumeMounts != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1345
Assert.NotNull(redisContainer.
Spec
.VolumeMounts);
1346
Assert.NotEmpty(redisContainer.
Spec
.VolumeMounts);
1347
Assert.Equal(sourcePath, redisContainer.
Spec
.VolumeMounts[0].Source);
1371
$"{testName}-redis-{ReplicaIdRegex}-{suffix}", r => r.
Spec
.VolumeMounts != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1373
Assert.NotNull(redisContainer.
Spec
.VolumeMounts);
1374
Assert.NotEmpty(redisContainer.
Spec
.VolumeMounts);
1375
Assert.NotEqual("etc/path-here", redisContainer.
Spec
.VolumeMounts[0].Source);
1376
Assert.True(Path.IsPathRooted(redisContainer.
Spec
.VolumeMounts[0].Source));
1400
$"{testName}-redis-{ReplicaIdRegex}-{suffix}", r => r.
Spec
.VolumeMounts != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1402
Assert.NotNull(redisContainer.
Spec
.VolumeMounts);
1403
Assert.NotEmpty(redisContainer.
Spec
.VolumeMounts);
1404
Assert.Equal($"{testName}-volume", redisContainer.
Spec
.VolumeMounts[0].Source);
1642
var env = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redis");
1652
Assert.Equal(2, redisContainer.
Spec
.Ports!.Count);
1653
Assert.Contains(redisContainer.
Spec
.Ports!, p => p.HostPort == 1234);
1657
Assert.Equal(1234, Assert.Single(redisContainer.
Spec
.Ports!).HostPort);
1660
var otherRedisEnv = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redisNoPort");
1668
Assert.Equal(2, otherRedisContainer.
Spec
.Ports!.Count);
1669
Assert.Contains(otherRedisContainer.
Spec
.Ports!, p => p.HostPort == 6379);
1673
Assert.Equal(6379, Assert.Single(otherRedisContainer.
Spec
.Ports!).HostPort);
1709
Assert.All(serviceList.Where(s => s.Metadata.Name.Contains("redis")), s => Assert.Equal(AddressAllocationModes.Proxyless, s.
Spec
.AddressAllocationMode));
1714
var env = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redis");
1724
Assert.Equal(2, redisContainer.
Spec
.Ports!.Count);
1725
Assert.Contains(redisContainer.
Spec
.Ports!, p => p.HostPort == 1234);
1729
Assert.Equal(1234, Assert.Single(redisContainer.
Spec
.Ports!).HostPort);
1732
var otherRedisEnv = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redisNoPort");
1741
Assert.Equal(2, otherRedisContainer.
Spec
.Ports!.Count);
1742
Assert.Contains(otherRedisContainer.
Spec
.Ports!, p => p.HostPort == 6379);
1746
Assert.Equal(6379, Assert.Single(otherRedisContainer.
Spec
.Ports!).HostPort);
1796
Assert.Single(networks, n => n.
Spec
.Persistent == true);
1800
Assert.Single(networks, n => n.
Spec
.Persistent.GetValueOrDefault(false) == false);