1 write to Spec
Aspire.Hosting (1)
Dcp\Model\ModelCommon.cs (1)
150
Spec
= spec;
244 references to Spec
Aspire.Hosting (68)
Dcp\DcpExecutor.cs (43)
176
.Where(sr => !sr.HasCompleteAddress && sr.
Spec
.AddressAllocationMode != AddressAllocationModes.Proxyless);
559
if (container.
Spec
.Start == false && (container.Status?.State == null || container.Status?.State == ContainerState.Pending))
857
var containerNetworkName = (ctp.DcpResource as ContainerNetworkTunnelProxy)?.
Spec
.ContainerNetworkName;
980
if (appResource.DcpResource is Container ctr && ctr.
Spec
.Networks is not null)
983
var containerNetwork = ctr.
Spec
.Networks.FirstOrDefault(n => n.Name == KnownNetworkIdentifiers.DefaultAspireContainerNetwork.Value);
1077
network.
Spec
.Persistent = true;
1080
network.
Spec
.NetworkName = $"{DefaultAspirePersistentNetworkName}-{_nameGenerator.GetProjectHashSuffix()}";
1084
network.
Spec
.NetworkName = $"{DefaultAspireNetworkName}-{DcpNameGenerator.GetRandomNameSuffix()}";
1090
network.
Spec
.NetworkName += $"-{shortApplicationName}"; // Limit to 32 characters to avoid exceeding resource name length limits.
1133
svc.
Spec
.Port = port;
1134
svc.
Spec
.Protocol = PortProtocol.FromProtocolType(endpoint.Protocol);
1137
svc.
Spec
.Address = KnownHostNames.Localhost;
1141
svc.
Spec
.Address = endpoint.TargetHost;
1146
svc.
Spec
.AddressAllocationMode = AddressAllocationModes.Proxyless;
1185
tunnelProxy.
Spec
.ContainerNetworkName = KnownNetworkIdentifiers.DefaultAspireContainerNetwork.Value;
1186
tunnelProxy.
Spec
.Aliases = [ContainerHostName];
1187
tunnelProxy.
Spec
.Tunnels = [];
1227
svc.
Spec
.AddressAllocationMode = AddressAllocationModes.Proxyless;
1228
svc.
Spec
.Protocol = PortProtocol.TCP;
1253
tunnelProxy?.
Spec
?.Tunnels?.Add(tunnelConfig);
1258
svc.Annotate(CustomResource.ContainerNetworkAnnotation, tunnelProxy?.
Spec
?.ContainerNetworkName ?? KnownNetworkIdentifiers.DefaultAspireContainerNetwork.Value);
1325
exe.
Spec
.WorkingDirectory = executable.WorkingDirectory;
1332
exe.
Spec
.ExecutionType = ExecutionType.IDE;
1333
exe.
Spec
.FallbackExecutionTypes = [ ExecutionType.Process ];
1338
exe.
Spec
.ExecutionType = ExecutionType.Process;
1368
exe.
Spec
.WorkingDirectory = Path.GetDirectoryName(projectMetadata.ProjectPath);
1385
exe.
Spec
.ExecutionType = ExecutionType.IDE;
1386
exe.
Spec
.FallbackExecutionTypes = [ ExecutionType.Process ];
1397
exe.
Spec
.ExecutionType = ExecutionType.Process;
1604
var spec = containerExe.
Spec
;
1628
var spec = exe.
Spec
;
1699
exe.
Spec
.PemCertificates = pemCertificates;
1840
ctr.
Spec
.ContainerName = containerObjectInstance.Name; // Use the same name for container orchestrator (Docker, Podman) resource and DCP object name.
1844
ctr.
Spec
.Persistent = true;
1849
ctr.
Spec
.PullPolicy = pullPolicy switch
1870
ctr.
Spec
.Networks = new List<ContainerNetworkConnection>
1960
container.
Spec
.Start = false;
1995
var spec = dcpContainerResource.
Spec
;
2216
dcpContainerResource.
Spec
.Build = new()
2257
dcpContainerResource.
Spec
.Build = new()
2398
patch = CreatePatch(c, obj => obj.
Spec
.Stop = true);
2413
patch = CreatePatch(e, obj => obj.
Spec
.Stop = true);
2476
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)
213
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
214
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
245
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
246
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
473
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
474
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
475
Assert.Null(container!.
Spec
!.Build!.Stage);
477
container!.
Spec
!.Build!.Args!,
543
Assert.Equal(tempContextPath, container!.
Spec
!.Build!.Context);
544
Assert.Equal(tempDockerfilePath, container!.
Spec
!.Build!.Dockerfile);
545
Assert.Null(container!.
Spec
!.Build!.Stage);
547
container!.
Spec
!.Build!.Args!,
Aspire.Hosting.Tests (164)
Dcp\DcpExecutorTests.cs (79)
161
var callArgs = executionType == ExecutionType.IDE ? exe.
Spec
.Args : exe.
Spec
.Args![^(expectedArgs?.Length ?? 0)..];
198
Assert.Equal(callArgs, exe.
Spec
.Args);
238
var callCount1 = exe1.
Spec
.Env!.Single(e => e.Name == "CALL_COUNT");
241
Assert.Single(exe1.
Spec
.Args!, a => a == "--no-build");
242
Assert.Single(exe1.
Spec
.Args!, a => a == "--test");
256
var callCount2 = exe2.
Spec
.Env!.Single(e => e.Name == "CALL_COUNT");
259
Assert.Single(exe2.
Spec
.Args!, a => a == "--no-build");
260
Assert.Single(exe2.
Spec
.Args!, a => a == "--test");
287
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
291
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_NO_TARGET_PORT").Value;
319
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
323
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
351
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
355
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
384
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
388
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
440
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
444
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
474
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
478
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
508
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
512
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
913
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
917
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "NO_PORT_NO_TARGET_PORT").Value;
922
var aspnetCoreUrls = dcpExe.
Spec
.Env?.Single(v => v.Name == "ASPNETCORE_URLS").Value;
958
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
962
var envVarVal = dcpExe.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
991
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
993
Assert.NotNull(dcpCtr.
Spec
.Ports);
994
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort is null && p.ContainerPort == desiredTargetPort);
997
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
1026
Assert.Equal(AddressAllocationModes.Localhost, svc.
Spec
.AddressAllocationMode);
1028
Assert.NotNull(dcpCtr.
Spec
.Ports);
1029
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort is null && p.ContainerPort == desiredTargetPort);
1032
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
1106
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1108
Assert.NotNull(dcpCtr.
Spec
.Ports);
1109
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredPort && p.ContainerPort == desiredPort);
1112
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_SET_NO_TARGET_PORT").Value;
1142
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1144
Assert.NotNull(dcpCtr.
Spec
.Ports);
1145
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredTargetPort && p.ContainerPort == desiredTargetPort);
1148
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "NO_PORT_TARGET_PORT_SET").Value;
1179
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1181
Assert.NotNull(dcpCtr.
Spec
.Ports);
1182
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredPort && p.ContainerPort == desiredTargetPort);
1185
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_AND_TARGET_PORT_SET").Value;
1216
Assert.Equal(AddressAllocationModes.Proxyless, svc.
Spec
.AddressAllocationMode);
1218
Assert.NotNull(dcpCtr.
Spec
.Ports);
1219
Assert.Contains(dcpCtr.
Spec
.Ports!, p => p.HostPort == desiredPort && p.ContainerPort == desiredTargetPort && p.Protocol == "UDP");
1222
var envVarVal = dcpCtr.
Spec
.Env?.Single(v => v.Name == "PORT_AND_PROTOCOL_SET").Value;
1305
Assert.Null(implicitDefaultContainer.
Spec
.PullPolicy);
1308
Assert.Null(explicitDefaultContainer.
Spec
.PullPolicy);
1311
Assert.Equal(ContainerPullPolicy.Always, explicitAlwaysContainer.
Spec
.PullPolicy);
1314
Assert.Equal(ContainerPullPolicy.Missing, explicitMissingContainer.
Spec
.PullPolicy);
1317
Assert.Equal(ContainerPullPolicy.Never, explicitNeverContainer.
Spec
.PullPolicy);
1495
Assert.NotNull(exe.
Spec
.Env);
1496
var effectiveLaunchProfileEnv = exe.
Spec
.Env.SingleOrDefault(v => v.Name == "DOTNET_LAUNCH_PROFILE")?.Value;
1527
var envVal = exe.
Spec
.Env!.SingleOrDefault(e => e.Name == "DOTNET_LAUNCH_PROFILE")?.Value;
1558
var envVal = exe.
Spec
.Env!.SingleOrDefault(e => e.Name == "DOTNET_LAUNCH_PROFILE")?.Value;
1589
Assert.DoesNotContain(exe.
Spec
.Env ?? [], e => e.Name == "DOTNET_LAUNCH_PROFILE");
1619
Assert.DoesNotContain(exe.
Spec
.Env ?? [], e => e.Name == "DOTNET_LAUNCH_PROFILE");
1694
Assert.Equal(ExecutionType.IDE, debuggableExe.
Spec
.ExecutionType);
1701
Assert.Equal(ExecutionType.Process, nonDebuggableExe.
Spec
.ExecutionType);
1738
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1775
Assert.Equal(ExecutionType.Process, debuggableExe.
Spec
.ExecutionType);
1779
Assert.Equal(ExecutionType.Process, nonDebuggableExe.
Spec
.ExecutionType);
1816
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1852
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1894
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1936
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
1978
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
2015
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
2052
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
2095
Assert.Equal(ExecutionType.IDE, exe.
Spec
.ExecutionType);
2123
Assert.NotNull(container.
Spec
.Networks);
2124
var network = Assert.Single(container.
Spec
.Networks);
2175
Assert.Equal(ExecutionType.Process, exe.
Spec
.ExecutionType);
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)
693
Assert.Equal(RedisImageSource, item.
Spec
.Image);
694
Assert.Equal(["redis-cli", "-h", "host.docker.internal", "-p", "9999", "MONITOR"], item.
Spec
.Args);
695
Assert.Equal(["--add-host", "testlocalhost:127.0.0.1"], item.
Spec
.RunArgs);
750
Assert.Equal(RedisImageSource, item.
Spec
.Image);
760
item.
Spec
.CreateFiles);
793
Assert.NotNull(redisContainer.
Spec
.Args);
794
Assert.Equal(2, redisContainer.
Spec
.Args.Count);
796
Assert.Equal("-c", redisContainer.
Spec
.Args[0]);
797
Assert.Contains("--tls-cert-file", redisContainer.
Spec
.Args[1]);
798
Assert.Contains("--tls-key-file", redisContainer.
Spec
.Args[1]);
799
Assert.Contains("--tls-auth-clients", redisContainer.
Spec
.Args[1]);
800
Assert.Contains("--tls-port", redisContainer.
Spec
.Args[1]);
801
Assert.Contains("--port", redisContainer.
Spec
.Args[1]);
804
Assert.NotNull(redisContainer.
Spec
.Ports);
805
Assert.Contains(redisContainer.
Spec
.Ports, p => p.ContainerPort == 6380);
806
Assert.Contains(redisContainer.
Spec
.Ports, p => p.ContainerPort == 6379);
869
Assert.Equal(RedisImageSource, item.
Spec
.Image);
873
Assert.NotNull(item.
Spec
.Env);
876
Assert.DoesNotContain(item.
Spec
.Env, e => e.Name == "SSL_CERT_FILE");
880
Assert.Collection(item.
Spec
.Env.Where(e => e.Name == "SSL_CERT_FILE"),
888
Assert.Collection(item.
Spec
.Env.Where(e => e.Name == "SSL_CERT_DIR"),
906
Assert.Empty(item.
Spec
?.PemCertificates?.Certificates ?? []);
912
var foundCert = Assert.Single(item.
Spec
?.PemCertificates?.Certificates ?? [], c => string.Equals(c.Thumbprint, cert.Thumbprint, StringComparison.Ordinal));
921
Assert.Equal(expectedDefaultBundleFiles.Count, item.
Spec
?.PemCertificates?.OverwriteBundlePaths?.Count ?? 0);
924
Assert.Contains(bundlePath, item.
Spec
?.PemCertificates?.OverwriteBundlePaths ?? []);
930
Assert.Empty(item.
Spec
?.PemCertificates?.Certificates ?? []);
999
r => r.
Spec
.Env != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1002
Assert.NotNull(redisContainer.
Spec
.Env);
1005
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_ENV_VAR" && e.Value == "InitialValue");
1006
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "CALLBACK_ADDED_VAR" && e.Value == "CallbackValue");
1007
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_REFERENCE_EXPRESSION" && e.Value == $"{value}_AppendedInCallback");
1039
r => r.
Spec
.Env != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1042
Assert.NotNull(redisContainer.
Spec
.Env);
1045
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_ENV_VAR" && e.Value == "InitialValue");
1046
Assert.Single(redisContainer.
Spec
.Env, e => e.Name == "INITIAL_REFERENCE_EXPRESSION" && e.Value == $"{value}");
1168
Assert.Equal(RedisImageSource, redisContainer.
Spec
.Image);
1169
Assert.Equal("6379", GetEnv(redisContainer.
Spec
.Env, "REDIS_PORT"));
1172
Assert.Equal($"{{{{- portForServing \"{testName}-servicea-http0-{suffix}\" -}}}}", GetEnv(serviceA.
Spec
.Env, "PORT0"));
1177
Assert.Equal($"{{{{- portForServing \"{testName}-nodeapp-{suffix}\" -}}}}", GetEnv(nodeApp.
Spec
.Env, "PORT"));
1243
Assert.Equal("BrowserToken", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__FRONTEND__AUTHMODE"));
1244
Assert.Equal("ThisIsATestToken", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__FRONTEND__BROWSERTOKEN"));
1246
Assert.Equal("ApiKey", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__OTLP__AUTHMODE"));
1247
var keyBytes = Convert.FromHexString(GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__OTLP__PRIMARYAPIKEY")!);
1280
Assert.Equal("Unsecured", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__FRONTEND__AUTHMODE"));
1281
Assert.Equal("Unsecured", GetEnv(aspireDashboard.
Spec
.Env, "DASHBOARD__OTLP__AUTHMODE"));
1313
Assert.Equal(RedisImageSource, redisContainer.
Spec
.Image);
1314
Assert.Equal("bob", redisContainer.
Spec
.Command);
1339
$"{testName}-redis-{ReplicaIdRegex}-{suffix}", r => r.
Spec
.VolumeMounts != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1341
Assert.NotNull(redisContainer.
Spec
.VolumeMounts);
1342
Assert.NotEmpty(redisContainer.
Spec
.VolumeMounts);
1343
Assert.Equal(sourcePath, redisContainer.
Spec
.VolumeMounts[0].Source);
1367
$"{testName}-redis-{ReplicaIdRegex}-{suffix}", r => r.
Spec
.VolumeMounts != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1369
Assert.NotNull(redisContainer.
Spec
.VolumeMounts);
1370
Assert.NotEmpty(redisContainer.
Spec
.VolumeMounts);
1371
Assert.NotEqual("etc/path-here", redisContainer.
Spec
.VolumeMounts[0].Source);
1372
Assert.True(Path.IsPathRooted(redisContainer.
Spec
.VolumeMounts[0].Source));
1396
$"{testName}-redis-{ReplicaIdRegex}-{suffix}", r => r.
Spec
.VolumeMounts != null).DefaultTimeout(TestConstants.DefaultOrchestratorTestLongTimeout);
1398
Assert.NotNull(redisContainer.
Spec
.VolumeMounts);
1399
Assert.NotEmpty(redisContainer.
Spec
.VolumeMounts);
1400
Assert.Equal($"{testName}-volume", redisContainer.
Spec
.VolumeMounts[0].Source);
1638
var env = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redis");
1648
Assert.Equal(2, redisContainer.
Spec
.Ports!.Count);
1649
Assert.Contains(redisContainer.
Spec
.Ports!, p => p.HostPort == 1234);
1653
Assert.Equal(1234, Assert.Single(redisContainer.
Spec
.Ports!).HostPort);
1656
var otherRedisEnv = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redisNoPort");
1664
Assert.Equal(2, otherRedisContainer.
Spec
.Ports!.Count);
1665
Assert.Contains(otherRedisContainer.
Spec
.Ports!, p => p.HostPort == 6379);
1669
Assert.Equal(6379, Assert.Single(otherRedisContainer.
Spec
.Ports!).HostPort);
1705
Assert.All(serviceList.Where(s => s.Metadata.Name.Contains("redis")), s => Assert.Equal(AddressAllocationModes.Proxyless, s.
Spec
.AddressAllocationMode));
1710
var env = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redis");
1720
Assert.Equal(2, redisContainer.
Spec
.Ports!.Count);
1721
Assert.Contains(redisContainer.
Spec
.Ports!, p => p.HostPort == 1234);
1725
Assert.Equal(1234, Assert.Single(redisContainer.
Spec
.Ports!).HostPort);
1728
var otherRedisEnv = Assert.Single(service.
Spec
.Env!, e => e.Name == $"ConnectionStrings__{testName}-redisNoPort");
1737
Assert.Equal(2, otherRedisContainer.
Spec
.Ports!.Count);
1738
Assert.Contains(otherRedisContainer.
Spec
.Ports!, p => p.HostPort == 6379);
1742
Assert.Equal(6379, Assert.Single(otherRedisContainer.
Spec
.Ports!).HostPort);
1792
Assert.Single(networks, n => n.
Spec
.Persistent == true);
1796
Assert.Single(networks, n => n.
Spec
.Persistent.GetValueOrDefault(false) == false);