Skip to content

Commit 39e85c9

Browse files
davidfowlCopilot
andcommitted
Migrate all E2E tests to CliInstallStrategy
Convert all 35 remaining test files from DockerInstallMode to CliInstallStrategy. Remove SourceBuild-specific logic (local channel setup, bundle mounting, channel arguments) from TypeScriptPolyglotTests and TypeScriptSqlServerNativeAssetsBundleTests — LocalHive handles all of this via the archive. Verified locally: SmokeTests, TypeScriptStarterTemplate, and StartStopTests all pass with LocalHive mode. Fixes #16032 (partial) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8dcc186 commit 39e85c9

35 files changed

Lines changed: 178 additions & 200 deletions

tests/Aspire.Cli.EndToEnd.Tests/AgentCommandTests.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public sealed class AgentCommandTests(ITestOutputHelper output)
2626
public async Task AgentCommands_AllHelpOutputs_AreCorrect()
2727
{
2828
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
29-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
29+
var strategy = CliInstallStrategy.Detect();
3030
var workspace = TemporaryWorkspace.Create(output);
3131

32-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
32+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
3333

3434
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
3535

@@ -38,7 +38,7 @@ public async Task AgentCommands_AllHelpOutputs_AreCorrect()
3838

3939
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
4040

41-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
41+
await auto.InstallAspireCliAsync(strategy, counter);
4242

4343
// Test 1: aspire agent --help
4444
await auto.TypeAsync("aspire agent --help");
@@ -88,10 +88,10 @@ await auto.WaitUntilAsync(
8888
public async Task AgentInitCommand_MigratesDeprecatedConfig()
8989
{
9090
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
91-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
91+
var strategy = CliInstallStrategy.Detect();
9292
var workspace = TemporaryWorkspace.Create(output);
9393

94-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
94+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
9595

9696
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
9797

@@ -105,7 +105,7 @@ public async Task AgentInitCommand_MigratesDeprecatedConfig()
105105

106106
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
107107

108-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
108+
await auto.InstallAspireCliAsync(strategy, counter);
109109

110110
// Step 1: Create deprecated config file using Claude Code format (.mcp.json)
111111
// This simulates a config that was created by an older version of the CLI
@@ -163,10 +163,10 @@ await auto.WaitUntilAsync(
163163
public async Task DoctorCommand_DetectsDeprecatedAgentConfig()
164164
{
165165
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
166-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
166+
var strategy = CliInstallStrategy.Detect();
167167
var workspace = TemporaryWorkspace.Create(output);
168168

169-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
169+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
170170

171171
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
172172

@@ -177,7 +177,7 @@ public async Task DoctorCommand_DetectsDeprecatedAgentConfig()
177177

178178
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
179179

180-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
180+
await auto.InstallAspireCliAsync(strategy, counter);
181181

182182
// Create deprecated config file
183183
File.WriteAllText(configPath, """{"mcpServers":{"aspire":{"command":"aspire","args":["mcp","start"]}}}""");
@@ -203,10 +203,10 @@ await auto.WaitUntilAsync(
203203
public async Task AgentInitCommand_DefaultSelection_InstallsSkillOnly()
204204
{
205205
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
206-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
206+
var strategy = CliInstallStrategy.Detect();
207207
var workspace = TemporaryWorkspace.Create(output);
208208

209-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
209+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
210210

211211
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
212212

@@ -218,7 +218,7 @@ public async Task AgentInitCommand_DefaultSelection_InstallsSkillOnly()
218218

219219
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
220220

221-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
221+
await auto.InstallAspireCliAsync(strategy, counter);
222222

223223
// Create .vscode folder so the scanner detects VS Code environment
224224
Directory.CreateDirectory(vscodePath);

tests/Aspire.Cli.EndToEnd.Tests/BannerTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public sealed class BannerTests(ITestOutputHelper output)
1919
public async Task Banner_DisplayedOnFirstRun()
2020
{
2121
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
22-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
22+
var strategy = CliInstallStrategy.Detect();
2323
var workspace = TemporaryWorkspace.Create(output);
2424

25-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
25+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
2626

2727
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
2828

@@ -31,7 +31,7 @@ public async Task Banner_DisplayedOnFirstRun()
3131

3232
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
3333

34-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
34+
await auto.InstallAspireCliAsync(strategy, counter);
3535

3636
// Delete the first-time use sentinel file to simulate first run
3737
// The sentinel is stored at ~/.aspire/cli/cli.firstUseSentinel
@@ -60,10 +60,10 @@ await auto.WaitUntilAsync(
6060
public async Task Banner_DisplayedWithExplicitFlag()
6161
{
6262
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
63-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
63+
var strategy = CliInstallStrategy.Detect();
6464
var workspace = TemporaryWorkspace.Create(output);
6565

66-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
66+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
6767

6868
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
6969

@@ -72,7 +72,7 @@ public async Task Banner_DisplayedWithExplicitFlag()
7272

7373
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
7474

75-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
75+
await auto.InstallAspireCliAsync(strategy, counter);
7676

7777
// Clear screen to have a clean slate for pattern matching
7878
await auto.ClearScreenAsync(counter);
@@ -92,10 +92,10 @@ await auto.WaitUntilAsync(
9292
public async Task Banner_NotDisplayedWithNoLogoFlag()
9393
{
9494
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
95-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
95+
var strategy = CliInstallStrategy.Detect();
9696
var workspace = TemporaryWorkspace.Create(output);
9797

98-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
98+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
9999

100100
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
101101

@@ -104,7 +104,7 @@ public async Task Banner_NotDisplayedWithNoLogoFlag()
104104

105105
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
106106

107-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
107+
await auto.InstallAspireCliAsync(strategy, counter);
108108

109109
// Delete the first-time use sentinel file to simulate first run,
110110
// but use --nologo to suppress the banner

tests/Aspire.Cli.EndToEnd.Tests/BundleSmokeTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@ public sealed class BundleSmokeTests(ITestOutputHelper output)
1919
public async Task CreateAndRunAspireStarterProjectWithBundle()
2020
{
2121
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
22-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
22+
var strategy = CliInstallStrategy.Detect();
2323

2424
var workspace = TemporaryWorkspace.Create(output);
2525

26-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, mountDockerSocket: true, workspace: workspace);
26+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, mountDockerSocket: true, workspace: workspace);
2727

2828
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
2929

3030
var counter = new SequenceCounter();
3131
var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500));
3232

3333
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
34-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
34+
await auto.InstallAspireCliAsync(strategy, counter);
3535

3636
await auto.AspireNewAsync("BundleStarterApp", counter);
3737

tests/Aspire.Cli.EndToEnd.Tests/CentralPackageManagementTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ public sealed class CentralPackageManagementTests(ITestOutputHelper output)
2121
public async Task AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps()
2222
{
2323
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
24-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
24+
var strategy = CliInstallStrategy.Detect();
2525
var workspace = TemporaryWorkspace.Create(output);
2626

27-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
27+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
2828

2929
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
3030

@@ -33,7 +33,7 @@ public async Task AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesP
3333

3434
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
3535

36-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
36+
await auto.InstallAspireCliAsync(strategy, counter);
3737

3838
// Disable update notifications to prevent the CLI self-update prompt
3939
// from appearing after "Update successful!" and blocking the test.
@@ -124,10 +124,10 @@ public async Task AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesP
124124
public async Task AspireAddPackageVersionToDirectoryPackagesProps()
125125
{
126126
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
127-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
127+
var strategy = CliInstallStrategy.Detect();
128128
var workspace = TemporaryWorkspace.Create(output);
129129

130-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
130+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
131131

132132
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
133133

@@ -136,7 +136,7 @@ public async Task AspireAddPackageVersionToDirectoryPackagesProps()
136136

137137
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
138138

139-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
139+
await auto.InstallAspireCliAsync(strategy, counter);
140140

141141
// Set up an AppHost project with CPM, but no installed packages
142142
var projectDir = Path.Combine(workspace.WorkspaceRoot.FullName, "CpmTest");

tests/Aspire.Cli.EndToEnd.Tests/CertificatesCommandTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@ public sealed class CertificatesCommandTests(ITestOutputHelper output)
1818
public async Task CertificatesTrust_WithUntrustedCert_TrustsCertificate()
1919
{
2020
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
21-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
21+
var strategy = CliInstallStrategy.Detect();
2222
var workspace = TemporaryWorkspace.Create(output);
2323

24-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
24+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
2525

2626
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
2727

2828
var counter = new SequenceCounter();
2929
var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500));
3030

3131
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
32-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
32+
await auto.InstallAspireCliAsync(strategy, counter);
3333

3434
// Generate dev certs WITHOUT trust (creates untrusted cert)
3535
await auto.TypeAsync("dotnet dev-certs https 2>/dev/null || true");
@@ -62,18 +62,18 @@ public async Task CertificatesTrust_WithUntrustedCert_TrustsCertificate()
6262
public async Task CertificatesClean_RemovesCertificates()
6363
{
6464
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
65-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
65+
var strategy = CliInstallStrategy.Detect();
6666
var workspace = TemporaryWorkspace.Create(output);
6767

68-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
68+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
6969

7070
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
7171

7272
var counter = new SequenceCounter();
7373
var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500));
7474

7575
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
76-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
76+
await auto.InstallAspireCliAsync(strategy, counter);
7777

7878
// Generate dev certs first
7979
await auto.TypeAsync("dotnet dev-certs https --trust 2>/dev/null || dotnet dev-certs https");
@@ -105,18 +105,18 @@ public async Task CertificatesClean_RemovesCertificates()
105105
public async Task CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate()
106106
{
107107
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
108-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
108+
var strategy = CliInstallStrategy.Detect();
109109
var workspace = TemporaryWorkspace.Create(output);
110110

111-
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, installMode, output, workspace: workspace);
111+
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, workspace: workspace);
112112

113113
var pendingRun = terminal.RunAsync(TestContext.Current.CancellationToken);
114114

115115
var counter = new SequenceCounter();
116116
var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500));
117117

118118
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
119-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
119+
await auto.InstallAspireCliAsync(strategy, counter);
120120

121121
// Configure SSL_CERT_DIR so trust detection works properly
122122
await auto.TypeAsync("export SSL_CERT_DIR=\"/etc/ssl/certs:$HOME/.aspnet/dev-certs/trust\"");

tests/Aspire.Cli.EndToEnd.Tests/ConfigDiscoveryTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ public sealed class ConfigDiscoveryTests(ITestOutputHelper output)
3131
public async Task RunFromParentDirectory_UsesExistingConfigNearAppHost()
3232
{
3333
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
34-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
34+
var strategy = CliInstallStrategy.Detect();
3535
var workspace = TemporaryWorkspace.Create(output);
3636

3737
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(
38-
repoRoot, installMode, output,
38+
repoRoot, strategy, output,
3939
variant: CliE2ETestHelpers.DockerfileVariant.Polyglot,
4040
mountDockerSocket: true,
4141
workspace: workspace);
@@ -46,7 +46,7 @@ public async Task RunFromParentDirectory_UsesExistingConfigNearAppHost()
4646
var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500));
4747

4848
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
49-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
49+
await auto.InstallAspireCliAsync(strategy, counter);
5050

5151
const string projectName = "ConfigTest";
5252

tests/Aspire.Cli.EndToEnd.Tests/ConfigHealingTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ public sealed class ConfigHealingTests(ITestOutputHelper output)
2525
public async Task InvalidAppHostPathWithComments_IsHealedOnRun()
2626
{
2727
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
28-
var installMode = CliE2ETestHelpers.DetectDockerInstallMode(repoRoot);
28+
var strategy = CliInstallStrategy.Detect();
2929

3030
var workspace = TemporaryWorkspace.Create(output);
3131

3232
using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(
33-
repoRoot, installMode, output,
33+
repoRoot, strategy, output,
3434
mountDockerSocket: true,
3535
workspace: workspace);
3636

@@ -40,7 +40,7 @@ public async Task InvalidAppHostPathWithComments_IsHealedOnRun()
4040
var auto = new Hex1bTerminalAutomator(terminal, defaultTimeout: TimeSpan.FromSeconds(500));
4141

4242
await auto.PrepareDockerEnvironmentAsync(counter, workspace);
43-
await auto.InstallAspireCliInDockerAsync(installMode, counter);
43+
await auto.InstallAspireCliAsync(strategy, counter);
4444

4545
// 1. Create a starter project
4646
await auto.AspireNewAsync("HealTest", counter, useRedisCache: false);

0 commit comments

Comments
 (0)