9575 references to FullName
aspire (853)
Agents\Copilot\CopilotAgentClient.cs (11)
38=> Path.Combine(scope is AgentConfigurationScope.Project ? workspaceRoot.FullName : context.HomeDirectory.FullName,
44var root = scope is AgentConfigurationScope.Project ? workspaceRoot.FullName : context.HomeDirectory.FullName;
59? Path.Combine(workspaceRoot.FullName, ".github", "copilot") : GetSettingsDirectory();
71=> scope is AgentConfigurationScope.Project ? Path.Combine(workspaceRoot.FullName, ".mcp.json")
83yield return (Path.Combine(workspaceRoot.FullName, path), false);
169yield return Path.Combine(workspaceRoot.FullName, ".claude", "settings.json");
170yield return Path.Combine(workspaceRoot.FullName, ".claude", "settings.local.json");
171yield return Path.Combine(workspaceRoot.FullName, ".github", "copilot", "settings.json");
172yield return Path.Combine(workspaceRoot.FullName, ".github", "copilot", "settings.local.json");
Caching\AppHostInfoDiskCache.cs (19)
116_cacheDirectory = new DirectoryInfo(Path.Combine(executionContext.CacheDirectory.FullName, SubDirectoryName));
139var path = Path.Combine(_cacheDirectory.FullName, $"{key}.json");
142_logger.LogTrace("AppHost info cache miss for {Project} (key {Key})", projectFile.FullName, key);
151_logger.LogTrace("AppHost info cache schema mismatch for {Project}", projectFile.FullName);
161_logger.LogTrace("AppHost info cache entry for {Project} is missing RunCommand", projectFile.FullName);
165_logger.LogTrace("AppHost info cache hit for {Project} (key {Key})", projectFile.FullName, key);
171_logger.LogDebug(ex, "Failed to read AppHost info cache for {Project}", projectFile.FullName);
206projectFile.FullName,
212var path = Path.Combine(_cacheDirectory.FullName, $"{key}.json");
218tempPath = Path.Combine(_cacheDirectory.FullName, $"{Path.GetRandomFileName()}.tmp");
226_logger.LogTrace("Stored AppHost info cache entry for {Project} (key {Key})", projectFile.FullName, key);
235_logger.LogDebug(ex, "Failed to write AppHost info cache for {Project}", projectFile.FullName);
285projectFile.FullName);
304sb.Append(CliPathHelper.NormalizePathCasing(projectFile.FullName, environment));
306AppendMtime(sb, projectFile.FullName, "csproj");
308var projectDir = projectFile.Directory?.FullName;
359AppendMtime(sb, Path.Combine(dir.FullName, siblingName), siblingName);
361AppendMtime(sb, Path.Combine(dir.FullName, "global.json"), "globaljson");
366AppendMtime(sb, Path.Combine(dir.FullName, customName), customName);
Caching\DiskCache.cs (11)
24_cacheDirectory = new DirectoryInfo(Path.Combine(executionContext.CacheDirectory.FullName, "nuget-search"));
85_logger.LogDebug(ex, "Failed to create cache directory {CacheDirectory}", _cacheDirectory.FullName);
97var fullPath = Path.Combine(_cacheDirectory.FullName, fileName);
136_logger.LogDebug(ex, "Failed to delete cache file {CacheFile}", file.FullName);
143_logger.LogDebug(ex, "Failed to clear disk cache at {CacheDirectory}", _cacheDirectory.FullName);
207valid = file.FullName;
264_logger.LogTrace("Deleted expired cache file: {CacheFile}", file.FullName);
268_logger.LogTrace("Deleted old cache file during global cleanup: {CacheFile}", file.FullName);
272_logger.LogTrace("Deleted invalid cache file: {CacheFile}", file.FullName);
276_logger.LogTrace("Deleted cache file: {CacheFile}", file.FullName);
281_logger.LogDebug(ex, "Failed to delete cache file {CacheFile}", file.FullName);
Commands\AppHostLauncher.cs (10)
200logger.LogDebug("Starting AppHost in background: {AppHostPath}", effectiveAppHostFile.FullName);
208var childLogFile = GenerateChildLogFilePath(executionContext.LogsDirectory.FullName, timeProvider);
228updateStatus => LaunchAndWaitForBackchannelAsync(executablePath, childArgs, effectiveAppHostFile.FullName, appHostSelectionOrigin, TimeSpan.FromSeconds(timeoutSeconds), updateStatus, cancellationToken));
308effectiveAppHostFile.FullName,
309executionContext.HomeDirectory.FullName,
335effectiveAppHostFile.FullName,
374logger.LogDebug("Working directory: {WorkingDirectory}", executionContext.WorkingDirectory.FullName);
967effectiveAppHostFile.FullName,
977var appHostRelativePath = Path.GetRelativePath(executionContext.WorkingDirectory.FullName, effectiveAppHostFile.FullName);
Configuration\ConfigSourceService.cs (6)
204var path = Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName);
219await ApplySnapshotAsync(source, snapshot, Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName), cancellationToken);
418return Path.Combine(executionContext.AspireHomeDirectory.FullName, "configsources", key);
543var (commit, version) = await CheckRepositoryAsync(identity, temporaryDirectory.FullName, cancellationToken);
551DeleteAcquisitionDirectory(temporaryDirectory.FullName);
692var path = Path.TrimEndingDirectorySeparator(directory.FullName);
DotNet\DotNetCliRunner.cs (38)
307projectFile.FullName,
375: Path.GetFullPath(Path.Combine(workingDirectory.FullName, binlogDirectory));
512var sdksDirectory = executionContext.SdksDirectory.FullName;
799cliArgsList.Add(projectFile.FullName);
920false => [watchOrRunCommand, nonInteractiveSwitch, verboseSwitch, noBuildSwitch, noRestoreSwitch, noProfileSwitch, .. launchProfileSwitch, "--project", projectFile.FullName],
923true => ["run", noBuildSwitch, noRestoreSwitch, noProfileSwitch, .. launchProfileSwitch, noBuild ? string.Empty : suppressCliRunHookProperty, "--file", projectFile.FullName]
1039List<string> cliArgs = ["new", "install", localPackagePath?.FullName ?? $"{packageName}@{version}"];
1177sourcePath = Path.GetFullPath(nugetSource, workingDirectory.FullName);
1253string[] cliArgs = ["restore", projectFilePath.FullName];
1256cliArgs = [.. cliArgs, $"-property:NuGetRestoreTargets={MSBuildEscaping.Escape(restoreTargets.FullName)}"];
1277string[] cliArgs = ["build", noRestoreSwitch, projectFilePath.FullName];
1308cliArgsList.AddRange(["--file", projectFilePath.FullName]);
1320cliArgsList.Add(projectFilePath.FullName);
1335logger.LogInformation("Adding package {PackageName} with version {PackageVersion} to project {ProjectFilePath}", packageName, packageVersion, projectFilePath.FullName);
1348logger.LogError("Failed to add package {PackageName} with version {PackageVersion} to project {ProjectFilePath}. See debug logs for more details.", packageName, packageVersion, projectFilePath.FullName);
1352logger.LogInformation("Package {PackageName} with version {PackageVersion} added to project {ProjectFilePath}", packageName, packageVersion, projectFilePath.FullName);
1362string[] cliArgs = ["sln", solutionFile.FullName, "add", projectFile.FullName];
1364logger.LogInformation("Adding project {ProjectFilePath} to solution {SolutionFilePath}", projectFile.FullName, solutionFile.FullName);
1377logger.LogError("Failed to add project {ProjectFilePath} to solution {SolutionFilePath}. See debug logs for more details.", projectFile.FullName, solutionFile.FullName);
1381logger.LogInformation("Project {ProjectFilePath} added to solution {SolutionFilePath}", projectFile.FullName, solutionFile.FullName);
1424: Path.Combine(workingDirectory.FullName, configPath);
1525cliArgs.Add(nugetConfigFile.FullName);
1596nugetConfigFile?.FullName ?? "(default)",
1677string[] cliArgs = ["sln", solutionFile.FullName, "list"];
1733: Path.Combine(solutionFile.Directory!.FullName, line);
1745string[] cliArgs = ["add", projectFile.FullName, "reference", referencedProject.FullName];
1747logger.LogInformation("Adding project reference from {ProjectFile} to {ReferencedProject}", projectFile.FullName, referencedProject.FullName);
1760logger.LogError("Failed to add project reference from {ProjectFile} to {ReferencedProject}. See debug logs for more details.", projectFile.FullName, referencedProject.FullName);
1764logger.LogInformation("Project reference added from {ProjectFile} to {ReferencedProject}", projectFile.FullName, referencedProject.FullName);
1772return ExecuteAsync(["user-secrets", "init", "--project", projectFile.FullName], env: null, projectFile: null, projectFile.Directory!, backchannelCompletionSource: null, options, cancellationToken);
Git\GitRepository.cs (8)
22logger.LogDebug("Searching for Git repository root from working directory: {WorkingDirectory}", executionContext.WorkingDirectory.FullName);
49logger.LogDebug("Found Git repository root: {GitRoot}", directoryInfo.FullName);
72logger.LogDebug("Search root does not exist: {SearchRoot}", searchRoot.FullName);
76logger.LogDebug("Listing git-included files under: {SearchRoot}", searchRoot.FullName);
91logger.LogDebug("git ls-files returned non-zero exit code {ExitCode} from {SearchRoot}: {Error}", result.ExitStatus.ExitCode, searchRoot.FullName, result.StandardError.Trim());
100var rootFullName = searchRoot.FullName;
115logger.LogDebug("git ls-files returned {Count} files under {SearchRoot}", includedFiles.Count, searchRoot.FullName);
130WorkingDirectory = workingDirectory.FullName,
NuGet\BundleNuGetService.cs (20)
226var settings = GetNuGetSettings(workingDirectory.FullName, cancellationToken);
251return GetNuGetSettings(workingDirectory.FullName, cancellationToken).PackageSourceMappings.Count > 0;
260var settings = GetNuGetSettings(workingDirectory.FullName, cancellationToken);
280GetNuGetSettings(workingDirectory.FullName, cancellationToken), workloadId, channel);
311new DirectoryInfo(Path.Combine(workingDirectory.FullName, ".aspire")),
323=> _nuGetClient.GetGlobalPackagesFolder(workingDirectory.FullName);
337var settings = GetNuGetSettings(configuration.EffectiveWorkingDirectory.FullName, cancellationToken);
339package, directory.FullName,
340configuration.EffectiveWorkingDirectory.FullName, globalPackagesFolder,
357_logger.LogWarning(exception, "Could not remove package acquisition directory {Directory}", directory.FullName);
369var settings = GetNuGetSettings(workingDirectory.FullName, cancellationToken);
371var targetPath = PathNormalizer.ResolveToFilesystemPath(targetFile.FullName);
376paths[index] = replacementFile.FullName;
380if (!IsAncestorDirectory(targetFile.DirectoryName!, workingDirectory.FullName))
383$"NuGet configuration '{targetFile.FullName}' is not in the hierarchy of '{workingDirectory.FullName}'.");
387!IsAncestorDirectory(Path.GetDirectoryName(path)!, workingDirectory.FullName));
388paths.Insert(index < 0 ? paths.Count : index, replacementFile.FullName);
392new DirectoryInfo(Path.Combine(workingDirectory.FullName, ".aspire")),
642return Path.Combine(integrationCacheDirectory.FullName, "package-restore");
Projects\AppHostCandidateFinder.cs (8)
148logger.LogDebug("Git enumeration unavailable for {SearchDirectory}; falling back to filesystem walk.", searchDirectory.FullName);
182var rootFullName = searchDirectory.FullName;
413.Select(path => new FileInfo(Path.Combine(searchDirectory.FullName, path.Replace('/', Path.DirectorySeparatorChar))))
529public override string FullName => _directory.FullName;
569return new MatcherDirectoryInfo(new DirectoryInfo(Path.Combine(_directory.FullName, path)), _options, _excludePath, _applyDirectoryExclusions, _pathComparison, _counters, _onDirectoryEnumerated, _depth + 1, _maxDepth, _cancellationToken);
574return new MatcherFileInfo(new FileInfo(Path.Combine(_directory.FullName, path)), _options, _excludePath, _applyDirectoryExclusions, _pathComparison, _counters, _onDirectoryEnumerated, _depth, _maxDepth, _cancellationToken);
590var directoryPath = Path.GetFullPath(directory.FullName);
615public override string FullName => _file.FullName;
Projects\DotNetAppHostProject.cs (26)
181var content = File.ReadAllText(candidateFile.FullName);
194if (!TryLoadProjectRoot(projectFile.FullName, out var root) || root is null)
297var filePath = Path.Combine(current.FullName, fileName);
707if (TryLoadProjectRoot(projectFile.FullName, out var projectRoot) && projectRoot is not null)
725var filePath = Path.Combine(current.FullName, fileName);
792|| !TryResolveImportPath(containingDirectory.FullName, targetPath, out var resolvedPath))
1842_logger.LogDebug("Falling back to dotnet run for {Project}; direct AppHost launch is disabled by configuration.", effectiveAppHostFile.FullName);
1889workingDirectory.FullName,
1916effectiveAppHostFile.FullName,
1925effectiveAppHostFile.FullName);
1945effectiveAppHostFile.FullName);
1954effectiveAppHostFile.FullName,
1964effectiveAppHostFile.FullName,
1978effectiveAppHostFile.FullName,
1998=> Path.IsPathFullyQualified(path) ? path : Path.GetFullPath(Path.Combine(baseDirectory.FullName, path));
2030effectiveAppHostFile.FullName);
2038effectiveAppHostFile.FullName,
2089_logger.LogDebug(ex, "Falling back to dotnet run because launch settings could not be parsed for {Project}.", effectiveAppHostFile.FullName);
2094_logger.LogDebug(ex, "Falling back to dotnet run because launch settings could not be read for {Project}.", effectiveAppHostFile.FullName);
2099_logger.LogDebug(ex, "Falling back to dotnet run because launch settings could not be read for {Project}.", effectiveAppHostFile.FullName);
2106var directory = projectFile.Directory!.FullName;
2255var runJsonFilePath = appHostFile.FullName[..^2] + "run.json";
2301var profiles = AspireConfigFile.ReadApphostRunProfiles(appHostFile.FullName[..^2] + "run.json");
2338var selectedAppHostPath = PathNormalizer.ResolveToFilesystemPath(appHostFile.FullName);
2535appHostFile.FullName,
2536homeDirectory.FullName,
Projects\GuestAppHostProject.cs (43)
163directory.FullName,
173return new FileInfo(Path.Combine(directory.FullName, appHostFileName));
220return AspireRepositoryDetector.DetectRepositoryRoot(appHostFile.Directory?.FullName) is not null;
238var integrations = config.GetIntegrationReferences(defaultSdkVersion, GetConfigDirectory(directory).FullName).ToList();
277var config = AspireConfigFile.LoadOrCreate(configDir.FullName, GetEffectiveSdkVersion());
278_logger.LogInformation("Loaded config from {Directory} (file exists: {Exists})", configDir.FullName, AspireConfigFile.Exists(configDir.FullName));
283_logger.LogError(ex, "Failed to load configuration from {Directory}", configDir.FullName);
291config.Save(configDir.FullName);
308? AspireConfigFile.Load(GetConfigDirectory(directory).FullName)
373var appHostServerProject = await _appHostServerProjectFactory.CreateAsync(directory.FullName, appHostFile, cancellationToken);
449directory.FullName,
494directory.FullName,
529_logger.LogDebug("AppHost file {File} does not exist", appHostFile.FullName);
544_logger.LogDebug("Validated {Language} AppHost: {File}", _resolvedLanguage.DisplayName, appHostFile.FullName);
554_logger.LogDebug("Running {Language} AppHost: {AppHostFile}", DisplayName, appHostFile.FullName);
590var appHostServerProject = await _appHostServerProjectFactory.CreateAsync(directory.FullName, appHostFile, cancellationToken);
632launchSettingsEnvVars["AppHost__FilePath"] = appHostFile.FullName;
648launchSettingsEnvVars[KnownConfigNames.AspireUserSecretsId] = UserSecretsPathHelper.ComputeSyntheticUserSecretsId(appHostFile.FullName);
730directory.FullName,
827environmentVariables["ASPIRE_PROJECT_DIRECTORY"] = directory.FullName;
828environmentVariables["ASPIRE_APPHOST_FILEPATH"] = appHostFile.FullName;
1107var exitCodePath = Path.Combine(resultDirectory.FullName, "exit-code");
1266var aspireConfig = AspireConfigFile.Load(configDir.FullName);
1274_logger.LogWarning(ex, "Failed to load config for launch profiles from {Directory}", configDir.FullName);
1278var apphostRunPath = Path.Combine(directory.FullName, "apphost.run.json");
1279var launchSettingsPath = Path.Combine(directory.FullName, "Properties", "launchSettings.json");
1285_logger.LogDebug("No aspire.config.json, apphost.run.json, or launchSettings.json found in {Path}", directory.FullName);
1406_logger.LogDebug("Publishing guest AppHost: {AppHostFile}", appHostFile.FullName);
1415var appHostServerProject = await _appHostServerProjectFactory.CreateAsync(directory.FullName, appHostFile, cancellationToken);
1440launchSettingsEnvVars[KnownConfigNames.AspireHome] = _executionContext.AspireHomeDirectory.FullName;
1455launchSettingsEnvVars[KnownConfigNames.AspireUserSecretsId] = UserSecretsPathHelper.ComputeSyntheticUserSecretsId(appHostFile.FullName);
1530directory.FullName,
1588environmentVariables[KnownConfigNames.AspireHome] = _executionContext.AspireHomeDirectory.FullName;
1590environmentVariables["ASPIRE_PROJECT_DIRECTORY"] = directory.FullName;
1591environmentVariables["ASPIRE_APPHOST_FILEPATH"] = appHostFile.FullName;
2019context.AppHostFile.FullName));
2055var genericAppHostPath = _appHostServerProjectFactory.GetInstanceIdentifier(directory.FullName);
2060homeDirectory.FullName,
2238sdkVersion = AspireConfigFile.Load(configDir.FullName)?.SdkVersion;
2651var id = UserSecretsPathHelper.ComputeSyntheticUserSecretsId(appHostFile.FullName);
2700var existingBundlePath = Path.GetFullPath(existingCertificateBundle, workingDirectory.FullName);
2716_executionContext.AspireHomeDirectory.FullName,
Projects\JavaAppHostToolchainResolver.cs (30)
119resolution.ProjectDirectory.FullName,
133if (File.Exists(Path.Combine(candidate.FullName, MavenPomFileName)))
135return new(JavaAppHostToolchain.Maven, candidate, $"{MavenPomFileName} found in {candidate.FullName}");
140if (File.Exists(Path.Combine(candidate.FullName, gradleBuildFileName)))
142return new(JavaAppHostToolchain.Gradle, candidate, $"{gradleBuildFileName} found in {candidate.FullName}");
147return new(JavaAppHostToolchain.Javac, appHostDirectory, $"no build file found in {appHostDirectory.FullName}");
191var candidate = Path.Combine(directory.FullName, wrapperName);
192var isProjectDirectory = directory.FullName == projectDirectory.FullName;
198|| (IsBuildRoot(directory.FullName, toolchain)
199&& !IsWorldWritable(directory.FullName)
206var gitPath = Path.Combine(directory.FullName, ".git");
313$"The Java AppHost project in '{projectDirectory.FullName}' declares a {GetDisplayName(toolchain)} " +
345var relativeWrapperPath = Path.GetRelativePath(appHostDirectory.FullName, wrapperPath);
387&& !string.Equals(invocation.WrapperDirectory.FullName, resolution.ProjectDirectory.FullName, PathComparison)
436var scriptPath = Path.Combine(resolution.ProjectDirectory.FullName, GradleInitScriptPath);
496resolution.ProjectDirectory.FullName,
527var relativePath = Path.GetRelativePath(appHostDirectory.FullName, projectDirectory.FullName);
571var reactorPath = Path.GetRelativePath(appHostDirectory.FullName, invocation.WrapperDirectory.FullName);
572var modulePath = Path.GetRelativePath(invocation.WrapperDirectory.FullName, projectDirectory.FullName);
587return IsMavenReactorModule(reactorDirectory, projectDirectory.FullName, visited);
595if (!visited.Add(aggregatorDirectory.FullName))
602var document = XDocument.Load(Path.Combine(aggregatorDirectory.FullName, MavenPomFileName));
618var moduleDirectory = new DirectoryInfo(Path.GetFullPath(Path.Combine(aggregatorDirectory.FullName, modulePath)));
619if (string.Equals(moduleDirectory.FullName, projectDirectory, PathComparison)
620|| (File.Exists(Path.Combine(moduleDirectory.FullName, MavenPomFileName))
Projects\ProjectLocator.cs (104)
182candidates.Sort((x, y) => string.Compare(x.AppHostFile.FullName, y.AppHostFile.FullName, StringComparison.Ordinal));
297logger.LogDebug("Searching for project files in {SearchDirectory}", searchDirectory.FullName);
347logger.LogDebug("Checking candidate file {CandidateFile}", candidateFile.FullName);
352logger.LogTrace("No handler found for {CandidateFile}", candidateFile.FullName);
388logger.LogDebug("Found {Language} apphost {CandidateFile}", handler.DisplayName, candidateFile.FullName);
389var relativePath = Path.GetRelativePath(executionContext.WorkingDirectory.FullName, candidateFile.FullName);
409var relativePath = Path.GetRelativePath(executionContext.WorkingDirectory.FullName, candidateFile.FullName);
414logger.LogDebug("Skipping unsupported project {CandidateFile}", candidateFile.FullName);
422var relativePath = Path.GetRelativePath(executionContext.WorkingDirectory.FullName, candidateFile.FullName);
437logger.LogTrace("File {CandidateFile} is not a valid Aspire host", candidateFile.FullName);
456appHostProjects.Sort((x, y) => string.Compare(x.AppHostFile.FullName, y.AppHostFile.FullName, StringComparison.Ordinal));
484var settingsCanonicalPath = PathNormalizer.ResolveToFilesystemPath(settingsAppHost.FullName);
487if (string.Equals(candidate.AppHostFile.FullName, settingsAppHost.FullName, StringComparisons.FileSystemPath))
492var candidateCanonicalPath = PathNormalizer.ResolveToFilesystemPath(candidate.AppHostFile.FullName);
504var relativePath = Path.GetRelativePath(executionContext.WorkingDirectory.FullName, settingsAppHost.FullName);
510logger.LogDebug("Skipping configured AppHost project {SettingsAppHost} because no project handler was found.", settingsAppHost.FullName);
516var settingsAppHostRelativePath = Path.GetRelativePath(executionContext.WorkingDirectory.FullName, settingsAppHost.FullName);
546logger.LogDebug("Skipping unsupported configured AppHost project {SettingsAppHost}", settingsAppHost.FullName);
583logger.LogWarning("Ignoring AppHost path '{AppHostPath}' from settings because no project handler can process it.", settingsAppHost.FullName);
613if (IsUnder(file.FullName, directory.FullName))
622PathNormalizer.ResolveToFilesystemPath(file.FullName),
623PathNormalizer.ResolveToFilesystemPath(directory.FullName));
649logger.LogWarning("Ignoring AppHost path '{AppHostPath}' from settings because no project handler can process it.", settingsAppHost.FullName);
662logger.LogWarning("Ignoring AppHost path '{AppHostPath}' from settings because it is not supported in the current environment{MessageSuffix}.", settingsAppHost.FullName, messageSuffix);
670logger.LogWarning("AppHost path '{AppHostPath}' from settings could not be evaluated by MSBuild and may not be buildable{MessageSuffix}.", settingsAppHost.FullName, messageSuffix);
675logger.LogWarning("Ignoring AppHost path '{AppHostPath}' from settings because it is no longer a valid AppHost project{MessageSuffix}.", settingsAppHost.FullName, messageSuffix);
689aspireConfig = AspireConfigFile.Load(searchDirectory.FullName);
699var configFilePath = Path.Combine(searchDirectory.FullName, AspireConfigFile.FileName);
713: Path.Combine(searchDirectory.FullName, configAppHostPath);
719logger.LogInformation("Found AppHost path '{AppHostPath}' from config file in {Directory}", configAppHostPath, searchDirectory.FullName);
735var settingsFile = new FileInfo(ConfigurationHelper.BuildPathToSettingsJsonFile(searchDirectory.FullName));
746ReportInvalidConfigurationFileShape(settingsFile.FullName, silent);
754ReportInvalidConfiguredAppHostPathType(settingsFile.FullName, LegacySettingsAppHostPathKey, silent);
763if (!IsValidConfiguredAppHostPath(appHostPath, settingsFile.FullName, fieldName: LegacySettingsAppHostPathKey, silent: silent))
768var qualifiedAppHostPath = Path.IsPathRooted(appHostPath) ? appHostPath : Path.Combine(settingsFile.Directory!.FullName, appHostPath);
786interactionService.DisplayMessage(KnownEmojis.Warning, string.Format(CultureInfo.CurrentCulture, ErrorStrings.AppHostWasSpecifiedButDoesntExist, settingsFile.FullName, qualifiedAppHostPath));
795var message = string.Format(CultureInfo.CurrentCulture, ErrorStrings.InvalidJsonInConfigFile, settingsFile.FullName, ex.Message);
897if (Directory.Exists(projectFile.FullName))
899logger.LogDebug("Provided path {Path} is a directory, searching for project files recursively", projectFile.FullName);
900var directory = new DirectoryInfo(projectFile.FullName);
940unbuildableAppHost.FullName,
941directory.FullName);
961logger.LogError("No AppHost project files found in directory {Directory}", directory.FullName);
966logger.LogDebug("Found single AppHost project file {ProjectFile} in directory {Directory}", appHostProjects[0].FullName, directory.FullName);
973logger.LogDebug("Multiple AppHost project files found in directory {Directory}, prompting user to select", directory.FullName);
978file => $"{file.Name.EscapeMarkup()} ({Path.GetRelativePath(executionContext.WorkingDirectory.FullName, file.FullName).EscapeMarkup()})",
984logger.LogDebug("Multiple AppHost project files found in directory {Directory}, selecting none", directory.FullName);
989logger.LogError("Multiple AppHost project files found in directory {Directory}, throwing exception", directory.FullName);
994else if (File.Exists(projectFile.FullName))
1001var resolvedProjectPath = PathNormalizer.ResolvePathCasing(projectFile.FullName);
1003if (!string.Equals(resolvedProjectPath, projectFile.FullName, StringComparison.Ordinal))
1007projectFile.FullName,
1019logger.LogError("Project file {ProjectFile} does not exist.", projectFile.FullName);
1031logger.LogDebug("Using {Language} apphost {ProjectFile}", handler.DisplayName, projectFile.FullName);
1053projectFile.FullName);
1066return await UseOrFindAppHostProjectFileAsync(new FileInfo(parentDirectory.FullName), multipleAppHostProjectsFoundBehavior, createSettingsFile, displayProgress, cancellationToken);
1079logger.LogDebug("Using AppHost path from settings without scanning: {AppHost}", settingsAppHost.FullName);
1143: PathNormalizer.ResolveToFilesystemPath(settingsAppHost.FullName);
1148string.Equals(c.AppHostFile.FullName, settingsAppHost.FullName, StringComparisons.FileSystemPath) ||
1150PathNormalizer.ResolveToFilesystemPath(c.AppHostFile.FullName),
1159logger.LogDebug("Using previously-selected AppHost from settings: {AppHost}", settingsAppHost.FullName);
1168MultipleAppHostProjectsFoundBehavior.Prompt => await interactionService.PromptForSelectionAsync(InteractionServiceStrings.SelectAppHostToUse, results.BuildableAppHost.Select(c => c.AppHostFile).ToList(), projectFile => $"{projectFile.Name.EscapeMarkup()} ({Path.GetRelativePath(executionContext.WorkingDirectory.FullName, projectFile.FullName).EscapeMarkup()})", cancellationToken: cancellationToken),
1181PathNormalizer.ResolveToFilesystemPath(selectedAppHost.FullName),
1182PathNormalizer.ResolveToFilesystemPath(settingsAppHost.FullName),
1196!allCandidates.Any(f => string.Equals(f.FullName, selectedAppHost.FullName, StringComparison.Ordinal)))
1198var selectedAppHostCanonicalPath = PathNormalizer.ResolveToFilesystemPath(selectedAppHost.FullName);
1201PathNormalizer.ResolveToFilesystemPath(f.FullName),
1264IsValidConfiguredAppHostPath(existingPath, settingsFile.FullName, AspireConfigAppHostPathKey, silent: true))
1267Path.IsPathRooted(existingPath) ? existingPath : Path.Combine(settingsFile.Directory!.FullName, existingPath));
1269if (IsSamePersistedAppHostPath(resolvedPath, projectFile.FullName))
1273settingsFile.FullName,
1274projectFile.FullName);
1285projectFile.FullName,
1291logger.LogDebug("Creating settings file at {SettingsFilePath}", settingsFile.FullName);
1293var relativePathToProjectFile = Path.GetRelativePath(settingsFile.Directory!.FullName, projectFile.FullName).Replace(Path.DirectorySeparatorChar, '/');
1296await ConfigurationService.SetConfigurationInFileAsync(settingsFile.FullName, AspireConfigAppHostPathKey, relativePathToProjectFile, cancellationToken);
1302await ConfigurationService.SetConfigurationInFileAsync(settingsFile.FullName, "appHost.language", language.LanguageId.Value, cancellationToken);
1313await ConfigurationService.SetConfigurationInFileAsync(settingsFile.FullName, "sdk.version", inheritedSdkVersion, cancellationToken);
1318var relativeSettingsFilePath = Path.GetRelativePath(executionContext.WorkingDirectory.FullName, settingsFile.FullName).Replace(Path.DirectorySeparatorChar, '/');
1338targetSettingsFilePath = Path.Combine(parentDirectory.FullName, AspireConfigFile.FileName);
1348logger.LogDebug("Using existing config file at {Path}", configuredSettingsFile.FullName);
1354var newConfigPath = Path.Combine(configRoot.FullName, AspireConfigFile.FileName);
1365return AspireConfigFile.Load(configRoot.FullName);
1368var legacySettingsFile = new FileInfo(ConfigurationHelper.BuildPathToSettingsJsonFile(configRoot.FullName));
1374logger.LogInformation("Migrating legacy settings from {LegacyDir} to {ConfigFile}", configRoot.FullName, settingsFile.FullName);
1375return AspireConfigFile.LoadOrCreate(configRoot.FullName);
1391var userProfile = executionContext.HomeDirectory.FullName;
Projects\ProjectUpdater.cs (61)
37logger.LogDebug("Fetching '{AppHostPath}' items and properties.", projectFile.FullName);
125logger.LogInformation("No updates required for project: {ProjectFile}", projectFile.FullName);
135.GroupBy(step => step.ProjectFile.FullName)
213var nugetConfigDirBinding = context.NuGetConfigDirBinding.WithDefault(recommendedNuGetConfigDirectory.FullName);
236PathNormalizer.ResolveToFilesystemPath(configurationCandidate.TargetFile.FullName),
335throw new ProjectUpdaterException(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.FailedToRestoreAfterUpdateFormat, projectFile.FullName));
401context.AppHostFile.FullName);
411context.AppHostFile.FullName,
529new(Path.Combine(configRoot.FullName, AspireConfigFile.FileName))
542var configToSave = AspireConfigFile.LoadOrCreate(configRoot.FullName);
545configToSave.Save(configRoot.FullName);
564var path = PathNormalizer.ResolveToFilesystemPath(file.FullName);
589var cacheKey = $"{ItemsAndPropertiesCacheKeyPrefix}_{projectFile.FullName}_{itemsKey}_{propertiesKey}";
602throw new ProjectUpdaterException(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.FailedFetchItemsAndPropertiesFormat, projectFile.FullName));
623logger.LogWarning("Falling back to parsing for '{ProjectFile}'. Reason: {Message}", projectFile.FullName, ex.Message);
637var projectPath = PathNormalizer.ResolveToFilesystemPath(projectFile.FullName);
638var appHostProjectPath = PathNormalizer.ResolveToFilesystemPath(appHostProjectFile.FullName);
648var appHostProjectAnalyzeStep = new AnalyzeStep(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.AnalyzeProjectFormat, context.AppHostProjectFile.FullName), () => AnalyzeProjectAsync(context.AppHostProjectFile, context, cancellationToken));
686logger.LogDebug("Analyzing App Host SDK for: {AppHostFile}", context.AppHostProjectFile.FullName);
701sourceXml = XDocument.Load(context.AppHostProjectFile.FullName);
710UpdateCommandStrings.ConditionalSdkEvaluationRequiredFormat, context.AppHostProjectFile.FullName));
800candidates.Add(projectFile.FullName);
808candidates.Add(Path.GetFullPath(path, projectFile.Directory!.FullName));
820UpdateCommandStrings.ConditionalSdkExplicitEditRequiredFormat, projectFile.FullName));
824throw new ProjectUpdaterException($"Could not uniquely locate the imported Aspire.AppHost.Sdk declaration for '{projectFile.FullName}'. Found {declarations.Length} declaring files; update the imported SDK version explicitly.");
845var document = XDocument.Load(file.FullName, LoadOptions.PreserveWhitespace);
857await File.WriteAllTextAsync(file.FullName, document.ToString(SaveOptions.DisableFormatting));
921projectDocument.Load(projectFile.FullName);
942propsDocument.Load(cpmInfo.DirectoryPackagesPropsFile.FullName);
963projectDocument.Load(projectFile.FullName);
968projectDocument.Save(projectFile.FullName);
1000projectDocument.Load(projectFile.FullName);
1110projectDocument.Load(projectFile.FullName);
1115throw new ProjectUpdaterException(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.CouldNotFindRootProjectElementFormat, projectFile.FullName));
1139throw new ProjectUpdaterException(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.CouldNotFindSdkElementFormat, projectFile.FullName));
1148projectDocument.Save(projectFile.FullName);
1173projectDocument.Save(projectFile.FullName);
1266propsDocument.Load(cpmInfo.DirectoryPackagesPropsFile.FullName);
1283propsDocument.Save(cpmInfo.DirectoryPackagesPropsFile.FullName);
1296cpmInfo.DirectoryPackagesPropsFile.FullName,
1304var fileContent = await File.ReadAllTextAsync(projectFile.FullName);
1312"Could not find '#:sdk Aspire.AppHost.Sdk@<version>' directive in single-file AppHost: {0}", projectFile.FullName));
1329await File.WriteAllTextAsync(projectFile.FullName, updatedContent);
1345var fileContent = File.ReadAllText(projectFile.FullName);
1358var fileContent = await File.ReadAllTextAsync(projectFile.FullName);
1363await File.WriteAllTextAsync(projectFile.FullName, updatedContent);
1380if (!context.VisitedProjects.Add(projectFile.FullName))
1415context.ProjectRestoreTargets[projectFile.FullName] =
1444context.AnalyzeSteps.Enqueue(new AnalyzeStep(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.AnalyzeProjectFormat, referencedProjectFile.FullName), () => AnalyzeProjectAsync(referencedProjectFile, context, cancellationToken)));
1514var directoryPackagesPropsPath = Path.Combine(current.FullName, "Directory.Packages.props");
1601doc.Load(directoryPackagesPropsFile.FullName);
1645logger.LogInformation(ex, "Ignoring parsing error in Directory.Packages.props '{DirectoryPackagesPropsFile}' for project '{ProjectFile}'", directoryPackagesPropsFile.FullName, projectFile.FullName);
1686logger.LogWarning(ex, "Exception while resolving MSBuild property '{PropertyName}' for project '{ProjectFile}'", propertyName, projectFile.FullName);
1699doc.Load(directoryPackagesPropsFile.FullName);
1704throw new ProjectUpdaterException(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.CouldNotFindPackageVersionInDirectoryPackagesProps, packageId, directoryPackagesPropsFile.FullName));
1708doc.Save(directoryPackagesPropsFile.FullName);
1730throw new ProjectUpdaterException(string.Format(CultureInfo.InvariantCulture, UpdateCommandStrings.FailedUpdatePackageReferenceFormat, package.Id, projectFile.FullName));
1738var document = XDocument.Load(definingFile.FullName, LoadOptions.PreserveWhitespace);
1743throw new ProjectUpdaterException($"Expected one declaration of '{package.Id}' in '{definingFile.FullName}', found {references.Length}.");
1755document.Save(definingFile.FullName);
Projects\RepositoryToolUpdater.cs (15)
34logger.LogDebug("Finding repository CLI manifests from {Directory}", directory.FullName);
46foreach (var path in new[] { Path.Combine(current.FullName, ".config", "dotnet-tools.json"), Path.Combine(current.FullName, "dotnet-tools.json") })
69var manifest = await ReadManifestAsync(Path.Combine(current.FullName, "package.json"), isNpm: true, cancellationToken);
124UpdateCommandStrings.UnsupportedToolVersionFormat, manifest.File.FullName, reference.Version));
153update.Manifest.File.FullName.EscapeMarkup(), update.Manifest.PackageId.EscapeMarkup(),
157Files = updates.Select(static update => update.Manifest.File).DistinctBy(static file => file.FullName).ToArray()
186var manifest = await ReadManifestAsync(original.File.FullName, original.IsNpm, cancellationToken);
193throw new ProjectUpdaterException(string.Format(CultureInfo.CurrentCulture, UpdateCommandStrings.ToolManifestChangedFormat, original.File.FullName));
196originalFiles.Add(manifest.File.FullName, await File.ReadAllBytesAsync(manifest.File.FullName, cancellationToken));
214await File.WriteAllTextAsync(manifest.File.FullName, content, cancellationToken);
222await File.WriteAllBytesAsync(manifest.File.FullName, originalFiles[manifest.File.FullName], CancellationToken.None);
230logger.LogDebug("Updated repository CLI reference in {ManifestPath}", manifest.File.FullName);
Projects\TypeScriptAppHostToolchainResolver.cs (14)
63if (File.Exists(Path.Combine(candidateDirectory.FullName, BunLockFileName)))
68if (File.Exists(Path.Combine(candidateDirectory.FullName, BunBinaryLockFileName)))
73if (File.Exists(Path.Combine(candidateDirectory.FullName, PnpmLockFileName)))
78var yarnLockFilePath = Path.Combine(candidateDirectory.FullName, YarnLockFileName);
89if (File.Exists(Path.Combine(candidateDirectory.FullName, YarnConfigFileName)))
94if (File.Exists(Path.Combine(candidateDirectory.FullName, DenoLockFileName)))
99if (File.Exists(Path.Combine(candidateDirectory.FullName, DenoJsonFileName)))
104if (File.Exists(Path.Combine(candidateDirectory.FullName, DenoJsoncFileName)))
109if (File.Exists(Path.Combine(candidateDirectory.FullName, PackageLockFileName)))
115return new(TypeScriptAppHostToolchain.Npm, $"no package manager marker found in {appHostDirectory.FullName} or an eligible parent directory");
355var packageJsonPath = Path.Combine(appHostDirectory.FullName, PackageJsonFileName);
503var parentPath = Path.TrimEndingDirectorySeparator(parentDirectory.FullName);
504if (string.Equals(parentPath, Path.TrimEndingDirectorySeparator(parentDirectory.Root.FullName), pathComparison))
516return new(toolchain, $"{markerName} found in {directory.FullName}");
Scaffolding\ScaffoldingService.cs (23)
99var config = AspireConfigFile.LoadOrCreate(directory.FullName, sdkVersion);
128config.Save(directory.FullName);
133var integrations = config.GetIntegrationReferences(sdkVersion, directory.FullName).ToList();
146Directory.CreateDirectory(scaffoldDirectory.FullName);
148var appHostServerProject = await _appHostServerProjectFactory.CreateAsync(scaffoldDirectory.FullName, cancellationToken);
177scaffoldDirectory.FullName,
182var conflictingFiles = GetConflictingScaffoldFiles(scaffoldDirectory.FullName, scaffoldFiles.Keys);
187scaffoldDirectory.FullName,
197var filePath = Path.Combine(scaffoldDirectory.FullName, fileName);
238scaffoldDirectory.FullName,
255var appHostRunPath = Path.Combine(scaffoldDirectory.FullName, "apphost.run.json");
275config.Save(directory.FullName);
281if (IsTypeScriptLanguage(language) && File.Exists(Path.Combine(directory.FullName, PackageJsonFileName)))
285return new DirectoryInfo(Path.Combine(directory.FullName, BrownfieldTypeScriptAppHostDirectoryName));
295return Path.Combine(scaffoldDirectory.FullName, appHostFileName);
301rootDirectory.FullName.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar),
302scaffoldDirectory.FullName.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar),
307var packageJsonPath = Path.Combine(rootDirectory.FullName, PackageJsonFileName);
324var relativeAppHostDirectory = PathNormalizer.NormalizePathForStorage(Path.GetRelativePath(rootDirectory.FullName, appHostDirectory.FullName));
382Path.GetRelativePath(rootDirectory.FullName, Path.Combine(scaffoldDirectory.FullName, appHostFileName)));
528!File.Exists(Path.Combine(directory.FullName, PackageJsonFileName)) ||
src\Shared\SocketPermissionHelper.cs (12)
46var isWorkingDirectory = string.Equals(directory.FullName, Path.TrimEndingDirectorySeparator(currentDirectory), comparison);
47var isUserProfile = string.Equals(directory.FullName, profileRoot, comparison);
48var isTemporaryRoot = string.Equals(Path.TrimEndingDirectorySeparator(directory.FullName), tempRoot, comparison);
61if (string.Equals(current.FullName, profileRoot, comparison) ||
62string.Equals(current.FullName, tempRoot, comparison))
65if (!Directory.Exists(resolvedBase.FullName))
67throw new IOException($"The socket directory base '{current.FullName}' must resolve to an existing directory.");
84if (directory.Exists && (File.GetUnixFileMode(directory.FullName) & UnixFileMode.StickyBit) != 0)
91return DirectoryHelper.CreateWithOwnerOnlyPermissions(directory.FullName);
96Directory.CreateDirectory(directory.FullName, OwnerOnlyMode);
97if (File.GetUnixFileMode(directory.FullName) != OwnerOnlyMode)
174throw new IOException($"The configured socket directory '{directory.FullName}' must have a protected owner-only ACL with inheritable full control for the current user (SYSTEM is also allowed). Set those permissions or choose a new dedicated directory.");
Templating\CliTemplateFactory.cs (13)
132(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
141(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
152(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
163(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
174(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
185(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
196(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
207(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
220(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
229(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
274_executionContext.WorkingDirectory.FullName,
278var outputPathValidator = OutputPathHelper.CreateOutputPathValidator(_executionContext.WorkingDirectory.FullName);
395var currentDir = _executionContext.WorkingDirectory.FullName;
Templating\DotNetTemplateFactory.cs (14)
108var sdkInstallPath = Path.Combine(executionContext.SdksDirectory.FullName, "dotnet", DotNetSdkInstaller.MinimumSdkVersion);
141(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
150(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
161(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
171(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
180(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
191(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
201(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
211(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
224(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
245(ctx, projectName) => OutputPathHelper.GetUniqueDefaultOutputPath(projectName, ctx.WorkingDirectory.FullName),
426executionContext.WorkingDirectory.FullName,
621executionContext.WorkingDirectory.FullName,
625var validator = OutputPathHelper.CreateOutputPathValidator(executionContext.WorkingDirectory.FullName);
Templating\TemplateEngineFactory.cs (9)
59? Path.GetFullPath(source.Path, executionContext.WorkingDirectory.FullName)
122(context, name) => OutputPathHelper.GetUniqueDefaultOutputPath(name, context.WorkingDirectory.FullName),
143var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "git");
174Directory.Move(Path.Combine(repositoryRoot.FullName, ".git"), Path.Combine(checkout.FullName, ".git"));
213var localPath = Path.GetFullPath(repository, executionContext.WorkingDirectory.FullName);
257for (var directory = new DirectoryInfo(fullPath); directory is not null && directory.FullName != repositoryRoot; directory = directory.Parent)
359executionContext.WorkingDirectory.FullName,
361OutputPathHelper.GetUniqueDefaultOutputPath(name, executionContext.WorkingDirectory.FullName),
363OutputPathHelper.CreateOutputPathValidator(executionContext.WorkingDirectory.FullName),
Utils\ConfigurationHelper.cs (12)
52var newSettingsPath = Path.Combine(currentDirectory.FullName, AspireConfigFile.FileName);
79var legacySettingsPath = BuildPathToSettingsJsonFile(currentDirectory.FullName);
90if (File.Exists(globalSettingsFile.FullName))
92AddSettingsFile(configuration, globalSettingsFile.FullName, persistNormalization);
98AddSettingsFile(configuration, localSettingsFile.FullName, persistNormalization);
105? new FileInfo(Path.Combine(settingsFile.Directory!.FullName, AspireConfigFile.FileName))
118var normalizedSettingsPath = PathNormalizer.ResolveSymlinks(settingsFile.FullName)
122var lockPath = Path.Combine(cacheDirectory.FullName, "workspace-config-locks", $"{lockFileName}.lock");
185return new DirectoryInfo(Path.Combine(configRoot.FullName, AspireJsonConfiguration.SettingsFolder));
191return new DirectoryInfo(Path.Combine(workspaceAspireDirectory.FullName, IntegrationCacheFolderName));
204var configPath = Path.Combine(searchDir.FullName, AspireConfigFile.FileName);
210var legacyPath = BuildPathToSettingsJsonFile(searchDir.FullName);
aspire-tray (7)
Aspire.Acquisition.Tests (10)
Aspire.Cli.EndToEnd.Tests (368)
AgentCommandTests.cs (14)
97var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json");
152var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json");
186var vscodePath = Path.Combine(workspace.WorkspaceRoot.FullName, ".vscode");
232Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills")));
267var skillsRoot = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills");
302var vscodePath = Path.Combine(workspace.WorkspaceRoot.FullName, ".vscode");
303var mcpConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json");
375var mcpConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "StarterApp", ".mcp.json");
401Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "StarterApp", ".claude", "skills", "aspireify", "SKILL.md")));
425var executablePathFile = Path.Combine(workspace.WorkspaceRoot.FullName, "cli-executable.txt");
431var containerHome = CliE2ETestHelpers.ToContainerPath(home.FullName, workspace);
438var containerProject = CliE2ETestHelpers.ToContainerPath(project.FullName, workspace);
482var root = scope == "project" ? project.FullName : home.FullName;
CompletionTests.cs (13)
34await File.WriteAllTextAsync(Path.Combine(home.FullName, "globalsettings.json"), legacyConfig);
42var localConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json");
60Assert.Equal(string.Empty, await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "completion.stderr")));
61Assert.Equal(string.Empty, await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "suggestions.stderr")));
62Assert.Equal("completions\n", await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "suggestions.txt")));
63Assert.Equal("complete -o default -F _aspire_complete aspire\n", await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "registration.txt")));
64Assert.Equal(["globalsettings.json"], Directory.GetFiles(home.FullName, "*", SearchOption.AllDirectories).Select(Path.GetFileName));
65Assert.Empty(Directory.GetDirectories(home.FullName));
66Assert.Equal(legacyConfig, await File.ReadAllTextAsync(Path.Combine(home.FullName, "globalsettings.json")));
89await File.WriteAllTextAsync(Path.Combine(fakeBin.FullName, "aspire"), ("""
110await File.ReadAllBytesAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "completion-arguments.bin")));
111Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "completion-executed")));
126await File.ReadAllBytesAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "completion-arguments.bin")));
CSharpInitTests.cs (15)
28[Path.Combine(appDirectory.FullName, "package.json")] = """{"name":"existing-web","private":true}""",
29[Path.Combine(appDirectory.FullName, "Incidental.slnx")] = "<Solution />"
33existingFiles[Path.Combine(appDirectory.FullName, "aspire.config.json")] = """{"appHost":{"language":"typescript/nodejs"}}""";
68Assert.Equal(existingFiles.Keys.Order(), Directory.GetFiles(appDirectory.FullName, "*", SearchOption.AllDirectories).Order());
82var toolsDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "tools"));
83var projectPath = Path.Combine(toolsDirectory.FullName, "Incidental.csproj");
86[Path.Combine(workspace.WorkspaceRoot.FullName, "Incidental.sln")] = """
91[Path.Combine(toolsDirectory.FullName, "Incidental.slnx")] = """
124Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
125Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.run.json")));
126var config = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json")));
129Assert.Equal([projectPath], Directory.GetFiles(workspace.WorkspaceRoot.FullName, "*.csproj", SearchOption.AllDirectories));
141var description = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "resources.json")));
188var appHostCs = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs");
189var aspireConfigJson = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json");
CustomTemplateTests.cs (7)
38Path.Combine(workspace.WorkspaceRoot.FullName, "template"));
43var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "template", ".template.config", "template.json");
73var sourceLocation = CliE2ETestHelpers.ToContainerPath(Path.Combine(workspace.WorkspaceRoot.FullName, "template"), workspace);
103var listed = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "sources.json")))!.AsObject();
110var table = await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "sources.txt"));
204Assert.Empty(JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "empty-sources.json")))!.AsObject());
208var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "out");
DoctorCommandTests.cs (6)
71Path.Combine(runtimeDirectory.FullName, runtime),
108Path.Combine(workspace.WorkspaceRoot.FullName, "doctor-runtime.txt"),
118Path.Combine(workspace.WorkspaceRoot.FullName, "doctor-runtime.json"),
135Assert.Equal("1", await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "doctor-text.exit")));
136Assert.Equal("1", await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "doctor-json.exit")));
296TypeScriptAppHostToolchainTestHelpers.SetPackageManager(workspace.WorkspaceRoot.FullName, toolchain, cleanInstallState: true);
EmptyAppHostTemplateTests.cs (9)
64var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "DestroySentinel", "apphost.cs");
79var exitCode = await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "destroy-exit.txt"));
80var errorOutput = await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "destroy-output.txt"));
81var sentinelPath = Path.Combine(workspace.WorkspaceRoot.FullName, "destroy-apphost-started");
192var sourcePackage = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "source-template.nupkg"));
275var destinationPath = Path.Combine(destinationFeed.FullName, $"Aspire.ProjectTemplates.{packageVersion}.nupkg");
276using var sourceArchive = ZipFile.OpenRead(sourcePackage.FullName);
313Assert.True(foundNuspec, $"Expected a nuspec in template package '{sourcePackage.FullName}'.");
319Path.Combine(workspace.FullName, "NuGet.Config"),
EmulatedStagingBuildTests.cs (8)
82await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"), $$"""
98var projectDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, projectName));
103var appHostCsproj = Path.Combine(projectDir.FullName, $"{projectName}.AppHost", $"{projectName}.AppHost.csproj");
155var projectDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, projectName));
156var configPath = Path.Combine(projectDir.FullName, "aspire.config.json");
269$"Emulating a staging build, 'aspire new' must drop exactly one NuGet.config registering the darc feed. Found: {nuGetConfigs.Count} ({string.Join(", ", nuGetConfigs.Select(f => f.FullName))}).");
271var configPath = nuGetConfigs[0].FullName;
369.Select(f => f.FullName)
Helpers\CliInstallStrategyTests.cs (30)
72(CliE2ETestHelpers.CliArchiveDirEnvironmentVariableName, tempDir.FullName),
79Assert.Equal(tempDir.FullName, strategy.ArchiveDir);
100(CliE2ETestHelpers.CliArchiveDirEnvironmentVariableName, tempDir.FullName),
107Assert.Equal(tempDir.FullName, strategy.ArchiveDir);
147(CliE2ETestHelpers.CliArchiveDirEnvironmentVariableName, tempDir.FullName));
154Assert.Contains($"{tempDir.FullName}:/tmp/aspire-cli-archives:ro", options.Volumes);
535("ASPIRE_E2E_DOTNET_TOOL_SOURCE", tempDir.FullName),
549Assert.Equal(tempDir.FullName, strategy.NupkgSourcePath);
564File.WriteAllText(Path.Combine(tempDir.FullName, "Aspire.Cli.13.3.0-preview.1.25175.1.nupkg"), "");
565File.WriteAllText(Path.Combine(tempDir.FullName, "Aspire.Cli.linux-x64.13.3.0-preview.1.25175.1.nupkg"), "");
569("ASPIRE_E2E_DOTNET_TOOL_SOURCE", tempDir.FullName),
583Assert.Equal(tempDir.FullName, strategy.NupkgSourcePath);
729var strategy = CliInstallStrategy.FromDotnetToolLocalSource(tempDir.FullName, "13.3.0");
778var strategy = CliInstallStrategy.FromDotnetToolLocalSource(tempDir.FullName, "13.3.0");
833(CliE2ETestHelpers.CliArchiveDirEnvironmentVariableName, tempDir.FullName),
840Assert.Equal(tempDir.FullName, strategy.ArchiveDir);
861File.WriteAllText(Path.Combine(tempDir.FullName, "Aspire.Cli.13.3.0-preview.1.12345.1.nupkg"), "");
863var strategy = CliInstallStrategy.FromLocalArchive(tempDir.FullName);
883File.WriteAllText(Path.Combine(tempDir.FullName, $"Aspire.Cli.{version}.nupkg"), "");
885var strategy = CliInstallStrategy.FromLocalArchive(tempDir.FullName);
901File.WriteAllText(Path.Combine(tempDir.FullName, "Aspire.Cli.linux-x64.13.3.0.nupkg"), "");
903var strategy = CliInstallStrategy.FromLocalArchive(tempDir.FullName);
919File.WriteAllText(Path.Combine(tempDir.FullName, "Aspire.Cli.13.3.0.nupkg"), "");
920File.WriteAllText(Path.Combine(tempDir.FullName, "Aspire.Cli.13.4.0.nupkg"), "");
922var exception = Assert.Throws<InvalidOperationException>(() => CliInstallStrategy.FromLocalArchive(tempDir.FullName));
939File.WriteAllText(Path.Combine(tempDir.FullName, "Aspire.Cli.linux-x64.13.3.0.nupkg"), "");
941var exception = Assert.Throws<InvalidOperationException>(() => CliInstallStrategy.FromDotnetToolLocalSource(tempDir.FullName));
960("ASPIRE_E2E_DOTNET_TOOL_SOURCE", nupkgDir.FullName),
967(CliE2ETestHelpers.CliArchiveDirEnvironmentVariableName, archiveDir.FullName),
974Assert.Equal(nupkgDir.FullName, strategy.NupkgSourcePath);
Helpers\IntegrationHostLifetimeTestHelper.cs (12)
20File.Copy(Path.Combine(directory, file), Path.Combine(evidence.FullName, file), overwrite: true);
23Path.Combine(evidence.FullName, "session.log"), overwrite: true);
26Path.Combine(evidence.FullName, "processes.jsonl"),
30File.Copy(Path.Combine(directory, "restart.log"), Path.Combine(evidence.FullName, "restart.log"), overwrite: true);
34File.Copy(Path.Combine(directory, "probe-stalled.log"), Path.Combine(evidence.FullName, "probe-stalled.log"), overwrite: true);
39Path.Combine(evidence.FullName, "install-session.log"), overwrite: true);
40File.Copy(Path.Combine(directory, "install.log"), Path.Combine(evidence.FullName, "install.log"), overwrite: true);
42Path.Combine(evidence.FullName, "install-processes.json"), overwrite: true);
45return evidence.FullName;
53Path.Combine(integration.FullName, "host-runtime.ts"));
54File.WriteAllText(Path.Combine(integration.FullName, "host.ts"), HostSource);
55File.WriteAllText(Path.Combine(integration.FullName, "package.json"), """
JavaScriptPublishTests.cs (8)
52CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
114CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
145var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
178var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
213var appDir = Path.Combine(workspace.WorkspaceRoot.FullName, appName);
277File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "verify-runtime.sh"), $$"""
330File.Copy(file, Path.Combine(workspace.WorkspaceRoot.FullName, Path.GetFileName(file)));
336var targetDir = Path.Combine(workspace.WorkspaceRoot.FullName, Path.GetFileName(fixtureDir));
RadiusDeployTests.cs (6)
118workspace.WorkspaceRoot.FullName,
146var appBicepPath = Path.Combine(workspace.WorkspaceRoot.FullName, ProjectName, "radius-output", "app.bicep");
323workspace.WorkspaceRoot.FullName,
351var appBicepPath = Path.Combine(workspace.WorkspaceRoot.FullName, PostgresProjectName, "radius-output", "app.bicep");
582workspace.WorkspaceRoot.FullName,
620var appBicepPath = Path.Combine(workspace.WorkspaceRoot.FullName, ProjectName, "radius-output", "app.bicep");
TypeScriptCodegenValidationTests.cs (10)
53TypeScriptAppHostToolchainTestHelpers.SetPackageManager(workspace.WorkspaceRoot.FullName, toolchain, cleanInstallState: true);
61CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
80workspace.WorkspaceRoot.FullName,
88var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
119var modulesDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "modules");
190var modulesDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "modules");
251var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json");
264var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
315var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
397var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
TypeScriptPolyglotTests.cs (20)
63TypeScriptAppHostToolchainTestHelpers.SetPackageManager(workspace.WorkspaceRoot.FullName, toolchain, cleanInstallState: true);
71CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
82var viteProjectRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "viteapp");
98var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
122workspace.WorkspaceRoot.FullName,
186TypeScriptAppHostToolchainTestHelpers.SetPackageManager(workspace.WorkspaceRoot.FullName, appHostToolchain, cleanInstallState: true);
190CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
197var viteProjectRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "viteapp");
208var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
228workspace.WorkspaceRoot.FullName,
272TypeScriptAppHostToolchainTestHelpers.SetPackageManager(workspace.WorkspaceRoot.FullName, toolchain, cleanInstallState: true);
276CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
284workspace.WorkspaceRoot.FullName,
346TypeScriptAppHostToolchainTestHelpers.SetPackageManager(workspace.WorkspaceRoot.FullName, "deno", cleanInstallState: true);
349CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
352var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json");
360var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
361var restartCountPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".deno-watch-restart-count");
426Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"),
447var projectRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "packages", "brownfield");
TypeScriptPublishTests.cs (13)
45CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
51var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
123var artifactsPath = Path.Combine(workspace.WorkspaceRoot.FullName, "artifacts");
140var failureLog = await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "callback-failure.log"));
186var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
249CliE2ETestHelpers.WriteLocalChannelSettings(workspace.WorkspaceRoot.FullName, localChannel.SdkVersion);
271var artifactsPath = Path.Combine(workspace.WorkspaceRoot.FullName, "artifacts");
362var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
390var dockerComposePath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-output", "docker-compose.yaml");
437var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
468var envFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "artifacts", ".env");
478var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts");
512Path.Combine(workspace.WorkspaceRoot.FullName, fixtureName));
TypeScriptReusablePackageTests.cs (15)
31var appDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "app"));
32var helperDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "packages", "aspire-commands"));
35await auto.TypeAsync($"cd {CliE2ETestHelpers.ToContainerPath(appDirectory.FullName, workspace)}");
44var appAppHostPath = Path.Combine(appDirectory.FullName, "apphost.mts");
57var helperAppHostPath = Path.Combine(helperDirectory.FullName, "apphost.mts");
60await auto.TypeAsync($"cd {CliE2ETestHelpers.ToContainerPath(helperDirectory.FullName, workspace)}");
69var helperModulesDirectory = Path.Combine(helperDirectory.FullName, ".aspire", "modules");
77await auto.TypeAsync($"cd {CliE2ETestHelpers.ToContainerPath(appDirectory.FullName, workspace)}");
93var configPath = Path.Combine(appDirectory.FullName, "aspire.config.json");
101File.WriteAllText(Path.Combine(appDirectory.FullName, "apphost.mts"), """
113File.WriteAllText(Path.Combine(appDirectory.FullName, "tsconfig.json"), """
141File.WriteAllText(Path.Combine(helperDirectory.FullName, "aspire.config.json"), $$"""
155File.WriteAllText(Path.Combine(helperDirectory.FullName, "package.json"), """
171File.WriteAllText(Path.Combine(helperDirectory.FullName, "tsconfig.json"), """
194File.WriteAllText(Path.Combine(helperSourceDirectory.FullName, "index.ts"), """
Aspire.Cli.Tests (5966)
Acquisition\IdentityResolverTests.cs (19)
27WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","channel":"staging"}""");
42WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","channel":"staging"}""");
85WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","channel":"staging"}""");
170WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","version":"garbage"}""");
270WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","nugetServiceIndexOverride":"http://sidecar/v3/index.json"}""");
285WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","nugetServiceIndexOverride":"http://proxy.local/v3/index.json"}""");
311WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","packages":"/sidecar/packages"}""");
326WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script","packages":"/sidecar/packages"}""");
376WriteSidecar(workspace.WorkspaceRoot.FullName, JsonSerializer.Serialize(sidecar));
408workspace.WorkspaceRoot.FullName,
431WriteSidecar(workspace.WorkspaceRoot.FullName, """{"source":"script"}""");
451workspace.WorkspaceRoot.FullName,
458[IdentityResolver.PackagesEnvVar] = packagesDirectory.FullName,
467Assert.Equal(packagesDirectory.FullName, context.IdentityPackagesDirectory!.FullName);
517IdentityField.Packages => workspace.CreateDirectory("identity-packages").FullName,
566workspace.WorkspaceRoot.FullName,
580logsDirectory: Path.Combine(workspace.WorkspaceRoot.FullName, "logs"),
581logFilePath: Path.Combine(workspace.WorkspaceRoot.FullName, "logs", "test.log"),
Acquisition\InstallationDiscoveryDiscoverAllTests.cs (31)
39var pathDir = Path.Combine(workspace.WorkspaceRoot.FullName, "no-sidecar-bin");
69var pathDir = Path.Combine(workspace.WorkspaceRoot.FullName, "unreadable-bin");
101var pathDir = Path.Combine(workspace.WorkspaceRoot.FullName, "malformed-bin");
128var binDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "bin");
163var firstPathDir = Path.Combine(workspace.WorkspaceRoot.FullName, "path-first");
164var secondPathDir = Path.Combine(workspace.WorkspaceRoot.FullName, "path-second");
165var offPathDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "bin");
218var binDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "bin");
249var binDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "bin");
276var prDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "dogfood", "pr-9999", "bin");
300var binDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "bin");
322var binDir = Path.Combine(workspace.WorkspaceRoot.FullName, hasInstallMetadata ? "metadata-bin" : "no-metadata-bin");
366var prDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "dogfood", "pr-12345", "bin");
400var prDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "dogfood", "pr-12345", "bin");
435var brewDir = Path.Combine(workspace.WorkspaceRoot.FullName, "Caskroom", "aspire", "13.4.0-pr.17115.gcd700928");
471var brewDir = Path.Combine(workspace.WorkspaceRoot.FullName, "Caskroom", "aspire", "13.4.0");
509var binary = Path.Combine(workspace.WorkspaceRoot.FullName, "dogfood", labelName, "bin", "aspire");
523var binary = Path.Combine(workspace.WorkspaceRoot.FullName, "staging", "pr-1234", "bin", "aspire");
534var binary = Path.Combine(workspace.WorkspaceRoot.FullName, "dogfood", "pr-9876", "bin", "aspire");
574var pathDir = Path.Combine(workspace.WorkspaceRoot.FullName, "no-sidecar-bin");
606var staleDogfoodDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "dogfood", "pr-9999");
637var dogfoodRoot = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "dogfood");
680var toolStore = Path.Combine(workspace.WorkspaceRoot.FullName, ".dotnet", "tools", ".store", "aspire.cli");
762var releaseBinDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "bin");
792var releaseBinDir = Path.Combine(aspireHome.FullName, "bin");
815logFilePath: Path.Combine(root.FullName, "test.log"),
847var binDir = Path.Combine(workspace.WorkspaceRoot.FullName, "firmlink-self-bin");
922var binDir = Path.Combine(workspace.WorkspaceRoot.FullName, "hint-bin");
925var fakeCanonical = Path.Combine(workspace.WorkspaceRoot.FullName, "deliberately-different-canonical-path", "aspire");
958return resolved?.FullName ?? Path.GetFullPath(path);
996logFilePath: Path.Combine(root.FullName, "test.log"),
Acquisition\InstallSidecarReaderTests.cs (29)
31WriteSidecar(workspace.WorkspaceRoot.FullName, $"{{\"source\":\"{wireValue}\"}}");
34var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
45var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, InstallSidecarReader.SidecarFileName);
48var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
76var sidecarPath = WriteSidecar(workspace.WorkspaceRoot.FullName, "{\"source\":\"script\"}");
84var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
100var sidecarPath = WriteSidecar(workspace.WorkspaceRoot.FullName, "{not valid json");
103var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
123WriteSidecar(workspace.WorkspaceRoot.FullName, sidecarBody);
126var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
137WriteSidecar(workspace.WorkspaceRoot.FullName, "{\"source\":\"script\"}");
140var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
143var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, InstallSidecarReader.SidecarFileName);
151var sidecarPath = WriteSidecar(workspace.WorkspaceRoot.FullName, "{\"source\":\"script\"}");
162var sidecarPath = Path.Combine(workspace.WorkspaceRoot.FullName, InstallSidecarReader.SidecarFileName);
173var sidecarPath = WriteSidecar(workspace.WorkspaceRoot.FullName, "{not valid json");
190var sidecarPath = WriteSidecar(workspace.WorkspaceRoot.FullName, "{\"source\":\"script\"}");
235var sidecarPath = Path.Combine(workspace.WorkspaceRoot.FullName, InstallSidecarReader.SidecarFileName);
240var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
251var sidecarPath = Path.Combine(workspace.WorkspaceRoot.FullName, InstallSidecarReader.SidecarFileName);
267var sidecarPath = Path.Combine(workspace.WorkspaceRoot.FullName, InstallSidecarReader.SidecarFileName);
272var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
285var sidecarPath = Path.Combine(workspace.WorkspaceRoot.FullName, InstallSidecarReader.SidecarFileName);
300WriteSidecar(workspace.WorkspaceRoot.FullName, "{\"source\":\"script\",\"futureField\":\"value\",\"nested\":{\"a\":1,\"b\":[1,2]}}");
303var result = reader.TryRead(workspace.WorkspaceRoot.FullName);
320workspace.WorkspaceRoot.FullName,
332var ok = Assert.IsType<InstallSidecarReadResult.Ok>(reader.TryRead(workspace.WorkspaceRoot.FullName));
349WriteSidecar(workspace.WorkspaceRoot.FullName, "{\"source\":\"script\"}");
352var ok = Assert.IsType<InstallSidecarReadResult.Ok>(reader.TryRead(workspace.WorkspaceRoot.FullName));
Acquisition\InstallSourceDetectorTests.cs (6)
26File.WriteAllText(Path.Combine(binaryDirectory.FullName, InstallSidecarReader.SidecarFileName), $$"""{"source":"{{source}}"}""");
31var detector = CreateDetector(Path.Combine(binaryDirectory.FullName, "aspire.exe"), environment, new TestWindowsRegistryReader(true));
236File.WriteAllText(Path.Combine(directory.FullName, InstallSidecarReader.SidecarFileName), sidecar);
242var detector = CreateDetector(Path.Combine(directory.FullName, "aspire"), environment);
265var processPath = Path.Combine(installDirectory.FullName, "aspire");
267File.WriteAllText(Path.Combine(installDirectory.FullName, InstallSidecarReader.SidecarFileName), """{"source":"brew"}""");
Agents\AgentConfigurationTests.cs (38)
32var path = Path.Combine(_context.Project.FullName, "settings.json");
55var path = Path.Combine(_context.Project.FullName, "settings.json");
81var path = Path.Combine(_context.Project.FullName, "settings.json");
108var path = Path.Combine(_context.Project.FullName, "settings.json");
133var directory = Path.Combine(_context.Project.FullName, "missing");
143Assert.Empty(Directory.GetFiles(_context.Project.FullName, "*", SearchOption.AllDirectories));
151var path = Path.Combine(_context.Project.FullName, "settings.json");
163Assert.Equal(existed ? [path] : [], Directory.GetFiles(_context.Project.FullName));
173var path = Path.Combine(_context.Project.FullName, "settings.json");
188Assert.Equal([path], Directory.GetFiles(_context.Project.FullName));
210Assert.Equal([path], Directory.GetFiles(_context.Project.FullName, "*", SearchOption.AllDirectories));
272Assert.Empty(Directory.GetFiles(_context.Project.FullName, "*", SearchOption.AllDirectories));
324var path = Path.Combine(_context.Project.FullName, "settings.json");
325var target = Path.Combine(_context.Project.FullName, "linked.json");
355var path = Path.Combine(_context.Project.FullName, "settings.json");
387Assert.Equal([path], Directory.GetFiles(_context.Project.FullName));
401var path = Path.Combine(_context.Project.FullName, "settings.json");
408TestPosixAcl.SetDefault(_context.Project.FullName, "user::rwx,user:65534:r-x,group::---,mask::r-x,other::---");
423Assert.Equal([path], Directory.GetFiles(_context.Project.FullName));
434var path = Path.Combine(_context.Project.FullName, "settings.json");
461var path = Path.Combine(_context.Project.FullName, "settings.json");
516Assert.Equal([path], Directory.GetFiles(_context.Project.FullName));
525Assert.Equal(Path.Combine(_context.Project.FullName, ".github", "copilot", "settings.json"),
538var project = await File.ReadAllTextAsync(Path.Combine(_context.Project.FullName, ".github", "copilot", "settings.json")).DefaultTimeout();
541Assert.False(Directory.Exists(Path.Combine(_context.Project.FullName, ".vscode")));
576var project = await File.ReadAllTextAsync(Path.Combine(_context.Project.FullName, ".claude", "settings.json")).DefaultTimeout();
593var path = local ? Path.Combine(_context.Project.FullName, ".claude", "settings.local.json")
602Directory.EnumerateFiles(_context.Project.FullName, "*", SearchOption.AllDirectories));
616var target = Path.Combine(_context.Project.FullName, ".claude", "settings.json");
652var target = Path.Combine(_context.Project.FullName, ".claude", "settings.json");
667var custom = Path.Combine(_context.Home.FullName, "claude-work");
677Assert.False(File.Exists(Path.Combine(_context.Home.FullName, ".claude.json")));
684_context.SetVariable("COPILOT_HOME", Path.Combine(_context.Project.FullName, ".github", "copilot"));
689Assert.Equal(Path.Combine(_context.Project.FullName, ".github", "copilot", "settings.json"), results[0].TargetPath);
690Assert.Equal([results[0].TargetPath], Directory.EnumerateFiles(_context.Project.FullName, "*", SearchOption.AllDirectories));
706Assert.Equal([result.TargetPath], Directory.EnumerateFiles(_context.Home.FullName, "*", SearchOption.AllDirectories));
734var unreadable = Path.Combine(_context.Project.FullName, ".github", "copilot", "settings.json");
741Assert.True(File.Exists(Path.Combine(_context.Project.FullName, ".claude", "settings.json")));
Agents\AspireSkillsInstallerTests.cs (19)
88var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
446var cachedBundleDirectory = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills", AspireSkillsInstaller.Version);
558executionContext.CacheDirectory.FullName,
595var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
640var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
687var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
756var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
882executionContext.CacheDirectory.FullName,
900var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
947var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
954var staleDirectory = Directory.CreateDirectory(Path.Combine(cacheRoot, $"{prefix}stale")).FullName;
957recentDirectories.Add(Directory.CreateDirectory(Path.Combine(cacheRoot, $"{prefix}recent")).FullName);
1019var cacheRoot = Path.Combine(executionContext.CacheDirectory.FullName, "aspire-skills");
1492Directory.Move(stageDirectory.FullName, targetDirectory);
2180executionContext.CacheDirectory.FullName,
2236return Directory.CreateTempSubdirectory("aspire-skills-installer-test-").FullName;
2315Directory.CreateDirectory(bundleDirectory.FullName);
2316var archivePath = Path.Combine(bundleDirectory.FullName, $".test-embedded-{Guid.NewGuid():N}.tgz");
2346archive.FullName,
Agents\ClaudeCodeAgentEnvironmentScannerTests.cs (8)
22var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json");
59? new DirectoryInfo(workspace.WorkspaceRoot.FullName + Path.DirectorySeparatorChar)
62var before = Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories);
68Assert.Equal(before, Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories));
108Directory.CreateDirectory(Path.Combine(workingDirectory.FullName, ".claude"));
111Directory.CreateDirectory(Path.Combine(selectedRoot.FullName, ".claude"));
123var before = Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories);
129Assert.Equal(before, Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories));
Agents\CopilotAppInstallationDetectorTests.cs (16)
17Path.Combine(localAppData.FullName, "Programs", "GitHub Copilot"));
19Path.Combine(appDirectory.FullName, "github.exe"),
24["LOCALAPPDATA"] = localAppData.FullName,
26var executablePath = Path.Combine(appDirectory.FullName, "github.exe");
35var appBundlePath = Path.Combine(workspace.WorkspaceRoot.FullName, "Applications", "GitHub Copilot.app");
63Path.Combine(applicationsDirectory.FullName, "github-copilot.desktop"),
70var desktopEntryPath = Path.Combine(applicationsDirectory.FullName, "github-copilot.desktop");
86Path.Combine(workspace.WorkspaceRoot.FullName, ".local", "share", "applications"),
102["XDG_DATA_HOME"] = dataHome.FullName,
105firstDataDirectory.FullName,
107secondDataDirectory.FullName),
113Path.Combine(dataHome.FullName, "applications"),
114Path.Combine(firstDataDirectory.FullName, "applications"),
115Path.Combine(secondDataDirectory.FullName, "applications"),
128["XDG_DATA_HOME"] = dataHome.FullName,
129["XDG_DATA_DIRS"] = dataDirectory.FullName,
Agents\LocalAspireSkillsTests.cs (25)
26var paths = names.Select(name => Path.Combine(_context.Project.FullName, ".agents", "skills", name, "SKILL.md")).ToArray();
32Assert.False(Directory.Exists(_context.ExecutionContext.CacheDirectory.FullName));
49var path = Path.Combine(_context.Project.FullName, directory, "skills", "aspire", "SKILL.md");
52var empty = Path.Combine(_context.Project.FullName, directory, "skills", "aspire-init", "SKILL.md");
55await AgentConfigurationTestContext.WriteAsync(Path.Combine(_context.Project.FullName, directory, "skills", "aspire-custom", "SKILL.md"), "unrelated");
56await AgentConfigurationTestContext.WriteAsync(Path.Combine(_context.Project.FullName, directory, "skills", "playwright-cli", "SKILL.md"), "unrelated");
72var project = Path.Combine(_context.Project.FullName, ".agents", "skills", "aspire-init", "SKILL.md");
73var user = Path.Combine(_context.Home.FullName, ".agents", "skills", "aspireify", "SKILL.md");
86var custom = Path.Combine(_context.Home.FullName, "claude-work");
90await AgentConfigurationTestContext.WriteAsync(Path.Combine(_context.Home.FullName, ".claude", "skills", "aspire", "SKILL.md"), "old home");
91await AgentConfigurationTestContext.WriteAsync(Path.Combine(_context.Project.FullName, ".github", "skills", "aspire", "SKILL.md"), "other agent");
103_context.SetVariable("OPENCODE_CONFIG_DIR", custom.FullName);
106Path.Combine(_context.Project.FullName, ".opencode", "skill", "aspire", "SKILL.md"),
107Path.Combine(custom.FullName, "skills", "aspire-orchestration", "SKILL.md")
129: Path.Combine(_context.Project.FullName, ".opencode", "opencode.jsonc");
132Path.Combine(_context.Project.FullName, "team-skills", "aspire", "SKILL.md"),
133Path.Combine(_context.Home.FullName, "shared-skills", "aspireify", "SKILL.md")
161var path = Path.Combine(_context.Project.FullName, "opencode.json");
176await AgentConfigurationTestContext.WriteAsync(Path.Combine(_context.Project.FullName, "unrelated", ".agents", "skills", "aspire", "SKILL.md"), "unrelated");
196.Select(root => Path.Combine(root.FullName, directory, "skills", "aspire", "SKILL.md")).ToArray();
202Path.Combine(parent.FullName, "sibling", directory, "skills", "aspire", "SKILL.md"), "unrelated");
219var selected = Path.Combine(_context.Project.FullName, ".agents", "skills", "aspire", "SKILL.md");
221await AgentConfigurationTestContext.WriteAsync(Path.Combine(outside.FullName, ".agents", "skills", "aspire", "SKILL.md"), "outside");
234var path = Path.Combine(_context.Project.FullName, ".agents", "skills", "aspire", "SKILL.md");
236await AgentConfigurationTestContext.WriteAsync(Path.Combine(_context.Project.FullName, ".agents", "skills", "aspireify", "SKILL.md"), "readable");
Agents\OpenCodeAgentClientTests.cs (23)
22var nestedConfig = Path.Combine(workingDirectory.FullName, "opencode.json");
28Assert.Equal(Path.Combine(_context.Project.FullName, "opencode.jsonc"), target);
46var lowerPath = Path.Combine(_context.Project.FullName, "opencode.json");
47var ownerPath = Path.Combine(_context.Project.FullName, ".opencode", "opencode.json");
74var json = Path.Combine(_context.Project.FullName, "opencode.json");
103var directory = scope is AgentConfigurationScope.Project ? _context.Project.FullName : _context.OpenCodeDirectory;
125var json = Path.Combine(_context.Project.FullName, "opencode.json");
144var path = Path.Combine(_context.Project.FullName, "opencode.json");
156var path = Path.Combine(_context.Project.FullName, "opencode.json");
190var root = Path.Combine(_context.Project.FullName, "opencode.jsonc");
193var path = Path.Combine(_context.Project.FullName, ".opencode", "opencode.jsonc");
214var path = Path.Combine(_context.Project.FullName, "opencode.json");
240var path = Path.Combine(_context.Project.FullName, "opencode.json");
265var path = Path.Combine(_context.Project.FullName, "opencode.json");
291var path = Path.Combine(_context.Project.FullName, "opencode.json");
306var directory = scope is AgentConfigurationScope.Project ? _context.Project.FullName : _context.OpenCodeDirectory;
344? Path.Combine(_context.Project.FullName, "~", "custom-opencode")
345: Path.Combine(_context.Home.FullName, "custom-opencode");
359Directory.EnumerateFiles(_context.Home.FullName, "*", SearchOption.AllDirectories)
360.Concat(Directory.EnumerateFiles(_context.Project.FullName, "*", SearchOption.AllDirectories)).Order());
368var selected = Path.Combine(_context.Home.FullName, "selected", "custom.jsonc");
369var customDirectory = Path.Combine(_context.Home.FullName, "custom-opencode");
386Directory.EnumerateFiles(_context.Home.FullName, "*", SearchOption.AllDirectories).Order());
Agents\PlaywrightCliInstallerTests.cs (12)
39var directory = Path.Combine(root.FullName, scopeName, clientFolder, "skills", PlaywrightCliInstaller.PlaywrightCliSkillName);
67var sharedDirectory = Path.Combine(root.FullName, scope, ".agents", "skills");
72Path.Combine(root.FullName, scope, ".claude", "skills")
85foreach (var path in Directory.EnumerateFiles(root.FullName, "*", SearchOption.AllDirectories))
87files.Add(Path.GetRelativePath(root.FullName, path).Replace('\\', '/'), await File.ReadAllTextAsync(path));
110new HashSet<string> { Path.Combine(root.FullName, ".agents", "skills") }, CancellationToken.None);
132var blockedPath = Path.Combine(root.FullName, "blocked");
135var destination = Path.Combine(root.FullName, "skills");
184new HashSet<string> { Path.Combine(root.FullName, "skills") }, CancellationToken.None);
227var destination = Path.Combine(root.FullName, "skills");
466var tempDir = Directory.CreateTempSubdirectory("test-playwright-").FullName;
602var tempDir = Directory.CreateTempSubdirectory("test-playwright-").FullName;
Agents\TelemetryHookConfiguratorTests.cs (24)
30var hookFile = Path.Combine(home.FullName, ".copilot", "hooks", "aspire-telemetry.json");
60Assert.True(File.Exists(Path.Combine(home.FullName, ".copilot", "hooks", "aspire-telemetry.json")));
61Assert.True(File.Exists(Path.Combine(home.FullName, ".claude", "settings.json")));
69var copilotHome = Path.Combine(workspace.WorkspaceRoot.FullName, "copilot-home-file");
84Assert.True(File.Exists(Path.Combine(home.FullName, ".claude", "settings.json")));
96["COPILOT_HOME"] = copilotHome.FullName,
101Assert.True(File.Exists(Path.Combine(copilotHome.FullName, "hooks", "aspire-telemetry.json")));
102Assert.False(Directory.Exists(Path.Combine(home.FullName, ".copilot")));
150var claudeDirectory = Directory.CreateDirectory(Path.Combine(home.FullName, ".claude"));
151var settingsPath = Path.Combine(claudeDirectory.FullName, "settings.json");
189var claude = Directory.CreateDirectory(Path.Combine(home.FullName, ".claude"));
190await File.WriteAllTextAsync(Path.Combine(claude.FullName, "settings.json"),
215var claudeDirectory = Directory.CreateDirectory(Path.Combine(home.FullName, ".claude"));
216var settingsPath = Path.Combine(claudeDirectory.FullName, "settings.json");
239var claude = Directory.CreateDirectory(Path.Combine(home.FullName, ".claude"));
262await File.WriteAllTextAsync(Path.Combine(claude.FullName, "settings.json"), settings.ToJsonString());
282var claudeDirectory = Directory.CreateDirectory(Path.Combine(home.FullName, ".claude"));
283var settingsPath = Path.Combine(claudeDirectory.FullName, "settings.json");
299var claudeDirectory = Directory.CreateDirectory(Path.Combine(home.FullName, ".claude"));
300var settingsPath = Path.Combine(claudeDirectory.FullName, "settings.json");
327Assert.False(Directory.Exists(Path.Combine(home.FullName, ".aspire", "hooks")));
328Assert.False(Directory.Exists(Path.Combine(home.FullName, ".copilot")));
329Assert.False(Directory.Exists(Path.Combine(home.FullName, ".claude")));
334var settingsPath = Path.Combine(home.FullName, ".claude", "settings.json");
Agents\VsCodeAgentEnvironmentScannerTests.cs (6)
31var before = Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories);
37Assert.Equal(before, Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories));
73var configPath = Path.Combine(configDirectory.FullName, "mcp.json");
104var before = Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories);
110Assert.Equal(before, Directory.GetFileSystemEntries(workspace.WorkspaceRoot.FullName, "*", SearchOption.AllDirectories));
136homeDirectory: new DirectoryInfo(Path.Combine(workingDirectory.FullName, "fake-home")));
Backchannel\AppHostConnectionResolverTests.cs (26)
61Assert.False(File.Exists(Path.Combine(projectFile.Directory!.FullName, AspireConfigFile.FileName)));
113var socketPath = CreateMatchingSocketFile(projectFile.FullName, workspace.WorkspaceRoot, int.MaxValue - 1);
144using var otherServer = TestResolverBackchannelServer.Start(projectFile.FullName, processId: 1111);
145using var requestedServer = TestResolverBackchannelServer.Start(projectFile.FullName, processId: 2222);
209new FileInfo(appHostDirectory.FullName),
247new FileInfo(appHostDirectory.FullName),
282new FileInfo(appHostDirectory.FullName),
375var realProjectFile = new FileInfo(Path.Combine(realDirectory.FullName, "TestAppHost.csproj"));
376File.WriteAllText(realProjectFile.FullName, "<Project />");
379var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
380Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
384var socketPath = CreateMatchingSocketFile(projectFileViaSymlink.FullName, workspace.WorkspaceRoot, int.MaxValue - 1);
419var projectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "TestAppHost.csproj"));
420File.WriteAllText(projectFile.FullName, "<Project />");
423workspace.WorkspaceRoot.FullName,
466Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".git"));
472var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj");
580Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".git"));
586var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj");
640var commonGitDirectory = Path.Combine(primaryCheckout.FullName, ".git");
642var worktreeRoot = Directory.CreateDirectory(Path.Combine(primaryCheckout.FullName, ".worktrees", "feature")).FullName;
650var projectFile = new FileInfo(Path.Combine(directory.FullName, fileName));
651File.WriteAllText(projectFile.FullName, "<Project />");
665var backchannelsDir = Path.Combine(homeDirectory.FullName, ".aspire", "cli", "bch");
668var prefix = BackchannelConstants.ComputeSocketPrefix(socketKeyPath, homeDirectory.FullName);
Backchannel\AuxiliaryBackchannelMonitorTests.cs (40)
31CreateLiveOwnerSocketPath(homeDirectory), Path.Combine(homeDirectory.FullName, "MyApp.AppHost.csproj"));
75var appHostPath = Path.Combine(homeDirectory.FullName, "MyApp.AppHost.csproj");
123var actualPath = Path.Combine(directory.FullName, "CaseSensitive.AppHost.csproj");
126workspace.WorkspaceRoot.FullName,
151workspace.WorkspaceRoot.FullName,
159var lowercaseAppHostPath = Path.Combine(lowercaseDirectory.FullName, "AppHost.csproj");
160var uppercaseAppHostPath = Path.Combine(uppercaseDirectory.FullName, "AppHost.csproj");
175workspace.WorkspaceRoot.FullName,
189var existingPath = Path.Combine(workspace.WorkspaceRoot.FullName, "Existing.AppHost.csproj");
190var missingPath = Path.Combine(workspace.WorkspaceRoot.FullName, "Missing.AppHost.csproj");
209caseSensitiveDirectory.FullName,
216var actualPath = Path.Combine(caseSensitiveDirectory.FullName, "CaseSensitive.AppHost.csproj");
217var caseVariant = Path.Combine(caseSensitiveDirectory.FullName, "casesensitive.apphost.csproj");
248var firstTarget = Path.Combine(workspace.WorkspaceRoot.FullName, "first.csproj");
249var secondTarget = Path.Combine(workspace.WorkspaceRoot.FullName, "second.csproj");
252var linkPath = Path.Combine(workspace.WorkspaceRoot.FullName, "current.csproj");
289var appHostPath = Path.Combine(homeDirectory.FullName, "MyApp.AppHost.csproj");
367Assert.All(AppHostSocketManager.GetSocketDirectories(homeDirectory.FullName),
387var compactDirectory = BackchannelConstants.GetBackchannelsDirectory(homeDirectory.FullName);
388var legacyDirectory = BackchannelConstants.GetLegacyBackchannelsDirectory(homeDirectory.FullName);
430var legacyDirectory = BackchannelConstants.GetLegacyBackchannelsDirectory(homeDirectory.FullName);
459var socketPath = Path.Combine(homeDirectory.FullName, "stale-socket");
497var realDirectory = Directory.CreateDirectory(Path.Combine(tempRoot.FullName, "real"));
498var symlinkDirectory = Path.Combine(tempRoot.FullName, "link");
499Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
502var appHostPathViaReal = Path.Combine(realDirectory.FullName, "apphost.cs");
507Assert.True(AuxiliaryBackchannelMonitor.IsAppHostInScopeOfDirectory(appHostPathViaSymlink, realDirectory.FullName));
521var workingDirectory = Directory.CreateDirectory(Path.Combine(tempRoot.FullName, "wd")).FullName;
522var outsideAppHost = Path.Combine(tempRoot.FullName, "other", "apphost.cs");
545var primaryRoot = tempRoot.FullName;
547var worktreeRoot = Directory.CreateDirectory(Path.Combine(primaryRoot, ".worktrees", "feature")).FullName;
570var primaryRoot = tempRoot.FullName;
572var submoduleRoot = Directory.CreateDirectory(Path.Combine(primaryRoot, "extern", "dep")).FullName;
592var primaryRoot = tempRoot.FullName;
594var worktreeRoot = Directory.CreateDirectory(Path.Combine(primaryRoot, ".worktrees", "feature")).FullName;
596var submoduleRoot = Directory.CreateDirectory(Path.Combine(worktreeRoot, "extern", "dep")).FullName;
753var backchannelsDirectory = BackchannelConstants.GetBackchannelsDirectory(homeDirectory.FullName);
756var appHostId = BackchannelConstants.ComputeAppHostId(Path.Combine(homeDirectory.FullName, "MyApp.AppHost.csproj"));
789logFilePath: Path.Combine(homeDirectory.FullName, "test.log"),
Backchannel\BackchannelConstantsTests.cs (31)
244var backchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
249var prefix = BackchannelConstants.ComputeSocketPrefix(appHostPath, workspace.WorkspaceRoot.FullName);
260var sockets = BackchannelConstants.FindMatchingSockets(appHostPath, workspace.WorkspaceRoot.FullName);
272var legacyBackchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "backchannels");
285var sockets = BackchannelConstants.FindMatchingSockets(appHostPath, workspace.WorkspaceRoot.FullName);
297var backchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
302var prefix = BackchannelConstants.ComputeSocketPrefix(appHostPath, workspace.WorkspaceRoot.FullName);
313var sockets = BackchannelConstants.FindMatchingSockets(appHostPath, workspace.WorkspaceRoot.FullName);
323var backchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
332var sockets = BackchannelConstants.FindMatchingSockets(appHostPath, workspace.WorkspaceRoot.FullName);
341var backchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
350var prefix = BackchannelConstants.ComputeSocketPrefix(resolvedAppHostPath, workspace.WorkspaceRoot.FullName);
364workspace.WorkspaceRoot.FullName,
386var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
387Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
403var backchannelsDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
408BackchannelConstants.ComputeSocketPrefix(path, workspace.WorkspaceRoot.FullName));
416workspace.WorkspaceRoot.FullName,
431var homeDirectory = workspace.WorkspaceRoot.FullName;
438var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
439Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
441var realProjectPath = Path.Combine(realDirectory.FullName, "TestAppHost.csproj");
517var backchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
527var found = BackchannelConstants.FindMatchingSockets(mixedPath, workspace.WorkspaceRoot.FullName);
539var backchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
549var upperPrefix = BackchannelConstants.ComputeSocketPrefix(upperDrivePath, workspace.WorkspaceRoot.FullName);
550var lowerPrefix = BackchannelConstants.ComputeSocketPrefix(lowerDrivePath, workspace.WorkspaceRoot.FullName);
559var fromUpper = BackchannelConstants.FindMatchingSockets(upperDrivePath, workspace.WorkspaceRoot.FullName);
560var fromLower = BackchannelConstants.FindMatchingSockets(lowerDrivePath, workspace.WorkspaceRoot.FullName);
575var backchannelsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cli", "backchannels");
592var found = BackchannelConstants.FindMatchingSockets(appHostPath, workspace.WorkspaceRoot.FullName);
BundleServiceIntegrationTests.cs (20)
33var layoutRoot = workspace.WorkspaceRoot.FullName;
87var layoutRoot = workspace.WorkspaceRoot.FullName;
114var layoutRoot = workspace.WorkspaceRoot.FullName;
151var layoutRoot = workspace.WorkspaceRoot.FullName;
205var layoutRoot = workspace.WorkspaceRoot.FullName;
263var layoutRoot = workspace.WorkspaceRoot.FullName;
296var layoutRoot = workspace.WorkspaceRoot.FullName;
313var sourcePath = workspace.CreateDirectory("source").FullName;
314var destinationPath = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
320new TestLayoutDiscovery(workspace.WorkspaceRoot.FullName));
343var layoutRoot = workspace.WorkspaceRoot.FullName;
401var versionsDir = Path.Combine(workspace.WorkspaceRoot.FullName, BundleService.VersionsDirectoryName);
416var versionsDir = Path.Combine(workspace.WorkspaceRoot.FullName, BundleService.VersionsDirectoryName);
437var versionsDir = Path.Combine(workspace.WorkspaceRoot.FullName, BundleService.VersionsDirectoryName);
464var versionDir = workspace.CreateDirectory("version").FullName;
482workspace.WorkspaceRoot.FullName,
538var binaryDir = Path.Combine(workspace.WorkspaceRoot.FullName, "opt", "aspire-readonly", "bin");
544var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "home", ".aspire");
618var dest = workspace.WorkspaceRoot.FullName;
643var layoutRoot = workspace.WorkspaceRoot.FullName;
Caching\AppHostInfoDiskCacheTests.cs (103)
29var globalSettingsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json"));
36var path = Path.Combine(workspace.WorkspaceRoot.FullName, name);
58var cacheDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "apphost-info");
75var freshProject = new FileInfo(projectFile.FullName);
97var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
152File.WriteAllText(projectFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />\n<!-- edit -->");
153File.SetLastWriteTimeUtc(projectFile.FullName, DateTime.UtcNow.AddSeconds(2));
155var freshProject = new FileInfo(projectFile.FullName);
170var objDir = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "obj"));
171var assetsPath = Path.Combine(objDir.FullName, "project.assets.json");
174var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
189File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"), "<Project />");
191var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
199File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
212var cacheDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "apphost-info");
249var cacheDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "apphost-info");
252var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
267File.WriteAllText(projectFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />\n<!-- edit -->");
268File.SetLastWriteTimeUtc(projectFile.FullName, DateTime.UtcNow.AddSeconds(2));
270await cache.SetAsync(new FileInfo(projectFile.FullName), expectedKey, SampleEntry(), CancellationToken.None).DefaultTimeout();
272var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
288var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "src", "MyHost"));
289var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
290File.WriteAllText(projectFile.FullName, """
296var commonProps = Path.Combine(workspace.WorkspaceRoot.FullName, "Aspire.Common.props");
300Assert.NotNull(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
311var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
325File.WriteAllText(projectFile.FullName, """
331await cache.SetAsync(new FileInfo(projectFile.FullName), cache.GetCacheKey(projectFile), SampleEntry(), CancellationToken.None).DefaultTimeout();
332var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
352var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "proj"));
353var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
354File.WriteAllText(projectFile.FullName, """
358File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "Directory.Build.props"), """
364var sharedDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "shared"));
365var sharedProps = Path.Combine(sharedDirectory.FullName, "Directory.Build.props");
369Assert.NotNull(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
380var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
389var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "proj"));
390var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
391File.WriteAllText(projectFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />");
392File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "Directory.Build.props"), """
398var sharedDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "shared"));
399var sharedProps = Path.Combine(sharedDirectory.FullName, "Directory.Build.props");
403Assert.NotNull(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
414Assert.Null(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
422var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "proj"));
423var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
424File.WriteAllText(projectFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />");
425File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "Directory.Build.props"), """
433Assert.Null(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
447var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "proj"));
448var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
449File.WriteAllText(projectFile.FullName, """
453File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "Directory.Build.props"), """
460var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
476var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "src", "MyHost"));
477var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
478File.WriteAllText(projectFile.FullName, """
484File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "Aspire.Common"), "");
485var commonProps = Path.Combine(workspace.WorkspaceRoot.FullName, "Aspire.Common.props");
489Assert.NotNull(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
500var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
513File.WriteAllText(projectFile.FullName, """
519await cache.SetAsync(new FileInfo(projectFile.FullName), cache.GetCacheKey(projectFile), SampleEntry(), CancellationToken.None).DefaultTimeout();
520var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
532File.WriteAllText(projectFile.FullName, """
540Assert.Null(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
556var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "proj"));
557var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
558File.WriteAllText(projectFile.FullName, """
562File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props"), """
567File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "repo", "Directory.Build.props"), """
577var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
592var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "src", "MyHost"));
593var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyHost.csproj"));
594File.WriteAllText(projectFile.FullName, """
600File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "Repo.marker"), "");
601var customProps = Path.Combine(workspace.WorkspaceRoot.FullName, "Custom.props");
605Assert.NotNull(await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout());
616var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
630File.WriteAllText(projectFile.FullName, """
636await cache.SetAsync(new FileInfo(projectFile.FullName), cache.GetCacheKey(projectFile), SampleEntry(), CancellationToken.None).DefaultTimeout();
637var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
654File.WriteAllText(projectFile.FullName, """
660await cache.SetAsync(new FileInfo(projectFile.FullName), cache.GetCacheKey(projectFile), SampleEntry(), CancellationToken.None).DefaultTimeout();
662var hit = await cache.TryGetAsync(new FileInfo(projectFile.FullName), CancellationToken.None).DefaultTimeout();
672var key1 = AppHostInfoDiskCache.ComputeKeyAsync(new FileInfo(projectFile.FullName), new TestEnvironment());
673var key2 = AppHostInfoDiskCache.ComputeKeyAsync(new FileInfo(projectFile.FullName), new TestEnvironment());
707var fullPath = projectFile.FullName;
722var projectDir = workspace.WorkspaceRoot.FullName;
725projectDir = Directory.CreateDirectory(Path.Combine(projectDir, $"level-{i}")).FullName;
729File.WriteAllText(projectFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />");
732File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props"), "<Project />");
733var keyAfterImport = AppHostInfoDiskCache.ComputeKeyAsync(new FileInfo(projectFile.FullName), new TestEnvironment());
743var parentImport = Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props");
746var repoRoot = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "worktree-root"));
748Path.Combine(repoRoot.FullName, ".git"),
749$"gitdir: {Path.Combine(workspace.WorkspaceRoot.FullName, ".git", "worktrees", "worktree-root")}");
751var projectDir = Directory.CreateDirectory(Path.Combine(repoRoot.FullName, "src", "AppHost"));
752var projectFile = new FileInfo(Path.Combine(projectDir.FullName, "AppHost.csproj"));
753File.WriteAllText(projectFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />");
760var keyAfterParentImportEdit = AppHostInfoDiskCache.ComputeKeyAsync(new FileInfo(projectFile.FullName), new TestEnvironment());
Certificates\UnixCertificateManagerTests.cs (58)
26var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
45var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
63var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
79var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
97var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
117var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
135var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
153var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
177var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
200var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
212var missingProfileDirectory = Path.Combine(homeDirectory.FullName, "missing-profile");
227var nssDbs = manager.GetNssDbs(homeDirectory.FullName);
247var missingProfileDirectory = Path.Combine(homeDirectory.FullName, "missing-profile");
265var nssDbs = manager.GetNssDbs(homeDirectory.FullName);
290var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
308var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
325var nssDbs = manager.GetNssDbs(homeDirectory.FullName);
343var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
359var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
360var certificatePath = Path.Combine(homeDirectory.FullName, "certificate with spaces.pem");
385var nssDb = Assert.Single(manager.GetNssDbs(homeDirectory.FullName));
386var certificatePath = Path.Combine(homeDirectory.FullName, "certificate with spaces.pem");
407var nssDbDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "nssdb"));
408var parentPidFile = Path.Combine(tempDirectory.FullName, "certutil-parent.pid");
409var childPidFile = Path.Combine(tempDirectory.FullName, "certutil-child.pid");
419["PATH"] = tempDirectory.FullName,
420["SSL_CERT_DIR"] = tempDirectory.FullName,
421["DOTNET_DEV_CERTS_NSSDB_PATHS"] = nssDbDirectory.FullName
425startInfo.FileName = certUtilFile.FullName;
458var nssDbDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "nssdb"));
465["PATH"] = tempDirectory.FullName,
466["SSL_CERT_DIR"] = tempDirectory.FullName,
467["DOTNET_DEV_CERTS_NSSDB_PATHS"] = nssDbDirectory.FullName
471startInfo.FileName = certUtilFile.FullName;
499["PATH"] = Path.Combine(openSslDirectory.FullName, "missing-tools"),
500["SSL_CERT_DIR"] = openSslDirectory.FullName,
501["DOTNET_DEV_CERTS_NSSDB_PATHS"] = Path.Combine(openSslDirectory.FullName, "missing-nss-db")
507var certificatePath = Path.Combine(openSslDirectory.FullName, $"aspnetcore-localhost-{certificate.Thumbprint}.pem");
534["PATH"] = Path.Combine(corruptOpenSslDirectory.FullName, "missing-tools"),
535["SSL_CERT_DIR"] = string.Join(Path.PathSeparator, corruptOpenSslDirectory.FullName, validOpenSslDirectory.FullName),
536["DOTNET_DEV_CERTS_NSSDB_PATHS"] = Path.Combine(corruptOpenSslDirectory.FullName, "missing-nss-db")
543File.WriteAllText(Path.Combine(corruptOpenSslDirectory.FullName, certificateFileName), "not a certificate");
544File.WriteAllText(Path.Combine(validOpenSslDirectory.FullName, certificateFileName), certificate.ExportCertificatePem());
569["PATH"] = Path.Combine(openSslDirectory.FullName, "missing-tools"),
570["DOTNET_DEV_CERTS_NSSDB_PATHS"] = Path.Combine(openSslDirectory.FullName, "missing-nss-db"),
571[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = openSslDirectory.FullName
578var certificatePath = Path.Combine(openSslDirectory.FullName, $"aspnetcore-localhost-{savedCertificate.Thumbprint}.pem");
604["PATH"] = Path.Combine(nssDbDirectory.FullName, "missing-certutil"),
605["DOTNET_DEV_CERTS_NSSDB_PATHS"] = nssDbDirectory.FullName,
606[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = openSslDirectory.FullName
631var certUtilFile = new FileInfo(Path.Combine(directory.FullName, "certutil"));
638await File.WriteAllTextAsync(certUtilFile.FullName, script);
640certUtilFile.FullName,
655var certUtilFile = new FileInfo(Path.Combine(directory.FullName, "certutil"));
663await File.WriteAllTextAsync(certUtilFile.FullName, script);
665certUtilFile.FullName,
688var path = Path.Combine([homeDirectory.FullName, .. pathSegments]);
CliBootstrapTests.cs (32)
118using var aspireHomeOverride = new EnvVarOverride(CliPathHelper.AspireHomeEnvironmentVariable, aspireHome.FullName);
148using var aspireHomeOverride = new EnvVarOverride(CliPathHelper.AspireHomeEnvironmentVariable, aspireHome.FullName);
153Assert.Equal(Path.Combine(aspireHome.FullName, "cache"), context.CacheDirectory.FullName);
157var cacheDirectory = Path.Combine(context.CacheDirectory.FullName, "tuf");
186var tufDirectory = Directory.CreateDirectory(Path.Combine(aspireHome.FullName, "cache", "tuf"));
187Directory.CreateDirectory(Path.Combine(tufDirectory.FullName, "targets"));
199using var aspireHomeOverride = new EnvVarOverride(CliPathHelper.AspireHomeEnvironmentVariable, aspireHome.FullName);
218using var aspireHomeOverride = new EnvVarOverride(CliPathHelper.AspireHomeEnvironmentVariable, aspireHome.FullName);
259Assert.Equal(Path.Combine(aspireHome.FullName, "cache"), context.CacheDirectory.FullName);
260var cacheDirectory = Path.Combine(context.CacheDirectory.FullName, "tuf");
307nssDbPaths = $"firefox={ambientNssDbDirectory.FullName}"
310File.WriteAllText(Path.Combine(aspireHome.FullName, AspireConfigFile.FileName), globalConfig);
312using var aspireHomeOverride = new EnvVarOverride(CliPathHelper.AspireHomeEnvironmentVariable, aspireHome.FullName);
315[CertificateConfiguration.NssDbPathsConfigPath] = $"firefox={configuredNssDbDirectory.FullName}"
320Assert.Equal($"firefox={configuredNssDbDirectory.FullName}", configuration[CertificateConfiguration.NssDbPathsConfigPath]);
332[CertificateConfiguration.NssDbPathsConfigPath] = $"firefox={nssDbDirectory.FullName}"
336var nssDb = Assert.Single(manager.GetNssDbs(workspace.WorkspaceRoot.FullName));
338Assert.Equal(nssDbDirectory.FullName, nssDb.Path);
345var installPrefix = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-pr-test");
358var installPrefix = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-pr-test");
379Assert.Equal(Path.Combine(installPrefix, "hives"), context.HivesDirectory.FullName);
380Assert.Equal(Path.Combine(installPrefix, "cache"), context.CacheDirectory.FullName);
381Assert.Equal(Path.Combine(installPrefix, "sdks"), context.SdksDirectory.FullName);
382Assert.Equal(Path.Combine(installPrefix, "packages"), context.PackagesDirectory?.FullName);
383Assert.Equal(installPrefix, context.AspireHomeDirectory.FullName);
384Assert.Equal(logsDirectory, context.LogsDirectory.FullName);
408logsDirectory: Path.Combine(workspace.WorkspaceRoot.FullName, "logs"),
409logFilePath: Path.Combine(workspace.WorkspaceRoot.FullName, "logs", "aspire.log"),
430logsDirectory: Path.Combine(workspace.WorkspaceRoot.FullName, "logs"),
431logFilePath: Path.Combine(workspace.WorkspaceRoot.FullName, "logs", "aspire.log"),
Commands\AddCommandTests.cs (121)
398var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
399File.WriteAllText(appHostFile.FullName, string.Empty);
400File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
442var result = command.Parse($"integration search redis --apphost \"{appHostFile.FullName}\" --format json");
471var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
472File.WriteAllText(appHostFile.FullName, string.Empty);
473File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
514var result = command.Parse($"integration search redis --apphost \"{appHostFile.FullName}\" --format json");
552var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
553File.WriteAllText(appHostFile.FullName, string.Empty);
554File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
601var result = command.Parse($"integration search foundry --apphost \"{appHostFile.FullName}\" --format json");
651var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
652File.WriteAllText(appHostFile.FullName, string.Empty);
655File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), $$"""
696var result = command.Parse($"integration search redis --apphost \"{appHostFile.FullName}\" --format json");
738var appHostFile = new FileInfo(Path.Combine(projectDirectory.FullName, "apphost.ts"));
739File.WriteAllText(appHostFile.FullName, string.Empty);
740File.WriteAllText(Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName), """
745File.WriteAllText(Path.Combine(invocationDirectory.FullName, "nuget.config"), """
750File.WriteAllText(Path.Combine(projectDirectory.FullName, "nuget.config"), """
760Assert.Equal(projectDirectory.FullName, directory.FullName);
762NuGetTestHelper.GetEligiblePackageSources(configFile?.DirectoryName ?? directory.FullName, "Company.Dependency"));
778var result = command.Parse($"{commandText} --apphost \"{appHostFile.FullName}\" --format json");
799var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
800File.WriteAllText(appHostFile.FullName, string.Empty);
827var result = command.Parse($"integration search redis --apphost \"{appHostFile.FullName}\" --format json");
872var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
873File.WriteAllText(appHostFile.FullName, string.Empty);
874File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
910var result = command.Parse($"integration search foundry --apphost \"{appHostFile.FullName}\" --format json");
942Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives", "test-hive"));
1447: File.ReadAllText(nugetConfigFile.FullName);
1461var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
1462File.WriteAllText(appHostFile.FullName, string.Empty);
1463File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
2124File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
2150Assert.True(File.Exists(Path.Combine(dir.FullName, "NuGet.Config")));
2151var settings = NuGetTestHelper.LoadSettings(dir.FullName);
2648var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, isTypeScript ? "apphost.ts" : "AppHost.csproj"));
2649File.WriteAllText(appHostFile.FullName, isTypeScript ? string.Empty : "<Project />");
2653File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), $$"""
2662var hivesDirectory = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives"));
2673CanHandleCallback = file => string.Equals(file.FullName, appHostFile.FullName, StringComparison.Ordinal),
2727var result = command.Parse($"add {packageId} --apphost \"{appHostFile.FullName}\"");
2757var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
2758File.WriteAllText(appHostFile.FullName, string.Empty);
2759File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), """
2799var result = command.Parse($"add Aspire.Hosting.Azure.Storage --apphost \"{appHostFile.FullName}\"");
2872var hivesDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives"));
2943File.WriteAllText(Path.Combine(packagesDir.FullName, $"Aspire.Hosting.{cliVersion}.nupkg"), string.Empty);
2944File.WriteAllText(Path.Combine(packagesDir.FullName, $"Aspire.Hosting.Redis.{cliVersion}.nupkg"), string.Empty);
2959var localSource = workspace.CreateDirectory(Path.Combine(".aspire", "hives", "pr-12345", "packages")).FullName;
2960var parentConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
2994var config = XDocument.Load(Path.Combine(projectDirectory.FullName, "nuget.config"));
3008var higherPrecedenceConfigPath = Path.Combine(projectWithMappingDisabled.FullName, "nuget.config");
3030Path.Combine(projectWithoutInheritedMapping.FullName, "nuget.config"));
3045var localPackagesDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives", PackageChannelNames.Local, "packages"));
3048File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.{cliVersion}.nupkg"), string.Empty);
3049File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.Redis.{cliVersion}.nupkg"), string.Empty);
3080var hivesRoot = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives"));
3081var localPackagesDir = new DirectoryInfo(Path.Combine(hivesRoot.FullName, PackageChannelNames.Local, "packages"));
3082var prPackagesDir = new DirectoryInfo(Path.Combine(hivesRoot.FullName, "pr-12345", "packages"));
3086File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.{cliVersion}.nupkg"), string.Empty);
3087File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.Redis.{cliVersion}.nupkg"), string.Empty);
3089File.WriteAllText(Path.Combine(prPackagesDir.FullName, $"Aspire.Hosting.{staleVersion}.nupkg"), string.Empty);
3090File.WriteAllText(Path.Combine(prPackagesDir.FullName, $"Aspire.Hosting.Redis.{staleVersion}.nupkg"), string.Empty);
3115var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
3116File.WriteAllText(appHostFile.FullName, "<Project />");
3119File.WriteAllText(Path.Combine(identityPackagesDir.FullName, $"Aspire.Hosting.{cliVersion}.nupkg"), string.Empty);
3120File.WriteAllText(Path.Combine(identityPackagesDir.FullName, $"Aspire.Hosting.Redis.{cliVersion}.nupkg"), string.Empty);
3195var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
3196File.WriteAllText(appHostFile.FullName, "<Project />");
3256var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3257File.WriteAllText(appHostFile.FullName, string.Empty);
3291var result = command.Parse($"add Aspire.Hosting.Foo --apphost \"{appHostFile.FullName}\"");
3315var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3316File.WriteAllText(appHostFile.FullName, string.Empty);
3351var result = command.Parse($"add {integrationName} --apphost \"{appHostFile.FullName}\"{sourceArgument}");
3370var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "apphost.ts"));
3371File.WriteAllText(appHostFile.FullName, string.Empty);
3374Path.Combine(sourceDirectory.FullName, "Aspire.Hosting.Redis.1.0.0.nupkg"),
3401var result = command.Parse($"add redis --apphost \"{appHostFile.FullName}\" --source ./feed");
3407Assert.Equal(sourceDirectory.FullName, addPackageContext.Source);
3414var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3415File.WriteAllText(appHostFile.FullName, string.Empty);
3422Path.Combine(localSource.FullName, $"Aspire.Hosting.Redis.{packageVersion}.nupkg"),
3429new PackageMapping("Aspire*", localSource.FullName),
3462var result = command.Parse($"add Aspire.Hosting.Redis --apphost \"{appHostFile.FullName}\"");
3469Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")));
3479var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3480File.WriteAllText(appHostFile.FullName, string.Empty);
3514var result = command.Parse($"add Aspire.Hosting.Foo --all --apphost \"{appHostFile.FullName}\"");
3533var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3534File.WriteAllText(appHostFile.FullName, string.Empty);
3560var result = command.Parse($"integration list --apphost \"{appHostFile.FullName}\" --format json");
3581var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3582File.WriteAllText(appHostFile.FullName, string.Empty);
3608var result = command.Parse($"integration list --apphost \"{appHostFile.FullName}\"");
3629var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3630File.WriteAllText(appHostFile.FullName, string.Empty);
3655var result = command.Parse($"integration list --apphost \"{appHostFile.FullName}\"");
3677var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3678File.WriteAllText(appHostFile.FullName, string.Empty);
3704var result = command.Parse($"integration search zzznomatch --apphost \"{appHostFile.FullName}\"");
3729var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3730File.WriteAllText(appHostFile.FullName, string.Empty);
3762var result = command.Parse($"add Aspire.Hosting.Foo --apphost \"{appHostFile.FullName}\"");
3780var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3781File.WriteAllText(appHostFile.FullName, string.Empty);
3816var result = command.Parse($"add Aspire.Hosting.Redis --apphost \"{appHostFile.FullName}\"");
3838var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
3839File.WriteAllText(appHostFile.FullName, string.Empty);
3862var result = command.Parse($"integration list --apphost \"{appHostFile.FullName}\" --format json");
3910var hivesDirectory = new DirectoryInfo(Path.Combine(aspireDirectory.FullName, "hives"));
3911var cacheDirectory = new DirectoryInfo(Path.Combine(aspireDirectory.FullName, "cache"));
3912var sdksDirectory = new DirectoryInfo(Path.Combine(aspireDirectory.FullName, "sdks"));
3913var logsDirectory = new DirectoryInfo(Path.Combine(aspireDirectory.FullName, "logs"));
3921Path.Combine(logsDirectory.FullName, "test.log"),
Commands\AgentInitClientSelectionTests.cs (45)
48var expected = Path.Combine(root.FullName, skillFolder, "skills");
51Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills"),
52Path.Combine(workspace.WorkspaceRoot.FullName, ".claude", "skills"),
53Path.Combine(homeDirectory.FullName, ".agents", "skills"),
54Path.Combine(homeDirectory.FullName, ".claude", "skills"),
55Path.Combine(workspace.WorkspaceRoot.FullName, ".github", "skills"),
56Path.Combine(workspace.WorkspaceRoot.FullName, ".opencode", "skills"),
57Path.Combine(workspace.WorkspaceRoot.FullName, ".opencode", "skill"),
58Path.Combine(homeDirectory.FullName, ".github", "skills"),
59Path.Combine(homeDirectory.FullName, ".opencode", "skills"),
60Path.Combine(homeDirectory.FullName, ".opencode", "skill")
82var directory = Path.Combine(root.FullName, folder, "skills", "aspire");
100Assert.True(File.Exists(Path.Combine(selectedRoot.FullName, ".agents", "skills", "aspire", "SKILL.md")));
123Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills", "aspire", "SKILL.md")));
124Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".claude")));
194Assert.False(Directory.Exists(Path.Combine(unselectedRoot.FullName, ".agents")));
234var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json");
252Assert.Empty(Directory.GetFileSystemEntries(homeDirectory.FullName));
352Assert.Equal(before.Append(Path.Combine(workspace.WorkspaceRoot.FullName, "opencode.jsonc")).Order(StringComparer.Ordinal),
495Assert.True(File.Exists(Path.Combine(homeDirectory.FullName, ".agents", "skills", "aspire", "SKILL.md")));
496Assert.True(File.Exists(Path.Combine(homeDirectory.FullName, ".copilot", "mcp-config.json")));
576contents.Add(Path.GetRelativePath(root.FullName, path).Replace('\\', '/'), JsonSerializer.Deserialize<JsonElement>(await File.ReadAllTextAsync(path)));
588var path = Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json");
606var configPath = Path.Combine(configDirectory.FullName, "mcp.json");
637var configPath = Path.Combine(configDirectory.FullName, "mcp.json");
666var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, configFileName);
694var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, expectedRelativePath.Replace('/', Path.DirectorySeparatorChar));
720await File.WriteAllTextAsync(Path.Combine(configDirectory.FullName, "opencode.json"), """{"model":"keep-json","mcp":{"other":{"command":["other"]}}}""");
724await File.WriteAllTextAsync(Path.Combine(configDirectory.FullName, "opencode.jsonc"), """{"model":"keep-jsonc","mcp":{"other":{"command":["other"]}}}""");
733var expectedPath = Path.Combine(configDirectory.FullName, expectedFileName);
743foreach (var path in Directory.EnumerateFiles(configDirectory.FullName, "opencode.json*"))
846var jsonPath = Path.Combine(workspace.WorkspaceRoot.FullName, "opencode.json");
858var jsoncPath = Path.Combine(workspace.WorkspaceRoot.FullName, "opencode.jsonc");
971var configPath = Path.Combine(configDirectory.FullName, "opencode.json");
996["COPILOT_HOME"] = copilot.FullName,
997["CLAUDE_CONFIG_DIR"] = claude.FullName,
998["OPENCODE_CONFIG"] = Path.Combine(openCode.FullName, "custom.json")
1033var path = Path.Combine(homeDirectory.FullName, ".copilot", "mcp-config.json");
1062var path = Path.Combine(homeDirectory.FullName, ".copilot", "mcp-config.json");
1307Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".claude", "skills", "aspire", "SKILL.md")));
1308Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json")));
1322? Path.Combine(context.Home.FullName, ".agents", "skills", "aspire", "SKILL.md")
1339var projectSkillPath = Path.Combine(context.Project.FullName, projectDirectory, "skills", "aspire-init", "SKILL.md");
1397return [.. Directory.EnumerateFiles(workspaceRoot.FullName, "*", SearchOption.AllDirectories)
1398.Where(path => !Path.GetRelativePath(workspaceRoot.FullName, path).StartsWith(logDirectory, StringComparison.Ordinal))
Commands\AgentInitCommandTests.cs (52)
100await File.WriteAllTextAsync(Path.Combine(context.Project.FullName, "apphost.cs"), string.Empty);
132Assert.False(File.Exists(Path.Combine(context.Project.FullName, ".mcp.json")));
202Assert.Equal(!remote, File.Exists(Path.Combine(context.Project.FullName, ".agents", "skills", "aspire", "SKILL.md")));
210await File.WriteAllTextAsync(Path.Combine(context.Project.FullName, "apphost.cs"), string.Empty);
284interactionService.SetupStringPromptResponse(workspace.WorkspaceRoot.FullName);
326interactionService.SetupStringPromptResponse(workspace.WorkspaceRoot.FullName);
359var blockedSkillParentPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents");
363interactionService.SetupStringPromptResponse(workspace.WorkspaceRoot.FullName);
386var expectedSkillDirectoryPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills", CommonAgentApplicators.AspireSkillName);
401var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents all --skills all --aspire-source embedded");
467var result = command.Parse($"agent init --workspace-root \"{workspace.WorkspaceRoot.FullName}\" --agents all --scope project --aspire-source embedded{selection}");
474Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills", skill.Name),
475Path.Combine(workspace.WorkspaceRoot.FullName, ".claude", "skills", skill.Name)
511var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents all --skills PLAYWRIGHT-CLI");
528var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents none --skills all");
535var agentsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents");
548var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --skills none");
585Assert.False(Directory.Exists(Path.Combine(skillsRoot.FullName, ".agents", "skills")));
586Assert.False(Directory.Exists(Path.Combine(skillsRoot.FullName, ".claude", "skills")));
598var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents invalid --skills all");
647var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents all --aspire-source embedded");
772var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents all --skills none");
779var aspireSkillPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills", CommonAgentApplicators.AspireSkillName);
791var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents all");
796Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json")));
797var openCodeConfig = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "opencode.jsonc")));
810var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents all --mcp");
815Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json")));
816Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "opencode.jsonc")));
827var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents all --mcp=false");
832Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json")));
833var openCodeConfig = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "opencode.jsonc")));
847var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents none --skills all");
854var agentsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills");
860var skillPath = Path.Combine(workspaceRoot.FullName, relativeSkillDirectory, skillName, "SKILL.md");
879$"agent init --workspace-root \"{workspace.WorkspaceRoot.FullName}\" --agents all --skills aspire --aspire-source embedded");
948"claude" => Path.Combine(context.Project.FullName, ".claude", "settings.json"),
972Assert.Equal([global], Directory.GetFiles(context.Home.FullName, "*", SearchOption.AllDirectories));
977var bundleDirectory = new DirectoryInfo(Path.Combine(workspaceRoot.FullName, $".test-aspire-skills-bundle-{Guid.NewGuid():N}"));
978Directory.CreateDirectory(bundleDirectory.FullName);
983var skillDirectory = Path.Combine(bundleDirectory.FullName, "skills", name);
1022var manifestPath = Path.Combine(bundleDirectory.FullName, "skill-manifest.json");
1053var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents copilot --scope global --skills aspire");
1058var hookFile = Path.Combine(homeDirectory.FullName, ".copilot", "hooks", "aspire-telemetry.json");
1087var result = command.Parse($"agent init --workspace-root {workspace.WorkspaceRoot.FullName} --agents copilot --scope global --skills aspire");
1133var expectedPath = Path.Combine(root.FullName, relativePath.Replace('/', Path.DirectorySeparatorChar));
1134Assert.Equal([expectedPath], Directory.EnumerateFiles(root.FullName, "*", SearchOption.AllDirectories));
1177$"{client.DisplayName}: {prefix}{Path.GetRelativePath(scopeRoot.FullName, client.GetIntegrationConfigPath(scope, context.Project)).Replace(Path.DirectorySeparatorChar, '/')}").ToArray();
1237var path = Path.Combine(context.Project.FullName, "opencode.json");
1264Assert.Equal([path], context.Project.EnumerateFiles().Select(file => file.FullName));
1274var configPath = Path.Combine(context.Project.FullName, ".opencode", "opencode.jsonc");
1275var skillPath = Path.Combine(context.Project.FullName, "team-skills", "aspire", "SKILL.md");
Commands\AgentMcpCommandTests.cs (25)
232AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
296AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "AnnotatedAppHost", "AnnotatedAppHost.csproj"),
373AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
437var appHostAPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "AppHostA", "AppHostA.csproj");
438var appHostBPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "AppHostB", "AppHostB.csproj");
506AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
654AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "UnrelatedAppHost", "UnrelatedAppHost.csproj"),
993AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "UnrelatedAppHost", "UnrelatedAppHost.csproj"),
1171AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
1199AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
1398AppHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
1504var appHostPath = Path.Combine(ctx.Workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj");
1690var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "PinnedAppHost.csproj"));
1691await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost", TestContext.Current.CancellationToken);
1707var parseResult = rootCommand.Parse($"agent mcp --apphost \"{appHostProjectFile.FullName}\"");
1714PathNormalizer.ResolveToFilesystemPath(PathNormalizer.ResolveSymlinks(appHostProjectFile.FullName)),
1723var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "PinnedAppHost.csproj"));
1724await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost", TestContext.Current.CancellationToken);
1740var parseResult = rootCommand.Parse($"agent mcp --apphost \"{appHostDirectory.FullName}\"");
1747PathNormalizer.ResolveToFilesystemPath(PathNormalizer.ResolveSymlinks(appHostProjectFile.FullName)),
1755var missingPath = Path.Combine(workspace.WorkspaceRoot.FullName, "MissingAppHost");
1784Path.Combine(appHostDirectory.FullName, "First.AppHost.csproj"),
1788Path.Combine(appHostDirectory.FullName, "Second.AppHost.csproj"),
1803var parseResult = rootCommand.Parse($"agent mcp --apphost \"{appHostDirectory.FullName}\"");
1830AppHostPath = appHostPath ?? Path.Combine(workspace.WorkspaceRoot.FullName, hash, $"{hash}.csproj"),
Commands\AppHostLauncherTests.cs (18)
281harness.LocatedAppHostFile.FullName,
282PathNormalizer.ResolveToFilesystemPath(harness.LocatedAppHostFile.FullName));
1061var childLogFile = Path.Combine(workspace.WorkspaceRoot.FullName, "child.log");
1089var childLogFile = Path.Combine(workspace.WorkspaceRoot.FullName, "child.log");
1112var childLogFile = Path.Combine(workspace.WorkspaceRoot.FullName, "child.log");
1174var childLogFile = Path.Combine(workspace.WorkspaceRoot.FullName, "child.log");
1324var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1325File.WriteAllText(appHostFile.FullName, "<Project />");
1330var linkPath = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
1331Directory.CreateSymbolicLink(linkPath, appHostDirectory.FullName);
1341Path.Combine(logsDirectory.FullName, "parent.log"),
1397AppHostPath = AppHostFile.FullName,
1408_workspace.WorkspaceRoot.FullName,
1409Path.Combine(_workspace.WorkspaceRoot.FullName, "common", ".git"));
1414var backchannelsDir = Path.Combine(_homeDirectory.FullName, ".aspire", "cli", "bch");
1417var resolvedAppHostPath = PathNormalizer.ResolveToFilesystemPath(AppHostFile.FullName);
1418var prefix = BackchannelConstants.ComputeSocketPrefix(resolvedAppHostPath, _homeDirectory.FullName);
1474CreatedExecution = new TestDetachedProcessExecution(this, fileName, args, workingDirectory.FullName, environment, options);
Commands\CacheCommandTests.cs (14)
47var packagesDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "packages"));
49File.WriteAllText(Path.Combine(restoreDir.FullName, "test.dll"), "fake");
63Assert.False(File.Exists(Path.Combine(restoreDir.FullName, "test.dll")));
70var appHostInfoCacheDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "apphost-info"));
72var cacheEntry = Path.Combine(appHostInfoCacheDir.FullName, "entry.json");
105await File.WriteAllTextAsync(Path.Combine(firstBuildCache.FullName, "Aspire.Hosting.dll"), "fake").DefaultTimeout();
106await File.WriteAllTextAsync(Path.Combine(secondBuildCache.FullName, "Aspire.Hosting.dll"), "fake").DefaultTimeout();
116Assert.False(Directory.Exists(Path.Combine(stagingCacheRoot.FullName, "deadbeef")));
117Assert.False(Directory.Exists(Path.Combine(stagingCacheRoot.FullName, "cafef00d")));
147var packagesDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "packages-nonexistent"));
171File.WriteAllText(Path.Combine(tempDir.FullName, "root.txt"), "root");
172File.WriteAllText(Path.Combine(subDir.FullName, "nested.txt"), "nested");
196var keepFile = Path.Combine(tempDir.FullName, "keep.txt");
197var deleteFile = Path.Combine(tempDir.FullName, "delete.txt");
Commands\CompletionsCommandTests.cs (5)
255var legacyConfig = Path.Combine(home.FullName, "globalsettings.json");
261"global" => Path.Combine(home.FullName, AspireConfigFile.FileName),
314}, home.FullName, request, extensionArguments, options))
353}, home.FullName, request, options))
358Assert.Empty(Directory.EnumerateFileSystemEntries(home.FullName));
Commands\CompletionScriptTests.cs (26)
24var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "completion.ps1");
66var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "completion.ps1");
68await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.ps1"), """
84["PATH"] = workspace.WorkspaceRoot.FullName + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH")
98var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "completion.bash");
100var binaryPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire");
124["PATH"] = workspace.WorkspaceRoot.FullName + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH")
151var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "completion.bash");
152var capturedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "arguments.bin");
153var binaryPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire");
172["PATH"] = workspace.WorkspaceRoot.FullName + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH")
178Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "completion-executed")));
187var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "completion.bash");
188var capturedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "arguments.bin");
189var binaryPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire");
208["PATH"] = workspace.WorkspaceRoot.FullName + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH")
221var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.fish");
245var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.zsh");
256["HOME"] = workspace.WorkspaceRoot.FullName,
257["ZDOTDIR"] = workspace.WorkspaceRoot.FullName
269var completionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "_aspire");
270var binaryPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire");
271var capturedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "arguments.bin");
295["HOME"] = workspace.WorkspaceRoot.FullName,
296["ZDOTDIR"] = workspace.WorkspaceRoot.FullName,
298["PATH"] = workspace.WorkspaceRoot.FullName + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH")
Commands\ConfigCommandTests.cs (18)
141var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
247var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
295var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
320var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
354var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
474var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
803var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
823var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
841var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
884var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
915var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
946var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
960var settingsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
993var settingsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
1035var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1052var legacySettingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
1065var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1162var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
Commands\ConfigSourceCommandTests.cs (43)
99await File.WriteAllTextAsync(projectFile.FullName, "#:sdk Aspire.AppHost.Sdk");
122Assert.Equal(projectFile.FullName, project?.FullName);
325await File.WriteAllTextAsync(projectFile.FullName, "#:sdk Aspire.AppHost.Sdk");
337Assert.Equal(projectFile.FullName, project?.FullName);
401var projectFile = new FileInfo(Path.Combine(project.FullName, "apphost.cs"));
402await File.WriteAllTextAsync(projectFile.FullName, "#:sdk Aspire.AppHost.Sdk");
418"directory" => new FileInfo(project.FullName),
424var argument = requested is null ? "" : $" --apphost \"{requested.FullName}\"";
433Assert.Equal(projectFile.FullName, selected?.FullName);
443Assert.False(File.Exists(Path.Combine(project.FullName, AspireConfigFile.FileName)));
465File.Move(Path.Combine(globalFile.Directory.FullName, AspireConfigFile.FileName), globalFile.FullName);
466var originalGlobalConfiguration = await File.ReadAllTextAsync(globalFile.FullName);
479Assert.Equal(originalGlobalConfiguration, await File.ReadAllTextAsync(globalFile.FullName));
487await File.WriteAllTextAsync(Path.Combine(project.FullName, "apphost.cs"), "#:sdk Aspire.AppHost.Sdk");
497var result = command.Parse($"update --config-source --apphost \"{Path.Combine(project.FullName, "apphost.cs")}\" --yes --non-interactive");
503Assert.Equal("version-1", AspireConfigFile.Load(project.FullName)!.ConfigSource!.AppliedVersion);
542File.Move(Path.Combine(globalFile.Directory.FullName, AspireConfigFile.FileName), globalFile.FullName);
554var globalConfiguration = JsonNode.Parse(await File.ReadAllTextAsync(globalFile.FullName))!;
569var selectedFile = new FileInfo(Path.Combine(selected.FullName, "apphost.cs"));
577await File.WriteAllTextAsync(Path.Combine(selected.FullName, AspireConfigFile.FileName), "{}");
606Assert.Equal(bound, AspireConfigFile.Load(selected.FullName)?.ConfigSource is not null);
626var projectFile = new FileInfo(Path.Combine(selected.FullName, "apphost.cs"));
627await File.WriteAllTextAsync(projectFile.FullName, "#:sdk Aspire.AppHost.Sdk");
636Assert.Equal(projectFile.FullName, project?.FullName);
644Assert.False(File.Exists(Path.Combine(selected.FullName, AspireConfigFile.FileName)));
655var projectFile = new FileInfo(Path.Combine(selected.FullName, "apphost.cs"));
656await File.WriteAllTextAsync(projectFile.FullName, "#:sdk Aspire.AppHost.Sdk");
673Assert.Equal(projectFile.FullName, project?.FullName);
693await File.WriteAllTextAsync(Path.Combine(projectDirectory.FullName, "apphost.cs"), "#:sdk Aspire.AppHost.Sdk");
703var selectedPath = Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName);
725$"update --config-source --apphost \"{requestedDirectory.FullName}\" --yes --non-interactive");
736Assert.Equal("version-2", AspireConfigFile.Load(projectDirectory.FullName)!.ConfigSource!.AppliedVersion);
813await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
919var configPath = Path.Combine(configDirectory.FullName, AspireConfigFile.FileName);
984var configuration = AspireConfigFile.Load(configDirectory.FullName)!;
1023var refreshed = AspireConfigFile.Load(configDirectory.FullName)!;
Commands\DeployCommandTests.cs (15)
40var expectedAspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, ".home", ".aspire");
88var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
89await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
90var expectedAspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, ".home", ".aspire");
124var invocation = explicitAppHost ? $"{commandText} --apphost \"{appHostFile.FullName}\"" : commandText;
130Assert.Equal(workspace.WorkspaceRoot.FullName, workingDirectory);
131Assert.Equal(appHostFile.FullName, projectFile);
325var expectedAspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, ".home", ".aspire");
402var appHostFile = new FileInfo(Path.Combine(tempRepo.WorkspaceRoot.FullName, "AppHost.csproj"));
403await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
431var explicitPath = Path.Combine(tempRepo.WorkspaceRoot.FullName, "explicit.json");
444var result = command.Parse($"deploy --apphost \"{appHostFile.FullName}\" --environment \"{environment}\"");
455var appHostFile = new FileInfo(Path.Combine(tempRepo.WorkspaceRoot.FullName, "AppHost.csproj"));
456await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
492var result = command.Parse($"deploy --apphost \"{appHostFile.FullName}\" --environment Production");
Commands\DoctorCommandTests.cs (29)
166var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
167await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
193var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
194await File.WriteAllTextAsync(appHostFile.FullName, "export {};");
196Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"),
243await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
269var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Normal.csproj"));
270await File.WriteAllTextAsync(projectFile.FullName, "<Project />");
297var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Normal.csproj"));
298await File.WriteAllTextAsync(projectFile.FullName, "<Project />");
300var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
301await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
323await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"), "<Project />");
324await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.fsproj"), "<Project />");
350var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
351await File.WriteAllTextAsync(appHostFile.FullName, "export {};");
405await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
407Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"),
411"path": "{{Path.GetRelativePath(workspace.WorkspaceRoot.FullName, appHostFile.FullName).Replace('\\', '/')}}"
495var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
496await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
498Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"),
526var appHostFile = new FileInfo(Path.Combine(nestedAppHostDir.FullName, "AppHost.csproj"));
527await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
529Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"),
560var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
561await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1077return new FileInfo(Path.Combine(directory.FullName, "AppHost.csproj"));
Commands\ExportCommandTests.cs (17)
27var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
115var customDir = Path.Combine(workspace.WorkspaceRoot.FullName, "custom", "nested");
149var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
152var appHostDir = Path.Combine(workspace.WorkspaceRoot.FullName, "MyAppHost");
182var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
215AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TargetAppHost", "TargetAppHost.csproj"),
301var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
427var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
485var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
539var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
604var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
648var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
692var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
734var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
762var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
815var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "export.zip");
882AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
Commands\ExtensionInternalCommandTests.cs (11)
61var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "MyApp.AppHost.csproj"));
93Assert.Equal(projectFile.FullName, searchResult.SelectedProjectFile);
95Assert.Equal(projectFile.FullName, searchResult.AllProjectFileCandidates[0]);
102var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "MyApp.AppHost.csproj"));
103await File.WriteAllTextAsync(projectFile.FullName, """
129Assert.Equal(projectFile.FullName, searchResult.SelectedProjectFile);
130Assert.Equal([projectFile.FullName], searchResult.AllProjectFileCandidates);
137var projectFile1 = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App1.AppHost.csproj"));
138var projectFile2 = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App2.AppHost.csproj"));
172Assert.Contains(projectFile1.FullName, searchResult.AllProjectFileCandidates);
173Assert.Contains(projectFile2.FullName, searchResult.AllProjectFileCandidates);
Commands\GoAppHostToolingCheckTests.cs (9)
59Assert.Equal(appHostFile.FullName, result.Metadata["appHostPath"]?.GetValue<string>());
74Assert.Equal(appHostFile.FullName, result.Metadata["appHostPath"]?.GetValue<string>());
92var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs");
109var configuredAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "..", "ts", "apphost.mts"));
137Assert.Equal(appHostFile.FullName, result.Metadata["appHostPath"]?.GetValue<string>());
557var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.go");
566File.WriteAllText(Path.Combine(serviceDirectory.FullName, "Api.csproj"), "<Project Sdk=\"Microsoft.NET.Sdk.Web\" />");
679while (dir is not null && !File.Exists(Path.Combine(dir.FullName, "global.json")))
684return dir.FullName;
Commands\InitCommandTests.cs (118)
116var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
117File.WriteAllText(solutionFile.FullName, "Fake solution file");
119var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, projectFileName));
120File.WriteAllText(projectFile.FullName, "<Project />");
159Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json")));
202var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
203File.WriteAllText(solutionFile.FullName, "Fake solution file");
235Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json")));
257var appHostContent = await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
272var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, solutionPath));
273Directory.CreateDirectory(solutionFile.Directory!.FullName);
275await File.WriteAllTextAsync(solutionFile.FullName, solutionContent);
276var projectPath = Path.Combine(solutionFile.Directory.FullName, "Test.csproj");
279var otherSolutionPath = Path.Combine(workspace.WorkspaceRoot.FullName, "Other.slnx");
305Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
306Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.run.json")));
307var config = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName)))!.AsObject();
309Assert.Equal(solutionContent, await File.ReadAllTextAsync(solutionFile.FullName));
346Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
347Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".gitignore")));
349var config = JsonNode.Parse(File.ReadAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json")))!.AsObject();
368LineEndingAssert.FileUsesOsLineBreaksAndSingleFinalNewline(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"));
369LineEndingAssert.FileUsesOsLineBreaksAndSingleFinalNewline(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.run.json"));
391var runJsonPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.run.json");
418var aspireConfig = JsonNode.Parse(File.ReadAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json")))!.AsObject();
461File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"), existingAspireConfig);
472var runJson = JsonNode.Parse(File.ReadAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.run.json")))!.AsObject();
511var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json");
536Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.run.json")));
560Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
662Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts")));
664var config = JsonNode.Parse(File.ReadAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json")))!.AsObject();
677var existingAppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts");
680File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), """{ "type": "commonjs" }""");
695Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts")));
696Assert.Equal("""{ "type": "commonjs" }""", File.ReadAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json")));
705File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{}");
713Directory.CreateDirectory(scaffoldDirectory.FullName);
714File.WriteAllText(Path.Combine(scaffoldDirectory.FullName, context.Language.AppHostFileName!), string.Empty);
744Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts")));
745Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-apphost", "apphost.mts")));
781Assert.Empty(Directory.GetFiles(workspace.WorkspaceRoot.FullName, "*mcp*.json*", SearchOption.AllDirectories));
833Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
835var aspireSkillPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills", CommonAgentApplicators.AspireSkillName);
838var aspireifySkillPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills", CommonAgentApplicators.AspireifySkillName);
855Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
858var agentsDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".agents", "skills");
877Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
882var aspireSkillPath = Path.Combine(selectedRoot.FullName, ".agents", "skills", CommonAgentApplicators.AspireSkillName, "SKILL.md");
884Assert.False(Directory.Exists(Path.Combine(unselectedRoot.FullName, ".agents", "skills")));
885Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".mcp.json")));
887var aspireifySkillPath = Path.Combine(selectedRoot.FullName, ".agents", "skills", CommonAgentApplicators.AspireifySkillName, "SKILL.md");
905var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs");
921var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
950var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
974var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
995var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs");
1015var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1016File.WriteAllText(solutionFile.FullName, "Fake solution file");
1059File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")),
1068var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1069File.WriteAllText(solutionFile.FullName, "Fake solution file");
1072var hivesDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives"));
1073Directory.CreateDirectory(Path.Combine(hivesDir.FullName, "pr-12345", "packages"));
1103[new PackageMapping("Aspire*", hivesDir.FullName + "/pr-12345/packages")],
1145var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1146File.WriteAllText(solutionFile.FullName, "Fake solution file");
1211var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1212File.WriteAllText(solutionFile.FullName, "Fake solution file");
1260var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1261File.WriteAllText(solutionFile.FullName, "Fake solution file");
1330Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
1332var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1365Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs")));
1367var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1402var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1426var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1475var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1519var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1634var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1741var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1742File.WriteAllText(solutionFile.FullName, "Fake solution file");
1820var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1821File.WriteAllText(solutionFile.FullName, "Fake solution file");
1824var hivesDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives"));
1908var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1909File.WriteAllText(solutionFile.FullName, "Fake solution file");
1911var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1969var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1970File.WriteAllText(solutionFile.FullName, "Fake solution file");
1998var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
2016var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
2017File.WriteAllText(solutionFile.FullName, "Fake solution file");
2020var appHostDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.AppHost"));
2022Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")));
2043var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
2061var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs");
2063Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")));
2080var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
2099var solutionFile = new FileInfo(Path.Combine(solutionDir.FullName, "Test.sln"));
2100File.WriteAllText(solutionFile.FullName, "Fake solution file");
2129Assert.True(File.Exists(Path.Combine(solutionDir.FullName, "nuget.config")),
2131Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")),
2133AssertNuGetConfigHasChannelShape(Path.Combine(solutionDir.FullName, "nuget.config"), contextChannel);
2149var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
2150File.WriteAllText(solutionFile.FullName, "Fake solution file");
2161var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
2210var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
2211File.WriteAllText(solutionFile.FullName, "Fake solution file");
2242var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
2260var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
2261File.WriteAllText(solutionFile.FullName, "Fake solution file");
2305File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")),
2321var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.slnx"));
2322File.WriteAllText(solutionFile.FullName, """<Solution />""");
2351var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
2440File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, appHostFileName), string.Empty);
2450File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, AspireConfigFile.FileName), config.ToJsonString());
Commands\LogsCommandTests.cs (5)
728AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
818AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
985AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
1548AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
1626AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestAppHost", "TestAppHost.csproj"),
Commands\LsCommandTests.cs (20)
93var appHostPath1 = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
94var appHostPath2 = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "App2.AppHost.csproj");
174var configuredAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "ConfiguredAppHost.csproj"));
175await File.WriteAllTextAsync(configuredAppHost.FullName, "Not a real apphost");
176await File.WriteAllTextAsync(Path.Combine(workingDirectory.FullName, "aspire.config.json"), JsonSerializer.Serialize(new
203Assert.Equal(configuredAppHost.FullName, candidate.Path);
214var appHostPath1 = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
215var appHostPath2 = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "App2.AppHost.csproj");
289var appHostPath1 = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
290var appHostPath2 = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "App2.AppHost.csproj");
374var appHostPathZ = Path.Combine(workspace.WorkspaceRoot.FullName, "ZApp", "Z.AppHost.csproj");
375var appHostPathA = Path.Combine(workspace.WorkspaceRoot.FullName, "AApp", "A.AppHost.csproj");
376var appHostPathM = Path.Combine(workspace.WorkspaceRoot.FullName, "MApp", "M.AppHost.csproj");
419var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App", "App.AppHost.csproj");
520var appHostPath1 = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
521var appHostPath2 = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "App2.AppHost.csproj");
556var appHostPath1 = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
557var appHostPath2 = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "App2.AppHost.csproj");
609var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App", "App.AppHost.csproj");
762var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App", "App.AppHost.csproj");
Commands\NewCommandLocalTemplateTests.ConfiguredGitSourceObjects.cs (18)
85var root = Path.GetRelativePath(workspace.Path, destination.FullName);
184Directory.Move(link, Path.Combine(destination.FullName, "templates"));
206Path.Combine(provider.GetRequiredService<CliExecutionContext>().CacheDirectory.FullName, "git")));
220Path.GetRelativePath(workspace.Path, Path.Combine(destination.FullName, "templates/sample")),
237var missingPath = Path.Combine(GetGitFetches(git)[0].Destination.FullName, "templates", "missing");
245Path.Combine(provider.GetRequiredService<CliExecutionContext>().CacheDirectory.FullName, "git")));
296await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "init", "--initial-branch=main");
297await GitTestHelper.ConfigureGitIdentityAsync(repository.FullName, outputHelper);
298await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "config", "tag.gpgsign", "false");
299await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "add", ".");
300await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-m", "Pinned templates");
301var pinnedSha = (await File.ReadAllTextAsync(Path.Combine(repository.FullName, ".git", "refs", "heads", "main"))).Trim();
302await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "branch", "release/17.0");
303await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "tag", "-a", "v17.0", "-m", "Pinned tag");
304await File.WriteAllTextAsync(Path.Combine(repository.FullName, "templates", "sample", "TemplateApp.txt"), "Latest: GreetingValue");
305await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-am", "Latest templates");
342var fixtureUrl = new Uri(repository.FullName).AbsoluteUri;
381Assert.Equal(2, Directory.GetDirectories(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")).Length);
Commands\NewCommandLocalTemplateTests.ConfiguredGitSources.cs (10)
179await File.WriteAllTextAsync(Path.Combine(partial.FullName, "partial-object"), "partial download", token);
222Path.Combine(provider.GetRequiredService<CliExecutionContext>().CacheDirectory.FullName, "git")));
238await File.WriteAllTextAsync(Path.Combine(partial.FullName, "partial-object"), "partial download", token);
269var cacheRoot = Path.Combine(provider.GetRequiredService<CliExecutionContext>().CacheDirectory.FullName, "git");
323await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "init");
324await GitTestHelper.ConfigureGitIdentityAsync(repository.FullName, outputHelper);
325await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "add", ".");
326await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-m", "Add template");
343var fixtureUrl = new Uri(repository.FullName).AbsoluteUri;
366Path.GetRelativePath(workspace.Path, destination.FullName), "sample", "Sample template", marker);
Commands\NewCommandLocalTemplateTests.cs (88)
36await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
82await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), JsonSerializer.Serialize(new
250await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
391await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
440await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
502await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
543await File.WriteAllTextAsync(Path.Combine(gitDirectory.FullName, "config"), "Original repository configuration");
550await File.WriteAllTextAsync(Path.Combine(nestedGitDirectory.FullName, "config"), "Nested repository configuration");
552await File.WriteAllTextAsync(Path.Combine(nestedWorktree.FullName, ".git"), "gitdir: ../../git-storage");
553await File.WriteAllTextAsync(Path.Combine(nestedWorktree.FullName, "content.txt"), "Keep worktree content");
557await File.WriteAllTextAsync(Path.Combine(github.FullName, "content.txt"), "Keep GitHub content");
569Assert.Equal("Original repository configuration", await File.ReadAllTextAsync(Path.Combine(gitDirectory.FullName, "config")));
583await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
593await File.WriteAllTextAsync(Path.Combine(git.FullName, "config"), "Original repository configuration");
596await File.WriteAllTextAsync(Path.Combine(nestedGit.FullName, "config"), "Nested repository configuration");
600await File.WriteAllTextAsync(Path.Combine(github.FullName, "content.txt"), "Keep GitHub content");
607Assert.False(fileSystem.FileExists(Path.Combine(nestedGit.FullName, "config")));
608Assert.Throws<FileNotFoundException>(() => fileSystem.ReadAllText(Path.Combine(nestedGit.FullName, "config")));
704await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), $$"""
770Directory.CreateDirectory(Path.Combine(context.HivesDirectory.FullName, channel, "packages"));
785.Replace(PathNormalizer.NormalizePathForStorage(workspace.WorkspaceRoot.FullName), "{workspace}"))
826_ => Path.Combine(context.HivesDirectory.FullName, channel, "packages")
867new[] { localPackagesOverride ? packages.FullName : sourceOverride, PackageSources.NuGetOrg }.Order(StringComparer.Ordinal),
962_ => Path.Combine(context.HivesDirectory.FullName, channel, "packages")
991var target = Path.Combine(destination.FullName, Path.GetRelativePath(Path.Combine(workspace.Path, "template"), file));
1059await File.WriteAllTextAsync(Path.Combine(conflictingDirectory.FullName, "keep.txt"), "Template content");
1125localPackagesOverride ? PathNormalizer.NormalizePathForStorage(packages.FullName) : "https://nuget.example/v3/index.json?first=1&second=2",
1130.Replace(PathNormalizer.NormalizePathForStorage(workspace.WorkspaceRoot.FullName), "{workspace}"))
1389await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "init");
1390await GitTestHelper.ConfigureGitIdentityAsync(repository.FullName, outputHelper);
1391await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "add", ".");
1392await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-m", "Add template");
1405var cacheRoot = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git");
1408List<string> arguments = ["new", "--template-repository", new Uri(repository.FullName).AbsoluteUri,
1430Assert.True(Directory.Exists(repository.FullName));
1472Assert.Empty(Directory.GetFileSystemEntries(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1500Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1520Directory.CreateDirectory(Path.Combine(destination.FullName, ".git"));
1522Directory.Move(linkPath, Path.Combine(destination.FullName, "template"));
1539Assert.Empty(Directory.GetFileSystemEntries(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1552var gitObject = Path.Combine(gitDirectory.FullName, "partial-object");
1570Assert.Empty(Directory.GetFileSystemEntries(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1583checkouts.Add(destination.FullName);
1584Directory.CreateDirectory(Path.Combine(destination.FullName, ".git"));
1585var readOnlyFile = Path.Combine(destination.FullName, ".git", "read-only-object");
1588await CreateTemplateAsync(workspace, Path.GetRelativePath(workspace.Path, Path.Combine(destination.FullName, "template")));
1596var cacheRoot = Path.Combine(provider.GetRequiredService<CliExecutionContext>().CacheDirectory.FullName, "git");
1612Assert.All(checkouts, path => Assert.Equal(cacheRoot, Directory.GetParent(path)!.Parent!.FullName));
1624Assert.False(File.Exists(TemporaryCacheDirectory.GetLeasePath(Directory.GetParent(path)!.FullName)));
1626Assert.Single(Directory.GetFileSystemEntries(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1636var identityFile = Path.Combine(repository.FullName, "template", "identity.txt");
1638await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "init", "--initial-branch=main");
1639await GitTestHelper.ConfigureGitIdentityAsync(repository.FullName, outputHelper);
1640await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "config", "tag.gpgsign", "false");
1641await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "add", ".");
1642await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-m", "First template");
1643var firstSha = (await File.ReadAllTextAsync(Path.Combine(repository.FullName, ".git", "refs", "heads", "main"))).Trim();
1644await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "tag", "v1");
1645await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "tag", "-a", "annotated", "-m", "Annotated version");
1646await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "branch", "feature/templates");
1648await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-am", "Second template");
1649var secondSha = (await File.ReadAllTextAsync(Path.Combine(repository.FullName, ".git", "refs", "heads", "main"))).Trim();
1662var cacheRoot = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git");
1678await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-am", "Move branch");
1692var repositoryPath = Path.GetRelativePath(provider.GetRequiredService<CliExecutionContext>().WorkingDirectory.FullName, repository.FullName);
1716Directory.CreateDirectory(Path.Combine(destination.FullName, ".git"));
1717await CreateTemplateAsync(workspace, Path.GetRelativePath(workspace.Path, Path.Combine(destination.FullName, "one")));
1718await CreateTemplateAsync(workspace, Path.GetRelativePath(workspace.Path, Path.Combine(destination.FullName, "two")));
1748var cacheRoot = Path.Combine(provider.GetRequiredService<CliExecutionContext>().CacheDirectory.FullName, "git");
1774Directory.CreateDirectory(Path.Combine(destination.FullName, ".git"));
1775await CreateTemplateAsync(workspace, Path.GetRelativePath(workspace.Path, Path.Combine(destination.FullName, "template")));
1791var cacheRoot = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git");
1796command => Assert.False(Directory.Exists(command.WorkingDirectory.FullName)));
1835Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1857Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1896Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1929Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "git")));
1935await File.WriteAllTextAsync(Path.Combine(config.FullName, "aspirecli.host.json"),
1937await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), $$"""
2022await File.WriteAllTextAsync(Path.Combine(config.FullName, "aspirecli.host.json"),
2024await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
2056await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), $$"""
2108await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), JsonSerializer.Serialize(new
2124await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), $$"""
2166await File.WriteAllTextAsync(Path.Combine(root.FullName, "TemplateApp.cs"), """
2179await File.WriteAllTextAsync(Path.Combine(root.FullName, "worker-only.txt"), "Worker content");
2180await File.WriteAllTextAsync(Path.Combine(root.FullName, "identity.txt"), name);
Commands\NewCommandLocalTemplateTests.NuGetValues.cs (7)
103File.Copy(Path.Combine(feed.FullName, "Aspire.Hosting.Dotnet.13.6.1-preview.3.nupkg"),
104Path.Combine(embedded.FullName, "Aspire.Hosting.Dotnet.13.6.1-preview.3.nupkg"));
124[new PackageMapping("Aspire*", feed.FullName)],
138[policy == "embedded" ? Path.Combine(output, "feed") : feed.FullName],
454await File.WriteAllTextAsync(Path.Combine(output.FullName, "keep.txt"), "Concurrent user content", token);
518await File.WriteAllTextAsync(Path.Combine(config.FullName, "template.json"), """
530await File.WriteAllTextAsync(Path.Combine(config.FullName, "aspirecli.host.json"), $$"""
Commands\NewCommandTemplateConfigPersistenceTests.cs (11)
281dotNetTemplateInstalls.Add(new DotNetTemplateInstall(packageName, version, nugetConfigFile?.FullName, nugetSource));
326var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, outputDirectoryName);
341Assert.Contains(packagesDirectory.FullName.Replace('\\', '/'), csharpNuGetConfig);
356Assert.Equal(packagesDirectory.FullName.Replace('\\', '/'), install.NuGetSource);
364Assert.Contains(packagesDirectory.FullName.Replace('\\', '/'), dotNetNuGetConfig);
450var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, outputDirectoryName);
525hivesDirectory: new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives")),
561var installPrefix = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "custom-aspire-prefix"));
562var processPath = Path.Combine(installPrefix.FullName, "dogfood", PrChannelName, "bin", "aspire");
566var packagesDirectory = Directory.CreateDirectory(Path.Combine(installPrefix.FullName, "hives", PrChannelName, "packages"));
567File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.ProjectTemplates.{s_prVersion}.nupkg"), string.Empty);
Commands\NewCommandTests.cs (108)
181var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "TemplateOut");
587var config = AspireConfigFile.Load(Path.Combine(workspace.WorkspaceRoot.FullName, "output"));
940File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.mts"), "// test apphost");
957Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "apphost.mts")));
958Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "aspire.config.json")));
1106File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "AppHost.java"), "package aspire;");
1131File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"), """
1169File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "AppHost.java"), "package aspire;");
1197File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.mts"), "// test apphost");
1209Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "apphost.mts")));
1228var document = XDocument.Load(nugetConfig.FullName);
1281AssertSourceOverrideNuGetConfig(Path.Combine(workspace.WorkspaceRoot.FullName, "output"), expectedSource);
1291var expectedSource = Path.Combine(workspace.WorkspaceRoot.FullName, "relative-feed");
1293File.WriteAllText(Path.Combine(nestedDirectory.FullName, "Aspire.ProjectTemplates.9.2.0.nupkg"), string.Empty);
1324AssertSourceOverrideNuGetConfig(Path.Combine(workspace.WorkspaceRoot.FullName, "output"), expectedSource);
1336var sourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "source-feed");
1361File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, scaffoldFileName), "// test apphost");
1373AssertSourceOverrideNuGetConfig(Path.Combine(workspace.WorkspaceRoot.FullName, "output"), sourceOverride);
1384var sourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "source-feed");
1397AssertSourceOverrideNuGetConfig(Path.Combine(workspace.WorkspaceRoot.FullName, "output"), sourceOverride);
1420Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "output"));
1433Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output")));
1465var expectedSource = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.org");
1468Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output")));
1488File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.mts"), "// test apphost");
1527File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "AppHost.java"), "package aspire;");
1539Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "AppHost.java")));
1563File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.py"), "# test apphost");
1575Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "apphost.py")));
1591Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "apphost.cs")));
1621var appHostCreated = File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "apphost.cs"));
1653var content = await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "output", "apphost.cs"));
1683var outputDir = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
1717var outputDir = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
1792var outputRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
1908capturedTargetDirectory = context.TargetDirectory.FullName;
1926var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "TestApp");
1971await File.WriteAllTextAsync(Path.Combine(context.TargetDirectory.FullName, "aspire.config.json"), """
2001var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "output", "aspire.config.json");
2061var config = AspireConfigFile.Load(directory.FullName);
2065var modulesDir = Directory.CreateDirectory(Path.Combine(directory.FullName, LanguageInfo.GeneratedFolderName));
2066File.WriteAllText(Path.Combine(modulesDir.FullName, "aspire.mts"), "// generated sdk");
2081Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "output", LanguageInfo.GeneratedFolderName, "aspire.mts")));
2151var sourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "source-feed");
2189var modulesDir = Directory.CreateDirectory(Path.Combine(directory.FullName, ".aspire", "modules"));
2190File.WriteAllText(Path.Combine(modulesDir.FullName, "aspire.ts"), "// generated sdk");
2203AssertSourceOverrideNuGetConfig(Path.Combine(workspace.WorkspaceRoot.FullName, "output"), sourceOverride);
2230var document = XDocument.Load(nugetConfigFile.FullName);
2231var settings = NuGetTestHelper.LoadSettings(nugetConfigFile.Directory!.FullName);
2258AssertSourceOverrideNuGetConfig(Path.Combine(workspace.WorkspaceRoot.FullName, "output"), sourceOverride);
2268var sourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "source-feed");
2367var outputDir = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
2392var outputDir = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
2489Assert.Equal(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-starter"), capturedOutputPath);
2525var result = command.Parse($"new aspire-starter --name MyProject --output {Path.Combine(workspace.WorkspaceRoot.FullName, "my-project")} --use-redis-cache --test-framework None");
2567var outputDir = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
2686Path.Combine(workspace.WorkspaceRoot.FullName, "source");
2717var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "source", "MyFirstApp");
2745Path.Combine(workspace.WorkspaceRoot.FullName, "source", "MyFirstApp");
2776var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "source", "MyFirstApp");
2802Path.Combine(workspace.WorkspaceRoot.FullName, "source");
2833var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "source");
2864selectedPathFactory(workspace.WorkspaceRoot.FullName);
2893Assert.Equal(expectedPathFactory(workspace.WorkspaceRoot.FullName), capturedOutputPath);
2930Path.Combine(workspace.WorkspaceRoot.FullName, "source");
2941File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.ts"), "// test apphost");
2955var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "source", projectName);
2956Assert.Equal(expectedPath, capturedTargetDirectory.FullName);
2967File.WriteAllText(Path.Combine(selectedParent.FullName, "existing.txt"), "existing content");
2989var validationResult = validator(selectedParent.FullName);
2992return selectedParent.FullName;
3004File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.ts"), "// test apphost");
3019var expectedPath = Path.Combine(selectedParent.FullName, projectName);
3020Assert.Equal(expectedPath, capturedTargetDirectory.FullName);
3031var collidingProject = Directory.CreateDirectory(Path.Combine(collidingParent.FullName, projectName));
3032File.WriteAllText(Path.Combine(collidingProject.FullName, "existing.txt"), "existing content");
3034var selectedParents = new Queue<string?>([collidingParent.FullName, validParent.FullName]);
3097Assert.Equal(Path.Combine(validParent.FullName, projectName), capturedOutputPath);
3101collidingProject.FullName);
3145return selectedParent.FullName;
3157File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.ts"), "// test apphost");
3172var expectedPath = Path.Combine(selectedParent.FullName, projectName);
3173Assert.Equal(expectedPath, capturedTargetDirectory.FullName);
3215selectedOutputPath.FullName;
3226File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.ts"), "// test apphost");
3241Assert.Equal(selectedOutputPath.FullName, capturedTargetDirectory.FullName);
3242Assert.True(File.Exists(Path.Combine(selectedOutputPath.FullName, "apphost.ts")));
3243Assert.False(File.Exists(Path.Combine(selectedOutputPath.FullName, projectName, "apphost.ts")));
3269Path.Combine(workspace.WorkspaceRoot.FullName, "source", projectName);
3280File.WriteAllText(Path.Combine(context.TargetDirectory.FullName, "apphost.ts"), "// test apphost");
3294var expectedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "source", projectName);
3295Assert.Equal(expectedPath, capturedTargetDirectory.FullName);
3334var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
3362var skillPath = Path.Combine(workspace.WorkspaceRoot.FullName, "output", ".agents", "skills", CommonAgentApplicators.AspireSkillName, "SKILL.md");
3388var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
3416var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
3443.Select(file => Path.Combine(homeDirectory.FullName, ".claude", "skills", skill.Name, file.RelativePath)));
3445Assert.Equal(expectedFiles.Order(), Directory.EnumerateFiles(homeDirectory.FullName, "*", SearchOption.AllDirectories).Order());
3446var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
3460File.WriteAllText(Path.Combine(existingDir.FullName, "file.txt"), "content");
3474var result = command.Parse($"new aspire-starter --name TestApp --output {existingDir.FullName} --use-redis-cache --test-framework None");
3479var expectedError = string.Format(CultureInfo.CurrentCulture, NewCommandStrings.OutputDirectoryNotEmptyNonInteractive, existingDir.FullName);
3496var result = command.Parse($"new aspire-starter --name TestApp --output {emptyDir.FullName} --use-redis-cache --test-framework None");
3509File.WriteAllText(Path.Combine(existingDir.FullName, "file.txt"), "content");
3606Assert.Equal(projectDir.FullName, capturedOutputPath);
3613var validator = OutputPathHelper.CreateOutputPathValidator(workspace.WorkspaceRoot.FullName);
Commands\PsCommandTests.cs (18)
131AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
146AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "App2.AppHost.csproj"),
198var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
237AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
277AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
283AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
321AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
365AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
402var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
435var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
505AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
544AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
578var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
677AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
721AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
761AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
768AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
808AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj"),
Commands\ResourceCommandTests.cs (12)
182var result = command.Parse($"""resource web --apphost "{appHostDirectory.FullName}" --help""");
198var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
199File.WriteAllText(appHostProjectFile.FullName, "<Project />");
211AppHostPath = appHostProjectFile.FullName,
216Path.Combine(workspace.WorkspaceRoot.FullName, "socket1"),
219Path.Combine(workspace.WorkspaceRoot.FullName, "socket2"),
229var result = command.Parse($"""resource web --apphost "{appHostProjectFile.FullName}" --help""");
250var appHostProjectFile = new FileInfo(Path.Combine(realDirectory.FullName, "AppHost.csproj"));
251File.WriteAllText(appHostProjectFile.FullName, "<Project />");
252var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
253Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
259AppHostPath = appHostProjectFile.FullName,
Commands\RunCommandTests.cs (150)
65var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
66await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
91var pendingRun = command.Parse($"run --apphost \"{appHostFile.FullName}\" {arguments}")
99Assert.Equal(AspireSecretsPathHelper.ComputeSyntheticAppHostId(appHostFile.FullName),
146var result = command.Parse(["run", "--apphost", appHostFile.FullName, "--launch-profile", "E2E"]);
188var result = command.Parse(["run", "--detach", "--apphost", appHostFile.FullName, "--launch-profile", "E2E"]);
206File.WriteAllText(Path.Combine(propertiesDirectory.FullName, "launchSettings.json"), """
239var result = command.Parse(["run", "--apphost", appHostFile.FullName, "--launch-profile", "missing"]);
255File.WriteAllText(Path.Combine(propertiesDirectory.FullName, "launchSettings.json"), $$"""
284var result = command.Parse(["run", "--apphost", appHostFile.FullName, "--launch-profile", "container"]);
320var result = command.Parse(["run", "--apphost", appHostFile.FullName, "--launch-profile", "E2E"]);
361var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
362await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
387var result = command.Parse($"run --apphost {appHostFile.FullName}");
402var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
403await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
428var result = command.Parse($"run --apphost {appHostFile.FullName}");
449var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
450await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
476var result = command.Parse($"run --apphost {appHostFile.FullName}");
494var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
495await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
543var result = command.Parse($"run --apphost {appHostFile.FullName}");
578var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
579await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
635var result = command.Parse($"run --apphost {appHostFile.FullName}");
674var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
675await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
703var result = command.Parse($"run --apphost {appHostFile.FullName}");
779var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
780await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
839var pendingCommand = command.Parse($"run --apphost {appHostFile.FullName}")
881var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
882await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
933var result = command.Parse($"run --apphost {appHostFile.FullName}");
977var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
978await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
1040var result = command.Parse($"run --apphost {appHostFile.FullName}");
1082var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
1083await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
1138var result = command.Parse($"run --apphost {appHostFile.FullName}");
1258await File.WriteAllTextAsync(Path.Combine(appHost1Dir.FullName, "AppHost1.csproj"), "fake");
1261await File.WriteAllTextAsync(Path.Combine(appHost2Dir.FullName, "AppHost2.csproj"), "fake");
1326File.WriteAllText(projectFile.FullName, """
1362var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj"));
1374var result = command.Parse($"run --apphost {appHostProjectFile.FullName}");
1388var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj"));
1392Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
1421var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj"));
1455var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj"));
1466var result = command.Parse($"run --apphost {appHostProjectFile.FullName}");
1484var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj"));
1526var result = command.Parse($"run --apphost {appHostProjectFile.FullName}");
1561var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1562await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
1579var parentResult = parentCommand.Parse($"run --detach --apphost {appHostFile.FullName}");
1635File.WriteAllText(Path.Combine(propertiesDirectory.FullName, "launchSettings.json"), """
1667"--apphost", appHostFile.FullName,
1754var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
1755await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1800var result = command.Parse($"run --apphost {appHostFile.FullName}");
1830var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
1831await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1870var result = command.Parse($"run --apphost {appHostFile.FullName}");
1894var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
1895await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1938var result = command.Parse($"run --apphost {appHostFile.FullName}");
1956var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
1957await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1995var result = command.Parse($"run --apphost {appHostFile.FullName}");
2016var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
2017await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
2054var result = command.Parse($"run --apphost {appHostFile.FullName}");
2084var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
2085await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
2125var result = command.Parse($"run --apphost {appHostFile.FullName}");
2167var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2168await File.WriteAllTextAsync(appHostFile.FullName, "<Project />", TestContext.Current.CancellationToken);
2235var pendingCommand = command.Parse($"run --apphost {appHostFile.FullName}")
2273var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
2274await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
2318var result = command.Parse($"run --apphost {appHostFile.FullName}");
2336var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
2337await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
2379var result = command.Parse($"run --apphost {appHostFile.FullName}");
2397var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
2398await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
2431var result = command.Parse($"run --apphost {appHostFile.FullName}");
2459var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
2460await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
2503var result = command.Parse($"run --apphost {appHostFile.FullName}");
3136var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "cli [run].log");
3258var appHostDirectoryPath = Path.Combine(workspace.WorkspaceRoot.FullName, "src", "MyApp.AppHost");
3260var appHostProjectPath = Path.Combine(appHostDirectory.FullName, "MyApp.AppHost.csproj");
3262File.WriteAllText(appHostProjectFile.FullName, "<Project></Project>");
3901var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3902await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
3949var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3950await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
3993var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3994await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
4041var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
4042await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
4084var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
4085await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
4128var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
4129await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
4172var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
4173await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
4466var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4528var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4570var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4628var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4672var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4733Path.Combine(workspace.WorkspaceRoot.FullName, "test.log"),
4771Path.Combine(workspace.WorkspaceRoot.FullName, "test.log"),
4806var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4855var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4899var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
4955Path.Combine(workspace.WorkspaceRoot.FullName, "test.log"),
4997var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test.log");
5054var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
5055await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
5081var result = command.Parse(explicitAppHost ? $"run --apphost \"{appHostFile.FullName}\"" : "run");
5086Assert.Equal(workspace.WorkspaceRoot.FullName, workingDirectory);
5087Assert.Equal(explicitAppHost ? appHostFile.FullName : null, projectFile);
5100workspace.WorkspaceRoot.FullName,
5101Path.Combine(workspace.WorkspaceRoot.FullName, "common", ".git"));
5103var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
5104File.WriteAllText(appHostFile.FullName, "<Project />");
5119"--apphost", appHostFile.FullName,
5153"--capture-profile-output", new FileInfo(relativeCapturePath).FullName,
5167workspace.WorkspaceRoot.FullName,
5168Path.Combine(workspace.WorkspaceRoot.FullName, "common", ".git"));
5170var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
5171File.WriteAllText(appHostFile.FullName, "<Project />");
5179var result = command.Parse(["run", "--apphost", appHostFile.FullName, "--debug", "--", "--custom-arg", "value"]);
5195workspace.WorkspaceRoot.FullName,
5196Path.Combine(workspace.WorkspaceRoot.FullName, "common", ".git"));
5198var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
5199File.WriteAllText(appHostFile.FullName, "<Project />");
5207var result = command.Parse(["run", "--apphost", appHostFile.FullName, "--debug", "--secret", "value"]);
5450var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
5451File.WriteAllText(appHostFile.FullName, "<Project />");
5466var args = new List<string> { commandName, "--apphost", appHostFile.FullName };
5491var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
5492File.WriteAllText(appHostFile.FullName, "<Project />");
5499var backchannelsDirectory = Path.Combine(homeDirectory.FullName, ".aspire", "cli", "bch");
5502var resolvedAppHostPath = PathNormalizer.ResolveSymlinks(appHostFile.FullName);
5503var prefix = BackchannelConstants.ComputeSocketPrefix(resolvedAppHostPath, homeDirectory.FullName);
Commands\SecretCommandTests.cs (39)
23var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
27await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
37var result = command.Parse($"secret path --apphost \"{appHostFile.FullName}\"");
49var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
50var userSecretsId = UserSecretsPathHelper.ComputeSyntheticUserSecretsId(appHostFile.FullName);
53await File.WriteAllTextAsync(appHostFile.FullName, "export {};");
63var result = command.Parse($"secret path --apphost \"{appHostFile.FullName}\"");
75var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
80await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
90var setResult = command.Parse($"secret set --environment Production Parameters:api_key prod-secret --apphost \"{appHostFile.FullName}\"");
98var getResult = command.Parse($"secret get --environment Production Parameters:api_key --apphost \"{appHostFile.FullName}\"");
105var listResult = command.Parse($"secret list --environment Production --format json --apphost \"{appHostFile.FullName}\"");
111var defaultGetResult = command.Parse($"secret get Parameters:api_key --apphost \"{appHostFile.FullName}\"");
116var deleteResult = command.Parse($"secret delete --environment Production Parameters:api_key --apphost \"{appHostFile.FullName}\"");
121var deletedGetResult = command.Parse($"secret get --environment Production Parameters:api_key --apphost \"{appHostFile.FullName}\"");
132var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
135await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
138var projectOption = $"--apphost \"{appHostFile.FullName}\"";
140workspace.WorkspaceRoot, AspireSecretsPathHelper.ComputeSyntheticAppHostId(appHostFile.FullName), "Production");
169var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
171await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
174var projectOption = $"--apphost \"{appHostFile.FullName}\"";
191var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
196await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
206var setDevelopmentResult = command.Parse($"secret set Parameters:api_key dev-secret --apphost \"{appHostFile.FullName}\"");
213var setProductionResult = command.Parse($"secret set --environment Production Azure:SubscriptionId prod-subscription --apphost \"{appHostFile.FullName}\"");
219var listAllResult = command.Parse($"secret list --all --format json --apphost \"{appHostFile.FullName}\"");
236var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
241await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
259var getLegacyResult = command.Parse($"secret get Legacy:Value --apphost \"{appHostFile.FullName}\"");
265var setResult = command.Parse($"secret set New:Value new --apphost \"{appHostFile.FullName}\"");
297var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
307Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "secrets")));
318var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
320await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
323var projectOption = $"--apphost \"{appHostFile.FullName}\"";
354var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
356await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
373var exitCode = await command.Parse($"secret {arguments} -e Production --apphost \"{appHostFile.FullName}\"")
Commands\StartCommandTests.cs (29)
154var result = command.Parse(["start", "--apphost", appHostFile.FullName, "--launch-profile", "E2E"]);
218File.WriteAllText(Path.Combine(propertiesDirectory.FullName, "launchSettings.json"), """
249"--apphost", appHostFile.FullName,
269await File.WriteAllTextAsync(Path.Combine(appHost1Dir.FullName, "AppHost1.csproj"), "fake");
272await File.WriteAllTextAsync(Path.Combine(appHost2Dir.FullName, "AppHost2.csproj"), "fake");
300await File.WriteAllTextAsync(Path.Combine(appHost1Dir.FullName, "AppHost1.csproj"), "fake");
303await File.WriteAllTextAsync(Path.Combine(appHost2Dir.FullName, "AppHost2.csproj"), "fake");
331var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
332await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
361var result = command.Parse($"start --apphost {appHostFile.FullName}");
384var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
385File.WriteAllText(appHostFile.FullName, "<Project />");
405"--project", appHostFile.FullName,
425Assert.Equal(workspace.WorkspaceRoot.FullName, workingDirectory);
426Assert.Equal(appHostFile.FullName, projectFile);
506var result = command.Parse($"start --apphost {appHostFile.FullName} --start-debug-session");
522workspace.WorkspaceRoot.FullName,
523Path.Combine(workspace.WorkspaceRoot.FullName, "common", ".git"));
531var result = provider.GetRequiredService<RootCommand>().Parse($"start --apphost {appHostFile.FullName}");
569var result = command.Parse($"start --apphost {appHostFile.FullName}");
605var result = command.Parse(string.Format(CultureInfo.InvariantCulture, commandTemplate, appHostFile.FullName));
618workspace.WorkspaceRoot.FullName,
619Path.Combine(workspace.WorkspaceRoot.FullName, "common", ".git"));
651Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".git"));
668var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.csproj"));
669File.WriteAllText(appHostFile.FullName, "<Project />");
676var backchannelsDirectory = Path.Combine(homeDirectory.FullName, ".aspire", "cli", "bch");
679var resolvedAppHostPath = PathNormalizer.ResolveSymlinks(appHostFile.FullName);
680var prefix = BackchannelConstants.ComputeSocketPrefix(resolvedAppHostPath, homeDirectory.FullName);
Commands\StopCommandTests.cs (91)
68var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App Host", fileName);
120var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj");
144"path" => Path.Combine(workspace.WorkspaceRoot.FullName, "Other", "AppHost.csproj"),
190var connection = CreateConnection(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.cs"), 1);
230var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj");
264var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.cs");
303var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.cs");
352var resolvedProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Resolved.AppHost", "Resolved.AppHost.csproj"));
369var result = command.Parse($"stop --apphost \"{appHostDirectory.FullName}\"");
390var appHostPath1 = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "AppHost.cs");
391var appHostPath2 = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "AppHost.cs");
425var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost", "App1.AppHost.csproj");
462var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost", "App1.AppHost.csproj");
490Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".git"));
491var worktreeRoot = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".worktrees", "feature")).FullName;
494Path.Combine(workspace.WorkspaceRoot.FullName, ".git"));
500var primaryAppHost = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj");
502Assert.True(AuxiliaryBackchannelMonitor.IsAppHostInScopeOfDirectory(primaryAppHost, workspace.WorkspaceRoot.FullName));
503Assert.False(AuxiliaryBackchannelMonitor.IsAppHostInScopeOfDirectory(nestedAppHost, workspace.WorkspaceRoot.FullName));
509isInScope: AuxiliaryBackchannelMonitor.IsAppHostInScopeOfDirectory(primaryAppHost, workspace.WorkspaceRoot.FullName));
514isInScope: AuxiliaryBackchannelMonitor.IsAppHostInScopeOfDirectory(nestedAppHost, workspace.WorkspaceRoot.FullName));
545var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
546await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
562var result = command.Parse($"stop --apphost \"{appHostFile.FullName}\"");
577var commonGitDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, ".git");
579var worktreeRoot = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".worktrees", "feature")).FullName;
628var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost", "App1.AppHost.csproj");
663var appHostPath1 = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
664var appHostPath2 = Path.Combine(workspace.WorkspaceRoot.FullName, "App2", "App2.AppHost.csproj");
741var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
742await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
760var result = command.Parse($"stop --force{volumesOption} --apphost \"{appHostFile.FullName}\"");
776var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
777await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
794var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
808var runningAppHostFile = new FileInfo(Path.Combine(runningAppHostDirectory.FullName, "Running.AppHost.csproj"));
809await File.WriteAllTextAsync(runningAppHostFile.FullName, "<Project />");
811var discoveredAppHostFile = new FileInfo(Path.Combine(discoveredAppHostDirectory.FullName, "Discovered.AppHost.csproj"));
812await File.WriteAllTextAsync(discoveredAppHostFile.FullName, "<Project />");
818var connection = CreateConnection(runningAppHostFile.FullName, int.MaxValue - 11);
819connection.SocketPath = CreateMatchingSocketFile(runningAppHostFile.FullName, workspace, 11);
860var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
861await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
878var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
892var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
893await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
927var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
928await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
933var outOfScopeAppHostFile = Path.Combine(workspace.WorkspaceRoot.FullName, "OtherWorkspace", "Other.AppHost.csproj");
967var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
968await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
988var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1007var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1008await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1031var result = command.Parse($"stop --force{volumesOption} --apphost \"{appHostFile.FullName}\"");
1048var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1049await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1071var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1088var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1089await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1110var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1127var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "apphost.ts"));
1128await File.WriteAllTextAsync(appHostFile.FullName, "");
1154var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1173var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1174await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1196var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1210var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1211await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1238var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1255var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1256await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1276var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1293var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1294await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1314var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1331var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1332await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1348var result = command.Parse($"stop --force --apphost \"{appHostFile.FullName}\"");
1399var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1400await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
1405var connection = CreateConnection(appHostFile.FullName, int.MaxValue - 10);
1406connection.SocketPath = CreateMatchingSocketFile(appHostFile.FullName, workspace, 10);
1486var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "App1", "App1.AppHost.csproj");
1524File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), "");
1529LayoutPath = layoutRoot.FullName,
1622var homeDirectory = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".home"));
1623var backchannelsDirectory = Path.Combine(homeDirectory.FullName, ".aspire", "cli", "bch");
1627var prefix = BackchannelConstants.ComputeSocketPrefix(resolvedAppHostPath, homeDirectory.FullName);
Commands\TemplateSourceStartupTests.cs (35)
49var globalPath = Path.Combine(home.FullName, legacyGlobal ? "globalsettings.json" : AspireConfigFile.FileName);
56RunStartup(home.FullName, workspace.Path, arguments);
62Assert.False(File.Exists(Path.Combine(home.FullName, AspireConfigFile.FileName)));
75var globalPath = Path.Combine(home.FullName, legacyGlobal ? "globalsettings.json" : AspireConfigFile.FileName);
82RunStartup(home.FullName, workspace.Path, arguments, exitCode);
88Assert.False(File.Exists(Path.Combine(home.FullName, AspireConfigFile.FileName)));
99var globalPath = Path.Combine(home.FullName, AspireConfigFile.FileName);
116RunStartup(home.FullName, workspace.Path, arguments, CliExitCodes.Success);
127var legacyPath = Path.Combine(home.FullName, "globalsettings.json");
128var migratedPath = Path.Combine(home.FullName, AspireConfigFile.FileName);
133RunStartup(home.FullName, workspace.Path,
138RunStartup(home.FullName, workspace.Path, "config info", CliExitCodes.Success);
139RunStartup(home.FullName, workspace.Path,
154var legacyPath = Path.Combine(home.FullName, "globalsettings.json");
162File.WriteAllText(Path.Combine(cache.FullName, "workspace-config-locks"), "Blocks lock directory creation.");
164RunStartup(home.FullName, workspace.Path, "template source list", CliExitCodes.InvalidCommand);
166Assert.False(File.Exists(Path.Combine(home.FullName, AspireConfigFile.FileName)));
178var legacyPath = Path.Combine(home.FullName, "globalsettings.json");
215}, home.FullName, arguments, options))
229var legacyPath = Path.Combine(home.FullName, "globalsettings.json");
265}, home.FullName, destinationPublished.ToString(CultureInfo.InvariantCulture), options))
282var legacyPath = Path.Combine(home.FullName, "globalsettings.json");
283var migratedPath = Path.Combine(home.FullName, AspireConfigFile.FileName);
288RunStartup(home.FullName, workspace.Path, $"config set {key} {value} --global", CliExitCodes.Success);
294RunStartup(home.FullName, workspace.Path, "new --help", CliExitCodes.Success);
304var legacyPath = Path.Combine(home.FullName, "globalsettings.json");
305var migratedPath = Path.Combine(home.FullName, AspireConfigFile.FileName);
311RunStartup(home.FullName, workspace.Path, "config delete features.defaultWatchEnabled --global", CliExitCodes.Success);
324File.WriteAllText(Path.Combine(legacyDirectory.FullName, "settings.json"),
327RunStartup(home.FullName, workspace.Path, "config set appHost.path apphost.cs", CliExitCodes.Success);
341var legacyPath = Path.Combine(home.FullName, "globalsettings.json");
342var migratedPath = Path.Combine(home.FullName, AspireConfigFile.FileName);
348RunStartup(home.FullName, workspace.Path, "--version", CliExitCodes.Success);
353RunStartup(home.FullName, workspace.Path, "config set channel stable --global", CliExitCodes.Success);
354RunStartup(home.FullName, workspace.Path, "config get channel", CliExitCodes.Success);
Commands\TerminalTapePlayCommandTests.cs (22)
57await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, path), contents);
100await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "probe.tape"), "");
118await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "probe.tape"), "");
163await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "probe.tape"), "");
242await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "probe.tape"),
289await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "probe.tape"), "");
342await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "wait.tape"),
371await File.WriteAllTextAsync(Path.Combine(directory.FullName, "probe.tape"), "# Inspect the current screen.");
392await File.WriteAllTextAsync(Path.Combine(directory.FullName, "play.tape"), """
397await File.WriteAllTextAsync(Path.Combine(directory.FullName, "nested", "input.tape"), """
423await File.WriteAllTextAsync(Path.Combine(directory.FullName, "play.tape"),
425await File.WriteAllTextAsync(Path.Combine(directory.FullName, "nested", "wait.tape"),
431Assert.Collection(Directory.EnumerateFiles(directory.FullName, "*.txt", SearchOption.AllDirectories),
432path => Assert.Equal(Path.Combine(directory.FullName, "screen.txt"), path));
433var capture = await File.ReadAllTextAsync(Path.Combine(directory.FullName, "screen.txt"));
434await Verify(capture.Replace(workspace.WorkspaceRoot.FullName, "{workspace}"), "txt");
448var file = Path.Combine(workspace.WorkspaceRoot.FullName, "play.tape");
474await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "wait.tape"),
492await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "wait.tape"),
511await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "wait.tape"),
530await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "wait.tape"),
549await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "probe.tape"), "");
Commands\TrayCommandTests.cs (7)
65var packageBin = Path.Combine(workspace.WorkspaceRoot.FullName, store, "aspire", "1.0.0", "bin");
98var installed = Path.Combine(workspace.WorkspaceRoot.FullName, "stable & installed aspire");
158Assert.Equal(root, factory.LastWorkingDirectory!.FullName);
247"dotnet" => Path.Combine(workspace.WorkspaceRoot.FullName, "dotnet"),
248"missing" => Path.Combine(workspace.WorkspaceRoot.FullName, "missing-aspire"),
536var root = Path.Combine(workspace.WorkspaceRoot.FullName, "bundle versions", "version-1");
541var binaryDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "installed aspire", "bin");
Commands\UpdateCommandRepositoryToolsTests.cs (27)
31var appHost = new FileInfo(Path.Combine(directory.FullName, "AppHost.csproj"));
34await File.WriteAllTextAsync(appHost.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />");
116var appHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
117await File.WriteAllTextAsync(appHost.FullName, "// test apphost");
230var appHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
231await File.WriteAllTextAsync(appHost.FullName, "// test apphost");
292var selectedDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "selected"));
294var appHost = Path.Combine(selectedDirectory.FullName, "AppHost.csproj");
356var appHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
359await File.WriteAllTextAsync(appHost.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />");
406var appHost = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
407await File.WriteAllTextAsync(appHost.FullName, $"""
414var packagesPath = Path.Combine(directory.FullName, "Directory.Packages.props");
426var configPath = Path.Combine(directory.FullName, "aspire.config.json");
434var nugetPath = Path.Combine(directory.FullName, "NuGet.config");
449var lockPath = Path.Combine(directory.FullName, "package-lock.json");
452foreach (var path in new[] { dotnetManifest, npmManifest, appHost.FullName, packagesPath, configPath, nugetPath, lockPath })
520Assert.Equal(appHost.FullName, file.FullName);
552Assert.Equal([targetSource], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.AppHost.Sdk"));
553Assert.Equal([targetSource], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting.Redis"));
554Assert.Equal(["https://example.invalid/existing/v3/index.json"], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Unrelated.Package"));
574Assert.Equal("Aspire.AppHost.Sdk/" + targetVersion, XDocument.Load(appHost.FullName).Root!.Attribute("Sdk")!.Value);
613Directory.CreateDirectory(Path.Combine(directory.FullName, ".git"));
614var config = Directory.CreateDirectory(Path.Combine(directory.FullName, ".config"));
615var dotnetManifest = Path.Combine(config.FullName, "dotnet-tools.json");
625var npmManifest = Path.Combine(directory.FullName, "package.json");
Commands\UpdateCommandTests.cs (102)
89var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
90await File.WriteAllTextAsync(appHostProjectFile.FullName, """
125var result = command.Parse($"update --apphost {appHostProjectFile.FullName}");
132PathNormalizer.ResolveToFilesystemPath(appHostProjectFile.FullName),
133PathNormalizer.ResolveToFilesystemPath(updatedProjectFile.FullName));
190var targetExePath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.exe");
191var oldBackup1 = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.exe.old.1234567890");
192var oldBackup2 = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.exe.old.9876543210");
193var otherFile = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.exe.something");
201FileDeleteHelper.TryCleanupOldItems(workspace.WorkspaceRoot.FullName, "aspire.exe");
214var oldBackup = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.exe.old.1234567890");
221FileDeleteHelper.TryCleanupOldItems(workspace.WorkspaceRoot.FullName, "aspire.exe");
249FileDeleteHelper.TryCleanupOldItems(workspace.WorkspaceRoot.FullName, "aspire.exe");
311return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
380await File.WriteAllTextAsync(appHost.FullName, "// test apphost");
386var message = string.Format(UpdateCommandStrings.FailedToRegenerateSdkAfterUpdateFormat, appHost.FullName);
432var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts");
495var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts");
550var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts");
620return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
683var toolPath = Path.Combine(installDir.FullName, "custom tool path");
699return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
776return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
849return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
892return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
933return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
1017return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
1070Assert.Equal(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"), pendingMigration.DetectedContext.AppHostFile.FullName);
1098Assert.Equal(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"), pendingMigration.DetectedContext.AppHostFile.FullName);
1100Assert.Equal(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"), pendingMigration.AppliedContext.AppHostFile.FullName);
1175return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
1277var processPath = CreateNixInstall(installDir.FullName);
1314var processPath = CreateNixInstall(installDir.FullName);
1315var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts");
1358UseOrFindAppHostProjectFileAsyncCallback = (_, _, _) => Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")))
1440var toolPath = Path.Combine(installDir.FullName, "custom tool path");
1523var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
1549var processPath = Path.Combine(installDirectory.FullName, "aspire");
1553var sidecarPath = Path.Combine(installDirectory.FullName, InstallSidecarReader.SidecarFileName);
1591var processPath = Path.Combine(installDirectory.FullName, "aspire");
1596var sidecarPath = Path.Combine(installDirectory.FullName, InstallSidecarReader.SidecarFileName);
1648var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
1689var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
1723return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
1788return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
1852return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
1910return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
1987return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
2036return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
2092var localConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2111var globalDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
2131var localConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2149var globalDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
2153var localConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2173var globalDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
2194var localConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2203return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
2260Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")))
2313var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "elsewhere"));
2314var projectConfigPath = Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName);
2319updateArgs: $"update --apphost {Path.Combine(projectDirectory.FullName, "AppHost.csproj")}",
2333Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
2336var globalDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
2340var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "elsewhere"));
2344updateArgs: $"update --apphost {Path.Combine(projectDirectory.FullName, "AppHost.csproj")}",
2361Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
2364var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "elsewhere"));
2366Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName),
2371updateArgs: $"update --apphost {Path.Combine(projectDirectory.FullName, "AppHost.csproj")}",
2387Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
2390var globalDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
2394var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "elsewhere"));
2396Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName),
2401updateArgs: $"update --apphost {Path.Combine(projectDirectory.FullName, "AppHost.csproj")}",
2444Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
2481return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
2572var resolved = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2657return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
2699var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "elsewhere"));
2700var appHostFile = new FileInfo(Path.Combine(projectDirectory.FullName, "AppHost.csproj"));
2701File.WriteAllText(appHostFile.FullName, string.Empty);
2703Path.Combine(projectDirectory.FullName, AspireConfigFile.FileName),
2739var result = command.Parse($"update --apphost \"{appHostFile.FullName}\"");
2847Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
2913$"update --apphost {Path.Combine(projectDirectory.FullName, "AppHost.csproj")} --channel {selectedChannel}",
2942workspace, $"update --apphost {Path.Combine(projectDirectory.FullName, fileName)}", projectDirectory, identityChannel,
3007return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(projectDirectory.FullName, appHostFileName)));
3052var hivesDirectory = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives"));
3146var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
3191var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
3236var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
3269var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
3302return Task.FromResult<FileInfo?>(new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")));
3456var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
3478var executablePath = Path.Combine(contentDirectory.FullName, "aspire");
3496var tarPath = Path.Combine(archiveDirectory.FullName, "aspire.tar");
3497TarFile.CreateFromDirectory(contentDirectory.FullName, tarPath, includeBaseDirectory: false);
3499var archivePath = Path.Combine(archiveDirectory.FullName, "aspire.tar.gz");
3622var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "test-cli.tar.gz");
Commands\VsCodeExtensionCheckTests.cs (15)
37["VSCODE_EXTENSIONS"] = extensions.FullName
63Directory.CreateDirectory(Path.Combine(extensions.FullName, "microsoft-aspire.aspire-vscode-1.2.3"));
67["VSCODE_EXTENSIONS"] = extensions.FullName
91Directory.CreateDirectory(Path.Combine(extensions.FullName, "microsoft-aspire.aspire-vscode-1.2.3"));
96["VSCODE_EXTENSIONS"] = extensions.FullName
116Directory.CreateDirectory(Path.Combine(home.FullName, rootFolder, "extensions", "microsoft-aspire.aspire-vscode-1.2.3"));
137Directory.CreateDirectory(Path.Combine(home.FullName, ".vscode", "extensions", "microsoft-aspire.aspire-vscode-1.2.3"));
142["VSCODE_EXTENSIONS"] = overrideDirectory.FullName
188Directory.CreateDirectory(Path.Combine(extensions.FullName, "Microsoft-Aspire.Aspire-VSCode-9.9.9"));
193["VSCODE_EXTENSIONS"] = extensions.FullName
207Directory.CreateDirectory(Path.Combine(extensions.FullName, "ms-dotnettools.csharp-2.0.0"));
212["VSCODE_EXTENSIONS"] = extensions.FullName
229Directory.CreateDirectory(Path.Combine(extensions.FullName, "microsoft-aspire.aspire-vscode-extras-1.0.0"));
234["VSCODE_EXTENSIONS"] = extensions.FullName
250var missingExtensionsDirectory = Path.Combine(home.FullName, "does-not-exist");
Configuration\AspireConfigFileTests.cs (61)
17var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
27var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
35var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
79var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
91var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
128var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
140var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
152var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
163var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
175var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
183var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
194var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
197var ex = Assert.Throws<JsonException>(() => AspireConfigFile.Load(workspace.WorkspaceRoot.FullName));
208var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
211var ex = Assert.Throws<JsonException>(() => AspireConfigFile.Load(workspace.WorkspaceRoot.FullName));
221var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
224var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
242config.Save(workspace.WorkspaceRoot.FullName);
244var filePath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
257var subDir = Path.Combine(workspace.WorkspaceRoot.FullName, "nested", "dir");
276config.Save(workspace.WorkspaceRoot.FullName);
278LineEndingAssert.FileUsesOsLineBreaksAndSingleFinalNewline(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName));
286Assert.False(AspireConfigFile.Exists(workspace.WorkspaceRoot.FullName));
294File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), "{}");
296Assert.True(AspireConfigFile.Exists(workspace.WorkspaceRoot.FullName));
437var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
450var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
458var projectRef = config.GetIntegrationReferences("13.2.0", workspace.WorkspaceRoot.FullName)
462Path.GetFullPath(Path.Combine(workspace.WorkspaceRoot.FullName, "DeadlockExtension/DeadlockExtension.csproj")),
471var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
481var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
504var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
513var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
517config.GetIntegrationReferences("13.2.0", workspace.WorkspaceRoot.FullName),
522config.Save(workspace.WorkspaceRoot.FullName);
523var reloaded = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
550var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
559var ex = Assert.Throws<JsonException>(() => AspireConfigFile.Load(workspace.WorkspaceRoot.FullName));
570var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
583var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
598var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
605var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
619var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
626var result = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
648config.Save(workspace.WorkspaceRoot.FullName);
649var loaded = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
677config.Save(workspace.WorkspaceRoot.FullName);
678var loaded = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
691var root = workspace.WorkspaceRoot.FullName;
713var root = workspace.WorkspaceRoot.FullName;
733var root = workspace.WorkspaceRoot.FullName;
755var root = workspace.WorkspaceRoot.FullName;
781var root = workspace.WorkspaceRoot.FullName;
801var root = workspace.WorkspaceRoot.FullName;
823var root = workspace.WorkspaceRoot.FullName;
843var root = workspace.WorkspaceRoot.FullName;
863var root = workspace.WorkspaceRoot.FullName;
882var root = workspace.WorkspaceRoot.FullName;
902var root = workspace.WorkspaceRoot.FullName;
922var root = workspace.WorkspaceRoot.FullName;
942var root = workspace.WorkspaceRoot.FullName;
Configuration\ConfigSourceServiceGitTests.cs (23)
387source, cache.FullName, TestContext.Current.CancellationToken);
397Assert.False(File.Exists(Path.Combine(cache.FullName, path)));
407await RunGitOutputAsync(workspace.Path, ["clone", "--", workspace.Path, repository.FullName]);
408var source = new ConfigSource { Repository = repository.FullName, Path = path };
415var config = AspireConfigFile.Load(project.FullName)!;
417Assert.Equal(repository.FullName, config.ConfigSource!.Repository);
419Assert.Equal((await RunGitOutputAsync(repository.FullName, ["rev-parse", $"HEAD:{path}"])).Trim(),
443var config = AspireConfigFile.Load(project.FullName)!;
469workspace.CreateDirectory("cache").FullName, TestContext.Current.CancellationToken);
499new() { Repository = workspace.Path, Path = AspireConfigFile.FileName }, workspace.CreateDirectory("cache").FullName, TestContext.Current.CancellationToken));
509new() { Repository = workspace.Path, Path = AspireConfigFile.FileName }, workspace.CreateDirectory("cache").FullName, TestContext.Current.CancellationToken));
527var (_, _, configuration) = await client.AcquireAsync(source, cache.FullName, TestContext.Current.CancellationToken);
533client.AcquireAsync(source, cache.FullName, TestContext.Current.CancellationToken));
555workspace.CreateDirectory("cache").FullName, TestContext.Current.CancellationToken);
573workspace.CreateDirectory("cache").FullName, TestContext.Current.CancellationToken);
591var original = await client.CheckAsync(source, workspace.CreateDirectory("first-check").FullName, TestContext.Current.CancellationToken);
596var unchanged = await client.CheckAsync(source, workspace.CreateDirectory("unchanged-check").FullName, TestContext.Current.CancellationToken);
603var changed = await client.CheckAsync(source, directory.FullName, TestContext.Current.CancellationToken);
605workspace.CreateDirectory("pinned-check").FullName, TestContext.Current.CancellationToken);
631workspace.CreateDirectory("cache").FullName, TestContext.Current.CancellationToken));
651new() { Repository = workspace.Path, Path = AspireConfigFile.FileName }, workspace.CreateDirectory("cache").FullName, TestContext.Current.CancellationToken));
696var checkedVersion = await client.CheckAsync(source, workspace.CreateDirectory("first-check").FullName, token);
710var updatedCheck = await client.CheckAsync(source, workspace.CreateDirectory("updated-check").FullName, token);
Configuration\ConfigSourceServiceTests.cs (27)
36var globalFile = new FileInfo(Path.Combine(global.FullName, "custom-global.json"));
37File.Move(Path.Combine(global.FullName, AspireConfigFile.FileName), globalFile.FullName);
38var originalGlobal = await File.ReadAllTextAsync(globalFile.FullName);
39var localPath = Path.Combine(project.FullName, AspireConfigFile.FileName);
73var actualGlobal = await File.ReadAllTextAsync(globalFile.FullName);
82Assert.False(File.Exists(Path.Combine(global.FullName, AspireConfigFile.FileName)));
136var globalFile = new FileInfo(Path.Combine(global.FullName, AspireConfigFile.FileName));
150var siblingPath = Path.Combine(sibling.FullName, AspireConfigFile.FileName);
155var path = Path.Combine(directory.FullName, AspireConfigFile.FileName);
218var path = Path.Combine(directory.FullName, AspireConfigFile.FileName);
236Assert.False(File.Exists(Path.Combine(gap.FullName, AspireConfigFile.FileName)));
251var globalFile = new FileInfo(Path.Combine(global.FullName, AspireConfigFile.FileName));
261var originalGlobal = await File.ReadAllTextAsync(globalFile.FullName);
262var parentPath = Path.Combine(parent.FullName, AspireConfigFile.FileName);
315Assert.Equal(force ? "version-2" : "version-1", AspireConfigFile.Load(project.FullName)!.ConfigSource!.AppliedVersion);
316Assert.Equal(originalGlobal, await File.ReadAllTextAsync(globalFile.FullName));
330var globalFile = new FileInfo(Path.Combine(global.FullName, AspireConfigFile.FileName));
499Assert.False(File.Exists(Path.Combine(other.FullName, AspireConfigFile.FileName)));
605new ConfigSource { Repository = repository.FullName, Path = s_source.Path }.Validate();
810var path = Path.Combine(project.FullName, AspireConfigFile.FileName);
824Assert.Equivalent(s_appliedSource, AspireConfigFile.Load(project.FullName)!.ConfigSource, strict: true);
1413var modernPath = Path.Combine(project.FullName, AspireConfigFile.FileName);
1473await File.WriteAllTextAsync(Path.Combine(stale.FullName, "stale.txt"), "obsolete snapshot");
1474File.SetAttributes(Path.Combine(stale.FullName, "stale.txt"), FileAttributes.ReadOnly);
1517Assert.Equal("version-1", AspireConfigFile.Load(other.FullName)!.ConfigSource!.AppliedVersion);
1582Assert.StartsWith(Path.Combine(home.FullName, "configsources"), service.GetCacheDirectory(s_source), StringComparison.Ordinal);
Configuration\ConfigurationHelperTests.cs (40)
98var targetPath = Path.Combine(shared.FullName, AspireConfigFile.FileName);
100var targetDirectory = shared.FullName;
104TestSymlinkHelper.TryCreateSymlink(targetDirectory, shared.FullName);
106var path = Path.Combine(project.FullName, AspireConfigFile.FileName);
110linkTarget = Path.GetRelativePath(project.FullName, linkTarget);
119Assert.Equal(path, Assert.Single(Directory.GetFiles(project.FullName)));
120Assert.Equal(targetPath, Assert.Single(Directory.GetFiles(shared.FullName)));
123Assert.Equal(shared.FullName, new DirectoryInfo(targetDirectory).LinkTarget);
198await File.WriteAllTextAsync(file.FullName, "{}");
206await ConfigurationHelper.WriteSettingsFileAtomicallyAsync(file.FullName, new JsonObject { ["custom"] = "updated" }, CancellationToken.None);
209Assert.Equal("updated", JsonNode.Parse(await File.ReadAllTextAsync(file.FullName))!["custom"]!.GetValue<string>());
210Assert.Equal(file.FullName, Assert.Single(Directory.GetFiles(workspace.Path)));
216var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
220var globalSettingsFile = new FileInfo(Path.Combine(globalDir.FullName, AspireConfigFile.FileName));
320var globalSettingsFile = new FileInfo(Path.Combine(globalDirectory.FullName, AspireConfigFile.FileName));
321File.WriteAllText(globalSettingsFile.FullName, """
329"global" => globalSettingsFile.FullName,
403var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
423var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
490var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nested", AspireConfigFile.FileName);
508var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nested", AspireConfigFile.FileName);
528var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
550var settingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
833Directory.CreateDirectory(Path.Combine(configRoot.FullName, "nested", "apphost"));
834File.WriteAllText(Path.Combine(configRoot.FullName, AspireConfigFile.FileName), "{}");
837new DirectoryInfo(Path.Combine(configRoot.FullName, "nested", "apphost")));
839Assert.Equal(configRoot.FullName, resolvedRoot.FullName);
847var appHostDirectory = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "nested", "apphost"));
853Path.Combine(workspace.WorkspaceRoot.FullName, AspireJsonConfiguration.SettingsFolder),
854aspireDirectory.FullName);
874var legacySettingsPath = Path.Combine(legacyDir.FullName, AspireJsonConfiguration.FileName);
882var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
886var globalSettingsFile = new FileInfo(Path.Combine(globalDir.FullName, AspireConfigFile.FileName));
912var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
922var legacySettingsPath = Path.Combine(legacyDir.FullName, AspireJsonConfiguration.FileName);
928var globalSettingsFile = new FileInfo(Path.Combine(globalDir.FullName, AspireConfigFile.FileName));
946var legacySettingsPath = Path.Combine(legacyDir.FullName, AspireJsonConfiguration.FileName);
950var globalSettingsFile = new FileInfo(Path.Combine(globalDir.FullName, AspireConfigFile.FileName));
959var migratedPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
Configuration\ConfigurationServiceTests.cs (8)
24var globalSettingsFile = new FileInfo(Path.Combine(globalSettingsDir.FullName, AspireConfigFile.FileName));
26var settingsFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
145await File.WriteAllTextAsync(Path.Combine(cache.FullName, "workspace-config-locks"), "Blocks lock directory creation.");
275var legacySettingsPath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.json");
410Path.Combine(srcDirectory.FullName, AspireConfigFile.FileName),
439Path.Combine(srcDirectory.FullName, AspireConfigFile.FileName),
529var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
552var config = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
DotNet\DotNetAppHostNuGetConfigMergerSnapshotTests.cs (18)
32var path = Path.Combine(dir.FullName, "nuget.config");
71var updated = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
78var hivePath = Path.Combine(hivesDir.FullName, channelName).Replace('\\', '/');
134var original = await File.ReadAllBytesAsync(Path.Combine(root.FullName, "nuget.config"));
137Assert.Equal(original, await File.ReadAllBytesAsync(Path.Combine(root.FullName, "nuget.config")));
144var updated = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
152var hivePath = Path.Combine(hivesDir.FullName, channelName).Replace('\\', '/');
204var original = await File.ReadAllBytesAsync(Path.Combine(root.FullName, "nuget.config"));
208Assert.Equal(original, await File.ReadAllBytesAsync(Path.Combine(root.FullName, "nuget.config")));
211var updated = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
218var hivePath = Path.Combine(hivesDir.FullName, channelName).Replace('\\', '/');
268var configPath = Path.Combine(root.FullName, "nuget.config");
276var updated = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
283var hivePath = Path.Combine(hivesDir.FullName, channelName).Replace('\\', '/');
341var original = await File.ReadAllBytesAsync(Path.Combine(root.FullName, "nuget.config"));
344Assert.Equal(original, await File.ReadAllBytesAsync(Path.Combine(root.FullName, "nuget.config")));
351var updated = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
359var hivePath = Path.Combine(hivesDir.FullName, channelName).Replace('\\', '/');
DotNet\DotNetAppHostNuGetConfigMergerTests.cs (125)
28var path = Path.Combine(dir.FullName, "nuget.config");
48var original = await File.ReadAllBytesAsync(parent.FullName);
58Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Other.Dependency"));
59Assert.Empty(XDocument.Load(candidate.TargetFile.FullName).Descendants("packageSource"));
69Assert.Equal(original, await File.ReadAllBytesAsync(parent.FullName));
101var original = await File.ReadAllBytesAsync(existingFile.FullName);
111Path.Combine(target.FullName, "nuget.config"), sourceKey), error.Message);
112Assert.Equal(original, await File.ReadAllBytesAsync(existingFile.FullName));
141Assert.Single(XDocument.Load(target.FullName).Root!.Element("packageSources")!.Elements("add"));
142Assert.Single(XDocument.Load(target.FullName).Root!.Element("packageSourceMapping")!.Elements("clear"));
163var originalParent = await File.ReadAllBytesAsync(parent.FullName);
178var original = await File.ReadAllBytesAsync(target.FullName);
179var originalDisabled = XDocument.Load(target.FullName).Root!.Element("disabledPackageSources")!.ToString();
192UpdateCommandStrings.ChannelFeedAlreadyConfiguredFormat, target.FullName, "aspire-test"), error.Message);
208Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
209Assert.Equal(originalParent, await File.ReadAllBytesAsync(parent.FullName));
229var originalParent = await File.ReadAllBytesAsync(parent.FullName);
243var original = await File.ReadAllBytesAsync(target.FullName);
248Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Private.Library"));
252Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
253Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Private.Library"));
264Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting"));
265Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Local.Library"));
268Assert.Equal(originalParent, await File.ReadAllBytesAsync(parent.FullName));
286var targetConfigPath = Path.Combine(root.FullName, "nuget.config");
307var targetConfigPath = Path.Combine(root.FullName, "nuget.config");
350var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
389var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
394NuGetTestHelper.GetEligiblePackageSources(root.FullName, "Lib.Example"));
429var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
430var sources = NuGetTestHelper.CreateClient().GetSettings(root.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]).Sources;
434Assert.Equal([stableSource], NuGetTestHelper.GetEligiblePackageSources(root.FullName, "Aspire.Hosting"));
435Assert.Equal([stableSource], NuGetTestHelper.GetEligiblePackageSources(root.FullName, "Example.Dependency"));
457var target = Path.Combine(root.FullName, "nuget.config");
473NuGetTestHelper.GetEligiblePackageSources(root.FullName, "Other.Dependency"));
495var parentBytes = await File.ReadAllBytesAsync(parent.FullName);
506var document = XDocument.Load(target.FullName);
514NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting.Redis"));
516NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Other.Dependency"));
517Assert.Equal(parentBytes, await File.ReadAllBytesAsync(parent.FullName));
623var configPath = Path.Combine(root.FullName, "nuget.config");
627var document = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
663var generated = await File.ReadAllBytesAsync(Path.Combine(output.FullName, "nuget.config"));
664await File.WriteAllBytesAsync(Path.Combine(destination.FullName, "nuget.config"), generated);
666Assert.Equal([channelSource], NuGetTestHelper.GetEligiblePackageSources(destination.FullName, "Aspire.Hosting"));
667Assert.Equal([PackageSources.NuGetOrg], NuGetTestHelper.GetEligiblePackageSources(destination.FullName, "Microsoft.Extensions.Options"));
668Assert.Equal(generatorConfig, await File.ReadAllTextAsync(generatorParent.FullName));
669Assert.Equal(consumerConfig, await File.ReadAllTextAsync(consumerParent.FullName));
670await Verify(XDocument.Load(Path.Combine(output.FullName, "nuget.config")).ToString(), "xml");
703var configPath = Path.Combine(root.FullName, "nuget.config");
740var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
781var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
794NuGetTestHelper.GetEligiblePackageSources(root.FullName, "Other.Dependency"));
833var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
899var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
956var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
967var sources = NuGetTestHelper.CreateClient().GetSettings(root.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]).Sources;
1008var oldHive = workspace.CreateDirectory(".aspire/hives/pr-17182/packages").FullName;
1009var newHive = workspace.CreateDirectory(".aspire/hives/pr-17192/packages").FullName;
1039var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
1089var xml = XDocument.Load(Path.Combine(root.FullName, "nuget.config"));
1130var targetConfigPath = Path.Combine(root.FullName, "nuget.config");
1132Assert.Equal(targetConfigPath, callbackTargetFile.FullName);
1160var targetConfigPath = Path.Combine(root.FullName, "nuget.config");
1210var targetConfigPath = Path.Combine(root.FullName, "nuget.config");
1212Assert.Equal(targetConfigPath, callbackTargetFile.FullName);
1232var originalContent = await File.ReadAllTextAsync(Path.Combine(root.FullName, "nuget.config")).DefaultTimeout();
1253var targetConfigPath = Path.Combine(root.FullName, "nuget.config");
1275var targetConfigPath = Path.Combine(root.FullName, "nuget.config");
1303Assert.Equal(target.FullName, update.TargetFile.FullName);
1304Assert.Equal(original, await File.ReadAllTextAsync(target.FullName));
1313var directory = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "new-config"));
1321Assert.False(Directory.Exists(directory.FullName));
1323Assert.Equal(XDocument.Parse(update.GetProposedDocument().OuterXml).ToString(), XDocument.Load(update.TargetFile.FullName).ToString());
1330var directory = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "new-config"));
1337Assert.False(Directory.Exists(directory.FullName));
1360var original = await File.ReadAllBytesAsync(target.FullName);
1367Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
1428var originalParent = await File.ReadAllBytesAsync(parent.FullName);
1447var document = XDocument.Load(target.FullName);
1468NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting.Redis"));
1470Assert.Equal(originalParent, await File.ReadAllBytesAsync(parent.FullName));
1496var parentBytes = await File.ReadAllBytesAsync(parent.FullName);
1508var originalDisabled = XDocument.Load(target.FullName).Root!.Element("disabledPackageSources")!.ToString();
1512var original = await File.ReadAllBytesAsync(target.FullName);
1528Assert.Equal(parentBytes, await File.ReadAllBytesAsync(parent.FullName));
1529Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
1551var originalParent = await File.ReadAllBytesAsync(parent.FullName);
1552var original = await File.ReadAllBytesAsync(target.FullName);
1559Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
1560Assert.Equal(originalParent, await File.ReadAllBytesAsync(parent.FullName));
1578var originalParent = await File.ReadAllBytesAsync(parent.FullName);
1589Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting.Redis"));
1591directory.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]).DisabledPackageSourceKeys);
1592Assert.Equal(originalParent, await File.ReadAllBytesAsync(parent.FullName));
1616var original = await File.ReadAllBytesAsync(target.FullName);
1637Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
1668var original = await File.ReadAllBytesAsync(target.FullName);
1675Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
1699var originalParent = await File.ReadAllBytesAsync(parent.FullName);
1723var originalDisabled = XDocument.Load(target.FullName).Root!.Element("disabledPackageSources")?.ToString();
1732var proposed = XDocument.Load(target.FullName);
1735directory.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]);
1737Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting.Redis"));
1738Assert.Equal(originalParent, await File.ReadAllBytesAsync(parent.FullName));
1762var parentBytes = await File.ReadAllBytesAsync(parent.FullName);
1789appHostDirectory.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]);
1794NuGetTestHelper.GetEligiblePackageSources(appHostDirectory.FullName, "Aspire.Hosting.Redis"));
1795Assert.Equal(parentBytes, await File.ReadAllBytesAsync(parent.FullName));
1796await Verify(XDocument.Load(target.FullName).ToString(), "xml")
1820NuGetTestHelper.GetEligiblePackageSources(projection.EffectiveWorkingDirectory.FullName, "Aspire.Hosting.Redis"));
1831await Verify(XDocument.Load(target.FullName).ToString(), "xml");
1852var original = await File.ReadAllBytesAsync(parentFile.FullName);
1860appHostDirectory.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]);
1862Assert.Empty(NuGetTestHelper.GetEligiblePackageSources(appHostDirectory.FullName, "Aspire.Hosting.Redis"));
1864Assert.Equal(original, await File.ReadAllBytesAsync(parentFile.FullName));
1893var original = await File.ReadAllBytesAsync(target.FullName);
1905Assert.Equal(original, await File.ReadAllBytesAsync(target.FullName));
1918await File.WriteAllTextAsync(target.FullName, changedContent);
1923Assert.Contains(target.FullName, exception.Message);
1924Assert.Equal(changedContent, await File.ReadAllTextAsync(target.FullName));
1936await File.WriteAllTextAsync(update.TargetFile.FullName, createdContent);
1941Assert.Equal(createdContent, await File.ReadAllTextAsync(update.TargetFile.FullName));
1973XDocument.Load(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")).ToString());
DotNet\DotNetAppHostUpdateTransactionTests.cs (21)
18var file = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"));
22await File.WriteAllBytesAsync(file.FullName, original);
28[PathNormalizer.ResolveToFilesystemPath(file.FullName)] = original
35await File.WriteAllTextAsync(file.FullName, "<configuration><external /></configuration>");
41Assert.Equal("<configuration><external /></configuration>", await File.ReadAllTextAsync(file.FullName));
50var file = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"));
52await File.WriteAllBytesAsync(file.FullName, original);
56[PathNormalizer.ResolveToFilesystemPath(file.FullName)] = original
62await File.WriteAllBytesAsync(file.FullName, succeeds ? proposed : proposed[..10]);
80Assert.Equal(original, await File.ReadAllBytesAsync(file.FullName));
87var file = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
89await File.WriteAllBytesAsync(file.FullName, original);
92[PathNormalizer.ResolveToFilesystemPath(file.FullName)] = original
95() => File.WriteAllTextAsync(file.FullName, "#:sdk Aspire.AppHost.Sdk@9.4.2"),
97await File.WriteAllTextAsync(file.FullName, "// External edit.");
102Assert.Equal("// External edit.", await File.ReadAllTextAsync(file.FullName));
110var file = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
112await File.WriteAllBytesAsync(file.FullName, original);
115[PathNormalizer.ResolveToFilesystemPath(file.FullName)] = original
117await File.WriteAllTextAsync(file.FullName, "// External edit.");
127Assert.Equal("// External edit.", await File.ReadAllTextAsync(file.FullName));
DotNet\DotNetCliRunnerTests.cs (238)
71var validationTargets = Path.Combine(root.FullName, "LegacySdk.targets");
81var projectFile = new FileInfo(Path.Combine(root.FullName, fileBased ? "apphost.cs" : "AppHost.csproj"));
83await File.WriteAllTextAsync(projectFile.FullName, fileBased
114Assert.Equal(fileBased ? projectFile.FullName + ".csproj" : projectFile.FullName, settings.ProjectIdentity);
141var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, fileBased ? "apphost.cs" : "AppHost.csproj"));
145await File.WriteAllTextAsync(projectFile.FullName, fileBased
147#:property _WorkloadLibraryPacksFolder={{MSBuildEscaping.Escape(libraryPacks.FullName)}}
161<_WorkloadLibraryPacksFolder>{{MSBuildEscaping.Escape(libraryPacks.FullName)}}</_WorkloadLibraryPacksFolder>
187Assert.Equal($"{sources};{libraryPacks.FullName}",
207Assert.Equal($"{sources};{libraryPacks.FullName}",
242var configFile = new FileInfo(Path.Combine(root.FullName, "NuGet.Config"));
243await File.WriteAllTextAsync(configFile.FullName, $$"""
245<packageSources><clear /><add key="old" value="{{oldFeed.FullName}}" /></packageSources>
247<config><add key="globalPackagesFolder" value="{{rootCache.FullName}}" /></config>
250var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
254var childDirectory = Directory.CreateDirectory(Path.Combine(root.FullName, "child"));
255var childFile = new FileInfo(Path.Combine(childDirectory.FullName, "Child.csproj"));
256var childTargets = customChildTargets ? Path.Combine(childDirectory.FullName, "Custom;NuGet.targets") : string.Empty;
268await File.WriteAllTextAsync(childFile.FullName, $$"""
270<PropertyGroup><TargetFramework>net{{Environment.Version.Major}}.0</TargetFramework><RestorePackagesPath>{{childCache.FullName}}</RestorePackagesPath><DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences><NuGetRestoreTargets>{{MSBuildEscaping.Escape(childTargets)}}</NuGetRestoreTargets></PropertyGroup>
276await File.WriteAllTextAsync(Path.Combine(childDirectory.FullName, "NuGet.Config"), $$"""
278<packageSources><clear /><add key="child" value="{{childFeed.FullName}}" /></packageSources>
283var projectFile = new FileInfo(Path.Combine(root.FullName, fileBased ? "apphost.cs" : "Root.csproj"));
284await File.WriteAllTextAsync(projectFile.FullName, fileBased
288#:property RestorePackagesPath={{MSBuildEscaping.Escape(rootCache.FullName)}}
298<PropertyGroup><TargetFramework>net{{Environment.Version.Major}}.0</TargetFramework><RestorePackagesPath>{{MSBuildEscaping.Escape(rootCache.FullName)}}</RestorePackagesPath><DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences></PropertyGroup>
309"daily", PackageChannelQuality.Both, [new("Aspire*", newFeed.FullName)],
317fileBased ? projectFile.FullName + ".csproj" : projectFile.FullName,
326["msbuild", childFile.FullName, "-getProperty:NuGetRestoreTargets", "-property:ExcludeRestorePackageImports=true"]);
335fileBased ? new Dictionary<string, string>() : new Dictionary<string, string> { [childFile.FullName] = childRestoreTargets },
350["restore", projectFile.FullName, $"-property:NuGetRestoreTargets={MSBuildEscaping.Escape(preview.TargetsFile.FullName)}"]);
352Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
355using var graph = JsonDocument.Parse(await File.ReadAllTextAsync(Path.Combine(root.FullName, "obj", "Root.csproj.nuget.dgspec.json")));
357Assert.Equal([newFeed.FullName, oldFeed.FullName], projects.GetProperty(projectFile.FullName).GetProperty("restore").GetProperty("sources")
360Path.Combine(childDirectory.FullName, "obj", "Child.csproj.nuget.dgspec.json")));
362string[] expectedChildSources = childOwnPolicy ? [childFeed.FullName] : [newFeed.FullName, oldFeed.FullName];
365Assert.Equal(childCache.FullName, childProject.GetProperty("restore").GetProperty("packagesPath").GetString()?.TrimEnd(Path.DirectorySeparatorChar));
369await File.ReadAllTextAsync(Path.Combine(childDirectory.FullName, "custom-targets-ran")));
376File.Delete(Path.Combine(childDirectory.FullName, "custom-targets-ran"));
378var (nativeExitCode, nativeOutput, nativeError) = await RunNativeDotNetAsync(root, sdkCache, ["restore", projectFile.FullName]);
383await File.ReadAllTextAsync(Path.Combine(childDirectory.FullName, "custom-targets-ran")));
411<packageSources><clear /><add key="company" value="{{ambientFeed.FullName}}" /></packageSources>
415await File.WriteAllTextAsync(project.FullName, $$"""
429"daily", PackageChannelQuality.Both, [new("Aspire*", selectedFeed.FullName)],
438workspace.WorkspaceRoot, cache.FullName, ["restore", project.FullName]);
451WorkingDirectory = workingDirectory.FullName,
478var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
479await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
497["run", "--no-launch-profile", "--project", projectFile.FullName, "--", "--operation", "inspect"],
527var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, appHostFileName));
528await File.WriteAllTextAsync(appHostFile.FullName, "Not a real AppHost.");
540? ["run", "--launch-profile=--no-build", $"/p:{KnownConfigNames.SuppressCliRunHook}=true", "--file", appHostFile.FullName, "--"]
542? ["watch", "--non-interactive", "--launch-profile=--no-build", "--project", appHostFile.FullName, "--"]
543: ["run", "--launch-profile=--no-build", "--project", appHostFile.FullName, "--"];
566var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
567await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
578["run", "--project", projectFile.FullName, "--", .. appHostArguments],
600var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
601var appHostCommand = Path.Combine(workspace.WorkspaceRoot.FullName, "bin", "Debug", "net10.0", "AppHost");
602var runWorkingDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "run-cwd"));
603await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
619Assert.Equal(runWorkingDirectory.FullName, workingDirectory.FullName);
642var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
643var appHostAssembly = Path.Combine(workspace.WorkspaceRoot.FullName, "bin", "Debug", "net10.0", "AppHost.dll");
644var runWorkingDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "run-cwd"));
645await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
662Assert.Equal(runWorkingDirectory.FullName, workingDirectory.FullName);
683var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
684await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
711var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
712await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
743var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
744await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
776var cliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "artifacts", "bin", "Aspire.Cli", "Debug", "net10.0"));
777var cliPath = Path.Combine(cliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.exe" : "aspire");
779File.WriteAllText(Path.Combine(cliDirectory.FullName, "aspire.dll"), string.Empty);
789var cliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "artifacts", "bin", "Aspire.Cli", "Debug", "net10.0"));
790var cliPath = Path.Combine(cliDirectory.FullName, "aspire");
792File.WriteAllText(Path.Combine(cliDirectory.FullName, "aspire.dll"), string.Empty);
794var linkDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "bin"));
795var linkPath = Path.Combine(linkDirectory.FullName, "aspire");
805var dotnetDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "dotnet"));
806var dotnetPath = Path.Combine(dotnetDirectory.FullName, OperatingSystem.IsWindows() ? "dotnet.exe" : "dotnet");
816var cliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "bin"));
817var cliPath = Path.Combine(cliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.exe" : "aspire");
819File.WriteAllText(Path.Combine(cliDirectory.FullName, "aspire.dll"), string.Empty);
820File.WriteAllText(Path.Combine(cliDirectory.FullName, ".aspire-install.json"), """{"source":"script"}""");
829var cliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "bin"));
830var cliPath = Path.Combine(cliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.exe" : "aspire");
832File.WriteAllText(Path.Combine(cliDirectory.FullName, "aspire.dll"), string.Empty);
833Directory.CreateDirectory(Path.Combine(cliDirectory.FullName, "dcp"));
834Directory.CreateDirectory(Path.Combine(cliDirectory.FullName, "managed"));
835File.WriteAllText(Path.Combine(cliDirectory.FullName, "dcp", OperatingSystem.IsWindows() ? "dcp.exe" : "dcp"), string.Empty);
836File.WriteAllText(Path.Combine(cliDirectory.FullName, "managed", OperatingSystem.IsWindows() ? "aspire-managed.exe" : "aspire-managed"), string.Empty);
847var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
848await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
853var targets = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "candidate;targets%('literal')@$?.targets"));
866? ["restore", projectFile.FullName, $"-property:NuGetRestoreTargets={MSBuildEscaping.Escape(targets.FullName)}"]
867: ["restore", projectFile.FullName], args);
880var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
881await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
917var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
918await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
946var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
947await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
975var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
976await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
982[KnownConfigNames.CliDotnetBinlogDirectory] = binlogDirectory.FullName
999Assert.Equal(binlogDirectory.FullName, Path.GetDirectoryName(binlogPath));
1019[KnownConfigNames.CliDotnetBinlogDirectory] = workspace.WorkspaceRoot.CreateSubdirectory("binlogs").FullName
1048var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1049await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1085var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1086await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1126var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1127await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1171var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1172await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1226var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1227await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1323var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1324await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1363var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1364await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1405var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1406await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1452var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1453await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1500[KnownConfigNames.UnixSocketPath] = Path.Combine(workspace.WorkspaceRoot.FullName, "cli.sock")
1533var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1534await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1567[KnownConfigNames.UnixSocketPath] = Path.Combine(workspace.WorkspaceRoot.FullName, "cli.sock")
1579var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1580await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1605[KnownConfigNames.UnixSocketPath] = Path.Combine(workspace.WorkspaceRoot.FullName, "cli.sock")
1621var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1622await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1647[KnownConfigNames.UnixSocketPath] = Path.Combine(workspace.WorkspaceRoot.FullName, "cli.sock")
1663var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
1664await File.WriteAllTextAsync(appHostFile.FullName, "// Single-file AppHost");
1681Assert.Contains(appHostFile.FullName, args);
1689var filePathIndex = Array.IndexOf(args, appHostFile.FullName);
1716var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1717await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
1733Assert.Contains(projectFile.FullName, args);
1744var projectValueIndex = Array.IndexOf(args, projectFile.FullName);
1783var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1784await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
1804Assert.Contains(projectFile.FullName, args);
1814var projectValueIndex = Array.IndexOf(args, projectFile.FullName);
1849var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1850await File.WriteAllTextAsync(projectFile.FullName, "<Project></Project>");
1870Assert.Contains(projectFile.FullName, args);
1882var projectValueIndex = Array.IndexOf(args, projectFile.FullName);
1922var solutionFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Test.sln"));
1923await File.WriteAllTextAsync(solutionFile.FullName, "Not a real solution file.");
1927var project1File = new FileInfo(Path.Combine(project1Dir.FullName, "Project1.csproj"));
1928await File.WriteAllTextAsync(project1File.FullName, "Not a real project file.");
1931var project2File = new FileInfo(Path.Combine(project2Dir.FullName, "Project2.csproj"));
1932await File.WriteAllTextAsync(project2File.FullName, "Not a real project file.");
1969var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1970await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1972var referencedProject = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Service.csproj"));
1973await File.WriteAllTextAsync(referencedProject.FullName, "Not a real project file.");
1987Assert.Contains(projectFile.FullName, args);
1989Assert.Contains(referencedProject.FullName, args);
2002var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2003await File.WriteAllTextAsync(appHostFile.FullName, "// Single-file AppHost");
2025arg => Assert.Equal(appHostFile.FullName, arg),
2049var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2050await File.WriteAllTextAsync(appHostFile.FullName, "// Single-file AppHost");
2071arg => Assert.Equal(appHostFile.FullName, arg),
2095var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2096await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2132var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2133await File.WriteAllTextAsync(appHostFile.FullName, "// Single-file AppHost");
2169var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2170await File.WriteAllTextAsync(appHostFile.FullName, "// Single-file AppHost");
2185arg => Assert.Equal(appHostFile.FullName, arg),
2209var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2210await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2254var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2255await File.WriteAllTextAsync(appHostFile.FullName, "// Single-file AppHost");
2282arg => Assert.Equal(appHostFile.FullName, arg),
2306var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2307await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2331arg => Assert.Equal(projectFile.FullName, arg),
2355var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2356await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2379arg => Assert.Equal(projectFile.FullName, arg),
2403var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2404await File.WriteAllTextAsync(appHostFile.FullName, "// Single-file AppHost");
2442var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, fileName));
2451? ["build", "--no-restore", "-property:ExcludeRestorePackageImports=true", "-getProperty:MSBuildVersion,RestoreSources", projectFile.FullName]
2452: ["msbuild", "-property:ExcludeRestorePackageImports=true", "-getProperty:MSBuildVersion,RestoreSources", projectFile.FullName], args);
2509var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2510await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2547var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2548await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2590var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2591await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2632var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2633await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2672var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2673await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2711var projectDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "RunPropertiesApp"));
2712var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "RunPropertiesApp.csproj"));
2713await File.WriteAllTextAsync(projectFile.FullName, """
2723await File.WriteAllTextAsync(Path.Combine(projectDirectory.FullName, "Program.cs"), "Console.WriteLine(\"Hello\");");
2727WorkingDirectory = projectDirectory.FullName,
2733processStartInfo.ArgumentList.Add(projectFile.FullName);
2749Assert.Equal(Path.Combine(projectDirectory.FullName, "relative-working-directory"), properties.GetProperty("RunWorkingDirectory").GetString());
2757var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2758await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2978var packagePath = Path.Combine(packagesDirectory.FullName, $"Aspire.ProjectTemplates.{packageVersion}.nupkg");
2991Assert.Equal(workspace.WorkspaceRoot.FullName, workingDirectory.FullName);
3048var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3049await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
3086var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3087await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
3124var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3125await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
3164var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3165await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
3203var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
3204await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
Git\GitClientTests.cs (7)
40Assert.Equal(workspace.Path, command.WorkingDirectory.FullName);
124Assert.Equal(["init", "--bare", "--", repository.Directory.FullName], command.Arguments);
125Assert.Equal(workspace.Path, command.WorkingDirectory.FullName);
130Assert.Equal([$"--git-dir={repository.Directory.FullName}", "fetch", "--depth", "1", "--no-tags", "--", "repository with spaces", "refs/heads/main"], command.Arguments);
131Assert.Equal(repository.Directory.FullName, command.WorkingDirectory.FullName);
136Assert.Equal([$"--git-dir={repository.Directory.FullName}", "rev-parse", "FETCH_HEAD^{commit}"], command.Arguments);
Git\GitRepositoryTests.cs (16)
37await GitTestHelper.ConfigureGitIdentityAsync(workspace.WorkspaceRoot.FullName, outputHelper);
41var trackedFile = Path.Combine(appDir.FullName, "AppHost.csproj");
46var untrackedFile = Path.Combine(samplesDir.FullName, "Sample.csproj");
50var gitignorePath = Path.Combine(workspace.WorkspaceRoot.FullName, ".gitignore");
55var ignoredFile = Path.Combine(binDir.FullName, "Stale.csproj");
59await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "add", "App/AppHost.csproj", ".gitignore");
60await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "commit", "-m", "init");
80await GitTestHelper.ConfigureGitIdentityAsync(workspace.WorkspaceRoot.FullName, outputHelper);
82var trackedFile = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj");
84await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "add", "AppHost.csproj");
85await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "commit", "-m", "init");
107await GitTestHelper.ConfigureGitIdentityAsync(workspace.WorkspaceRoot.FullName, outputHelper);
109var trackedFile = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj");
111await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "add", "AppHost.csproj");
112await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "commit", "-m", "init");
135Assert.Equal(workspace.WorkspaceRoot.FullName, startedActivity.GetTagItem(ProfilingTelemetry.Tags.GitWorkingDirectory));
Git\GitWorktreeTests.cs (52)
17Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".git"));
18var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost", "AppHost.csproj");
21Assert.Null(GitWorktree.TryGetLinkedWorktreeRoot(workspace.WorkspaceRoot.FullName));
28var fixtureRoot = workspace.WorkspaceRoot.FullName;
29var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
47var fixtureRoot = workspace.WorkspaceRoot.FullName;
48var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
63var worktreeRoot = workspace.WorkspaceRoot.FullName;
79var fixtureRoot = workspace.WorkspaceRoot.FullName;
81Path.Combine(fixtureRoot, "physical", "checkouts", "feature")).FullName;
119var fixtureRoot = workspace.WorkspaceRoot.FullName;
120var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
139var fixtureRoot = workspace.WorkspaceRoot.FullName;
140var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "checkout")).FullName;
142Path.Combine(fixtureRoot, "physical", "primary", ".git", "worktrees", "feature")).FullName;
181var worktreeRoot = workspace.WorkspaceRoot.FullName;
199var fixtureRoot = workspace.WorkspaceRoot.FullName;
200var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
219var worktreeRoot = workspace.WorkspaceRoot.FullName;
240var fixtureRoot = workspace.WorkspaceRoot.FullName;
241var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
281var fixtureRoot = workspace.WorkspaceRoot.FullName;
282var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
286var submoduleRoot = Directory.CreateDirectory(Path.Combine(worktreeRoot, "extern", "dep")).FullName;
298var fixtureRoot = workspace.WorkspaceRoot.FullName;
299var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
313var fixtureRoot = workspace.WorkspaceRoot.FullName;
315var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
317var otherWorktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "other-worktree")).FullName;
332var fixtureRoot = workspace.WorkspaceRoot.FullName;
333var worktreeRoot = Directory.CreateDirectory(Path.Combine(fixtureRoot, "worktree")).FullName;
345Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".git"));
346var submoduleRoot = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "extern", "dep")).FullName;
349Path.Combine(workspace.WorkspaceRoot.FullName, ".git", "modules", "dep"));
360Assert.Null(GitWorktree.TryGetLinkedWorktreeRoot(workspace.WorkspaceRoot.FullName));
369var primaryRoot = workspace.WorkspaceRoot.FullName;
371var worktreeRoot = Directory.CreateDirectory(Path.Combine(primaryRoot, ".worktrees", "feature")).FullName;
386var primaryRoot = workspace.WorkspaceRoot.FullName;
388var worktreeRoot = Directory.CreateDirectory(Path.Combine(primaryRoot, ".worktrees", "feature")).FullName;
390var submoduleRoot = Directory.CreateDirectory(Path.Combine(worktreeRoot, "extern", "dep")).FullName;
403var primaryRoot = workspace.WorkspaceRoot.FullName;
405var submoduleRoot = Directory.CreateDirectory(Path.Combine(primaryRoot, "extern", "dep")).FullName;
442var repoBSubmoduleRoot = Directory.CreateDirectory(Path.Combine(repoBRoot, "extern", "dep")).FullName;
457var worktreeRoot = Directory.CreateDirectory(Path.Combine(primaryRoot, ".worktrees", "feature")).FullName;
468var workingDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "plain")).FullName;
469var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "other", "App.csproj");
479var unmanagedDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "outside")).FullName;
493var root = Directory.CreateDirectory(Path.Combine(parent.FullName, name)).FullName;
Interaction\ExtensionInteractionServiceTests.cs (10)
35var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "cli [extension].log");
68var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.cli.log");
108var cliLogFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.cli.log");
109var appHostLogFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cli.log");
158var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.cli.log");
221Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.cli.log"),
351var invalidPath = Path.Combine(workspace.WorkspaceRoot.FullName, "invalid");
352var validPath = Path.Combine(workspace.WorkspaceRoot.FullName, "valid");
393var invalidPath = Path.Combine(workspace.WorkspaceRoot.FullName, "invalid");
461var logFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "cli [extension].log");
Layout\LayoutDiscoveryReparsePointTests.cs (17)
37workspace.WorkspaceRoot.FullName,
46var linksDir = Path.Combine(workspace.WorkspaceRoot.FullName, "WinGet", "Links");
69var rawLayoutRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "custom-layout");
72var realBinaryDir = Path.Combine(workspace.WorkspaceRoot.FullName, "real-binary");
95var layoutRoot = workspace.WorkspaceRoot.FullName;
147var binaryDir = Path.Combine(workspace.WorkspaceRoot.FullName, "opt", "aspire", "bin");
152var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "home", ".aspire");
190var relativeLayoutRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "colocated");
198var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "home", ".aspire");
229var layoutRoot = workspace.WorkspaceRoot.FullName;
237Path.Combine(managedDir.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.ManagedExecutableName)),
241Path.Combine(dashboardDir.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.DashboardExecutableName)),
264var layoutRoot = workspace.WorkspaceRoot.FullName;
272Path.Combine(managedDir.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.ManagedExecutableName)),
274File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDir.FullName), "stub");
278Path.Combine(managedDir.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.DashboardExecutableName)),
294var dashboardPath = Path.Combine(dashboardDir.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.DashboardExecutableName));
Mcp\AppHostConnectionSelectionLogicTests.cs (10)
77var firstDirectory = Directory.CreateDirectory(Path.Combine(tempRoot.FullName, "AppHost"));
78var secondDirectoryPath = Path.Combine(tempRoot.FullName, "apphost");
83var firstPath = Path.Combine(firstDirectory.FullName, "AppHost.csproj");
84var secondPath = Path.Combine(secondDirectory.FullName, "AppHost.csproj");
130var appHostPath = Path.Combine(appHostDirectory.FullName, "RootCase.AppHost.csproj");
142var realAppHostPath = Path.Combine(realDirectory.FullName, "Symlinked.AppHost.csproj");
144var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
148Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
203var actualAppHostPath = Path.Combine(directory.FullName, "CaseSensitive.AppHost.csproj");
206workspace.WorkspaceRoot.FullName,
Mcp\Docs\DocsCacheTests.cs (4)
37var cacheFiles = Directory.GetFiles(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "docs"))
87var cacheFiles = Directory.GetFiles(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache", "docs"))
125new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives")),
126new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "cache")),
Mcp\SelectAppHostToolTests.cs (14)
28var appHostFile = new FileInfo(Path.Combine(realDirectory.FullName, "AppHost.csproj"));
29File.WriteAllText(appHostFile.FullName, "<Project />");
31var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
32TestSymlinkHelper.TryCreateSymlink(symlinkDirectory, realDirectory.FullName);
34var displayPath = Path.GetFullPath(Path.Combine(workspace.WorkspaceRoot.FullName, suppliedPath));
41var connection = CreateConnection(appHostFile.FullName, processId: Environment.ProcessId);
75var realAppHostPath = Path.Combine(realDirectory.FullName, "Symlinked.AppHost.csproj");
77var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
81Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
111var actualAppHostPath = Path.Combine(directory.FullName, "CaseSensitive.AppHost.csproj");
113var selectedAppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "casesensitiveapphost", "casesensitive.apphost.csproj");
150var firstAppHostPath = Path.Combine(firstDirectory.FullName, "First.AppHost.csproj");
151var secondAppHostPath = Path.Combine(secondDirectory.FullName, "Second.AppHost.csproj");
152var requestedAppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "Missing", "Missing.AppHost.csproj");
Migrations\TypeScriptAppHostMigrationTests.cs (29)
54var appHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts");
71Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts"),
83await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"), "// legacy");
84await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts"), "// modern");
95await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"), "// csharp");
106var appHostDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "external-apphost"));
108var appHostPath = Path.Combine(appHostDirectory.FullName, "apphost.ts");
152await File.WriteAllTextAsync(Path.Combine(root.FullName, "apphost.ts"), LegacyAppHostContent);
154Path.Combine(root.FullName, "aspire.config.json"),
163Path.Combine(root.FullName, "tsconfig.apphost.json"),
171Path.Combine(root.FullName, "package.json"),
181await File.WriteAllTextAsync(Path.Combine(root.FullName, "eslint.config.mjs"), LegacyEslintConfigContent);
183var modulesDir = Directory.CreateDirectory(Path.Combine(root.FullName, ".modules"));
184await File.WriteAllTextAsync(Path.Combine(modulesDir.FullName, "aspire.ts"), "// generated");
189var config = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(root.FullName, "aspire.config.json")))!;
192var tsconfig = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(root.FullName, "tsconfig.apphost.json")))!;
196var packageJson = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(root.FullName, "package.json")))!;
201var eslintConfig = await File.ReadAllTextAsync(Path.Combine(root.FullName, "eslint.config.mjs"));
214Assert.False(File.Exists(Path.Combine(root.FullName, "apphost.ts")));
215Assert.False(Directory.Exists(Path.Combine(root.FullName, ".modules")));
217var modernContent = await File.ReadAllTextAsync(Path.Combine(root.FullName, "apphost.mts"));
234LineEndingAssert.FileUsesOsLineBreaksAndSingleFinalNewline(Path.Combine(root.FullName, "aspire.config.json"));
241var appHostDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "external-apphost"));
244await CreateMigration(workspace).ApplyAsync(new MigrationContext(new FileInfo(Path.Combine(appHostDirectory.FullName, "apphost.ts"))), CancellationToken.None);
246Assert.False(File.Exists(Path.Combine(appHostDirectory.FullName, "apphost.ts")));
247Assert.False(Directory.Exists(Path.Combine(appHostDirectory.FullName, ".modules")));
248Assert.Equal(ExpectedModernAppHostContent, await File.ReadAllTextAsync(Path.Combine(appHostDirectory.FullName, "apphost.mts")));
290var migratedContent = await File.ReadAllTextAsync(Path.Combine(root.FullName, "apphost.mts"));
294Assert.Equal(migratedContent, await File.ReadAllTextAsync(Path.Combine(root.FullName, "apphost.mts")));
NuGet\BundleNuGetServiceTests.cs (32)
21var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
57Assert.StartsWith(Path.Combine(appHostDirectory.FullName, ".aspire") + Path.DirectorySeparatorChar, preview.EffectiveWorkingDirectory.FullName);
59var previewSettings = NuGetTestHelper.LoadSettings(preview.EffectiveWorkingDirectory.FullName);
61Assert.Equal(Path.Combine(workspace.WorkspaceRoot.FullName, "private-feed"), privateSource.Source);
66var previewSnapshot = client.GetSettings(preview.EffectiveWorkingDirectory.FullName, key);
81var ambientSettings = NuGetTestHelper.LoadSettings(appHostDirectory.FullName);
97Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"),
124var previewSnapshot = client.GetSettings(preview.EffectiveWorkingDirectory.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]);
127var persistedSnapshot = client.GetSettings(appHostDirectory.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]);
138var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
157var globalPackagesFolder = Path.Combine(workspace.WorkspaceRoot.FullName, "packages");
161workingDirectory: appHostDirectory.FullName,
167workspace.WorkspaceRoot.FullName,
192workingDirectory: appHostDirectory.FullName);
196workingDirectory: appHostDirectory.FullName);
219workingDirectory: appHostDirectory.FullName,
225workingDirectory: appHostDirectory.FullName,
281var toolPath = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.dll");
321workingDirectory: appHostDirectory.FullName,
344workingDirectory: appHostDirectory.FullName));
366workingDirectory: appHostDirectory.FullName);
390workingDirectory: appHostDirectory.FullName);
406var restoreRoot = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "integrations", "package-restore");
410workingDirectory: firstAppHost.FullName);
413workingDirectory: secondAppHost.FullName);
421workingDirectory: secondAppHost.FullName);
439var lockedFilePath = Path.Combine(legacyLibsDirectory.FullName, "Microsoft.Extensions.DependencyInjection.xml");
448workingDirectory: appHostDirectory.FullName);
478workingDirectory: appHostDirectory.FullName);
483workingDirectory: appHostDirectory.FullName);
511workspace.WorkspaceRoot.FullName,
NuGet\NuGetClientTests.cs (203)
101CreatePackage(feedDirectory.FullName, packageId);
103? $"""<add key="local" value="{feedDirectory.FullName}" />"""
108var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
119? Settings.LoadSpecificSettings(workspace.WorkspaceRoot.FullName, "NuGet.Config")
120: NuGetTestHelper.LoadSettings(workspace.WorkspaceRoot.FullName);
121string[] explicitSources = hasExplicitSource ? [feedDirectory.FullName] : [];
133workspace.WorkspaceRoot.FullName,
141Assert.Equal(feedDirectory.FullName, package.Source);
154CreatePackage(feedDirectory.FullName, "Aspire.Test.Package.One");
155CreatePackage(feedDirectory.FullName, "Aspire.Test.Package.Two");
167[feedDirectory.FullName],
169workspace.WorkspaceRoot.FullName,
181CreatePackage(firstFeedDirectory.FullName, "Aspire.Test.Package");
182CreatePackage(secondFeedDirectory.FullName, "Aspire.Test.Package", version: "2.0.0");
193[firstFeedDirectory.FullName, secondFeedDirectory.FullName],
195workspace.WorkspaceRoot.FullName,
202Assert.Equal(secondFeedDirectory.FullName, package.Source);
216CreatePackage(selectedFeed.FullName, packageId);
217CreatePackage(ambientFeed.FullName, packageId, version: "2.0.0");
218CreatePackage(ambientFeed.FullName, communityPackageId, version: "2.0.0");
220Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"),
225<add key="selected" value="{selectedFeed.FullName}" />
226<add key="ambient" value="{ambientFeed.FullName}" />
240useChannelOverlay ? [new PackageMapping("Aspire*", selectedFeed.FullName)] : null,
250configuration.ExplicitConfigFile?.FullName,
251configuration.EffectiveWorkingDirectory.FullName,
261Assert.Equal(selectedFeed.FullName, package.Source);
267Assert.Equal(ambientFeed.FullName, package.Source);
281CreatePackage(selectedFeed.FullName, packageId, baseAssemblyContents: "selected");
282CreatePackage(ambientFeed.FullName, packageId, version: "9.0.0");
284Path.Combine(machineDirectory.FullName, "NuGet.Config"),
295Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"),
299<add key="globalPackagesFolder" value="{packageDirectory.FullName}" />
303<add key="selected" value="{selectedFeed.FullName}" />
304<add key="ambient" value="{ambientFeed.FullName}" />
313var machineSettings = new Settings(machineDirectory.FullName, "NuGet.Config", isMachineWide: true);
316var snapshot = client.GetSettings(workspace.WorkspaceRoot.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]);
318GetEffectiveGlobalPackagesFolder(nugetConfigPath: null, workspace.WorkspaceRoot.FullName),
324new() { Id = packageId, Version = "1.0.0", Source = selectedFeed.FullName },
326new() { Id = packageId, Version = "9.0.0", Source = ambientFeed.FullName }
329workspace.WorkspaceRoot.FullName);
330Assert.Equal(["selected", selectedFeed.FullName], sdkResults.Select(package => package.Source));
338workspace.WorkspaceRoot.FullName,
342Assert.Equal(selectedFeed.FullName, result.Source);
348restoreDirectory.FullName,
351workspace.WorkspaceRoot.FullName,
356restoreDirectory.FullName, nugetConfigPath: null, workspace.WorkspaceRoot.FullName));
372CreatePackage(firstFeedDirectory.FullName, "Aspire.Test.Package", version: "9.0.0");
373CreatePackage(secondFeedDirectory.FullName, "Aspire.Test.Package", version: "10.0.0");
384[firstFeedDirectory.FullName, secondFeedDirectory.FullName],
386workspace.WorkspaceRoot.FullName,
393Assert.Equal(firstFeedDirectory.FullName, package.Source);
401CreatePackage(feedDirectory.FullName, "Aspire.Test.Package");
403Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config"),
408<add key="local" value="{feedDirectory.FullName}" />
423nugetConfigPath: Path.Combine(workspace.WorkspaceRoot.FullName, "missing", "nuget.config"),
424workspace.WorkspaceRoot.FullName,
429Assert.Equal(feedDirectory.FullName, package.Source);
437CreatePackage(feedDirectory.FullName, "Aspire.Test.Package");
448["https://127.0.0.1:1/v3/index.json", feedDirectory.FullName],
450workspace.WorkspaceRoot.FullName,
465var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
488workspace.WorkspaceRoot.FullName,
506var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
512<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
516<add key="local" value="{feedDirectory.FullName}" />
530restoreDirectory.FullName,
533workspace.WorkspaceRoot.FullName,
559restoreDirectory.FullName,
562workspace.WorkspaceRoot.FullName,
583CreatePackage(feedDirectory.FullName, packageId);
586GetEffectiveGlobalPackagesFolder(nugetConfigPath, workspace.WorkspaceRoot.FullName),
609workspace.CreateDirectory("restore").FullName,
610workspace.WorkspaceRoot.FullName).Dispose();
638workspace.CreateDirectory("restore").FullName,
639workspace.WorkspaceRoot.FullName).Dispose();
648CreatePackage(feedDirectory.FullName, packageId);
673workspace.CreateDirectory("restore").FullName,
674workspace.WorkspaceRoot.FullName).Dispose();
764CreatePackage(feedDirectory.FullName, "Aspire.Test.Package");
783feedDirectory.FullName,
784workspace.WorkspaceRoot.FullName).Dispose();
795CreatePackage(feedDirectory.FullName, packageId);
797var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
803<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
807<add key="local" value="{feedDirectory.FullName}" />
823restoreDirectory.FullName,
826workspace.WorkspaceRoot.FullName,
828var restoredPackages = ReadRestoredPackages(restoreDirectory.FullName,
829nugetConfigPath, workspace.WorkspaceRoot.FullName);
831var manifestPath = Path.Combine(restoreDirectory.FullName, IntegrationPackageProbeManifest.FileName);
833Path.Combine(restoreDirectory.FullName, LockFileFormat.AssetsFileName),
841Assert.False(Directory.Exists(Path.Combine(restoreDirectory.FullName, "libs")));
887CreatePackage(feedDirectory.FullName, packageId);
891var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
898<add key="local" value="{feedDirectory.FullName}" />
909options.StartInfo.Environment["NUGET_PACKAGES"] = environmentPackagesDirectory.FullName;
933restoreDirectory.FullName,
934workspace.WorkspaceRoot.FullName,
935environmentPackagesDirectory.FullName,
940var assets = new LockFileFormat().Read(Path.Combine(restoreDirectory.FullName, LockFileFormat.AssetsFileName));
945Path.TrimEndingDirectorySeparator(environmentPackagesDirectory.FullName),
950Directory.Exists(Path.Combine(environmentPackagesDirectory.FullName, packageId.ToLowerInvariant(), "1.0.0")),
962CreatePackage(feedDirectory.FullName, packageId);
993restoreDirectory.FullName,
994workspace.WorkspaceRoot.FullName,
997var assets = new LockFileFormat().Read(Path.Combine(restoreDirectory.FullName, LockFileFormat.AssetsFileName));
1002Path.TrimEndingDirectorySeparator(configPackagesDirectory.FullName),
1005Directory.Exists(Path.Combine(configPackagesDirectory.FullName, packageId.ToLowerInvariant(), "1.0.0")),
1017feedDirectory.FullName,
1029GetEffectiveGlobalPackagesFolder(nugetConfigPath: null, workspace.WorkspaceRoot.FullName),
1036restoreDirectory.FullName,
1037[feedDirectory.FullName],
1039workspace.WorkspaceRoot.FullName,
1041var restoredPackages = ReadRestoredPackages(restoreDirectory.FullName,
1042nugetConfigPath: null, workspace.WorkspaceRoot.FullName);
1044var manifestPath = Path.Combine(restoreDirectory.FullName, IntegrationPackageProbeManifest.FileName);
1046Path.Combine(restoreDirectory.FullName, LockFileFormat.AssetsFileName),
1068feedDirectory.FullName,
1076GetEffectiveGlobalPackagesFolder(nugetConfigPath, workspace.WorkspaceRoot.FullName),
1090restoreDirectory.FullName,
1093workspace.WorkspaceRoot.FullName,
1095var restoredPackage = Assert.Single(ReadRestoredPackages(restoreDirectory.FullName,
1096nugetConfigPath, workspace.WorkspaceRoot.FullName));
1097var manifestPath = Path.Combine(restoreDirectory.FullName, IntegrationPackageProbeManifest.FileName);
1099Path.Combine(restoreDirectory.FullName, LockFileFormat.AssetsFileName),
1127CreatePackage(configuredFeed.FullName, configuredPackageId);
1128CreatePackage(explicitFeed.FullName, explicitPackageId);
1131GetEffectiveGlobalPackagesFolder(nugetConfigPath, workspace.WorkspaceRoot.FullName),
1146restoreDirectory.FullName,
1147[explicitFeed.FullName],
1149workspace.WorkspaceRoot.FullName,
1151var restoredPackages = ReadRestoredPackages(restoreDirectory.FullName,
1152nugetConfigPath, workspace.WorkspaceRoot.FullName);
1168CreatePackage(firstFeed.FullName, packageId, "wrong-source");
1169CreatePackage(mappedFeed.FullName, packageId, "mapped-source");
1171var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1177<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
1181<add key="first" value="{firstFeed.FullName}" />
1182<add key="mapped" value="{mappedFeed.FullName}" />
1195GetEffectiveGlobalPackagesFolder(nugetConfigPath, workspace.WorkspaceRoot.FullName),
1207restoreDirectory.FullName,
1210workspace.WorkspaceRoot.FullName,
1212var restoredPackages = ReadRestoredPackages(restoreDirectory.FullName,
1213nugetConfigPath, workspace.WorkspaceRoot.FullName);
1232CreatePackage(mappedFeed.FullName, packageId, "mapped-source");
1233CreatePackage(explicitFeed.FullName, packageId, "explicit-source");
1235var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1241<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
1245<add key="mapped" value="{mappedFeed.FullName}" />
1258GetEffectiveGlobalPackagesFolder(nugetConfigPath, workspace.WorkspaceRoot.FullName),
1270restoreDirectory.FullName,
1271[explicitFeed.FullName],
1273workspace.WorkspaceRoot.FullName,
1275var restoredPackages = ReadRestoredPackages(restoreDirectory.FullName,
1276nugetConfigPath, workspace.WorkspaceRoot.FullName);
1294CreatePackage(explicitFeed.FullName, packageId);
1296var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1302<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
1323restoreDirectory.FullName,
1324[explicitFeed.FullName],
1326workspace.WorkspaceRoot.FullName,
1345feedDirectory.FullName,
1348CreatePackage(feedDirectory.FullName, dependencyPackage, version: "1.0.0");
1355feedDirectory.FullName,
1360feedDirectory.FullName,
1366GetEffectiveGlobalPackagesFolder(nugetConfigPath, workspace.WorkspaceRoot.FullName),
1379restoreDirectory.FullName,
1380[feedDirectory.FullName],
1382workspace.WorkspaceRoot.FullName,
1384var restoredPackages = ReadRestoredPackages(restoreDirectory.FullName,
1385nugetConfigPath, workspace.WorkspaceRoot.FullName);
1409CreatePackage(feedDirectory.FullName, packageId);
1411var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1417<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
1421<add key="local" value="{feedDirectory.FullName}" />
1444restoreDirectory.FullName,
1447workspace.WorkspaceRoot.FullName,
1449var package = Assert.Single(ReadRestoredPackages(restoreDirectory.FullName, nugetConfigPath, workspace.WorkspaceRoot.FullName));
1466var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
1498projectDirectory.FullName,
1521var source = useFileUri ? new Uri(hive.FullName).AbsoluteUri : hive.FullName;
1523Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"),
1534workspace.WorkspaceRoot.FullName,
1545var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
1564projectDirectory.FullName,
1577var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
1585var firstSettings = client.GetSettings(workspace.WorkspaceRoot.FullName, sourceIdentityKey);
1588var secondSettings = client.GetSettings(workspace.WorkspaceRoot.FullName, sourceIdentityKey);
1597var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "policy", "NuGet.Config");
1632var originalPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
1647var overlayPath = Path.Combine(overlayDirectory.FullName, "NuGet.Config");
1653var settings = client.GetSettings(overlayDirectory.FullName, new byte[NuGetSourceIdentity.KeySizeInBytes]);
1666var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1672<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
1686var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
1692<add key="globalPackagesFolder" value="{packagesDirectory.FullName}" />
1696<add key="local" value="{feedDirectory.FullName}" />
NuGet\NuGetConfigurationQueryTests.cs (21)
26var oldHive = workspace.CreateDirectory(".aspire/hives/pr-old/packages").FullName;
32var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
72service.GetNuGetSettings(appHostDirectory.FullName, TestContext.Current.CancellationToken),
86var previewDirectory = preview.EffectiveWorkingDirectory.FullName;
109NuGetTestHelper.GetEligiblePackageSources(appHostDirectory.FullName, "Contoso.Package"));
111NuGetTestHelper.GetEligiblePackageSources(appHostDirectory.FullName, "Aspire.Hosting"));
121var oldHive = workspace.CreateDirectory(".aspire/hives/pr-old/packages").FullName;
122var newHive = workspace.CreateDirectory(".aspire/hives/pr-new/packages").FullName;
123var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
146var previewDirectory = preview.EffectiveWorkingDirectory.FullName;
162NuGetTestHelper.GetEligiblePackageSources(appHostDirectory.FullName, "Aspire.Hosting"));
164NuGetTestHelper.GetEligiblePackageSources(appHostDirectory.FullName, "Example.Dependency"));
166global::NuGet.Configuration.Settings.LoadDefaultSettings(appHostDirectory.FullName)).LoadPackageSources();
178Path.Combine(directory.FullName, "NuGet.Config"),
202var previewSettings = global::NuGet.Configuration.Settings.LoadDefaultSettings(preview.EffectiveWorkingDirectory.FullName);
208Assert.Equal(["https://new.example/v3/index.json"], NuGetTestHelper.GetEligiblePackageSources(preview.EffectiveWorkingDirectory.FullName, "Aspire.Hosting"));
212Assert.Equal(["https://new.example/v3/index.json"], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting"));
220var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
250Path.Combine(nonCanonicalDirectory.FullName, "NuGet.Config"),
264Path.Combine(mappingThenClearDirectory.FullName, "NuGet.Config"),
276Path.Combine(clearThenMappingDirectory.FullName, "NuGet.Config"),
Packaging\PackageChannelTests.cs (64)
142packagesDirectory.FullName,
147Path.Combine(nestedDirectory.FullName, "Aspire.ProjectTemplates.13.6.0.nupkg"),
150var packageSource = packagesDirectory.FullName.Replace('\\', '/');
189[new PackageMapping("Aspire*", channelPackagesDirectory.FullName)],
195overridePackagesDirectory.FullName);
214Assert.Equal(overridePackagesDirectory.FullName, package.Source);
227var packageSource = packagesDirectory.FullName.Replace('\\', '/');
229File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.5.0.nupkg"), string.Empty);
233File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.ProjectTemplates.{pinnedVersion}.nupkg"), string.Empty);
274var packageSource = packagesDirectory.FullName.Replace('\\', '/');
276File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.5.0.nupkg"), string.Empty);
279File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.ProjectTemplates.{pinnedVersion}.nupkg"), string.Empty);
317File.WriteAllText(Path.Combine(channelPackagesDirectory.FullName, "Aspire.ProjectTemplates.13.4.0-preview.1.nupkg"), string.Empty);
320var nestedDirectory = Directory.CreateDirectory(Path.Combine(overridePackagesDirectory.FullName, "aspire.projecttemplates", "13.5.0-preview.2"));
321File.WriteAllText(Path.Combine(nestedDirectory.FullName, "Aspire.ProjectTemplates.13.5.0-preview.2.nupkg"), string.Empty);
327var channelSource = channelPackagesDirectory.FullName.Replace('\\', '/');
328var overrideSource = overridePackagesDirectory.FullName.Replace('\\', '/');
355var nestedDirectory = Directory.CreateDirectory(Path.Combine(packagesDirectory.FullName, "aspire.projecttemplates", "13.5.0-preview.2"));
356File.WriteAllText(Path.Combine(nestedDirectory.FullName, "Aspire.ProjectTemplates.13.5.0-preview.2.nupkg"), string.Empty);
363var source = packagesDirectory.FullName.Replace('\\', '/');
383File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.Redis.{pinnedVersion}.nupkg"), string.Empty);
384File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.PostgreSQL.{pinnedVersion}.nupkg"), string.Empty);
385File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"CommunityToolkit.Aspire.Hosting.NodeJS.{pinnedVersion}.nupkg"), string.Empty);
388File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.SqlServer.13.3.0.nupkg"), string.Empty);
391File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.ProjectTemplates.{pinnedVersion}.nupkg"), string.Empty);
398File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.AppHost.{pinnedVersion}.nupkg"), string.Empty);
399File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.Sdk.{pinnedVersion}.nupkg"), string.Empty);
400File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.Orchestration.linux-arm64.{pinnedVersion}.nupkg"), string.Empty);
401File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.Testing.{pinnedVersion}.nupkg"), string.Empty);
402File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.Msi.{pinnedVersion}.nupkg"), string.Empty);
403File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.Integration.Analyzers.{pinnedVersion}.nupkg"), string.Empty);
406File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.Dapr.{pinnedVersion}.nupkg"), string.Empty);
407File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.GitHub.Models.{pinnedVersion}.nupkg"), string.Empty);
408File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.Hosting.NodeJs.{pinnedVersion}.nupkg"), string.Empty);
414var packageSource = packagesDirectory.FullName.Replace('\\', '/');
462var packageSource = packagesDirectory.FullName.Replace('\\', '/');
485var config = AspireConfigFile.LoadOrCreate(workspace.WorkspaceRoot.FullName);
488config.Save(workspace.WorkspaceRoot.FullName);
490var packageSource = packagesDirectory.FullName.Replace('\\', '/');
520var packageSource = packagesDirectory.FullName.Replace('\\', '/');
691File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Redis.13.4.0.nupkg"), string.Empty);
692File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Redis.13.5.0-preview.1.nupkg"), string.Empty);
693File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.PostgreSQL.13.4.0-preview.1.nupkg"), string.Empty);
710File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Redis.13.4.0.nupkg"), string.Empty);
711File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Redis.13.5.0-preview.1.nupkg"), string.Empty);
712File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.PostgreSQL.13.4.0.nupkg"), string.Empty);
729File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Redis.13.5.0.nupkg"), string.Empty);
730File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Redis.13.6.0-preview.1.nupkg"), string.Empty);
731File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Azure.Kubernetes.13.6.0-pr.19404.gf51e8e1d.nupkg"), string.Empty);
760File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Dapr.13.4.0.nupkg"), string.Empty);
761File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Sql.13.4.0.nupkg"), string.Empty);
780File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Dapr.13.4.0.nupkg"), string.Empty);
781File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.Hosting.Sql.13.4.0.nupkg"), string.Empty);
800var config = AspireConfigFile.LoadOrCreate(workspace.WorkspaceRoot.FullName);
803config.Save(workspace.WorkspaceRoot.FullName);
805var packageSource = packagesDirectory.FullName.Replace('\\', '/');
831var config = AspireConfigFile.LoadOrCreate(workspace.WorkspaceRoot.FullName);
834config.Save(workspace.WorkspaceRoot.FullName);
836var packageSource = packagesDirectory.FullName.Replace('\\', '/');
975new PackageMapping("Aspire*", packagesDirectory.FullName.Replace('\\', '/')),
992new PackageMapping("Aspire*", new Uri(packagesDirectory.FullName).AbsoluteUri),
1067var packageSource = packagesDirectory.FullName.Replace('\\', '/');
1079CreatePackageWithTags(Path.Combine(packagesDirectory.FullName, $"{packageId}.{version}.nupkg"), packageId, version, tags);
1084var packagePath = Path.Combine(packagesDirectory.FullName, packageId.ToLowerInvariant(), version, $"{packageId}.{version}.nupkg");
Packaging\PackageSourceIdentityTests.cs (12)
21var fileUri = new Uri(feed.FullName).AbsoluteUri;
24: Path.GetRelativePath(workspace.WorkspaceRoot.FullName, feed.FullName);
27var nativeSettings = Settings.LoadSpecificSettings(workspace.WorkspaceRoot.FullName, "NuGet.Config");
30PackageSourceIdentity.Normalize(feed.FullName),
34workspace.WorkspaceRoot.FullName,
36foreach (var selectedSource in new[] { feed.FullName, fileUri })
56var caseVariant = Path.Combine(feed.Parent!.FullName, "feed with spaces");
57WriteSource(workspace.WorkspaceRoot, feed.FullName);
59workspace.WorkspaceRoot.FullName,
70Assert.Equal(OperatingSystem.IsWindows(), PackageSourceIdentity.Comparer.Equals(feed.FullName, caseVariant));
83.Save(Path.Combine(directory.FullName, "NuGet.Config"));
Packaging\PackagingServiceTests.cs (137)
27var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
60var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
96var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
200var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
237var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
270var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
304var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
360var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
425var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
457var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
487var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
512var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
540var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
567var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
593var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
613var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
634var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
664var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
696var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
718var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
746var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
771var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
807var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
896var settings = nugetService.GetNuGetSettings(preview.EffectiveWorkingDirectory.FullName, TestContext.Current.CancellationToken);
899NuGetTestHelper.GetEligiblePackageSources(preview.EffectiveWorkingDirectory.FullName, "Example.Dependency"));
909var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
948var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
980var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1012var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1043var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1073var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1103var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1133var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1187var nugetConfigPath = Path.Combine(tempDir.FullName, "nuget.config");
1212var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1216Directory.CreateDirectory(Path.Combine(hivesDir.FullName, "pr-10167"));
1217Directory.CreateDirectory(Path.Combine(hivesDir.FullName, "pr-11832"));
1268var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1272Directory.CreateDirectory(Path.Combine(hivesDir.FullName, "pr-12345"));
1308var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1343var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1378var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1442var nugetConfigPath = Path.Combine(tempDir.FullName, "nuget.config");
1459var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1491var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1521var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1552var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1554var localPackagesDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, "local", "packages"));
1558File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.ProjectTemplates.{localVersion}.nupkg"), string.Empty);
1559File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.{localVersion}.nupkg"), string.Empty);
1579var installPrefix = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "custom-aspire-prefix"));
1580var processPath = Path.Combine(installPrefix.FullName, "dogfood", prChannelName, "bin", "aspire");
1584var packagesDirectory = Directory.CreateDirectory(Path.Combine(installPrefix.FullName, "hives", prChannelName, "packages"));
1585File.WriteAllText(Path.Combine(packagesDirectory.FullName, $"Aspire.ProjectTemplates.{prVersion}.nupkg"), string.Empty);
1590var defaultHivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1609mapping.Source == packagesDirectory.FullName.Replace('\\', '/'));
1622var defaultHivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1623var defaultPackagesDirectory = Directory.CreateDirectory(Path.Combine(defaultHivesDir.FullName, prChannelName, "packages"));
1624File.WriteAllText(Path.Combine(defaultPackagesDirectory.FullName, $"Aspire.ProjectTemplates.{defaultHiveVersion}.nupkg"), string.Empty);
1626var installPrefix = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "custom-aspire-prefix"));
1627var processPath = Path.Combine(installPrefix.FullName, "dogfood", prChannelName, "bin", "aspire");
1631var dogfoodPackagesDirectory = Directory.CreateDirectory(Path.Combine(installPrefix.FullName, "hives", prChannelName, "packages"));
1632File.WriteAllText(Path.Combine(dogfoodPackagesDirectory.FullName, $"Aspire.ProjectTemplates.{dogfoodHiveVersion}.nupkg"), string.Empty);
1652mapping.Source == dogfoodPackagesDirectory.FullName.Replace('\\', '/'));
1662var installPrefix = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "custom-aspire-prefix"));
1663var processPath = Path.Combine(installPrefix.FullName, "dogfood", prChannelName, "bin", "aspire");
1667var packagesDirectory = Directory.CreateDirectory(Path.Combine(installPrefix.FullName, "hives", prChannelName, "packages"));
1668File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.not-a-semver.nupkg"), string.Empty);
1672hivesDirectory: new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives")),
1688mapping.Source == packagesDirectory.FullName.Replace('\\', '/'));
1698var installPrefix = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "custom-aspire-prefix"));
1699var processPath = Path.Combine(installPrefix.FullName, "dogfood", prChannelName, "bin", "aspire");
1705hivesDirectory: new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives")),
1728var installPrefix = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "custom-aspire-prefix"));
1729var processPath = Path.Combine(installPrefix.FullName, "dogfood", installedPrChannelName, "bin", "aspire");
1732Directory.CreateDirectory(Path.Combine(installPrefix.FullName, "hives", identityPrChannelName, "packages"));
1736hivesDirectory: new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives")),
1760hivesDirectory: new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives")),
1784var installPrefix = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "custom-aspire-prefix"));
1785var processPath = Path.Combine(installPrefix.FullName, "dogfood", prChannelName, "bin", "aspire");
1788Directory.CreateDirectory(Path.Combine(installPrefix.FullName, "hives", prChannelName, "packages"));
1792hivesDirectory: new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives")),
1820var installPrefix = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "custom-aspire-prefix"));
1821var processPath = Path.Combine(installPrefix.FullName, "bin", "aspire");
1824Directory.CreateDirectory(Path.Combine(installPrefix.FullName, "hives", prChannelName, "packages"));
1840var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1842var localPackagesDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, "local", "packages"));
1846File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.ProjectTemplates.{localVersion}.nupkg"), string.Empty);
1859Assert.Equal(localPackagesDir.FullName.Replace('\\', '/'), package.Source);
1881var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1933var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
1984var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2030var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2034var localPackagesDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, localHiveName, "packages"));
2038File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.ProjectTemplates.{pinnedVersion}.nupkg"), string.Empty);
2064var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2067var runPackagesDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, runHiveName, "packages"));
2071File.WriteAllText(Path.Combine(runPackagesDir.FullName, $"Aspire.ProjectTemplates.{pinnedVersion}.nupkg"), string.Empty);
2098var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2101var localPackagesDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, "local", "packages"));
2106File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.{localVersion}.nupkg"), string.Empty);
2108File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.Redis.{localVersion}.nupkg"), string.Empty);
2109File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.Hosting.JavaScript.{localVersion}.nupkg"), string.Empty);
2111File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.ProjectTemplates.{localVersion}.nupkg"), string.Empty);
2112File.WriteAllText(Path.Combine(localPackagesDir.FullName, $"Aspire.AppHost.Sdk.{localVersion}.nupkg"), string.Empty);
2138var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2141var localPackagesDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, PackageChannelNames.Local, "packages"));
2143File.WriteAllText(Path.Combine(localPackagesDir.FullName, "Aspire.Hosting.13.4.0-pr.16820.g1a99aa46.nupkg"), string.Empty);
2153var expectedLocalPath = localPackagesDir.FullName.Replace('\\', '/');
2175var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2179var localHiveDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, PackageChannelNames.Local));
2194var expectedLocalPackagesPath = Path.Combine(localHiveDir.FullName, "packages").Replace('\\', '/');
2205var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2208var localPackagesDir = new DirectoryInfo(Path.Combine(hivesDir.FullName, PackageChannelNames.Local, "packages"));
2228var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2230var packagesOverrideDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "shipping"));
2232File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, $"Aspire.ProjectTemplates.{overrideVersion}.nupkg"), string.Empty);
2233File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, $"Aspire.Hosting.{overrideVersion}.nupkg"), string.Empty);
2247Assert.Equal(packagesOverrideDir.FullName.Replace('\\', '/'), aspireMapping.Source);
2257var hivesDir = new DirectoryInfo(Path.Combine(tempDir.FullName, ".aspire", "hives"));
2259var staleHiveDir = Directory.CreateDirectory(Path.Combine(hivesDir.FullName, PackageChannelNames.Daily, "packages"));
2260File.WriteAllText(Path.Combine(staleHiveDir.FullName, "Aspire.Hosting.13.4.0.nupkg"), string.Empty);
2262var packagesOverrideDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "shipping"));
2264File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, $"Aspire.Hosting.{overrideVersion}.nupkg"), string.Empty);
2277Assert.Equal(packagesOverrideDir.FullName.Replace('\\', '/'), aspireMapping.Source);
2289var packagesOverrideDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "shipping"));
2290File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, "Aspire.Hosting.13.4.1.nupkg"), string.Empty);
2291File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, "Aspire.Hosting.13.4.2.nupkg"), string.Empty);
2293File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, "Aspire.ProjectTemplates.13.4.2.nupkg"), string.Empty);
2317var packagesOverrideDir = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "shipping"));
2318File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, "Aspire.Hosting.13.4.1.nupkg"), string.Empty);
2319var nestedDir = Directory.CreateDirectory(Path.Combine(packagesOverrideDir.FullName, "nested"));
2320File.WriteAllText(Path.Combine(nestedDir.FullName, "Aspire.Hosting.13.4.2.nupkg"), string.Empty);
2322File.WriteAllText(Path.Combine(nestedDir.FullName, "Aspire.ProjectTemplates.13.4.2.nupkg"), string.Empty);
2323File.WriteAllText(Path.Combine(packagesOverrideDir.FullName, "Aspire.ProjectTemplates.13.4.2.nupkg"), string.Empty);
2344var missingDir = new DirectoryInfo(Path.Combine(tempDir.FullName, "does-not-exist"));
2352Assert.Contains(missingDir.FullName, ex.Message);
Processes\ProcessTreeGracefulShutdownServiceTests.cs (27)
28var signaler = CreateService(workspace, workspace.WorkspaceRoot.FullName, executionFactory);
36AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"),
66var signaler = CreateService(workspace, workspace.WorkspaceRoot.FullName, executionFactory, timeProvider: timeProvider);
74AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"),
100File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), string.Empty);
113var signaler = CreateService(workspace, dcpDirectory.FullName, executionFactory);
121Assert.Equal(workspace.WorkspaceRoot.FullName, capturedWorkingDirectory.FullName);
137File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), string.Empty);
144var signaler = CreateService(workspace, dcpDirectory.FullName, executionFactory);
162File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(mutableDcpDirectory.FullName), string.Empty);
166var leasedDcpPath = BundleDiscovery.GetDcpExecutablePath(leasedDcpDirectory.FullName);
172Layout = new LayoutConfiguration { LayoutPath = versionRoot.FullName }
174var signaler = CreateService(workspace, mutableDcpDirectory.FullName, executionFactory, bundleService);
225File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), string.Empty);
243dcpDirectory.FullName,
250AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"),
281File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), string.Empty);
288dcpDirectory.FullName,
295AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"),
320File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), string.Empty);
327dcpDirectory.FullName,
334AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"),
359File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), string.Empty);
366dcpDirectory.FullName,
372AppHostPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"),
405Path.Combine(workspace.WorkspaceRoot.FullName, "test.log"),
ProfileCaptureOptionsTests.cs (11)
39var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "profiles", "startup.zip");
64Assert.StartsWith(workspace.WorkspaceRoot.FullName, options.OutputPath, StringComparison.Ordinal);
74var outputDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "profiles"));
77["--capture-profile", "--capture-profile-output", outputDirectory.FullName],
83Assert.Equal(outputDirectory.FullName, Path.GetDirectoryName(options.OutputPath));
92var outputDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "profiles") + Path.DirectorySeparatorChar;
111workspace.WorkspaceRoot.FullName,
118dashboardBaseDirectory.FullName,
132workspace.WorkspaceRoot.FullName,
139dashboardBaseDirectory.FullName,
143var resolvedPath = ProfileCaptureService.ResolveRepoLocalDashboardPath(workspace.WorkspaceRoot.FullName);
ProfileCaptureServiceTests.cs (13)
94var overridePath = useDirectory ? workspace.WorkspaceRoot.FullName : managedPath;
117var managedPath = Path.Combine(managedDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.ManagedExecutableName));
122Path.Combine(managedDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.DashboardExecutableName)),
128Layout = new LayoutConfiguration { LayoutPath = layoutRoot.FullName }
153Path.Combine(managedDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.ManagedExecutableName)),
156var dashboardPath = Path.Combine(dashboardDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.DashboardExecutableName));
161Layout = new LayoutConfiguration { LayoutPath = layoutRoot.FullName }
385var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nested", "profile.zip");
527workspace.WorkspaceRoot.FullName,
541var missingPath = Path.Combine(workspace.WorkspaceRoot.FullName, "missing");
551var logPath = Path.Combine(workspace.WorkspaceRoot.FullName, "profile-service.log");
738var path = Path.Combine(workspace.WorkspaceRoot.FullName, fileName);
749outputPath ?? Path.Combine(workspace.WorkspaceRoot.FullName, "profile.zip"),
Projects\AppHostCandidateFinderTests.cs (99)
49var gitRepository = CreateGitRepository(gitListedAppHost.FullName);
54var path = Assert.Single(result.Files).FullName;
55Assert.Equal(gitListedAppHost.FullName, path);
56Assert.DoesNotContain(result.Files, file => file.FullName == diskOnlyAppHost.FullName);
74appHost.FullName
82var path = Assert.Single(result.Files).FullName;
83Assert.Equal(appHost.FullName, path);
84Assert.Equal(searchDirectory.FullName, capturedSearchRoot?.FullName);
93var missingAppHost = Path.Combine(workspace.WorkspaceRoot.FullName, "Removed", "AppHost.csproj");
94var gitRepository = CreateGitRepository(appHost.FullName, skipListedAppHost.FullName, missingAppHost);
99var path = Assert.Single(result.Files).FullName;
100Assert.Equal(appHost.FullName, path);
112var gitRepository = CreateGitRepository(agentSkillSnippetAppHost.FullName, claudeSkillSnippetAppHost.FullName);
130var gitRepository = CreateGitRepository(gitHubSkillSnippetAppHost.FullName, openCodeSkillSnippetAppHost.FullName, gitHubNonSkillAppHost.FullName);
135var path = Assert.Single(result.Files).FullName;
136Assert.Equal(gitHubNonSkillAppHost.FullName, path);
157var paths = result.Files.Select(file => file.FullName).ToHashSet();
159Assert.Equal(nonSkillAppHost.FullName, path);
169var searchRoot = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "obj"));
171var gitRepository = CreateGitRepository(appHost.FullName);
176var path = Assert.Single(result.Files).FullName;
177Assert.Equal(appHost.FullName, path);
187var gitRepository = CreateGitRepository(appHostNamedLikeExcludedDirectory.FullName, appHostInExcludedDirectory.FullName);
192var path = Assert.Single(result.Files).FullName;
193Assert.Equal(appHostNamedLikeExcludedDirectory.FullName, path);
194Assert.DoesNotContain(result.Files, file => file.FullName == appHostInExcludedDirectory.FullName);
204var gitRepository = CreateGitRepository(appHost.FullName, cachedAppHost.FullName);
206var nugetCachePath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget-cache");
210var path = Assert.Single(result.Files).FullName;
211Assert.Equal(appHost.FullName, path);
226var gitRepository = CreateGitRepository(appHost.FullName);
265var path = Assert.Single(result.Files).FullName;
266Assert.Equal(appHost.FullName, path);
292Assert.Equal(appHost.FullName, file.FullName);
316var nugetCachePath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget-cache");
320var paths = result.Files.Select(file => file.FullName).ToHashSet();
322Assert.Contains(appHost.FullName, paths);
323Assert.Contains(siblingAppHost.FullName, paths);
324Assert.DoesNotContain(cachedAppHost.FullName, paths);
340var differentlyCasedNuGetCachePath = Path.Combine(workspace.WorkspaceRoot.FullName, "NUGET-CACHE");
344var path = Assert.Single(result.Files).FullName;
345Assert.Equal(appHost.FullName, path);
346Assert.DoesNotContain(result.Files, file => file.FullName == cachedAppHost.FullName);
369var paths = result.Files.Select(file => file.FullName).ToHashSet();
371Assert.Contains(appHost.FullName, paths);
372Assert.Contains(skipListedAppHost.FullName, paths);
384var nugetCachePath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget-cache");
388var paths = result.Files.Select(file => file.FullName).ToHashSet();
390Assert.Contains(appHost.FullName, paths);
391Assert.DoesNotContain(cachedAppHost.FullName, paths);
414var path = Assert.Single(result.Files).FullName;
415Assert.Equal(appHost.FullName, path);
430var path = Assert.Single(result.Files).FullName;
431Assert.Equal(directAppHost.FullName, path);
432Assert.DoesNotContain(result.Files, file => file.FullName == nestedAppHost.FullName);
446Assert.DoesNotContain(result.Files, file => file.FullName == nestedAppHost.FullName);
456var gitRepository = CreateGitRepository(directAppHost.FullName, nestedAppHost.FullName);
461var path = Assert.Single(result.Files).FullName;
462Assert.Equal(directAppHost.FullName, path);
463Assert.DoesNotContain(result.Files, file => file.FullName == nestedAppHost.FullName);
478var paths = result.Files.Select(file => file.FullName).ToHashSet();
480Assert.Contains(csAppHost.FullName, paths);
481Assert.Contains(tsAppHost.FullName, paths);
493var gitRepository = CreateGitRepository(appHost.FullName);
525var path = Assert.Single(result.Files).FullName;
526Assert.Equal(appHost.FullName, path);
536await GitTestHelper.ConfigureGitIdentityAsync(workspace.WorkspaceRoot.FullName, outputHelper);
542await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, ".gitignore"), "legacy/\n");
544await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "add", "App/AppHost.csproj", ".gitignore");
545await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "commit", "-m", "init");
552var paths = result.Files.Select(file => file.FullName).ToHashSet();
554Assert.Contains(trackedAppHost.FullName, paths);
555Assert.Contains(untrackedTypeScriptAppHost.FullName, paths);
556Assert.DoesNotContain(ignoredAppHost.FullName, paths);
557Assert.DoesNotContain(skipListedAppHost.FullName, paths);
568await GitTestHelper.ConfigureGitIdentityAsync(workspace.WorkspaceRoot.FullName, outputHelper);
572await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "add", "src/App/AppHost.csproj", "Other/AppHost.csproj");
573await GitTestHelper.RunGitAsync(workspace.WorkspaceRoot.FullName, outputHelper, "commit", "-m", "init");
575var searchDirectory = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "src"));
581var path = Assert.Single(result.Files).FullName;
582Assert.Equal(scopedAppHost.FullName, path);
583Assert.DoesNotContain(result.Files, file => file.FullName == outsideAppHost.FullName);
610var fullPath = Path.Combine(root.FullName, relativePath.Replace('/', Path.DirectorySeparatorChar));
Projects\AppHostServerProjectTests.cs (30)
35appPath ??= _workspace.WorkspaceRoot.FullName;
44var repoRoot = _workspace.WorkspaceRoot.FullName;
52var path = _workspace.CreateDirectory("App Path With Spaces").FullName;
81var repoConfigPath = Path.Combine(repoRoot.FullName, "NuGet.Config");
94await File.WriteAllTextAsync(Path.Combine(repoRoot.FullName, "Directory.Packages.props"), "<Project />");
95await File.WriteAllTextAsync(Path.Combine(appPath.FullName, "NuGet.Config"), """
108appPath.FullName, "test.sock", repoRoot.FullName,
112projectModelPath: projectModelPath.FullName,
113restoreRootConfigDirectory: repoRoot.FullName);
117Assert.Equal(repoRoot.FullName, XDocument.Load(projectFilePath).Descendants("RestoreRootConfigDirectory").Single().Value);
124WorkingDirectory = projectModelPath.FullName,
150Assert.Equal(new[] { parentFeed.FullName, feed.FullName }.Order(StringComparer.Ordinal), sources.Order(StringComparer.Ordinal));
303var integrationProjectPath = Path.Combine(integrationDirectory.FullName, "Aspire.Hosting.PostgreSQL.csproj");
338var integrationProjectPath = Path.Combine(integrationDirectory.FullName, "Aspire.Hosting.Redis.csproj");
364var firstProjectPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "Integration", "Integration.csproj");
365var secondProjectPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "integration", "Integration.csproj");
389var appPath = _workspace.WorkspaceRoot.FullName;
435var appPath = _workspace.WorkspaceRoot.FullName;
462var appPath = _workspace.WorkspaceRoot.FullName;
471var aspireConfigPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
482var prOldHivePath = prOldHive.FullName;
483var prNewHivePath = prNewHive.FullName;
560Assert.Contains(prNewHive.FullName, restoreSources);
561Assert.DoesNotContain(prOldHive.FullName, restoreSources);
573var appPath = _workspace.WorkspaceRoot.FullName;
625var appPath = _workspace.WorkspaceRoot.FullName;
664var appPath = _workspace.WorkspaceRoot.FullName;
720DumpDirectoryTree(dir.FullName, output, indent + " ");
Projects\AppHostWorkloadIdTests.cs (18)
14var target = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
15File.WriteAllText(target.FullName, "<Project />");
17var linkPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.Link.csproj");
18TryCreateSymlink(linkPath, target.FullName, isDirectory: false);
31var target = new FileInfo(Path.Combine(nestedDirectory.FullName, "AppHost.csproj"));
32File.WriteAllText(target.FullName, "<Project />");
34var linkDirectoryPath = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
35TryCreateSymlink(linkDirectoryPath, realDirectory.FullName, isDirectory: true);
49var target = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
50File.WriteAllText(target.FullName, "<Project />");
53AppHostWorkloadId.Create(target.FullName),
54AppHostWorkloadId.Create(Path.Combine(nestedDirectory.FullName, "..", "AppHost.csproj")));
61var target = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
62File.WriteAllText(target.FullName, "<Project />");
64var actual = AppHostWorkloadId.Create(target.FullName);
65var differentCasing = AppHostWorkloadId.Create(target.FullName.ToUpperInvariant());
81var target = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
82File.WriteAllText(target.FullName, "<Project />");
Projects\DotNetAppHostProjectTests.cs (152)
325Assert.Equal(appHostFile.FullName, projectFile.FullName);
334Assert.Equal(appHostFile.FullName, projectFile.FullName);
368Assert.Equal(appHostFile.FullName, projectFile.FullName);
377Assert.Equal(appHostFile.FullName, projectFile.FullName);
407var socketPath = CreateMatchingSocketFile(appHostFile.FullName, int.MaxValue - 1);
424var socketPath = CreateMatchingSocketFile(appHostFile.FullName, Environment.ProcessId);
457Assert.Equal(bundleRoot.FullName, env["AspireCliBundlePath"]);
482Assert.Equal(appHostFile.FullName, projectFile.FullName);
486Assert.Equal(bundleRoot.FullName, env!["AspireCliBundlePath"]);
487Assert.Equal(Path.Combine(bundleRoot.FullName, BundleDiscovery.DcpDirectoryName), env![BundleDiscovery.DcpPathEnvVar]);
516var customDcpDirectory = Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, "custom-dcp"));
517File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(customDcpDirectory.FullName), "");
519_workspace.WorkspaceRoot.FullName,
542Assert.Equal(customDcpDirectory.FullName, env![BundleDiscovery.DcpPathEnvVar]);
555[BundleDiscovery.DcpPathEnvVar] = customDcpDirectory.FullName,
569var inheritedDcpDirectory = Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, "inherited-dcp")).FullName;
571var inheritedDashboardPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "inherited-dashboard");
602Assert.Equal(bundleRoot.FullName, env["AspireCliBundlePath"]);
632: Path.Combine(_workspace.WorkspaceRoot.FullName, "missing-dcp");
635: Path.Combine(_workspace.WorkspaceRoot.FullName, "missing-dashboard");
868Assert.Equal(appHostFile.FullName, projectFile.FullName);
902var repoLocalTerminalHost = Path.Combine(_workspace.WorkspaceRoot.FullName, "repo-local-terminalhost");
931Path.Combine(bundleRoot.FullName, BundleDiscovery.ManagedDirectoryName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.ManagedExecutableName)),
962var customTerminalHost = Path.Combine(_workspace.WorkspaceRoot.FullName, "my-custom-terminal-host");
1030var runWorkingDirectory = Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, "run-cwd"));
1031var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
1032var targetPathJson = JsonSerializer.Serialize(targetPath.FullName);
1033var runWorkingDirectoryJson = JsonSerializer.Serialize(runWorkingDirectory.FullName);
1094Assert.Equal(appHostFile.FullName, projectFile.FullName);
1095Assert.Equal(appHostCommand.FullName, command);
1096Assert.Equal(runWorkingDirectory.FullName, workingDirectory.FullName);
1170GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1181"--apphost", appHostFile.FullName,
1182"--log-file", Path.Combine(_workspace.WorkspaceRoot.FullName, "child.log"),
1191Assert.Equal(appHostCommand.FullName, command);
1250GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1254Assert.Equal(appHostCommand.FullName, command);
1313GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1356GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1399GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1440GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1488GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1532GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1583GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1590Assert.Equal(appHostCommand.FullName, command);
1617var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
1648Assert.Equal(appHostFile.FullName, projectFile.FullName);
1672var missingTargetPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "bin", "missing", "AppHost.dll");
1683var outputDirectory = Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, "bin", Guid.NewGuid().ToString("N")));
1684var targetPath = Path.Combine(outputDirectory.FullName, "AppHost.dll");
1696var missingRunCommand = Path.Combine(_workspace.WorkspaceRoot.FullName, "bin", "missing", "AppHost");
1710() => CreateAppHostInfoJson(runCommand: appHostCommand.FullName, targetFrameworks: "net10.0;net9.0"));
1739() => CreateAppHostInfoJson(runCommand: appHostCommand.FullName),
1752() => CreateAppHostInfoJson(runCommand: appHostCommand.FullName),
1767var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
1804Assert.Equal(appHostCommand.FullName, command);
1853GetProjectItemsAndPropertiesAsyncCallback = (_, _, _, _, _) => (0, CreateAppHostInfoJson(runCommand: appHostCommand.FullName)),
1888var escapedTargetPath = targetPath.FullName.Replace("\\", "\\\\", StringComparison.Ordinal).Replace("\"", "\\\"", StringComparison.Ordinal);
1916Assert.Equal(["exec", targetPath.FullName, "--from-msbuild", "--explicit", "1"], args);
1938var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
1977Assert.Equal(appHostCommand.FullName, command);
2003var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
2040Assert.Equal(appHostCommand.FullName, command);
2064var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
2101Assert.Equal(appHostFile.FullName, projectFile.FullName);
2129var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
2161Assert.Equal(appHostFile.FullName, projectFile.FullName);
2186var appHostCommandJson = JsonSerializer.Serialize(appHostCommand.FullName);
2227Assert.Equal(appHostCommand.FullName, command);
2265Assert.Equal(appHostFile.FullName, projectFile.FullName);
2267Assert.Equal(bundleRoot.FullName, env["AspireCliBundlePath"]);
2274Assert.Equal(appHostFile.FullName, projectFile.FullName);
2293Assert.Equal(appHostFile.FullName, projectFile.FullName);
2298Assert.Equal(Path.Combine(bundleRoot.FullName, BundleDiscovery.DcpDirectoryName), env![BundleDiscovery.DcpPathEnvVar]);
2347Assert.Equal(appHostFile.FullName, projectFile.FullName);
2350Assert.Equal(bundleRoot.FullName, env["AspireCliBundlePath"]);
2357Assert.Equal(appHostFile.FullName, projectFile.FullName);
2446Assert.Equal(appHostFile.FullName, projectFile.FullName);
2503Assert.Equal(appHostFile.FullName, projectFile.FullName);
2511Assert.Equal(appHostFile.FullName, projectFile.FullName);
2545Assert.Equal(appHostFile.FullName, projectFile.FullName);
2553Assert.Equal(appHostFile.FullName, projectFile.FullName);
2594Assert.Equal(appHostFile.FullName, projectFile.FullName);
2605Assert.Equal(appHostFile.FullName, projectFile.FullName);
2640Assert.Equal(appHostFile.FullName, projectFile.FullName);
2651Assert.Equal(appHostFile.FullName, projectFile.FullName);
2715TestSymlinkHelper.TryCreateSymlink(appHostSymlink, appHostFile.FullName, isDirectory: false);
2743var targetAppHostFile = new FileInfo(Path.Combine(realDirectory.FullName, "apphost.cs"));
2744File.WriteAllText(targetAppHostFile.FullName, "// target AppHost");
2747var selectedAppHostPath = Path.Combine(selectedDirectory.FullName, "apphost.cs");
2748TestSymlinkHelper.TryCreateSymlink(selectedAppHostPath, targetAppHostFile.FullName, isDirectory: false);
2750WriteAspireConfigJson(selectedDirectory.FullName, """
2780File.WriteAllText(selectedAppHostFile.FullName, "// distinct AppHost");
2994var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.cs");
3009var backchannelsDir = Path.Combine(_workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
3013var prefix = BackchannelConstants.ComputeSocketPrefix(resolvedAppHostPath, _workspace.WorkspaceRoot.FullName);
3024var outputDirectory = Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, "bin", Guid.NewGuid().ToString("N")));
3025var targetPath = Path.Combine(outputDirectory.FullName, fileName);
3033var outputDirectory = Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, "bin", Guid.NewGuid().ToString("N")));
3034var commandPath = Path.Combine(outputDirectory.FullName, fileName);
3056Assert.Equal(appHostFile.FullName, projectFile.FullName);
3135var appHost = new FileInfo(Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.cs"));
3136File.WriteAllText(appHost.FullName, content);
3151var appHost = new FileInfo(Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.cs"));
3152File.WriteAllText(appHost.FullName, content);
3164var appHost = new FileInfo(Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.cs"));
3165File.WriteAllText(appHost.FullName, $"#:package {packageId}@17.0.0");
3788Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, "outer", "inner-repo", ".git"));
4272var externalAnchor = Path.Combine(_workspace.WorkspaceRoot.FullName, "external", "anchor");
4702while (dir is not null && !File.Exists(Path.Combine(dir.FullName, "Aspire.slnx")))
4706return dir?.FullName;
4718Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, ".git"));
4720var path = Path.Combine(_workspace.WorkspaceRoot.FullName, fileName);
4755var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, fileName);
4772var projectPath = Path.Combine(_workspace.WorkspaceRoot.FullName, fileName);
4786var bundleRoot = Directory.CreateDirectory(Path.Combine(_workspace.WorkspaceRoot.FullName, Guid.NewGuid().ToString()));
4787var dcpDirectory = Directory.CreateDirectory(Path.Combine(bundleRoot.FullName, BundleDiscovery.DcpDirectoryName));
4788var managedDirectory = Directory.CreateDirectory(Path.Combine(bundleRoot.FullName, BundleDiscovery.ManagedDirectoryName));
4789var dashboardDirectory = Directory.CreateDirectory(Path.Combine(bundleRoot.FullName, BundleDiscovery.DashboardDirectoryName));
4790var terminalHostDirectory = Directory.CreateDirectory(Path.Combine(bundleRoot.FullName, BundleDiscovery.TerminalHostDirectoryName));
4791File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), "");
4793Path.Combine(managedDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.ManagedExecutableName)),
4796Path.Combine(dashboardDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.DashboardExecutableName)),
4799Path.Combine(terminalHostDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.TerminalHostExecutableName)),
4804LayoutPath = bundleRoot.FullName,
Projects\FallbackProjectParserTests.cs (24)
24var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
25File.WriteAllText(projectFile.FullName, content);
46var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
47File.WriteAllText(projectFile.FullName, content);
62var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{extension}"));
63File.WriteAllText(projectFile.FullName, """
92var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.csproj");
114var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.csproj");
139var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.csproj");
164var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.csproj");
189var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.csproj");
215var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.csproj");
254var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.csproj");
281var referencedPath = Path.Combine(webDirectory.FullName, "Web.csproj");
282var include = absolute ? referencedPath : Path.GetRelativePath(appHostDirectory.FullName, referencedPath);
284var projectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
285await File.WriteAllTextAsync(projectFile.FullName, $$"""
306var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.cs");
330var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.cs");
360var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.cs");
383var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.cs");
407var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.cs");
430var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.cs");
452var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Test.txt");
Projects\GuestAppHostProjectTests.cs (125)
69var executable = Path.Combine(root.FullName, "server");
74}.Save(root.FullName);
95await File.WriteAllTextAsync(Path.Combine(root.FullName, "apphost.mts"), "// test apphost");
102}.Save(root.FullName);
123await File.WriteAllTextAsync(Path.Combine(root.FullName, "apphost.mts"), "// test apphost");
134}.Save(root.FullName);
163var appHostFile = new FileInfo(Path.Combine(appDirectory.FullName, "apphost.mts"));
164await File.WriteAllTextAsync(appHostFile.FullName, "// test apphost");
171}.Save(root.FullName);
199using var pathOverride = new EnvVarOverride("PATH", binDirectory.FullName + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH"));
235hostRestoredBeforeBootstrap = File.Exists(Path.Combine(integrationDirectory.FullName, "installed.txt"));
243&& File.Exists(Path.Combine(appDirectory.FullName, "app-installed.txt"))
244&& File.Exists(Path.Combine(integrationDirectory.FullName, "installed.txt"));
299Assert.Equal(guestInstallExitCode == 0, File.Exists(Path.Combine(integrationDirectory.FullName, "installed.txt")));
316Assert.Equal("combined", await File.ReadAllTextAsync(Path.Combine(appDirectory.FullName, ".aspire", "modules", "aspire.mts")));
350"@test/integration", npmPath, directory.FullName, TestContext.Current.CancellationToken).DefaultTimeout();
353Assert.Equal(["install"], await File.ReadAllLinesAsync(Path.Combine(directory.FullName, "arguments.txt")));
375"@test/integration", npmPath, directory.FullName, installCts.Token);
381parentPid = await ProcessTestHelpers.WaitForProcessIdAsync(Path.Combine(directory.FullName, "parent.pid"), readinessCts.Token);
382childPid = await ProcessTestHelpers.WaitForProcessIdAsync(Path.Combine(directory.FullName, "child.pid"), readinessCts.Token);
407var outputPath = Path.Combine(_workspace.WorkspaceRoot.FullName, ".aspire", "modules");
435var outputPath = Path.Combine(_workspace.WorkspaceRoot.FullName, ".aspire", "modules");
451var filePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "Generated.java");
467var filePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "Generated.java");
481var filePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "New.java");
492var filePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "aspire_app.py");
520var directory = _workspace.WorkspaceRoot.FullName;
534var settingsPath = Path.Combine(settingsDir.FullName, "settings.json");
543var config = AspireJsonConfiguration.LoadOrCreate(_workspace.WorkspaceRoot.FullName, "13.1.0");
554var settingsPath = Path.Combine(settingsDir.FullName, "settings.json");
566var config = AspireJsonConfiguration.Load(_workspace.WorkspaceRoot.FullName);
569config.Save(_workspace.WorkspaceRoot.FullName);
572var reloaded = AspireJsonConfiguration.Load(_workspace.WorkspaceRoot.FullName);
740var settingsPath = Path.Combine(settingsDir.FullName, "settings.json");
753var config = AspireJsonConfiguration.Load(_workspace.WorkspaceRoot.FullName);
756config.Save(_workspace.WorkspaceRoot.FullName);
784config.Save(_workspace.WorkspaceRoot.FullName);
787var settingsPath = AspireJsonConfiguration.GetFilePath(_workspace.WorkspaceRoot.FullName);
800var launchSettingsPath = Path.Combine(propertiesDir.FullName, "launchSettings.json");
889var aspireConfigPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1070var legacyAppHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, LegacyTypeScriptAppHost.LegacyAppHostFileName);
1073Path.Combine(_workspace.WorkspaceRoot.FullName, LegacyTypeScriptAppHost.ModernAppHostFileName),
1092Assert.Equal(legacyAppHostPath, projectFactory.AppHostFile?.FullName);
1094_workspace.WorkspaceRoot.FullName,
1097_workspace.WorkspaceRoot.FullName,
1118var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1126var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1170var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1183var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1191var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1194Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.mts"),
1196var installScriptPath = Path.Combine(_workspace.WorkspaceRoot.FullName, OperatingSystem.IsWindows() ? "install.cmd" : "install.sh");
1200var installMarkerPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "install.marker");
1225var manifestPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "package.json");
1229await File.WriteAllTextAsync(Path.Combine(_workspace.WorkspaceRoot.FullName, "package.after-install.json"), installedManifest);
1271var savedConfig = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1287Assert.Equal(appHostPath, factory.AppHostFile?.FullName);
1302var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1310var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1350var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1358var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1396var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1404var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1448var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1456var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1478var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1490var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1499var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1502var serverProject = new FakeSucceedingAppHostServerProject(_workspace.WorkspaceRoot.FullName);
1531var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1540var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1549var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1552var serverProject = new FakeSucceedingAppHostServerProject(_workspace.WorkspaceRoot.FullName);
1583var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1593var socketPath = CreateMatchingSocketFile(_workspace.WorkspaceRoot.FullName, int.MaxValue - 1);
1607var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.mts");
1609var identity = Path.Combine(_workspace.WorkspaceRoot.FullName, "server", "AppHostServer.csproj");
1629var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1638var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1662var serverProject = new FakeFailingAppHostServerProject(_workspace.WorkspaceRoot.FullName);
1685var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1696var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1704var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1742var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1753var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1762var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1781var serverProject = new FakeSucceedingAppHostServerProject(_workspace.WorkspaceRoot.FullName);
1803var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1813var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1822var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1840var serverProject = new FakeFailingAppHostServerProject(_workspace.WorkspaceRoot.FullName);
1860var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1870var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1879var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1907var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
1937var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1954var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
1979var reloaded = AspireConfigFile.Load(_workspace.WorkspaceRoot.FullName);
2053var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
2102var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
2193var appHostFile = new FileInfo(Path.Combine(root.FullName, "apphost.mts"));
2194var executable = Path.Combine(root.FullName, "server");
2195await File.WriteAllTextAsync(appHostFile.FullName, "// test apphost");
2200}.Save(root.FullName);
2250var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
2277var secretsFilePath = secretsFileName is null ? null : Path.Combine(_workspace.WorkspaceRoot.FullName, secretsFileName);
2312var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
2327new FileInfo(Path.Combine(_workspace.WorkspaceRoot.FullName, "package.json")));
2364var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2372var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
2454var configPath = Path.Combine(_workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2462var appHostPath = Path.Combine(_workspace.WorkspaceRoot.FullName, "apphost.ts");
2544var backchannelsDir = Path.Combine(_workspace.WorkspaceRoot.FullName, ".aspire", "cli", "bch");
2548var prefix = BackchannelConstants.ComputeSocketPrefix(resolvedAppHostPath, _workspace.WorkspaceRoot.FullName);
2581var logFilePath = Path.Combine(_workspace.WorkspaceRoot.FullName, $"test-guest-{Guid.NewGuid()}.log");
2657var devCertificatePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "aspire-dev-cert.pem");
2673Assert.False(Directory.Exists(Path.Combine(_workspace.WorkspaceRoot.FullName, "bundles")));
2679var devCertificatePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "aspire-dev-cert.pem");
2700var lowerCaseDirectory = Path.Combine(_workspace.WorkspaceRoot.FullName, "certificates");
2701var upperCaseDirectory = Path.Combine(_workspace.WorkspaceRoot.FullName, "CERTIFICATES");
2754var existingBundlePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "existing-ca-certs.pem");
2755var inheritedBundlePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "inherited-ca-certs.pem");
2756var devCertificateDirectory = Path.Combine(homeDirectory.FullName, ".aspire", "dev-certs");
2779homeDirectory.FullName,
2829var devCertificatePath = Path.Combine(_workspace.WorkspaceRoot.FullName, "aspire-dev-cert.pem");
Projects\GuestRuntimeTests.cs (37)
134Assert.Contains(appHostFile.FullName, launcher.LastArgs);
195Assert.Equal(["--project", directory.FullName], launcher.Calls[0].Args);
220Assert.Equal(["--no-install", "tsx", "--tsconfig", "tsconfig.apphost.json", appHostFile.FullName], call.Args);
285var appHostFile = new FileInfo(Path.Combine(directory.FullName, "apphost.ts"));
312Assert.Equal(new[] { "tsx", "--tsconfig", "tsconfig.apphost.json", appHostFile.FullName }, Assert.IsType<string[]>(executeActivity.GetTagItem(ProfilingTelemetry.Tags.ProcessCommandArgs)));
491Assert.Equal(["--no-install", "tsx", "--tsconfig", "tsconfig.apphost.json", appHostFile.FullName, "--operation", "publish"], call.Args);
605var appHostFile = new FileInfo(Path.Combine(root.FullName, "AppHost.java"));
649Assert.Equal(new[] { "tsx", appHostFile.FullName }, launcher.LastArgs);
667Assert.Equal(new[] { "--dir", directory.FullName }, launcher.LastArgs);
685Assert.Equal(appHostFile.FullName, launcher.LastArgs[0]);
778temporaryDirectory.FullName,
1251Assert.True(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "classes", ".aspire-compile-stamp")));
1296var input = Path.Combine(workspace.WorkspaceRoot.FullName, relativeInput.Replace('/', Path.DirectorySeparatorChar));
1317var classFile = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.class");
1345File.Delete(Path.Combine(workspace.WorkspaceRoot.FullName, relativeInput.Replace('/', Path.DirectorySeparatorChar)));
1360var pom = Path.Combine(workspace.WorkspaceRoot.FullName, "pom.xml");
1382var dependencies = Path.Combine(workspace.WorkspaceRoot.FullName, "target", "dependency");
1411var dependencies = Path.Combine(workspace.WorkspaceRoot.FullName, "target", "dependency");
1440var unrelated = Path.Combine(workspace.WorkspaceRoot.FullName, "vendor", "nested", "Vendored.java");
1482var nested = Path.Combine(workspace.WorkspaceRoot.FullName, "config", "Resources.java");
1506Path.Combine(workspace.WorkspaceRoot.FullName, "classes", "config", "Resources.class"),
1507Path.Combine(workspace.WorkspaceRoot.FullName, "node_modules", "vendor", "Vendored.java"),
1508Path.Combine(workspace.WorkspaceRoot.FullName, ".gradle", "caches", "Cached.java")
1553var unreadable = Path.Combine(workspace.WorkspaceRoot.FullName, "src", "main", "java", "locked");
1596Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "classes", ".aspire-compile-stamp")));
1622var appHostFile = new FileInfo(Path.Combine(root.FullName, "AppHost.java"));
1623File.WriteAllText(appHostFile.FullName, "class AppHost { }");
1624File.WriteAllText(Path.Combine(root.FullName, "Helper.java"), "class Helper { }");
1626var generated = Path.Combine(root.FullName, ".aspire", "modules", "com", "example");
1630var sources = Path.Combine(root.FullName, "src", "main", "java", "com", "example");
1634Directory.CreateDirectory(Path.Combine(root.FullName, "classes"));
1645foreach (var file in Directory.EnumerateFiles(root.FullName, "*", SearchOption.AllDirectories))
1651foreach (var directory in Directory.EnumerateDirectories(root.FullName, "*", SearchOption.AllDirectories))
1656Directory.SetLastWriteTimeUtc(root.FullName, timestampUtc);
1661var stamp = Path.Combine(root.FullName, "classes", ".aspire-compile-stamp");
1669var binDirectory = Directory.CreateDirectory(Path.Combine(root.FullName, runtimeDirectory, "bin"));
1670var executable = Path.Combine(binDirectory.FullName, OperatingSystem.IsWindows() ? $"{command}.exe" : command);
Projects\JavaAppHostToolchainResolverTests.cs (29)
357File.WriteAllText(Path.Combine(moduleDirectory.FullName, useMaven ? "pom.xml" : "build.gradle"), "");
388appHostDirectory.FullName,
401appHostDirectory.FullName,
404["MAVEN_OPTS"] = $"-Dmaven.repo.local={localRepository.FullName}"
412appHostDirectory.FullName,
425appHostDirectory.FullName,
428["MAVEN_OPTS"] = $"-Dmaven.repo.local={localRepository.FullName}"
433File.Exists(Path.Combine(resolution.ProjectDirectory.FullName, "target", "aspire-deps", "library-1.0-SNAPSHOT.jar")),
454appHostDirectory.FullName,
467appHostDirectory.FullName,
470["MAVEN_OPTS"] = $"-Dmaven.repo.local={localRepository.FullName}"
486File.WriteAllText(Path.Combine(appHostDirectory.FullName, "pom.xml"), "<project />");
493appHostDirectory.FullName,
523File.WriteAllText(Path.Combine(libraryDirectory.FullName, "pom.xml"), """
535var librarySources = Directory.CreateDirectory(Path.Combine(libraryDirectory.FullName, "src", "main", "java", "com", "example"));
537Path.Combine(librarySources.FullName, "Library.java"),
541File.WriteAllText(Path.Combine(appHostProjectDirectory.FullName, "pom.xml"), """
561Path.Combine(appHostProjectDirectory.FullName, "src", "main", "java"));
563Path.Combine(appHostDirectory.FullName, "AppHost.java"),
577Path.Combine(wrapperDirectory.FullName, "maven-wrapper.properties"));
598File.WriteAllText(Path.Combine(appHostProjectDirectory.FullName, "pom.xml"), """
607Path.Combine(appHostProjectDirectory.FullName, "src", "main", "java"));
609Path.Combine(appHostDirectory.FullName, "AppHost.java"),
623Path.Combine(wrapperDirectory.FullName, "maven-wrapper.properties"));
697Directory.CreateDirectory(Path.Combine(innerCheckout.FullName, ".git"));
698File.WriteAllText(Path.Combine(innerCheckout.FullName, useMaven ? "pom.xml" : "build.gradle"), "");
703Assert.Contains(innerCheckout.FullName, ex.Message);
832Assert.Equal(workspace.Path, resolution.ProjectDirectory.FullName);
905Assert.Equal(scriptPath, Path.GetFullPath(Path.Combine(appHostDirectory.FullName, initScriptArgument)));
Projects\LanguageInfoTests.cs (9)
65File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"), "");
67var result = s_typescript.FindInDirectory(workspace.WorkspaceRoot.FullName);
76File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "MyApp.csproj"), "");
78var result = s_csharp.FindInDirectory(workspace.WorkspaceRoot.FullName);
87var nested = Path.Combine(workspace.WorkspaceRoot.FullName, "src", "AppHost");
91var result = s_csharp.FindInDirectory(workspace.WorkspaceRoot.FullName);
101var deep = Path.Combine(workspace.WorkspaceRoot.FullName, "a", "b", "c", "d", "e", "f");
105var result = s_csharp.FindInDirectory(workspace.WorkspaceRoot.FullName);
114var result = s_csharp.FindInDirectory(workspace.WorkspaceRoot.FullName);
Projects\NativeAppHostServerProjectTests.cs (17)
32new AspireConfigFile { Features = new() { [KnownFeatures.AppHostServerV2] = true } }.Save(enabled.FullName);
33new AspireConfigFile { Features = new() { [KnownFeatures.AppHostServerV2] = false } }.Save(disabled.FullName);
39using var project = Assert.IsType<NativeAppHostServerProject>(await factory.CreateAsync(nested.FullName));
40Assert.Equal(nested.FullName, project.AppDirectoryPath);
41var managed = await factory.CreateAsync(disabled.FullName);
64var executable = Path.Combine(serverDirectory.FullName, "server");
65var contract = Path.Combine(serverDirectory.FullName, "ats-contract.json");
69var managed = Path.Combine(managedDirectory.FullName, BundleDiscovery.GetExecutableFileName("aspire-managed"));
72var entryPoint = Path.Combine(providerDirectory.FullName, "host.mjs");
74await File.WriteAllTextAsync(Path.Combine(providerDirectory.FullName, "metadata.json"), "{}");
75await File.WriteAllTextAsync(Path.Combine(providerDirectory.FullName, "aspire.apphost-server.json"),
428var entryPoint = Path.Combine(root.FullName, "host.mjs");
430await File.WriteAllTextAsync(Path.Combine(root.FullName, "aspire.apphost-server.json"), new JsonObject
455await File.WriteAllTextAsync(Path.Combine(managedDirectory.FullName, BundleDiscovery.GetExecutableFileName("aspire-managed")), "");
458var entryPoint = Path.Combine(providerDirectory.FullName, "host.mjs");
460await File.WriteAllTextAsync(Path.Combine(providerDirectory.FullName, "metadata.json"), "{}");
461await File.WriteAllTextAsync(Path.Combine(providerDirectory.FullName, "aspire.apphost-server.json"),
Projects\PrebuiltAppHostServerTests.cs (178)
38var path = Path.Combine(workspace.WorkspaceRoot.FullName, "IntegrationRestore.csproj");
55var path = Path.Combine(workspace.WorkspaceRoot.FullName, "IntegrationRestore.csproj");
68var path = Path.Combine(workspace.WorkspaceRoot.FullName, "IntegrationRestore.csproj");
138var projectPath = Path.Combine(projectDirectory.FullName, "PackageDowngrade.csproj");
153var nuGetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
161<add key="test" value="{{feedDirectory.FullName}}" />
168WorkingDirectory = projectDirectory.FullName,
179startInfo.ArgumentList.Add(packagesDirectory.FullName);
232Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"),
251mappings: [new PackageMapping("Aspire*", identityPackageSource.FullName)],
277workspace.WorkspaceRoot.FullName,
281packageSourceOverride: explicitPackageSource.FullName,
289workspace.WorkspaceRoot.FullName,
295globalPackagesFolderOverride: packagesDirectory.FullName,
300packagesDirectory.FullName,
307packagesDirectory.FullName,
315var overlay = XDocument.Load(overlayFile.FullName);
318GetPackagePatternsForSource(overlay, explicitPackageSource.FullName));
321GetPackagePatternsForSource(overlay, identityPackageSource.FullName));
450var integrationProjectPath = Path.Combine(integrationDirectory.FullName, "MyIntegration.csproj");
461var projectPath = Path.Combine(projectDirectory.FullName, "GeneratedClosure.csproj");
462var nuGetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
471restoreDirectory.FullName,
480Path.Combine(projectDirectory.FullName, "Directory.Build.props"),
482restoreDirectory.FullName,
483Path.Combine(restoreDirectory.FullName, "obj"),
484workspace.WorkspaceRoot.FullName,
489WorkingDirectory = projectDirectory.FullName,
508Assert.True(File.Exists(Path.Combine(restoreDirectory.FullName, "obj", IntegrationClosureBuilder.ProjectAssetsFileName)));
509Assert.True(File.Exists(Path.Combine(restoreDirectory.FullName, "bin", "Debug", "net10.0", "GeneratedClosure.dll")));
510Assert.False(Directory.Exists(Path.Combine(projectDirectory.FullName, "obj")));
511Assert.False(Directory.Exists(Path.Combine(projectDirectory.FullName, "bin")));
514Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureSourcesFileName));
519await File.ReadAllLinesAsync(Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureMetadataFileName)));
522await File.ReadAllLinesAsync(Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureTargetsFileName)));
525await File.ReadAllLinesAsync(Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ProjectRefAssemblyNamesFileName)));
555var projectIntegrationPath = Path.Combine(projectIntegrationDirectory.FullName, "ProjectIntegration.csproj");
646.Save(Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"));
651packageSourceOverride: feedDirectory.FullName,
661var generatedProjectPath = Path.Combine(generatedProjectDirectory.FullName, "IntegrationRestore.csproj");
665restoreDirectory.FullName,
669Path.Combine(generatedProjectDirectory.FullName, "Directory.Build.props"),
671restoreDirectory.FullName,
672Path.Combine(restoreDirectory.FullName, "obj"),
674Path.Combine(workspace.WorkspaceRoot.FullName, "packages")).ToString());
676Path.Combine(generatedProjectDirectory.FullName, "Directory.Packages.props"),
692Assert.Equal([feedDirectory.FullName], configuredSources);
696GetPackagePatternsForSource(restoreConfig, feedDirectory.FullName));
700WorkingDirectory = generatedProjectDirectory.FullName,
708startInfo.Environment["NUGET_PACKAGES"] = workspace.CreateDirectory("project-packages").FullName;
726projectIntegrationDirectory.FullName,
733Assert.Equal(feedDirectory.FullName, projectSource.Attribute("value")?.Value);
739Path.Combine(restoreDirectory.FullName, "obj", IntegrationClosureBuilder.ProjectAssetsFileName)));
745Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureSourcesFileName));
747Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureMetadataFileName));
885var server = CreatePrebuiltAppHostServer(workspace, appPath: appHostDirectory.FullName);
892var normalizedWorkspaceRoot = PathNormalizer.ResolveToFilesystemPath(workspace.WorkspaceRoot.FullName);
923mappings: [new PackageMapping("Aspire*", packageSource.FullName)],
947Assert.Equal([packageSource.FullName], GetConfiguredPackageSources(nuGetClient));
968mappings: [new PackageMapping("Aspire*", identityPackageSource.FullName)],
992packageSourceOverride: packageSourceOverride.FullName,
997[packageSourceOverride.FullName, identityPackageSource.FullName],
1019mappings: [new PackageMapping("Aspire*", packageSource.FullName)],
1069mappings: [new PackageMapping("Aspire*", packageSource.FullName)],
1096Assert.DoesNotContain(packageSource.FullName, GetConfiguredPackageSources(nuGetClient));
1114var firstServer = CreateServer(firstAppHost.FullName);
1115var secondServer = CreateServer(secondAppHost.FullName);
1122var normalizedWorkspaceRoot = PathNormalizer.ResolveToFilesystemPath(workspace.WorkspaceRoot.FullName);
1150var linkDirectoryPath = Path.Combine(workspace.WorkspaceRoot.FullName, "linked-apphost");
1151TestSymlinkHelper.TryCreateSymlink(linkDirectoryPath, realDirectory.FullName);
1156Assert.Equal(realCacheDirectory.FullName, linkCacheDirectory.FullName);
1166await File.WriteAllTextAsync(Path.Combine(lexicalWorkspace.FullName, AspireConfigFile.FileName), "{}");
1168var linkedAppHostPath = Path.Combine(lexicalWorkspace.FullName, "apphost");
1169TestSymlinkHelper.TryCreateSymlink(linkedAppHostPath, externalAppHost.FullName);
1176Path.Combine(lexicalWorkspace.FullName, ".aspire", "integrations", "apphosts")) + Path.DirectorySeparatorChar,
1177linkedCacheDirectory.FullName,
1295var doc = XDocument.Load(overlayFile.FullName);
1305var overlayDirectory = overlayFile.Directory!.FullName;
1355var doc = XDocument.Load(overlayFile.FullName);
1363var overlayDirectory = overlayFile.Directory!.FullName;
1767var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
1780var doc = XDocument.Load(overlayFile.FullName);
1789var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
1813var doc = XDocument.Load(overlayFile.FullName);
1823var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
1842var doc = XDocument.Load(overlayFile.FullName);
1855var overlayDirectory = overlayFile.Directory!.FullName;
1882var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
1898var doc = XDocument.Load(overlayFile.FullName);
1911var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "integration-packages");
1936var doc = XDocument.Load(overlayFile.FullName);
1956mappings: [new PackageMapping("Aspire*", identityPackageSource.FullName)],
1968packageSourceOverride: packageSourceOverride.FullName,
1972var doc = XDocument.Load(overlayFile.FullName);
1975GetPackagePatternsForSource(doc, packageSourceOverride.FullName));
1978GetPackagePatternsForSource(doc, identityPackageSource.FullName));
2006var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
2022var doc = XDocument.Load(overlayFile.FullName);
2032var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
2045var doc = XDocument.Load(overlayFile.FullName);
2075var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
2097var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
2119var packageSourceOverride = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-packages");
2285appPath ?? workspace.WorkspaceRoot.FullName,
2385var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2453Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "integrations", "package-restore")),
2498Path.Combine("aspire-pr-hive", "packages")).FullName;
2529var packageSourceOverride = workspace.CreateDirectory("integration-packages").FullName;
2560Path.Combine("aspire-pr-hive", "packages")).FullName;
2592var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2602mappings: [new PackageMapping("Aspire*", packageSource.FullName)],
2624Assert.Equal([packageSource.FullName], GetConfiguredPackageSources(nuGetClient));
2640var packageSourceUri = new Uri(packageSource.FullName).AbsoluteUri;
2641var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2691var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2703new PackageMapping("Aspire*", hivePackageSource.FullName),
2722packageSourceOverride: explicitPackageSource.FullName);
2725Assert.Equal([explicitPackageSource.FullName], GetConfiguredPackageSources(nuGetClient));
2726Assert.DoesNotContain(hivePackageSource.FullName, GetConfiguredPackageSources(nuGetClient));
2741var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2788var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2830var missingPackageSource = Path.Combine(workspace.WorkspaceRoot.FullName, "this-hive-was-deleted");
2832var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2884workspace.WorkspaceRoot.FullName,
2889var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2955var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
3039workspace.WorkspaceRoot.FullName,
3049generatedProject = XDocument.Load(projectFilePath.FullName);
3113var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
3119var ambientConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
3151generatedProject = XDocument.Load(projectFilePath.FullName);
3241workspace.WorkspaceRoot.FullName,
3250workspace.WorkspaceRoot.FullName,
3258Path.Combine(workspace.WorkspaceRoot.FullName, AspireJsonConfiguration.SettingsFolder),
3305Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
3387WriteDependencyGraphSpec(projectFilePath, (projectFilePath.FullName, credentialBearingSource));
3394Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"),
3448WriteDependencyGraphSpec(projectFilePath, (projectFilePath.FullName, source));
3455Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config"),
3520var ambientConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
3570var ambientConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
3650var ambientConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
3727var ambientConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NuGet.Config");
3808WriteDependencyGraphSpec(projectFilePath, (projectFilePath.FullName, channelSource));
3872(projectFilePath.FullName, PackageSources.NuGetOrg),
3938[generatedProjectFile.FullName] = new
4072var localHive = workspace.CreateDirectory("local-aspire-hive").FullName;
4074var aspireConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
4136workspace.WorkspaceRoot.FullName,
4151generatedProject = XDocument.Load(projectFilePath.FullName);
4231var config = AspireConfigFile.LoadOrCreate(projectDirectory.FullName);
4233config.Save(projectDirectory.FullName);
4270appPath: projectDirectory.FullName,
4288Assert.Equal(projectDirectory.FullName, restoreWorkingDirectory);
4699var firstSourcePath = Path.Combine(firstPackageRoot.FullName, "Aspire.Hosting.Redis.dll");
4700var secondSourcePath = Path.Combine(secondPackageRoot.FullName, "Aspire.Hosting.Redis.dll");
4744var firstPackagePath = Path.Combine(firstPackageRoot.FullName, "Aspire.Hosting.Redis.dll");
4745var secondPackagePath = Path.Combine(secondPackageRoot.FullName, "Aspire.Hosting.Redis.dll");
4746var projectPath = Path.Combine(projectRoot.FullName, "MyIntegration.dll");
4793var sourcePath = Path.Combine(restoreDirectory.FullName, "MyIntegration.dll ");
4797Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureSourcesFileName),
4800Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureMetadataFileName),
4803Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureTargetsFileName),
4805var intermediateOutputPath = Path.Combine(restoreDirectory.FullName, "obj");
4809restoreDirectory.FullName,
4915File.WriteAllText(Path.Combine(terminalDirectory.FullName, BundleDiscovery.GetExecutableFileName(BundleDiscovery.TerminalHostExecutableName)), "native");
4918managedDirectory.FullName,
4922return new LayoutConfiguration { LayoutPath = layoutRoot.FullName };
4966var sourcePath = Path.Combine(sourceRoot.FullName, relativePath.Replace('/', Path.DirectorySeparatorChar));
4986File.WriteAllLines(Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureMetadataFileName), metadataLines);
4987File.WriteAllLines(Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureSourcesFileName), sourcePaths);
4988File.WriteAllLines(Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ClosureTargetsFileName), targetPaths);
4989File.WriteAllLines(Path.Combine(restoreDirectory.FullName, IntegrationClosureBuilder.ProjectRefAssemblyNamesFileName), projectReferenceAssemblyNames);
5008var packagePath = Path.Combine(feedDirectory.FullName, $"{packageId}.{packageVersion}.nupkg");
5048var document = XDocument.Load(Path.Combine(restoreDirectory.FullName, "Directory.Build.props"));
5122File.WriteAllText(Path.Combine(objDirectory.FullName, "project.assets.json"), projectAssetsContent);
Projects\ProcessGuestLauncherTests.cs (12)
219var descendantPidFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "descendant.pid"));
353var scriptFile = new FileInfo(Path.Combine(workspaceRoot.FullName, "spawn-descendant.ps1"));
360$"Set-Content -Path '{descendantPidFile.FullName}' -Value $child.Id" + Environment.NewLine +
362await File.WriteAllTextAsync(scriptFile.FullName, content);
364return ("powershell.exe", ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", scriptFile.FullName]);
367var shellFile = new FileInfo(Path.Combine(workspaceRoot.FullName, "spawn-descendant.sh"));
371$"echo $! > \"{descendantPidFile.FullName}\"" + Environment.NewLine +
373await File.WriteAllTextAsync(shellFile.FullName, shellContent);
375shellFile.FullName,
380return ("/bin/bash", [shellFile.FullName]);
397using var stream = new FileStream(pidFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
415throw new TimeoutException($"Timed out waiting for descendant pid file '{pidFile.FullName}'.");
Projects\ProjectLocatorTests.cs (750)
39var appHostFile = new FileInfo(Path.Combine(directory.FullName, "apphost.cs"));
51appHostFile.FullName,
71var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
72await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
75var secondAppHostProjectFile = new FileInfo(Path.Combine(secondAppHostDirectory.FullName, "SecondAppHost.csproj"));
76await File.WriteAllTextAsync(secondAppHostProjectFile.FullName, "Not a real apphost");
78var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
92AssertSameFileSystemPath(secondAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
102var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
103await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
106var secondAppHostProjectFile = new FileInfo(Path.Combine(secondAppHostDirectory.FullName, "SecondAppHost.csproj"));
107await File.WriteAllTextAsync(secondAppHostProjectFile.FullName, "Not a real apphost");
109var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
121AssertSameFileSystemPath(secondAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
131var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
132await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
135var secondAppHostProjectFile = new FileInfo(Path.Combine(secondAppHostDirectory.FullName, "SecondAppHost.csproj"));
136await File.WriteAllTextAsync(secondAppHostProjectFile.FullName, "Not a real apphost");
138var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
152AssertSameFileSystemPath(secondAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
164var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
165await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
168var secondAppHostProjectFile = new FileInfo(Path.Combine(secondAppHostDirectory.FullName, "SecondAppHost.csproj"));
169await File.WriteAllTextAsync(secondAppHostProjectFile.FullName, "Not a real apphost");
171var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
184AssertSameFileSystemPath(secondAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
197var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
198await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
201var firstAlternative = new FileInfo(Path.Combine(alternativesDirectory.FullName, "FirstAlternative.csproj"));
202await File.WriteAllTextAsync(firstAlternative.FullName, "Not a real apphost");
203var secondAlternative = new FileInfo(Path.Combine(alternativesDirectory.FullName, "SecondAlternative.csproj"));
204await File.WriteAllTextAsync(secondAlternative.FullName, "Not a real apphost");
206var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
214new FileInfo(alternativesDirectory.FullName),
219AssertSameFileSystemPath(firstAlternative.FullName, result.SelectedProjectFile?.FullName);
230var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
231await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
234var alternativeAppHost = new FileInfo(Path.Combine(alternativeDirectory.FullName, "Alternative.csproj"));
235await File.WriteAllTextAsync(alternativeAppHost.FullName, "Not a real apphost");
237var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
244new FileInfo(alternativeDirectory.FullName),
249AssertSameFileSystemPath(alternativeAppHost.FullName, result.SelectedProjectFile?.FullName);
259var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
260await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost");
262var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
273AssertSameFileSystemPath(appHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
283var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
284await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost");
286var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
295AssertSameFileSystemPath(appHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
308var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, $"AppHost{index}.csproj"));
309await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost");
313var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
340appHostProjectFiles.Select(appHostProjectFile => PathNormalizer.ResolveToFilesystemPath(appHostProjectFile.FullName)),
341results.Select(result => PathNormalizer.ResolveToFilesystemPath(result.SelectedProjectFile!.FullName)));
363var configuredPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj");
365var differentlyCasedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.csproj");
380var configuredPath = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj");
382var differentlyCasedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.csproj");
398var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
399await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
402var secondAppHostProjectFile = new FileInfo(Path.Combine(secondAppHostDirectory.FullName, "SecondAppHost.csproj"));
403await File.WriteAllTextAsync(secondAppHostProjectFile.FullName, "Not a real apphost");
405var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
419AssertSameFileSystemPath(secondAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
429var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
430await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
433var secondAppHostProjectFile = new FileInfo(Path.Combine(secondAppHostDirectory.FullName, "SecondAppHost.csproj"));
434await File.WriteAllTextAsync(secondAppHostProjectFile.FullName, "Not a real apphost");
436var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
442ValidateAppHostCallback = file => new AppHostValidationResult(IsValid: file.FullName == secondAppHostProjectFile.FullName)
455AssertSameFileSystemPath(secondAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
465var firstAppHostProjectFile = new FileInfo(Path.Combine(firstAppHostDirectory.FullName, "FirstAppHost.csproj"));
466await File.WriteAllTextAsync(firstAppHostProjectFile.FullName, "Not a real apphost");
469var secondAppHostProjectFile = new FileInfo(Path.Combine(secondAppHostDirectory.FullName, "SecondAppHost.csproj"));
470await File.WriteAllTextAsync(secondAppHostProjectFile.FullName, "Not a real apphost");
472var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
484AssertSameFileSystemPath(secondAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
514var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
536var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
537await File.WriteAllTextAsync(projectFile.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
552AssertSameFileSystemPath(projectFile.FullName, result.SelectedProjectFile?.FullName);
553AssertSameFileSystemPath(projectFile.FullName, Assert.Single(result.AllProjectFileCandidates).FullName);
557Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName)));
568var brokenAppHost = new FileInfo(Path.Combine(brokenDirectory.FullName, "BrokenAppHost.csproj"));
569await File.WriteAllTextAsync(brokenAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
572var decoyAppHost = new FileInfo(Path.Combine(decoyDirectory.FullName, "HealthyAppHost.csproj"));
573await File.WriteAllTextAsync(decoyAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
575var aspireSettingsDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire"));
577var aspireSettingsFile = new FileInfo(Path.Combine(aspireSettingsDir.FullName, "settings.json"));
578await File.WriteAllTextAsync(aspireSettingsFile.FullName, JsonSerializer.Serialize(new
580appHostPath = Path.GetRelativePath(aspireSettingsDir.FullName, brokenAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
585ValidateAppHostCallback = file => file.FullName == brokenAppHost.FullName
593var globalSettingsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json"));
603AssertSameFileSystemPath(brokenAppHost.FullName, result.SelectedProjectFile?.FullName);
607Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName)));
618var outsideAppHost = new FileInfo(Path.Combine(outsideDirectory.FullName, "OutsideAppHost.csproj"));
619await File.WriteAllTextAsync(outsideAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
622var configPath = Path.Combine(workingDirectory.FullName, AspireConfigFile.FileName);
627path = Path.GetRelativePath(workingDirectory.FullName, outsideAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
644AssertSameFileSystemPath(outsideAppHost.FullName, result.SelectedProjectFile?.FullName);
656var appHostFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
657await File.WriteAllTextAsync(appHostFile.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
688var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Missing.csproj"));
719var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "WebApp.csproj"));
720await File.WriteAllTextAsync(projectFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk.Web\"></Project>");
748var targetAppHostProjectFile = new FileInfo(Path.Combine(targetAppHostDirectory.FullName, "TargetAppHost.csproj"));
749await File.WriteAllTextAsync(targetAppHostProjectFile.FullName, "Not a real apphost");
752var otherAppHostProjectFile = new FileInfo(Path.Combine(otherAppHostDirectory.FullName, "OtherAppHost.csproj"));
753await File.WriteAllTextAsync(otherAppHostProjectFile.FullName, "Not a real apphost");
756var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
761appHostPath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, targetAppHostProjectFile.FullName)
772AssertSameFileSystemPath(targetAppHostProjectFile.FullName, foundAppHost?.FullName);
781var targetAppHostProjectFile = new FileInfo(Path.Combine(targetAppHostDirectory.FullName, "TargetAppHost.csproj"));
782await File.WriteAllTextAsync(targetAppHostProjectFile.FullName, "Not a real apphost");
785var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
790appHostPath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, targetAppHostProjectFile.FullName)
800AssertSameFileSystemPath(targetAppHostProjectFile.FullName, foundAppHost?.FullName);
812var targetAppHostProjectFile = new FileInfo(Path.Combine(targetAppHostDirectory.FullName, "TargetAppHost.csproj"));
813await File.WriteAllTextAsync(targetAppHostProjectFile.FullName, "Not a real apphost");
816var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
821appHostPath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, targetAppHostProjectFile.FullName)
830AssertSameFileSystemPath(targetAppHostProjectFile.FullName, foundAppHost?.FullName);
839var realAppHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "RealAppHost.csproj"));
840await File.WriteAllTextAsync(realAppHostProjectFile.FullName, "Not a real apphost project");
844var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
857if (projectFile.FullName == realAppHostProjectFile.FullName)
871AssertSameFileSystemPath(realAppHostProjectFile.FullName, foundAppHost?.FullName);
880var staleProjectFile = new FileInfo(Path.Combine(staleProjectDirectory.FullName, "StaleProject.csproj"));
881await File.WriteAllTextAsync(staleProjectFile.FullName, "Not a real apphost project");
883var realAppHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "RealAppHost.csproj"));
884await File.WriteAllTextAsync(realAppHostProjectFile.FullName, "Not a real apphost project");
887var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
892appHostPath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, staleProjectFile.FullName)
900if (projectFile.FullName == realAppHostProjectFile.FullName)
914AssertSameFileSystemPath(realAppHostProjectFile.FullName, foundAppHost?.FullName);
933var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
934await File.WriteAllTextAsync(aspireSettingsFile.FullName, JsonSerializer.Serialize(new
944AssertSameFileSystemPath(appHostFile.FullName, foundAppHost?.FullName);
956var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
967AssertSameFileSystemPath(appHostFile.FullName, foundAppHost?.FullName);
991var targetAppHostProjectFile = new FileInfo(Path.Combine(targetAppHostDirectory.FullName, "TargetAppHost.csproj"));
992await File.WriteAllTextAsync(targetAppHostProjectFile.FullName, "Not a real apphost");
995var decoyAppHostProjectFile = new FileInfo(Path.Combine(decoyAppHostDirectory.FullName, "DecoyAppHost.csproj"));
996await File.WriteAllTextAsync(decoyAppHostProjectFile.FullName, "Not a real apphost");
998var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1003path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, targetAppHostProjectFile.FullName).Replace(Path.DirectorySeparatorChar, '/')
1018AssertSameFileSystemPath(targetAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
1020Assert.Equal(targetAppHostProjectFile.FullName, candidate.FullName);
1029var targetAppHostProjectFile = new FileInfo(Path.Combine(targetAppHostDirectory.FullName, "TargetAppHost.csproj"));
1030await File.WriteAllTextAsync(targetAppHostProjectFile.FullName, "Not a real apphost");
1033var decoyAppHostProjectFile = new FileInfo(Path.Combine(decoyAppHostDirectory.FullName, "DecoyAppHost.csproj"));
1034await File.WriteAllTextAsync(decoyAppHostProjectFile.FullName, "Not a real apphost");
1036var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1041path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, targetAppHostProjectFile.FullName).Replace(Path.DirectorySeparatorChar, '/')
1056AssertSameFileSystemPath(targetAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
1058Assert.Equal(targetAppHostProjectFile.FullName, candidate.FullName);
1066var guestAppHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
1067await File.WriteAllTextAsync(guestAppHostFile.FullName, "// guest apphost");
1069var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1092AssertSameFileSystemPath(guestAppHostFile.FullName, result.SelectedProjectFile?.FullName);
1094Assert.Equal(guestAppHostFile.FullName, candidate.FullName);
1103var configuredAppHostProjectFile = new FileInfo(Path.Combine(configuredAppHostDirectory.FullName, "ConfiguredAppHost.csproj"));
1104await File.WriteAllTextAsync(configuredAppHostProjectFile.FullName, "Not a real apphost");
1106var realAppHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "RealAppHost.csproj"));
1107await File.WriteAllTextAsync(realAppHostProjectFile.FullName, "Not a real apphost");
1109var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1114path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, configuredAppHostProjectFile.FullName).Replace(Path.DirectorySeparatorChar, '/')
1122if (projectFile.FullName == realAppHostProjectFile.FullName)
1126if (projectFile.FullName == configuredAppHostProjectFile.FullName)
1143AssertSameFileSystemPath(realAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
1156var configuredAppHostProjectFile = new FileInfo(Path.Combine(configuredAppHostDirectory.FullName, "ConfiguredAppHost.csproj"));
1157await File.WriteAllTextAsync(configuredAppHostProjectFile.FullName, "Not a real apphost");
1159var realAppHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "RealAppHost.csproj"));
1160await File.WriteAllTextAsync(realAppHostProjectFile.FullName, "Not a real apphost");
1162var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1167path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, configuredAppHostProjectFile.FullName).Replace(Path.DirectorySeparatorChar, '/')
1175if (projectFile.FullName == realAppHostProjectFile.FullName)
1179if (projectFile.FullName == configuredAppHostProjectFile.FullName)
1196AssertSameFileSystemPath(configuredAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
1198[realAppHostProjectFile.FullName, configuredAppHostProjectFile.FullName],
1199result.AllProjectFileCandidates.Select(f => f.FullName));
1208var targetAppHostProjectFile = new FileInfo(Path.Combine(targetAppHostDirectory.FullName, "TargetAppHost.csproj"));
1209await File.WriteAllTextAsync(targetAppHostProjectFile.FullName, "Not a real apphost");
1212var otherAppHostProjectFile = new FileInfo(Path.Combine(otherAppHostDirectory.FullName, "OtherAppHost.csproj"));
1213await File.WriteAllTextAsync(otherAppHostProjectFile.FullName, "Not a real apphost");
1215var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1220path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, targetAppHostProjectFile.FullName).Replace(Path.DirectorySeparatorChar, '/')
1233AssertSameFileSystemPath(targetAppHostProjectFile.FullName, result.SelectedProjectFile?.FullName);
1235Assert.Contains(result.AllProjectFileCandidates, file => file.FullName == targetAppHostProjectFile.FullName);
1236Assert.Contains(result.AllProjectFileCandidates, file => file.FullName == otherAppHostProjectFile.FullName);
1245var settingsAppHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "SettingsAppHost.csproj"));
1246await File.WriteAllTextAsync(settingsAppHostFile.FullName, "Not a real apphost");
1251var configPath = Path.Combine(workingDirectory.FullName, AspireConfigFile.FileName);
1274AssertSameFileSystemPath(settingsAppHostFile.FullName, result.SelectedProjectFile?.FullName);
1275Assert.Contains(result.AllProjectFileCandidates, file => file.FullName == settingsAppHostFile.FullName);
1284var settingsAppHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.custom"));
1285await File.WriteAllTextAsync(settingsAppHostFile.FullName, "Not a supported apphost type");
1287var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1319var targetAppHostProjectFile = new FileInfo(Path.Combine(targetAppHostDirectory.FullName, "TargetAppHost.csproj"));
1320await File.WriteAllTextAsync(targetAppHostProjectFile.FullName, "Not a real apphost");
1323var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
1326var relativePath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, targetAppHostProjectFile.FullName);
1342AssertSameFileSystemPath(targetAppHostProjectFile.FullName, foundAppHost?.FullName);
1349var projectFile1 = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost1.csproj"));
1350await File.WriteAllTextAsync(projectFile1.FullName, "Not a real project file.");
1352var projectFile2 = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost2.csproj"));
1353await File.WriteAllTextAsync(projectFile2.FullName, "Not a real project file.");
1360AssertSameFileSystemPath(projectFile1.FullName, selectedProjectFile!.FullName);
1367var appHostProject = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1368await File.WriteAllTextAsync(appHostProject.FullName, "Not a real apphost project.");
1370var webProject = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "WebProject.csproj"));
1371await File.WriteAllTextAsync(webProject.FullName, "Not a real web project.");
1377if (projectFile.FullName == appHostProject.FullName)
1388AssertSameFileSystemPath(appHostProject.FullName, foundAppHost?.FullName);
1414var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectFileExtension}"));
1415await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1422AssertSameFileSystemPath(projectFile.FullName, returnedProjectFile!.FullName);
1432var onDiskProjectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyAppHost.csproj"));
1433await File.WriteAllTextAsync(onDiskProjectFile.FullName, "Not a real project file.");
1440var mismatchedCasePath = ToggleCase(onDiskProjectFile.FullName);
1441Assert.False(string.Equals(onDiskProjectFile.FullName, mismatchedCasePath, StringComparison.Ordinal));
1454Assert.Equal(onDiskProjectFile.FullName, result.SelectedProjectFile!.FullName);
1465var onDiskProjectFile = new FileInfo(Path.Combine(realDirectory.FullName, "RealAppHost.csproj"));
1466await File.WriteAllTextAsync(onDiskProjectFile.FullName, "Not a real project file.");
1468var linkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "LinkedAppHost");
1469TestSymlinkHelper.TryCreateSymlink(linkDirectory, realDirectory.FullName);
1485PathNormalizer.ResolvePathCasing(linkedProjectFile.FullName),
1486result.SelectedProjectFile!.FullName);
1488PathNormalizer.ResolveToFilesystemPath(linkedProjectFile.FullName),
1489result.SelectedProjectFile.FullName);
1496var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1497await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
1503AssertSameFileSystemPath(projectFile.FullName, returnedProjectFile!.FullName);
1511var legacyAppHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.ts"));
1512var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts"));
1513await File.WriteAllTextAsync(appHostFile.FullName, "// TypeScript AppHost");
1515await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName), JsonSerializer.Serialize(new
1524var globalSettingsFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json");
1536AssertSameFileSystemPath(appHostFile.FullName, returnedProjectFile!.FullName);
1538var updatedConfig = AspireConfigFile.Load(workspace.WorkspaceRoot.FullName);
1550var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
1551await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real project file.");
1559var globalSettingsFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json");
1570var settingsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName));
1573var settingsJson = await File.ReadAllTextAsync(settingsFile.FullName);
1587var appHostFile = new FileInfo(Path.Combine(srcDirectory.FullName, "apphost.ts"));
1588await File.WriteAllTextAsync(appHostFile.FullName, "// TypeScript apphost");
1590var adjacentConfigPath = Path.Combine(srcDirectory.FullName, AspireConfigFile.FileName);
1614var globalSettingsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json"));
1634AssertSameFileSystemPath(appHostFile.FullName, result.SelectedProjectFile?.FullName);
1635Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName)));
1654var appHost1File = new FileInfo(Path.Combine(appHost1Directory.FullName, "apphost.ts"));
1655await File.WriteAllTextAsync(appHost1File.FullName, "// TypeScript apphost");
1656var appHost1ConfigPath = Path.Combine(appHost1Directory.FullName, AspireConfigFile.FileName);
1666var appHost2File = new FileInfo(Path.Combine(appHost2Directory.FullName, "apphost.ts"));
1667await File.WriteAllTextAsync(appHost2File.FullName, "// TypeScript apphost");
1668var appHost2ConfigPath = Path.Combine(appHost2Directory.FullName, AspireConfigFile.FileName);
1683var globalSettingsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json"));
1704AssertSameFileSystemPath(appHost2File.FullName, result.SelectedProjectFile?.FullName);
1705Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName)));
1724var appHostFile = new FileInfo(Path.Combine(srcDirectory.FullName, "apphost.ts"));
1725await File.WriteAllTextAsync(appHostFile.FullName, "// TypeScript apphost");
1735staleConfig.Save(srcDirectory.FullName);
1738var globalSettingsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json"));
1758AssertSameFileSystemPath(appHostFile.FullName, result.SelectedProjectFile?.FullName);
1759Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName)));
1761var healedConfig = AspireConfigFile.Load(srcDirectory.FullName);
1773var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "MyAppHost.csproj"));
1774await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost");
1780var aspireSettingsDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire"));
1781var aspireSettingsFile = new FileInfo(Path.Combine(aspireSettingsDir.FullName, "settings.json"));
1783.GetRelativePath(aspireSettingsDir.FullName, appHostProjectFile.FullName)
1785await File.WriteAllTextAsync(aspireSettingsFile.FullName, JsonSerializer.Serialize(new { appHostPath = relativeAppHostPath }));
1788var globalSettingsFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "settings.global.json");
1800Assert.Equal(appHostProjectFile.FullName, foundAppHost.FullName);
1803var aspireConfigFilePath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
1817var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
1819appHostFile.FullName,
1830var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
1833Assert.Equal(appHostFile.FullName, foundFiles[0].FullName);
1842var appHostFile = new FileInfo(Path.Combine(subDir.FullName, "apphost.cs"));
1844appHostFile.FullName,
1855var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
1858Assert.Equal(appHostFile.FullName, foundFiles[0].FullName);
1868var appHostFile = new FileInfo(Path.Combine(dirWithBoth.FullName, "apphost.cs"));
1870appHostFile.FullName,
1878var csprojFile = new FileInfo(Path.Combine(dirWithBoth.FullName, "RegularProject.csproj"));
1879await File.WriteAllTextAsync(csprojFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\"></Project>");
1883var validAppHostFile = new FileInfo(Path.Combine(dirWithOnlyAppHost.FullName, "apphost.cs"));
1885validAppHostFile.FullName,
1897if (projectFile.FullName == csprojFile.FullName)
1904var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
1911var foundPaths = foundFiles.Select(f => f.FullName).ToHashSet();
1912Assert.Contains(validAppHostFile.FullName, foundPaths);
1913Assert.Contains(csprojFile.FullName, foundPaths);
1914Assert.DoesNotContain(appHostFile.FullName, foundPaths);
1923var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
1924await File.WriteAllTextAsync(appHostFile.FullName, @"using Aspire.Hosting
1931var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
1943var csprojFile = new FileInfo(Path.Combine(subDir1.FullName, "AppHost.csproj"));
1944await File.WriteAllTextAsync(csprojFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\"></Project>");
1948var appHostFile = new FileInfo(Path.Combine(subDir2.FullName, "apphost.cs"));
1950appHostFile.FullName,
1961if (projectFile.FullName == csprojFile.FullName)
1968var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
1972Assert.True(foundFiles[0].FullName.CompareTo(foundFiles[1].FullName) < 0);
1974var foundPaths = foundFiles.Select(f => f.FullName).ToHashSet();
1975Assert.Contains(csprojFile.FullName, foundPaths);
1976Assert.Contains(appHostFile.FullName, foundPaths);
1984var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
1985await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2000var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
2003Assert.Equal(projectFile.FullName, foundFile.FullName);
2011var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2013appHostFile.FullName,
2026Assert.Equal(PathNormalizer.ResolvePathCasing(appHostFile.FullName), result!.FullName);
2035var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2036await File.WriteAllTextAsync(appHostFile.FullName, @"using Aspire.Hosting;
2056var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2057await File.WriteAllTextAsync(appHostFile.FullName, "using Aspire.Hosting;");
2059var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2060await File.WriteAllTextAsync(projectFile.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2073AssertSameFileSystemPath(projectFile.FullName, result.SelectedProjectFile?.FullName);
2082var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
2084appHostFile.FullName,
2093var csprojFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "SomeProject.csproj"));
2094await File.WriteAllTextAsync(csprojFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\"></Project>");
2108var txtFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "readme.txt"));
2109await File.WriteAllTextAsync(txtFile.FullName, "Some text file");
2128var csprojFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2129await File.WriteAllTextAsync(csprojFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\"></Project>");
2133var appHostFile = new FileInfo(Path.Combine(subDir.FullName, "apphost.cs"));
2135appHostFile.FullName,
2146if (projectFile.FullName == csprojFile.FullName)
2159Assert.True(result.FullName == csprojFile.FullName || result.FullName == appHostFile.FullName);
2205? Path.Combine(executionContext.HomeDirectory.FullName, ".aspire", AspireConfigFile.FileName)
2206: Path.Combine(executionContext.WorkingDirectory.FullName, AspireConfigFile.FileName);
2320var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "MyAppHost.csproj"));
2321await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2327if (file.FullName == projectFile.FullName)
2339var directoryAsFileInfo = new FileInfo(projectDirectory.FullName);
2342AssertSameFileSystemPath(projectFile.FullName, returnedProjectFile!.FullName);
2357var directoryAsFileInfo = new FileInfo(projectDirectory.FullName);
2375var projectFile = new FileInfo(Path.Combine(projectDirectory.FullName, "UnbuildableAppHost.csproj"));
2376await File.WriteAllTextAsync(projectFile.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2384var directoryAsFileInfo = new FileInfo(projectDirectory.FullName);
2392AssertSameFileSystemPath(projectFile.FullName, result.SelectedProjectFile?.FullName);
2393Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName)));
2405var first = new FileInfo(Path.Combine(firstProjectDirectory.FullName, "FirstAppHost.csproj"));
2406await File.WriteAllTextAsync(first.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2408var second = new FileInfo(Path.Combine(secondProjectDirectory.FullName, "SecondAppHost.csproj"));
2409await File.WriteAllTextAsync(second.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2417var directoryAsFileInfo = new FileInfo(projectDirectory.FullName);
2445var brokenAppHost = new FileInfo(Path.Combine(brokenDirectory.FullName, "BrokenAppHost.csproj"));
2446await File.WriteAllTextAsync(brokenAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2450var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2455path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, brokenAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
2469new FileInfo(emptyDirectory.FullName),
2487var healthyAppHost = new FileInfo(Path.Combine(healthyDirectory.FullName, "HealthyAppHost.csproj"));
2488await File.WriteAllTextAsync(healthyAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2492var brokenAppHost = new FileInfo(Path.Combine(brokenDirectory.FullName, "BrokenAppHost.csproj"));
2493await File.WriteAllTextAsync(brokenAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2495var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2500path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, healthyAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
2506ValidateAppHostCallback = file => file.FullName == healthyAppHost.FullName
2514new FileInfo(servicesDirectory.FullName),
2519AssertSameFileSystemPath(brokenAppHost.FullName, result.SelectedProjectFile?.FullName);
2528var configuredAppHost = new FileInfo(Path.Combine(configuredDirectory.FullName, "ConfiguredAppHost.csproj"));
2529await File.WriteAllTextAsync(configuredAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2533var firstAppHost = new FileInfo(Path.Combine(firstDirectory.FullName, "FirstAppHost.csproj"));
2534await File.WriteAllTextAsync(firstAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2536var secondAppHost = new FileInfo(Path.Combine(secondDirectory.FullName, "SecondAppHost.csproj"));
2537await File.WriteAllTextAsync(secondAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2539var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2544path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, configuredAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
2556new FileInfo(servicesDirectory.FullName),
2563[firstAppHost.FullName, secondAppHost.FullName],
2564result.AllProjectFileCandidates.Select(file => file.FullName));
2573var unsupportedAppHost = new FileInfo(Path.Combine(unsupportedDirectory.FullName, "UnsupportedAppHost.csproj"));
2574await File.WriteAllTextAsync(unsupportedAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2578var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2583path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, unsupportedAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
2597new FileInfo(emptyDirectory.FullName),
2629var appHostFile = new FileInfo(Path.Combine(realDirectory.FullName, "AppHost.csproj"));
2630File.WriteAllText(appHostFile.FullName, "<Project />");
2632var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
2633TestSymlinkHelper.TryCreateSymlink(symlinkDirectory, realDirectory.FullName);
2647var brokenAppHost = new FileInfo(Path.Combine(brokenDirectory.FullName, "BrokenAppHost.csproj"));
2648await File.WriteAllTextAsync(brokenAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2651var firstHealthy = new FileInfo(Path.Combine(firstHealthyDirectory.FullName, "FirstHealthyAppHost.csproj"));
2652await File.WriteAllTextAsync(firstHealthy.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2655var secondHealthy = new FileInfo(Path.Combine(secondHealthyDirectory.FullName, "SecondHealthyAppHost.csproj"));
2656await File.WriteAllTextAsync(secondHealthy.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
2658var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
2663path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, brokenAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
2669ValidateAppHostCallback = file => file.FullName == brokenAppHost.FullName
2684AssertSameFileSystemPath(brokenAppHost.FullName, result.SelectedProjectFile?.FullName);
2686new[] { firstHealthy.FullName, secondHealthy.FullName, brokenAppHost.FullName },
2687result.AllProjectFileCandidates.Select(f => f.FullName).ToArray());
2697var projectFile1 = new FileInfo(Path.Combine(projectDirectory.FullName, "Project1.csproj"));
2698await File.WriteAllTextAsync(projectFile1.FullName, "Not a real project file.");
2699var projectFile2 = new FileInfo(Path.Combine(projectDirectory.FullName, "Project2.csproj"));
2700await File.WriteAllTextAsync(projectFile2.FullName, "Not a real project file.");
2707if (file.FullName == projectFile1.FullName || file.FullName == projectFile2.FullName)
2719var directoryAsFileInfo = new FileInfo(projectDirectory.FullName);
2724AssertSameFileSystemPath(projectFile1.FullName, returnedProjectFile!.FullName);
2734var appHostFile = new FileInfo(Path.Combine(projectDirectory.FullName, "apphost.cs"));
2736appHostFile.FullName,
2748var directoryAsFileInfo = new FileInfo(projectDirectory.FullName);
2751AssertSameFileSystemPath(appHostFile.FullName, returnedProjectFile!.FullName);
2762var projectFile = new FileInfo(Path.Combine(subDirectory.FullName, "Mongo.AppHost.csproj"));
2763await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2769if (file.FullName == projectFile.FullName)
2781var directoryAsFileInfo = new FileInfo(topDirectory.FullName);
2784AssertSameFileSystemPath(projectFile.FullName, returnedProjectFile!.FullName);
2801var csprojFile = new FileInfo(Path.Combine(appHostDir.FullName, "MyApp.AppHost.csproj"));
2802await File.WriteAllTextAsync(csprojFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\"></Project>");
2806var appHostCsFile = new FileInfo(Path.Combine(appHostDir.FullName, "AppHost.cs"));
2807await File.WriteAllTextAsync(appHostCsFile.FullName, """
2824var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
2828Assert.Equal(csprojFile.FullName, foundFiles[0].FullName);
2844var csprojFile = new FileInfo(Path.Combine(appHostDir.FullName, "MyApp.AppHost.csproj"));
2845await File.WriteAllTextAsync(csprojFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\"></Project>");
2848var appHostCsFile = new FileInfo(Path.Combine(appHostDir.FullName, "apphost.cs"));
2849await File.WriteAllTextAsync(appHostCsFile.FullName, """
2868var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
2872Assert.Equal(csprojFile.FullName, foundFiles[0].FullName);
2886var appHostCsFile = new FileInfo(Path.Combine(appHostDir.FullName, "apphost.cs"));
2887await File.WriteAllTextAsync(appHostCsFile.FullName, """
2897var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
2901Assert.Equal(appHostCsFile.FullName, foundFiles[0].FullName);
2909var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2910await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2920var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
2930var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2931await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2941var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
2944Assert.Equal(projectFile.FullName, foundFiles[0].FullName);
2952var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
2953await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
2992var foundFiles = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
3004var normalProject = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "MyApp", "AppHost.csproj"));
3006await File.WriteAllTextAsync(normalProject.FullName, "Not a real project file.");
3009var nugetCacheDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".nuget", "packages",
3013await File.WriteAllTextAsync(cachedProject.FullName, "Not a real project file.");
3022["NUGET_PACKAGES"] = Path.Combine(workspace.WorkspaceRoot.FullName, ".nuget", "packages")
3028workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
3032Assert.Equal(normalProject.FullName, foundFiles[0].FullName);
3041var project1 = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "src", "App1", "AppHost.csproj"));
3043await File.WriteAllTextAsync(project1.FullName, "Not a real project file.");
3045var project2 = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "samples", "App2", "AppHost.csproj"));
3047await File.WriteAllTextAsync(project2.FullName, "Not a real project file.");
3058workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
3061var foundPaths = foundFiles.Select(f => f.FullName).ToHashSet();
3062Assert.Contains(project1.FullName, foundPaths);
3063Assert.Contains(project2.FullName, foundPaths);
3072var normalProject = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "MyApp", "AppHost.csproj"));
3074await File.WriteAllTextAsync(normalProject.FullName, "Not a real project file.");
3077var customCacheDir = Path.Combine(workspace.WorkspaceRoot.FullName, "custom-nuget-cache");
3081await File.WriteAllTextAsync(cachedProject.FullName, "Not a real project file.");
3096workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
3100Assert.Equal(normalProject.FullName, foundFiles[0].FullName);
3109var customCacheDir = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget-cache");
3112var siblingDir = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget-cache-extra", "MyApp");
3115await File.WriteAllTextAsync(siblingProject.FullName, "Not a real project file.");
3121await File.WriteAllTextAsync(cachedProject.FullName, "Not a real project file.");
3136workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
3140Assert.Equal(siblingProject.FullName, foundFiles[0].FullName);
3150var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "MyAppHost.csproj"));
3151await File.WriteAllTextAsync(appHostFile.FullName, "Not a real apphost");
3155config.Save(workspace.WorkspaceRoot.FullName);
3163Assert.Equal(appHostFile.FullName, result.SelectedProjectFile!.FullName);
3173var appHost1File = new FileInfo(Path.Combine(appHost1Dir.FullName, "AppHost1.csproj"));
3174await File.WriteAllTextAsync(appHost1File.FullName, "Not a real apphost");
3176config1.Save(appHost1Dir.FullName);
3179var appHost2File = new FileInfo(Path.Combine(appHost2Dir.FullName, "AppHost2.csproj"));
3180await File.WriteAllTextAsync(appHost2File.FullName, "Not a real apphost");
3182config2.Save(appHost2Dir.FullName);
3203var appHostFile = new FileInfo(Path.Combine(appHostDir.FullName, "RealAppHost.csproj"));
3204await File.WriteAllTextAsync(appHostFile.FullName, "Not a real apphost");
3208config.Save(workspace.WorkspaceRoot.FullName);
3217Assert.Equal(appHostFile.FullName, result.SelectedProjectFile!.FullName);
3227await File.WriteAllTextAsync(Path.Combine(appHost1Dir.FullName, "AppHost1.csproj"), "Not a real apphost");
3230await File.WriteAllTextAsync(Path.Combine(appHost2Dir.FullName, "AppHost2.csproj"), "Not a real apphost");
3248var appHost1File = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost1.csproj"));
3249await File.WriteAllTextAsync(appHost1File.FullName, "Not a real apphost");
3251var appHost2File = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost2.csproj"));
3252await File.WriteAllTextAsync(appHost2File.FullName, "Not a real apphost");
3254var slowValidationFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "SlowValidation.csproj"));
3255await File.WriteAllTextAsync(slowValidationFile.FullName, "Not a real apphost");
3264if (string.Equals(projectFile.FullName, slowValidationFile.FullName, StringComparison.Ordinal))
3279if (string.Equals(projectFile.FullName, appHost2File.FullName, StringComparison.Ordinal))
3307var appHost1File = new FileInfo(Path.Combine(appHost1Dir.FullName, "AppHost1.csproj"));
3308await File.WriteAllTextAsync(appHost1File.FullName, "Not a real apphost");
3311var appHost2File = new FileInfo(Path.Combine(appHost2Dir.FullName, "AppHost2.csproj"));
3312await File.WriteAllTextAsync(appHost2File.FullName, "Not a real apphost");
3315var aspireSettingsDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire"));
3317var aspireSettingsFile = new FileInfo(Path.Combine(aspireSettingsDir.FullName, "settings.json"));
3319.GetRelativePath(aspireSettingsDir.FullName, appHost1File.FullName)
3321await File.WriteAllTextAsync(aspireSettingsFile.FullName, JsonSerializer.Serialize(new { appHostPath = relativeAppHostPath }));
3330Assert.Equal(appHost1File.FullName, result.SelectedProjectFile!.FullName);
3340var appHost1File = new FileInfo(Path.Combine(appHost1Dir.FullName, "AppHost1.csproj"));
3341await File.WriteAllTextAsync(appHost1File.FullName, "Not a real apphost");
3344var appHost2File = new FileInfo(Path.Combine(appHost2Dir.FullName, "AppHost2.csproj"));
3345await File.WriteAllTextAsync(appHost2File.FullName, "Not a real apphost");
3348var aspireSettingsDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire"));
3350var aspireSettingsFile = new FileInfo(Path.Combine(aspireSettingsDir.FullName, "settings.json"));
3352.GetRelativePath(aspireSettingsDir.FullName, appHost1File.FullName)
3354await File.WriteAllTextAsync(aspireSettingsFile.FullName, JsonSerializer.Serialize(new { appHostPath = relativeAppHostPath }));
3363Assert.Equal(appHost1File.FullName, result.SelectedProjectFile!.FullName);
3365Assert.Equal(appHost1File.FullName, candidate.FullName);
3374var realAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App", "AppHost.csproj"));
3376await File.WriteAllTextAsync(realAppHost.FullName, "Not a real project file.");
3379var staleAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "node_modules", "foo", "AppHost.csproj"));
3381await File.WriteAllTextAsync(staleAppHost.FullName, "Not a real project file.");
3394Assert.Equal(realAppHost.FullName, found[0].AppHostFile.FullName);
3402var realAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App", "AppHost.csproj"));
3404await File.WriteAllTextAsync(realAppHost.FullName, "Not a real project file.");
3406var staleAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "node_modules", "foo", "AppHost.csproj"));
3408await File.WriteAllTextAsync(staleAppHost.FullName, "Not a real project file.");
3421var paths = found.Select(c => c.AppHostFile.FullName).ToHashSet();
3422Assert.Contains(realAppHost.FullName, paths);
3423Assert.Contains(staleAppHost.FullName, paths);
3431var realAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App", "AppHost.csproj"));
3433await File.WriteAllTextAsync(realAppHost.FullName, "Not a real project file.");
3435var skipListedAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "node_modules", "foo", "AppHost.csproj"));
3437await File.WriteAllTextAsync(skipListedAppHost.FullName, "Not a real project file.");
3447var found = await projectLocator.FindAppHostProjectFilesAsync(workspace.WorkspaceRoot.FullName, CancellationToken.None).DefaultTimeout();
3449var paths = found.Select(file => file.FullName).ToHashSet();
3451Assert.Contains(realAppHost.FullName, paths);
3452Assert.Contains(skipListedAppHost.FullName, paths);
3460var buildableAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Buildable", "AppHost.csproj"));
3462await File.WriteAllTextAsync(buildableAppHost.FullName, "Not a real project file.");
3464var unbuildableAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Unbuildable", "AppHost.csproj"));
3466await File.WriteAllTextAsync(unbuildableAppHost.FullName, "Not a real project file.");
3470ValidateAppHostCallback = projectFile => projectFile.FullName == buildableAppHost.FullName
3480Assert.Collection(found.OrderBy(candidate => candidate.AppHostFile.FullName),
3483Assert.Equal(buildableAppHost.FullName, candidate.AppHostFile.FullName);
3488Assert.Equal(unbuildableAppHost.FullName, candidate.AppHostFile.FullName);
3499var realAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App", "AppHost.csproj"));
3501await File.WriteAllTextAsync(realAppHost.FullName, "Not a real project file.");
3504var staleAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "node_modules", "foo", "AppHost.csproj"));
3506await File.WriteAllTextAsync(staleAppHost.FullName, "Not a real project file.");
3519realAppHost.FullName,
3520staleAppHost.FullName
3530Assert.Equal(realAppHost.FullName, found[0].AppHostFile.FullName);
3539var configuredAppHost = new FileInfo(Path.Combine(configuredDirectory.FullName, "ConfiguredAppHost.csproj"));
3540await File.WriteAllTextAsync(configuredAppHost.FullName, "<Project Sdk=\"Aspire.AppHost.Sdk\"></Project>");
3543var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
3548path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, configuredAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
3574var trackedAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App", "AppHost.csproj"));
3576await File.WriteAllTextAsync(trackedAppHost.FullName, "Not a real project file.");
3578var ignoredAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "legacy", "Stale.csproj"));
3580await File.WriteAllTextAsync(ignoredAppHost.FullName, "Not a real project file.");
3591trackedAppHost.FullName
3601Assert.Equal(trackedAppHost.FullName, found[0].AppHostFile.FullName);
3609var realAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App", "AppHost.csproj"));
3611await File.WriteAllTextAsync(realAppHost.FullName, "Not a real project file.");
3614var nodeModulesAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "node_modules", "foo", "AppHost.csproj"));
3616await File.WriteAllTextAsync(nodeModulesAppHost.FullName, "Not a real project file.");
3627realAppHost.FullName,
3628nodeModulesAppHost.FullName
3638Assert.Equal(realAppHost.FullName, found[0].AppHostFile.FullName);
3646var realAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "App", "AppHost.csproj"));
3648await File.WriteAllTextAsync(realAppHost.FullName, "Not a real project file.");
3651var phantomAppHost = Path.Combine(workspace.WorkspaceRoot.FullName, "Removed", "AppHost.csproj");
3662realAppHost.FullName,
3673Assert.Equal(realAppHost.FullName, found[0].AppHostFile.FullName);
3703var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
3704await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost");
3707var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
3713appHostPath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, appHostProjectFile.FullName)
3732Assert.Equal(appHostProjectFile.FullName, foundAppHost!.FullName);
3741var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
3770var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.unknown"));
3771await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost");
3774var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
3780appHostPath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, appHostProjectFile.FullName)
3803var appHostProjectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
3804await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real apphost");
3807var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
3813appHostPath = Path.GetRelativePath(aspireSettingsFile.Directory!.FullName, appHostProjectFile.FullName)
3851var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
3869Assert.Contains(aspireSettingsFile.FullName, warning.Message);
3886var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
3917var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
3918await File.WriteAllTextAsync(aspireSettingsFile.FullName, """
3929Assert.Contains(aspireSettingsFile.FullName, error);
3944var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
3969var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
3970await File.WriteAllTextAsync(aspireSettingsFile.FullName, """
3981Assert.Contains(aspireSettingsFile.FullName, error);
3994var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
4024var settingsPath = Path.Combine(workspaceSettingsDirectory.FullName, "settings.json");
4051var settingsPath = Path.Combine(workspaceSettingsDirectory.FullName, "settings.json");
4078var settingsPath = Path.Combine(workspaceSettingsDirectory.FullName, "settings.json");
4116var realAppHost = new FileInfo(Path.Combine(realAppDirectory.FullName, "AppHost.csproj"));
4117await File.WriteAllTextAsync(realAppHost.FullName, "Not a real project file.");
4123var linkDirectory = Path.Combine(nodeModulesDir.FullName, "link");
4126Directory.CreateSymbolicLink(linkDirectory, realAppDirectory.FullName);
4142Assert.NotEqual(realAppHost.FullName, pathThroughLink);
4145var aspireSettingsFile = new FileInfo(Path.Combine(workspaceSettingsDirectory.FullName, "settings.json"));
4175Assert.Equal(pathThroughLink, result.SelectedProjectFile.FullName);
4176Assert.Equal(result.SelectedProjectFile.FullName, Assert.Single(result.AllProjectFileCandidates).FullName);
4188var appHostProjectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
4189await File.WriteAllTextAsync(appHostProjectFile.FullName, "Not a real project file.");
4191var differentlyCasedPath = Path.Combine(workspace.WorkspaceRoot.FullName, "APPHOST.csproj");
4197Assert.NotEqual(appHostProjectFile.FullName, differentlyCasedPath);
4199var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
4222var configuredAppHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "node_modules", "Configured", "AppHost.csproj"));
4224await File.WriteAllTextAsync(configuredAppHost.FullName, "Not a real project file.");
4226var configPath = Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName);
4231path = Path.GetRelativePath(workspace.WorkspaceRoot.FullName, configuredAppHost.FullName).Replace(Path.DirectorySeparatorChar, '/')
4248Assert.Equal(configuredAppHost.FullName, candidate.AppHostFile.FullName);
Projects\ProjectUpdaterNuGetConfigurationTests.cs (167)
56await File.WriteAllTextAsync(configFile.FullName, """
63var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
64var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
69Assert.Equal(projectFile.FullName, file.FullName);
82json["Properties"]![overriddenProperty] = Path.Combine(workspace.WorkspaceRoot.FullName, "custom-policy");
94Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
106Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
123var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
141Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
150Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")));
170projectFile.MoveTo(Path.Combine(workspace.CreateDirectory("AppHost").FullName, fileName));
171var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
181Assert.Equal(projectFile.DirectoryName, directory.FullName);
187File.WriteAllText(file.FullName, File.ReadAllText(file.FullName).Replace("9.4.1", version, StringComparison.Ordinal));
224Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
246var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
248var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
276Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
295Assert.Equal([newSource], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query));
298runner.GetNuGetConfigPathsAsyncCallback = (_, _, _) => (0, [configFile.FullName]);
304File.WriteAllText(file.FullName, File.ReadAllText(file.FullName).Replace("9.4.1", version, StringComparison.Ordinal));
324Assert.Equal(originalProject, File.ReadAllBytes(projectFile.FullName));
325Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
355Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
356Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
379var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
393Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
424await File.WriteAllTextAsync(configFile.FullName, $$"""
426<packageSources><clear /><add key="aspire-daily" value="{{oldFeed.FullName}}" /></packageSources>
428<config><add key="globalPackagesFolder" value="{{packageCache.FullName}}" /></config>
431var projectFile = new FileInfo(Path.Combine(appHostDirectory.FullName, "AppHost.csproj"));
432await File.WriteAllTextAsync(projectFile.FullName, $$"""
438var webProject = new FileInfo(Path.Combine(webDirectory.FullName, "Web.csproj"));
439await File.WriteAllTextAsync(webProject.FullName, $$"""
465(0, [new NuGetPackageCli { Id = query, Version = newVersion, Source = newFeed.FullName }]),
466GetNuGetConfigPathsAsyncCallback = (_, _, _) => (0, [configFile.FullName]),
469Assert.Equal(webProject.FullName, file.FullName);
473File.WriteAllText(file.FullName, File.ReadAllText(file.FullName).Replace(oldVersion, version, StringComparison.Ordinal));
480Assert.Equal([newFeed.FullName], NuGetTestHelper.GetEligiblePackageSources(
491"daily", PackageChannelQuality.Both, [new("Aspire*", newFeed.FullName)],
507Assert.Equal([newFeed.FullName], NuGetTestHelper.GetEligiblePackageSources(appHostDirectory.FullName, packageId));
527await File.WriteAllTextAsync(configFile.FullName, $$"""
529<packageSources><clear /><add key="fixture" value="{{feed.FullName}}" /></packageSources>
530<config><add key="globalPackagesFolder" value="{{workspace.CreateDirectory("packages").FullName}}" /></config>
533var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
535await File.WriteAllTextAsync(projectFile.FullName, $$"""
543var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
565Assert.Equal(projectFile.FullName + ".csproj", evaluatedPath);
572(0, [new NuGetPackageCli { Id = query, Version = newVersion, Source = feed.FullName }]);
575Assert.Equal(projectFile.FullName, file.FullName);
597await File.ReadAllTextAsync(projectFile.FullName));
603Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
608Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
627await File.WriteAllTextAsync(file.FullName, content);
653var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
679Assert.Equal(projectFile.DirectoryName, directory.FullName);
681Assert.Equal([currentSource], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query));
699Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
739await File.WriteAllTextAsync(configFile.FullName, $$"""
751var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
757runner.GetNuGetConfigPathsAsyncCallback = (_, _, _) => (0, [configFile.FullName]);
761Assert.Equal(expectedSources.Order(), NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query).Order());
767Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
819await File.WriteAllTextAsync(configFile.FullName, $$"""
833var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
839runner.GetNuGetConfigPathsAsyncCallback = (_, _, _) => (0, [configFile.FullName]);
844NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query).Order());
850Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
867var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
872Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
873Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
900Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
911var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
919Assert.Equal([newSource], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query));
923[configFile.FullName, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".nuget", "NuGet.Config")]);
925var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
928Assert.Equal(projectFile.FullName, file.FullName);
930Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
952Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
963var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
965var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
979[configFile.FullName, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".nuget", "NuGet.Config")]);
1013Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
1014Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
1031projectFile.MoveTo(Path.Combine(workspace.CreateDirectory("AppHost").FullName, projectFile.Name));
1032var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
1035var oldHive = workspace.CreateDirectory(".aspire/hives/pr-old/packages").FullName;
1037await File.WriteAllTextAsync(parentConfig.FullName, $$"""
1047var originalParent = await File.ReadAllBytesAsync(parentConfig.FullName);
1052await File.WriteAllTextAsync(configFile.FullName, $$"""
1062var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
1075runner.GetNuGetConfigPathsAsyncCallback = (_, _, _) => (0, [configFile.FullName, parentConfig.FullName]);
1078Assert.Equal(expectedAspireSources, NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query));
1079Assert.Equal(expectedDependencies, NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Example.Dependency"));
1085File.WriteAllText(file.FullName, File.ReadAllText(file.FullName).Replace("9.4.1", version, StringComparison.Ordinal));
1091Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
1131Assert.Equal(originalParent, await File.ReadAllBytesAsync(parentConfig.FullName));
1132Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
1133Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
1142Assert.Equal(originalParent, await File.ReadAllBytesAsync(parentConfig.FullName));
1149Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
1160document.Load(configFile.FullName);
1167Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
1168Assert.Equal(originalConfig, await File.ReadAllBytesAsync(configFile.FullName));
1193var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
1195var originalConfig = await File.ReadAllBytesAsync(configFile.FullName);
1209Assert.Equal(originalProject, File.ReadAllBytes(projectFile.FullName));
1210Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
1226Assert.Equal(originalProject, File.ReadAllBytes(projectFile.FullName));
1227Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
1228Assert.Equal([newSource], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query));
1237[configFile.FullName, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".nuget", "NuGet.Config")]);
1243Assert.Contains("Aspire.AppHost.Sdk", File.ReadAllText(file.FullName));
1244var content = File.ReadAllText(file.FullName).Replace("9.4.1", version, StringComparison.Ordinal);
1245File.WriteAllText(file.FullName, content);
1251Assert.Equal(projectFile.FullName, file.FullName);
1258Assert.Equal(originalConfig, File.ReadAllBytes(configFile.FullName));
1268File.WriteAllText(configFile.FullName, "<configuration><external /></configuration>");
1272File.WriteAllText(projectFile.FullName, "// External edit.");
1326await File.ReadAllBytesAsync(projectFile.FullName));
1328await File.ReadAllBytesAsync(configFile.FullName));
1352project.MoveTo(Path.Combine(appHostDirectory.FullName, fileName));
1353var original = await File.ReadAllBytesAsync(project.FullName);
1356useAncestorConfig ? repositoryDirectory.FullName : appHostDirectory.FullName, "nuget.config");
1364Assert.StartsWith(Path.Combine(appHostDirectory.FullName, ".aspire") + Path.DirectorySeparatorChar, directory.FullName);
1366NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query));
1374Assert.Equal(appHostDirectory.FullName, directory.FullName);
1382File.WriteAllText(file.FullName, File.ReadAllText(file.FullName).Replace("9.4.1", version, StringComparison.Ordinal));
1397Assert.StartsWith(Path.Combine(appHostDirectory.FullName, ".aspire") + Path.DirectorySeparatorChar,
1398options.NuGetRestoreTargetsFile.FullName);
1399Assert.Contains("9.4.2", File.ReadAllText(project.FullName));
1428Assert.Equal(original, await File.ReadAllBytesAsync(project.FullName));
1451await File.WriteAllTextAsync(projectFile.FullName, """
1461await File.WriteAllTextAsync(propsFile.FullName, """
1470var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
1471var originalProps = await File.ReadAllBytesAsync(propsFile.FullName);
1476var props = System.Xml.Linq.XDocument.Load(propsFile.FullName);
1488Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
1489Assert.Equal(originalProps, await File.ReadAllBytesAsync(propsFile.FullName));
1498await File.WriteAllTextAsync(configFile.FullName, $$"""
1523var originalProject = await File.ReadAllBytesAsync(projectFile.FullName);
1560Assert.Equal(originalProject, await File.ReadAllBytesAsync(projectFile.FullName));
1595Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(directory.FullName, query));
1601File.WriteAllText(file.FullName, File.ReadAllText(file.FullName).Replace("9.4.1", version, StringComparison.Ordinal));
1641projectFile.MoveTo(Path.Combine(directory.FullName, projectFile.Name));
1657var configPath = Path.Combine(directory.FullName, "NuGet.Config");
1673Assert.Equal([source], NuGetTestHelper.GetEligiblePackageSources(workingDirectory.FullName, query));
1679File.WriteAllText(file.FullName, File.ReadAllText(file.FullName).Replace("9.4.1", version, StringComparison.Ordinal));
1710NuGetTestHelper.GetEligiblePackageSources(directory.FullName, "Aspire.Hosting.Redis"));
1718Assert.Equal(projectFile.DirectoryName, directory.FullName);
Projects\ProjectUpdaterTests.cs (262)
33var file = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.cs"));
37await File.WriteAllTextAsync(file.FullName, example + $"/* keep */ #:sdk Aspire.AppHost.Sdk{version}\n#:package Aspire.Hosting.AppHost@17.0.0\n" + invalidDirective + code);
43Assert.Equal(example + "/* keep */ #:sdk Aspire.AppHost.Sdk@17.0.1\n" + invalidDirective + code, await File.ReadAllTextAsync(file.FullName));
68var appHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{extension}"));
70await File.WriteAllTextAsync(appHost.FullName, original);
71var importedFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props");
145Assert.Equal(original, await File.ReadAllTextAsync(appHost.FullName));
192var appHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, fileBased ? "apphost.cs" : $"AppHost{extension}"));
204await File.WriteAllTextAsync(appHost.FullName, original);
207await File.WriteAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props"),
217? await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props"))
219var configFile = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json");
221var cpmFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props");
262document.WithProperty("DirectoryBuildPropsPath", Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props"));
264Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props");
270Assert.Equal(appHost.FullName, project.FullName);
301Assert.Equal(importedContent, await File.ReadAllTextAsync(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props")));
302Assert.Equal(original, await File.ReadAllTextAsync(appHost.FullName));
320var props = System.Xml.Linq.XDocument.Load(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Build.props"));
336Assert.Equal(original, await File.ReadAllTextAsync(appHost.FullName));
348var appHost = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
350await File.WriteAllTextAsync(appHost.FullName, original);
388Assert.Equal(original, await File.ReadAllTextAsync(appHost.FullName));
399var appHostProject = new FileInfo(Path.Combine(realDirectory.FullName, "AppHost.csproj"));
400File.WriteAllText(appHostProject.FullName, "<Project />");
402var symlinkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
403TestSymlinkHelper.TryCreateSymlink(symlinkDirectory, realDirectory.FullName);
416var lowerCaseProject = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.csproj"));
417File.WriteAllText(lowerCaseProject.FullName, "<Project />");
418var upperCaseProject = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
421File.WriteAllText(upperCaseProject.FullName, "<Project />");
435var serviceDefaultsProjectFile = new FileInfo(Path.Combine(serviceDefaultsFolder.FullName, "UpdateTester.ServiceDefaults.csproj"));
438var webAppProjectFile = new FileInfo(Path.Combine(webAppFolder.FullName, "UpdateTester.WebApp.csproj"));
441var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
444appHostProjectFile.FullName,
478if (projectFile.FullName == appHostProjectFile.FullName)
483itemsAndProperties.WithProjectReference(webAppProjectFile.FullName);
485else if (projectFile.FullName == webAppProjectFile.FullName)
488itemsAndProperties.WithProjectReference(serviceDefaultsProjectFile.FullName);
490else if (projectFile.FullName == serviceDefaultsProjectFile.FullName)
545var serviceDefaultsProjectFile = new FileInfo(Path.Combine(serviceDefaultsFolder.FullName, "UpdateTester.ServiceDefaults.csproj"));
548var webAppProjectFile = new FileInfo(Path.Combine(webAppFolder.FullName, "UpdateTester.WebApp.csproj"));
551var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
554appHostProjectFile.FullName,
564var aspireConfigFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire.config.json"));
566aspireConfigFile.FullName,
603if (projectFile.FullName == appHostProjectFile.FullName)
608itemsAndProperties.WithProjectReference(webAppProjectFile.FullName);
610else if (projectFile.FullName == webAppProjectFile.FullName)
613itemsAndProperties.WithProjectReference(serviceDefaultsProjectFile.FullName);
615else if (projectFile.FullName == serviceDefaultsProjectFile.FullName)
674Assert.Equal(appHostProjectFile.FullName, item.ProjectFile.FullName);
685Assert.Equal(webAppProjectFile.FullName, item.ProjectFile.FullName);
692var updatedConfig = await File.ReadAllTextAsync(aspireConfigFile.FullName);
709var serviceDefaultsProjectFile = new FileInfo(Path.Combine(serviceDefaultsFolder.FullName, "UpdateTester.ServiceDefaults.csproj"));
712var webAppProjectFile = new FileInfo(Path.Combine(webAppFolder.FullName, "UpdateTester.WebApp.csproj"));
715var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
718appHostProjectFile.FullName,
727var aspireConfigFile = new FileInfo(Path.Combine(appHostFolder.FullName, "aspire.config.json"));
758if (projectFile.FullName == appHostProjectFile.FullName)
763itemsAndProperties.WithProjectReference(webAppProjectFile.FullName);
765else if (projectFile.FullName == webAppProjectFile.FullName)
768itemsAndProperties.WithProjectReference(serviceDefaultsProjectFile.FullName);
770else if (projectFile.FullName == serviceDefaultsProjectFile.FullName)
816var serviceDefaultsProjectFile = new FileInfo(Path.Combine(serviceDefaultsFolder.FullName, "UpdateTester.ServiceDefaults.csproj"));
819var webAppProjectFile = new FileInfo(Path.Combine(webAppFolder.FullName, "UpdateTester.WebApp.csproj"));
822var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
825appHostProjectFile.FullName,
832var aspireConfigFile = new FileInfo(Path.Combine(appHostFolder.FullName, "aspire.config.json"));
834aspireConfigFile.FullName,
881if (projectFile.FullName == appHostProjectFile.FullName)
887itemsAndProperties.WithProjectReference(webAppProjectFile.FullName);
889else if (projectFile.FullName == webAppProjectFile.FullName)
892itemsAndProperties.WithProjectReference(serviceDefaultsProjectFile.FullName);
894else if (projectFile.FullName == serviceDefaultsProjectFile.FullName)
953Assert.Equal(appHostProjectFile.FullName, item.ProjectFile.FullName);
964Assert.Equal(appHostProjectFile.FullName, item.ProjectFile.FullName);
975Assert.Equal(webAppProjectFile.FullName, item.ProjectFile.FullName);
979var updatedConfig = AspireConfigFile.Load(appHostFolder.FullName);
991var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
994appHostProjectFile.FullName,
1035if (projectFile.FullName == appHostProjectFile.FullName)
1086Assert.Equal(appHostProjectFile.FullName, item.ProjectFile.FullName);
1111var sharedProjectFile = new FileInfo(Path.Combine(sharedProjectFolder.FullName, "SharedProject.csproj"));
1114var projectAFile = new FileInfo(Path.Combine(projectAFolder.FullName, "ProjectA.csproj"));
1117var projectBFile = new FileInfo(Path.Combine(projectBFolder.FullName, "ProjectB.csproj"));
1120var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "DiamondTest.AppHost.csproj"));
1123appHostProjectFile.FullName,
1155if (projectFile.FullName == appHostProjectFile.FullName)
1160itemsAndProperties.WithProjectReference(projectAFile.FullName);
1161itemsAndProperties.WithProjectReference(projectBFile.FullName);
1163else if (projectFile.FullName == projectAFile.FullName)
1168itemsAndProperties.WithProjectReference(sharedProjectFile.FullName);
1170else if (projectFile.FullName == projectBFile.FullName)
1175itemsAndProperties.WithProjectReference(sharedProjectFile.FullName);
1177else if (projectFile.FullName == sharedProjectFile.FullName)
1184throw new InvalidOperationException($"Unexpected project file: {projectFile.FullName}");
1224var sharedProjectUpdates = packagesAddsExecuted.Where(p => p.ProjectFile.FullName == sharedProjectFile.FullName).ToList();
1232var appHostUpdates = packagesAddsExecuted.Where(p => p.ProjectFile.FullName == appHostProjectFile.FullName).ToList();
1244var serviceDefaultsProjectFile = new FileInfo(Path.Combine(serviceDefaultsFolder.FullName, "UpdateTester.ServiceDefaults.csproj"));
1247var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
1249var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
1253appHostProjectFile.FullName,
1262serviceDefaultsProjectFile.FullName,
1276directoryPackagesPropsFile.FullName,
1316if (projectFile.FullName == appHostProjectFile.FullName)
1319itemsAndProperties.WithProjectReference(serviceDefaultsProjectFile.FullName);
1321else if (projectFile.FullName == serviceDefaultsProjectFile.FullName)
1367var updatedContent = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
1380var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
1382var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
1386appHostProjectFile.FullName,
1398directoryPackagesPropsFile.FullName,
1472var updatedContent = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
1483var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
1485var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
1489appHostProjectFile.FullName,
1501directoryPackagesPropsFile.FullName,
1576var content = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
1605var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
1607var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
1612appHostProjectFile.FullName,
1627directoryPackagesPropsFile.FullName,
1663if (projectFile.FullName == appHostProjectFile.FullName)
1701var updatedContent = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
1716var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
1719appHostProjectFile.FullName,
1781var updatedContent = await File.ReadAllTextAsync(appHostProjectFile.FullName);
1795var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
1806await File.WriteAllTextAsync(appHostProjectFile.FullName, ProjectContent);
1855var unchangedContent = await File.ReadAllTextAsync(appHostProjectFile.FullName);
1872var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
1873var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
1876appHostProjectFile.FullName,
1891directoryPackagesPropsFile.FullName,
1950var updatedProject = await File.ReadAllTextAsync(appHostProjectFile.FullName);
1951var updatedProps = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
1972Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")));
1987var nugetConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
2014Assert.StartsWith(Path.Combine(appHostProjectFile.DirectoryName!, ".aspire") + Path.DirectorySeparatorChar, workingDirectory.FullName);
2016Assert.Equal([PackageSources.NuGetOrg], NuGetTestHelper.GetEligiblePackageSources(workingDirectory.FullName, query));
2037Assert.False(Directory.Exists(previewDirectory.FullName));
2061var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2064appHostProjectFile.FullName,
2221var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2223var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
2227appHostProjectFile.FullName,
2239directoryPackagesPropsFile.FullName,
2324var content = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
2334var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2336var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
2340appHostProjectFile.FullName,
2353directoryPackagesPropsFile.FullName,
2447var content = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
2458var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2460var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
2464appHostProjectFile.FullName,
2476directoryPackagesPropsFile.FullName,
2572var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2574var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
2578appHostProjectFile.FullName,
2590directoryPackagesPropsFile.FullName,
2683var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2687appHostProjectFile.FullName,
2721if (projectFile.FullName == appHostProjectFile.FullName)
2777var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2779var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
2783appHostProjectFile.FullName,
2795directoryPackagesPropsFile.FullName,
2829if (projectFile.FullName == appHostProjectFile.FullName)
2879var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2883appHostProjectFile.FullName,
2913if (projectFile.FullName == appHostProjectFile.FullName)
2959var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
2962appHostProjectFile.FullName,
2993if (projectFile.FullName == appHostProjectFile.FullName)
3041var appHostFile = new FileInfo(Path.Combine(appHostFolder.FullName, "apphost.cs"));
3045appHostFile.FullName,
3113var updatedContent = await File.ReadAllTextAsync(appHostFile.FullName);
3134var appHostFile = new FileInfo(Path.Combine(appHostFolder.FullName, "apphost.cs"));
3137appHostFile.FullName,
3208var updatedContent = await File.ReadAllTextAsync(appHostFile.FullName);
3228var appHostFile = new FileInfo(Path.Combine(appHostFolder.FullName, "apphost.cs"));
3231appHostFile.FullName,
3293var updatedContent = await File.ReadAllTextAsync(appHostFile.FullName);
3304var appHostFile = new FileInfo(Path.Combine(appHostFolder.FullName, "apphost.cs"));
3308appHostFile.FullName,
3376var updatedContent = await File.ReadAllTextAsync(appHostFile.FullName);
3386var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
3389appHostProjectFile.FullName,
3472var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
3476appHostProjectFile.FullName,
3539var updatedContent = await File.ReadAllTextAsync(appHostProjectFile.FullName);
3550var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
3554appHostProjectFile.FullName,
3618var updatedContent = await File.ReadAllTextAsync(appHostProjectFile.FullName);
3628var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
3631appHostProjectFile.FullName,
3761var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
3763var directoryPackagesPropsFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props"));
3767appHostProjectFile.FullName,
3784directoryPackagesPropsFile.FullName,
3873Assert.Equal(appHostProjectFile.FullName, packageUpdate.ProjectFile.FullName);
3876var directoryPackagesContent = await File.ReadAllTextAsync(directoryPackagesPropsFile.FullName);
3888var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectExtension}");
3921var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectExtension}");
3953var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectExtension}");
3990var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectExtension}");
4026var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectExtension}");
4059var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectExtension}");
4096var projectFile = Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectExtension}");
4114var directoryPackagesPropsFile = Path.Combine(workspace.WorkspaceRoot.FullName, "Directory.Packages.props");
4167var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "Issue15891.AppHost.csproj"));
4170appHostProjectFile.FullName,
4206if (projectFile.FullName == appHostProjectFile.FullName)
4221throw new InvalidOperationException($"Unexpected project file: {projectFile.FullName}");
4281var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
4284appHostProjectFile.FullName,
4358var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
4361appHostProjectFile.FullName,
4412var existingConfigFile = new FileInfo(Path.Combine(executionContext.WorkingDirectory.FullName, "nuget.config"));
4414existingConfigFile.FullName,
4423var originalConfig = await File.ReadAllBytesAsync(existingConfigFile.FullName);
4435Assert.Equal(originalConfig, await File.ReadAllBytesAsync(existingConfigFile.FullName));
4444var appHostProjectFile = new FileInfo(Path.Combine(appHostFolder.FullName, "UpdateTester.AppHost.csproj"));
4447appHostProjectFile.FullName,
4510var document = System.Xml.Linq.XDocument.Load(createdConfig.FullName);
Projects\RepositoryToolUpdaterTests.cs (35)
34Assert.Equal(manifestPath, manifest.File.FullName);
51Assert.Equal(configPath, Assert.Single(manifests).File.FullName);
60var unrelatedPath = Path.Combine(child.CreateSubdirectory(".config").FullName, "dotnet-tools.json");
68Assert.Equal(manifestPath, Assert.Single(manifests).File.FullName);
80var rootManifestPath = Path.Combine(child.CreateSubdirectory(".config").FullName, "dotnet-tools.json");
90Assert.Equal(npmPath, manifest.File.FullName);
105var gitPath = Path.Combine(root.FullName, ".git");
130Assert.Equal(expectedPaths, manifests.Select(manifest => manifest.File.FullName));
142var unrelatedPath = Path.Combine(child.FullName, "package.json");
149Assert.Equal(nearestPath, Assert.Single(manifests).File.FullName);
167var link = Path.Combine(root.FullName, directoryLink ? ".config" : "package.json");
168TestSymlinkHelper.TryCreateSymlink(link, directoryLink ? targetDirectory.FullName : target, directoryLink);
169var alias = Path.Combine(workspace.WorkspaceRoot.FullName, "alias");
170TestSymlinkHelper.TryCreateSymlink(alias, root.FullName);
183Assert.Equal(await File.ReadAllTextAsync(target), await File.ReadAllTextAsync(updated.File.FullName));
193var manifestPath = Path.Combine(configDirectory.FullName, "dotnet-tools.json");
212var unrelatedPath = Path.Combine(root.FullName, "package.json");
216var localManifestPath = Path.Combine(workingDirectory.CreateSubdirectory(".config").FullName, "dotnet-tools.json");
223Assert.Equal(configDirectory.FullName, directory.FullName);
240Assert.Equal(manifestPath, Assert.Single(manifests).File.FullName);
253var manifestPath = Path.Combine(root.FullName, "package.json");
317var lockPath = Path.Combine(root.FullName, "package-lock.json");
385Assert.False(File.Exists(Path.Combine(root.FullName, "package-lock.json")));
386Assert.False(File.Exists(Path.Combine(root.FullName, "npm-shrinkwrap.json")));
461var lockPath = Path.Combine(root.FullName, "package-lock.json");
552var path = Path.Combine(root.FullName, isNpm ? "package.json" : "dotnet-tools.json");
576var lockPath = Path.Combine(root.FullName, "package-lock.json");
602foreach (var path in Directory.EnumerateFiles(root.FullName, "*", SearchOption.AllDirectories))
609var dotNetPath = Path.Combine(root.FullName, "dotnet-tools.json");
610var npmPath = Path.Combine(root.FullName, "package.json");
629Assert.Equal(originalFiles.Keys.Order(), Directory.EnumerateFiles(root.FullName, "*", SearchOption.AllDirectories).Order());
731var path = Path.Combine(directory.FullName, isNpm ? "package.json" : "dotnet-tools.json");
762var packageLockPath = Path.Combine(directory.FullName, "package-lock.json");
763var shrinkwrapPath = Path.Combine(directory.FullName, "npm-shrinkwrap.json");
Projects\TypeScriptAppHostToolchainResolverTests.cs (50)
18File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"packageManager\": \"bun@1.2.0\" }");
29File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"packageManager\": \"deno@2.9.0\" }");
42var packageJsonPath = Path.Combine(workspace.WorkspaceRoot.FullName, "package.json");
57File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
58File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "deno.lock"), "{ \"version\": \"5\" }");
63Assert.Equal($"deno.lock found in {workspace.WorkspaceRoot.FullName}", resolution.Reason);
70File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
71File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "deno.json"), "{}");
76Assert.Equal($"deno.json found in {workspace.WorkspaceRoot.FullName}", resolution.Reason);
83File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
84File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "deno.jsonc"), "{ /* Deno configuration */ }");
89Assert.Equal($"deno.jsonc found in {workspace.WorkspaceRoot.FullName}", resolution.Reason);
96File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
97File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "pnpm-lock.yaml"), "lockfileVersion: '9.0'");
108var packageJsonPath = Path.Combine(workspace.WorkspaceRoot.FullName, "package.json");
120File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"packageManager\": \"yarn@4.14.1\" }");
131File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
132var yarnLockPath = Path.Combine(workspace.WorkspaceRoot.FullName, "yarn.lock");
146File.WriteAllText(Path.Combine(appHostDirectory.FullName, "package.json"), "{ \"name\": \"apphost\" }");
147File.WriteAllText(Path.Combine(parentDirectory.FullName, "package.json"), "{ \"name\": \"workspace\" }");
148var yarnLockPath = Path.Combine(parentDirectory.FullName, "yarn.lock");
162File.WriteAllText(Path.Combine(parentDirectory.FullName, "package.json"), "{ \"name\": \"workspace\" }");
163File.WriteAllText(Path.Combine(parentDirectory.FullName, "yarn.lock"), string.Empty);
164File.WriteAllText(Path.Combine(appHostDirectory.FullName, "package.json"), "{ \"name\": \"apphost\" }");
165File.WriteAllText(Path.Combine(appHostDirectory.FullName, "package-lock.json"), "{}");
170Assert.Equal($"package-lock.json found in {appHostDirectory.FullName}", resolution.Reason);
177File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
178File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package-lock.json"), "{}");
179File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "yarn.lock"), string.Empty);
184Assert.Equal($"yarn.lock found in {workspace.WorkspaceRoot.FullName}", resolution.Reason);
191File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
192Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".yarn"));
203File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
214File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"name\": \"apphost\" }");
215File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "yarn.lock"), string.Empty);
225Assert.Equal($"Selected TypeScript AppHost package manager 'yarn' because yarn.lock found in {workspace.WorkspaceRoot.FullName}.", write.Message);
234File.WriteAllText(Path.Combine(appHostDirectory.Parent!.FullName, "package.json"), "{ \"packageManager\": \"pnpm@10.12.1\" }");
235File.WriteAllText(Path.Combine(appHostDirectory.FullName, "package.json"), "{ \"name\": \"apphost\" }");
248File.WriteAllText(Path.Combine(appHostDirectory.Parent!.FullName, "package.json"), "{ \"packageManager\": \"pnpm@10.12.1\" }");
249File.WriteAllText(Path.Combine(appHostDirectory.FullName, "package.json"), "{ \"packageManager\": \"bun@1.2.0\" }");
254Assert.Equal($"packageManager 'bun@1.2.0' found in {Path.Combine(appHostDirectory.FullName, "package.json")}", resolution.Reason);
263File.WriteAllText(Path.Combine(appHostDirectory.Parent!.FullName, "package.json"), "{ \"packageManager\": \"yarn@4.14.1\" }");
264File.WriteAllText(Path.Combine(appHostDirectory.FullName, "package.json"), "{ \"name\": \"apphost\" }");
265File.WriteAllText(Path.Combine(appHostDirectory.FullName, "pnpm-lock.yaml"), "lockfileVersion: '9.0'");
270Assert.Equal($"pnpm-lock.yaml found in {appHostDirectory.FullName}", resolution.Reason);
277File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "package.json"), "{ \"packageManager\": \"bun@1.2.0\" }");
304homeDirectory: workspace.WorkspaceRoot.FullName);
317homeDirectory: InvertCasing(workspace.WorkspaceRoot.FullName));
330homeDirectory: InvertCasing(workspace.WorkspaceRoot.FullName));
343homeDirectory: InvertCasing(workspace.WorkspaceRoot.FullName));
Scaffolding\ScaffoldingServiceTests.cs (19)
36File.WriteAllText(Path.Combine(rootDirectory.FullName, "package.json"), "{}");
41Path.Combine(rootDirectory.FullName, ScaffoldingService.BrownfieldTypeScriptAppHostDirectoryName),
42scaffoldDirectory.FullName);
59Assert.Equal(rootDirectory.FullName, scaffoldDirectory.FullName);
74File.WriteAllText(Path.Combine(rootDirectory.FullName, "package.json"), "{}");
78Assert.Equal(rootDirectory.FullName, scaffoldDirectory.FullName);
156var appHostDirectory = Directory.CreateDirectory(Path.Combine(rootDirectory.FullName, ScaffoldingService.BrownfieldTypeScriptAppHostDirectoryName));
157File.WriteAllText(Path.Combine(rootDirectory.FullName, "package.json"), "{ \"packageManager\": \"npm@10.0.0\" }");
158File.WriteAllText(Path.Combine(appHostDirectory.FullName, "package.json"), "{ \"packageManager\": \"pnpm@10.0.0\" }");
228var scaffoldDirectory = Directory.CreateDirectory(Path.Combine(rootDirectory.FullName, ScaffoldingService.BrownfieldTypeScriptAppHostDirectoryName));
251File.WriteAllText(Path.Combine(rootDirectory.FullName, ".gitignore"), "node_modules/\n");
252File.WriteAllText(Path.Combine(rootDirectory.FullName, "package.json"), "{}");
253File.WriteAllText(Path.Combine(rootDirectory.FullName, "apphost.mts"), string.Empty);
256rootDirectory.FullName,
290Directory.CreateDirectory(Path.Combine(rootDirectory.FullName, ".vscode"));
291File.WriteAllText(Path.Combine(rootDirectory.FullName, ".vscode", "settings.json"), "{}");
294rootDirectory.FullName,
Secrets\SecretStoreResolverTests.cs (30)
24var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
25await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
30var syntheticId = AspireSecretsPathHelper.ComputeSyntheticAppHostId(appHostFile.FullName);
33Assert.Null(XDocument.Load(appHostFile.FullName).Descendants("UserSecretsId").SingleOrDefault());
54var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
55await File.WriteAllTextAsync(appHostFile.FullName, "<Project />");
76Assert.Null(XDocument.Load(appHostFile.FullName).Descendants("UserSecretsId").SingleOrDefault());
87Assert.Equal(userSecretsId, XDocument.Load(appHostFile.FullName).Descendants("UserSecretsId").Single().Value);
103var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
105await File.WriteAllTextAsync(appHostFile.FullName, $"<Project><PropertyGroup><UserSecretsId>{userSecretsId}</UserSecretsId></PropertyGroup></Project>");
106var originalProject = await File.ReadAllTextAsync(appHostFile.FullName);
111workspace.WorkspaceRoot, AspireSecretsPathHelper.ComputeSyntheticAppHostId(appHostFile.FullName), "Production");
135Assert.Equal(originalProject, await File.ReadAllTextAsync(appHostFile.FullName));
142var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
144await File.WriteAllTextAsync(appHostFile.FullName, $"<Project><PropertyGroup><UserSecretsId>{userSecretsId}</UserSecretsId></PropertyGroup></Project>");
146workspace.WorkspaceRoot, AspireSecretsPathHelper.ComputeSyntheticAppHostId(appHostFile.FullName), "Production");
189var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
191await File.WriteAllTextAsync(appHostFile.FullName, $"<Project><PropertyGroup><UserSecretsId>{userSecretsId}</UserSecretsId></PropertyGroup></Project>");
195var syntheticId = AspireSecretsPathHelper.ComputeSyntheticAppHostId(appHostFile.FullName);
281Assert.Equal(Path.Combine(homeDirectory.FullName, ".aspire", "secrets", "apphost-id", "Production.json"), path);
326Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "secrets", "apphost-id", $"{environment}.json"),
426var directory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "shared"));
430File.SetUnixFileMode(directory.FullName, sharedMode);
431var path = Path.Combine(directory.FullName, "secrets.json");
446Assert.Equal(sharedMode, File.GetUnixFileMode(directory.FullName));
450Assert.Single(Directory.EnumerateFiles(directory.FullName));
463var path = Path.Combine(workspace.WorkspaceRoot.FullName, "secrets.json");
487Assert.Empty(Directory.EnumerateFiles(workspace.WorkspaceRoot.FullName, ".secrets.json.*.tmp"));
500var directory = Path.Combine(workspace.WorkspaceRoot.FullName, "new", "nested");
521var projectPath = Path.Combine(directory.FullName, "AppHost.csproj");
Templating\DotNetTemplateFactoryTests.cs (17)
39var path = Path.Combine(dir.FullName, "nuget.config");
63var nugetConfigPath = Path.Combine(workingDir.FullName, "nuget.config");
95var nugetConfigPath = Path.Combine(workingDir.FullName, "nuget.config");
108var outputDir = Directory.CreateDirectory(Path.Combine(workingDir.FullName, "MyProject"));
133var parentConfigPath = Path.Combine(workingDir.FullName, "nuget.config");
139var outputConfigPath = Path.Combine(outputDir.FullName, "nuget.config");
152var outputDir = Directory.CreateDirectory(Path.Combine(workingDir.FullName, "MyProject"));
175var outputConfigPath = Path.Combine(outputDir.FullName, "nuget.config");
189var outputDir = Directory.CreateDirectory(Path.Combine(workingDir.FullName, "MyProject"));
202var workingConfigPath = Path.Combine(workingDir.FullName, "nuget.config");
206var outputConfigPath = Path.Combine(outputDir.FullName, "nuget.config");
219var outputDir = Directory.CreateDirectory(Path.Combine(workingDir.FullName, "MyProject"));
228var workingConfigPath = Path.Combine(workingDir.FullName, "nuget.config");
229var outputConfigPath = Path.Combine(outputDir.FullName, "nuget.config");
240var outputDir = Directory.CreateDirectory(Path.Combine(workingDir.FullName, "MyProject"));
249var workingConfigPath = Path.Combine(workingDir.FullName, "nuget.config");
250var outputConfigPath = Path.Combine(outputDir.FullName, "nuget.config");
Templating\OutputPathHelperTests.cs (22)
15var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName);
26var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName);
36File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content");
38var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName);
52File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content");
55var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName);
67File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content");
70var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName);
80var result = OutputPathHelper.GetUniqueDefaultOutputPath("my\0app", workspace.WorkspaceRoot.FullName);
90var result = OutputPathHelper.GetUniqueDefaultOutputPath("\0", workspace.WorkspaceRoot.FullName);
99var path = Path.Combine(workspace.WorkspaceRoot.FullName, "new-dir");
101var result = OutputPathHelper.ValidateOutputPath(path, workspace.WorkspaceRoot.FullName);
112var result = OutputPathHelper.ValidateOutputPath(dir.FullName, workspace.WorkspaceRoot.FullName);
122File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content");
124var result = OutputPathHelper.ValidateOutputPath(dir.FullName, workspace.WorkspaceRoot.FullName);
127Assert.Contains(dir.FullName, result);
134var validator = OutputPathHelper.CreateOutputPathValidator(workspace.WorkspaceRoot.FullName);
147var validator = OutputPathHelper.CreateOutputPathValidator(workspace.WorkspaceRoot.FullName);
159File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content");
161var validator = OutputPathHelper.CreateOutputPathValidator(workspace.WorkspaceRoot.FullName);
Templating\TemplateEngineFactoryGitCheckoutTests.cs (23)
29new TemplateSource(".", Path.GetRelativePath(workspace.WorkspaceRoot.FullName, repository.FullName), commit),
35Assert.Equal(commit, (await File.ReadAllTextAsync(Path.Combine(Directory.GetParent(destination)!.FullName, ".git", "HEAD"))).Trim());
44await File.WriteAllBytesAsync(Path.Combine(repository.FullName, "content"), [4, 5, 6]);
45await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-am", "Move branch");
49Assert.Single(await factory.GetTemplatesAsync(new TemplateSource(".", repository.FullName, commit), TestContext.Current.CancellationToken));
59await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "tag", "-a", "same", "-m", "Annotated tag");
60await File.WriteAllBytesAsync(Path.Combine(repository.FullName, "content"), [4, 5, 6]);
61await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-am", "Move branch");
62await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "branch", "same");
63var branchCommit = (await File.ReadAllTextAsync(Path.Combine(repository.FullName, ".git", "refs", "heads", "same"))).Trim();
67Assert.Single(await factory.GetTemplatesAsync(new TemplateSource(".", repository.FullName, "same"), TestContext.Current.CancellationToken));
69Assert.Single(await factory.GetTemplatesAsync(new TemplateSource(".", repository.FullName, "refs/tags/same"), TestContext.Current.CancellationToken));
107Assert.Single(await factory.GetTemplatesAsync(new TemplateSource(".", repository.FullName, commit), TestContext.Current.CancellationToken));
110Assert.Equal(commit, (await File.ReadAllTextAsync(Path.Combine(repository.FullName, ".git", "refs", "heads", "main"))).Trim());
136var file = Path.Combine(repository.FullName, path);
140await File.WriteAllTextAsync(Path.Combine(configuration.FullName, "template.json"),
142await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "init", "--initial-branch=main", $"--object-format={objectFormat}");
143await GitTestHelper.ConfigureGitIdentityAsync(repository.FullName, outputHelper);
144await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "config", "core.autocrlf", "false");
145await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "add", ".");
146await GitTestHelper.RunGitAsync(repository.FullName, outputHelper, "commit", "-m", "Add content");
147var commit = (await File.ReadAllTextAsync(Path.Combine(repository.FullName, ".git", "refs", "heads", "main"))).Trim();
Templating\TemplateNuGetConfigServiceTests.cs (99)
55? service.PromptToCreateNuGetConfigAsync(channel, output.FullName, TestContext.Current.CancellationToken)
56: service.CreateNuGetConfigIfMissingAsync(channel, output.FullName, TestContext.Current.CancellationToken));
102await service.PromptToCreateNuGetConfigAsync(channel, output.FullName, CancellationToken.None);
106await service.CreateNuGetConfigIfMissingAsync(channel, output.FullName, CancellationToken.None);
112NuGetTestHelper.GetEligiblePackageSources(output.FullName, "Aspire.Hosting.Redis"));
113await Verify(await File.ReadAllTextAsync(Path.Combine(output.FullName, "nuget.config")))
133source = workspace.CreateDirectory(source).FullName;
143await service.PromptToCreateNuGetConfigAsync(channel, builtInOutput.FullName, CancellationToken.None);
144await service.CreateNuGetConfigIfMissingAsync(channel, templateEngineOutput.FullName, CancellationToken.None);
146Assert.Equal(builtInCreatesConfig, File.Exists(Path.Combine(builtInOutput.FullName, "nuget.config")));
147Assert.Equal(templateEngineCreatesConfig, File.Exists(Path.Combine(templateEngineOutput.FullName, "nuget.config")));
151Assert.Equal(expectedSources, NuGetTestHelper.GetEligiblePackageSources(builtInOutput.FullName, "Aspire.Hosting"),
156Assert.Equal(expectedSources, NuGetTestHelper.GetEligiblePackageSources(templateEngineOutput.FullName, "Aspire.Hosting"),
170var path = Path.Combine(output.FullName, fileName);
187await service.CreateNuGetConfigIfMissingAsync(channel, output.FullName, CancellationToken.None);
188await service.CreateNuGetConfigIfMissingAsync(channel, output.FullName, CancellationToken.None);
191Assert.Equal([fileName], Directory.GetFiles(output.FullName).Select(Path.GetFileName));
221var nestedPath = Path.Combine(nested.FullName, "nuget.config");
230await service.CreateNuGetConfigIfMissingAsync(channel, output.FullName, CancellationToken.None);
231var generated = await File.ReadAllBytesAsync(Path.Combine(output.FullName, "nuget.config"));
232await service.CreateNuGetConfigIfMissingAsync(channel, output.FullName, CancellationToken.None);
234Assert.Equal(generated, await File.ReadAllBytesAsync(Path.Combine(output.FullName, "nuget.config")));
237Assert.Equal(["https://daily.example/v3/index.json"], NuGetTestHelper.GetEligiblePackageSources(output.FullName, "Aspire.Hosting"));
238Assert.Equal(["https://enterprise.example/v3/index.json"], NuGetTestHelper.GetEligiblePackageSources(output.FullName, "Company.Library"));
239Assert.Equal(["https://nested.example/v3/index.json"], NuGetTestHelper.GetEligiblePackageSources(nested.FullName, "Aspire.Hosting"));
240await Verify(await File.ReadAllTextAsync(Path.Combine(output.FullName, "nuget.config")))
250Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config"),
275var sourceOverride = workspace.CreateDirectory("aspire-pr-hive/packages").FullName;
277Assert.True(await service.CreateNuGetConfigForSourceOverrideAsync(sourceOverride, channelName: null, outputDirectory.FullName, CancellationToken.None));
279Assert.Equal([sourceOverride], NuGetTestHelper.GetEligiblePackageSources(outputDirectory.FullName, "Aspire.Hosting"));
280Assert.Empty(NuGetTestHelper.GetEligiblePackageSources(outputDirectory.FullName, "Contoso.Package"));
281Assert.Empty(NuGetTestHelper.GetEligiblePackageSources(outputDirectory.FullName, "Example.Dependency"));
282var settings = NuGetTestHelper.LoadSettings(outputDirectory.FullName);
295var sourceOverride = workspace.CreateDirectory("aspire-pr-hive/packages").FullName;
324Assert.True(await service.CreateNuGetConfigForSourceOverrideAsync(sourceOverride, channelName: "daily", outputDirectory.FullName, CancellationToken.None));
326var doc = XDocument.Load(Path.Combine(outputDirectory.FullName, "nuget.config"));
329Assert.Empty(NuGetTestHelper.GetEligiblePackageSources(outputDirectory.FullName, "Example.Dependency"));
341Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config"),
351Path.Combine(outputDirectory.FullName, "nuget.config"),
368var projectConfigPath = Path.Combine(outputDirectory.FullName, "nuget.config");
369var parentConfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config");
374sourceOverride, channelName: null, outputDirectory.FullName, CancellationToken.None));
389Assert.False(await service.CreateNuGetConfigForSourceOverrideAsync(sourceOverride: null, channelName: "daily", workspace.WorkspaceRoot.FullName, CancellationToken.None));
390Assert.False(await service.CreateNuGetConfigForSourceOverrideAsync(sourceOverride: "", channelName: "daily", workspace.WorkspaceRoot.FullName, CancellationToken.None));
391Assert.False(await service.CreateNuGetConfigForSourceOverrideAsync(sourceOverride: " ", channelName: "daily", workspace.WorkspaceRoot.FullName, CancellationToken.None));
407workspace.WorkspaceRoot.FullName,
409Assert.False(File.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, "nuget.config")));
419await service.PromptToCreateNuGetConfigAsync(channelName: null, outputPath: Directory.CreateTempSubdirectory().FullName, CancellationToken.None);
420await service.PromptToCreateNuGetConfigAsync(channelName: "", outputPath: Directory.CreateTempSubdirectory().FullName, CancellationToken.None);
421await service.PromptToCreateNuGetConfigAsync(channelName: " ", outputPath: Directory.CreateTempSubdirectory().FullName, CancellationToken.None);
434Assert.False(await service.ConfigureDotNetAppHostNuGetConfigAsync(channelName: null, outputPath: dir.FullName, CancellationToken.None));
435Assert.False(await service.ConfigureDotNetAppHostNuGetConfigAsync(channelName: "", outputPath: dir.FullName, CancellationToken.None));
436Assert.False(await service.ConfigureDotNetAppHostNuGetConfigAsync(channelName: " ", outputPath: dir.FullName, CancellationToken.None));
563var doc = XDocument.Load(nugetConfigFile.FullName);
622var doc = XDocument.Load(nugetConfigFile.FullName);
675packagesDirectory.FullName,
679Path.Combine(nestedDirectory.FullName, "Aspire.ProjectTemplates.13.5.0.nupkg"),
682var sourceOverride = packagesDirectory.FullName.Replace('\\', '/');
743var doc = XDocument.Load(nugetConfigFile.FullName);
819var hivesDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire", "hives"));
877File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.5.0.nupkg"), string.Empty);
878File.WriteAllText(Path.Combine(prPackagesDirectory.FullName, "Aspire.ProjectTemplates.13.6.0-dev.nupkg"), string.Empty);
912[new PackageMapping("Aspire*", prPackagesDirectory.FullName.Replace('\\', '/'))],
920[new PackageMapping("Aspire*", packagesDirectory.FullName.Replace('\\', '/'))],
951File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.5.0.nupkg"), string.Empty);
952File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.6.0.nupkg"), string.Empty);
960[new PackageMapping("Aspire*", packagesDirectory.FullName.Replace('\\', '/'))],
989packagesDirectory.FullName,
993Path.Combine(nestedDirectory.FullName, "Aspire.ProjectTemplates.13.6.0.nupkg"),
1003[new PackageMapping("Aspire*", packagesDirectory.FullName.Replace('\\', '/'))],
1030File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.6.0-dev.nupkg"), string.Empty);
1031File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.99.0.0.nupkg"), string.Empty);
1039[new PackageMapping("Aspire*", packagesDirectory.FullName.Replace('\\', '/'))],
1066File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.99.0.0.nupkg"), string.Empty);
1074[new PackageMapping("Aspire*", packagesDirectory.FullName.Replace('\\', '/'))],
1107File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.6.0-dev.nupkg"), string.Empty);
1108File.WriteAllText(Path.Combine(packagesDirectory.FullName, "Aspire.ProjectTemplates.13.7.0-dev.nupkg"), string.Empty);
1129[new PackageMapping("Aspire*", packagesDirectory.FullName.Replace('\\', '/'))],
1208File.WriteAllText(Path.Combine(packagesDir.FullName, "Aspire.ProjectTemplates.13.5.0.nupkg"), string.Empty);
1230[new PackageMapping("Aspire*", packagesDir.FullName.Replace('\\', '/'))],
1260packagesDir.FullName,
1279[new PackageMapping("Aspire*", new Uri(packagesDir.FullName).AbsoluteUri)],
1358await service.PromptToCreateNuGetConfigAsync(channelName: "daily", outputDir.FullName, CancellationToken.None);
1361var configPath = Path.Combine(outputDir.FullName, "nuget.config");
1370NuGetTestHelper.GetEligiblePackageSources(outputDir.FullName, "Aspire.Hosting"));
1397await service.PromptToCreateNuGetConfigAsync(channelName: "stable", outputDir.FullName, CancellationToken.None);
1400Assert.False(File.Exists(Path.Combine(outputDir.FullName, "nuget.config")));
1411Path.Combine(outputDir.FullName, "nuget.config"),
1441var configPath = Path.Combine(outputDir.FullName, "nuget.config");
1444await service.PromptToCreateNuGetConfigAsync(channelName: "stable", outputDir.FullName, CancellationToken.None);
1465Path.Combine(outputDir.FullName, "nuget.config"),
1492var result = await service.ConfigureDotNetAppHostNuGetConfigAsync(channelName: "stable", outputDir.FullName, CancellationToken.None);
1494var configPath = Path.Combine(outputDir.FullName, "nuget.config");
1505NuGetTestHelper.GetEligiblePackageSources(outputDir.FullName, "Aspire.Hosting"));
1508NuGetTestHelper.GetEligiblePackageSources(outputDir.FullName, "Example.Dependency"));
1524var configPath = Path.Combine(outputDir.FullName, "nuget.config");
1555PackageChannelNames.Stable, outputDir.FullName, TestContext.Current.CancellationToken);
1560NuGetTestHelper.GetEligiblePackageSources(outputDir.FullName, "Aspire.Hosting.Redis"));
1563NuGetTestHelper.GetEligiblePackageSources(outputDir.FullName, "Company.Package"));
tests\Shared\Processes\ProcessTestFixture.cs (11)
47while (!File.Exists(Path.Combine(repository.FullName, "Aspire.slnx")))
61var sourcePaths = sources.Select(source => Path.Combine(repository.FullName, "src", "Shared", source)).Concat(
63Path.Combine(repository.FullName, "tests", "Shared", "AsyncTestHelpers.cs"),
64Path.Combine(repository.FullName, "tests", "Aspire.TestUtilities", "PlatformDetection.cs")
68var project = Path.Combine(_directory.FullName, "ProcessTestHost.csproj");
84await File.WriteAllTextAsync(Path.Combine(_directory.FullName, "Program.cs"), HostProgram);
85await RunDotnetAsync(repository.FullName,
86["restore", project, "--configfile", Path.Combine(repository.FullName, "NuGet.config"), "--verbosity", "quiet"]);
87await RunDotnetAsync(repository.FullName, ["build", project, "--no-restore", "--verbosity", "quiet"]);
88_assemblyPath = Path.Combine(_directory.FullName, "bin", "Debug", targetFramework, "ProcessTestHost.dll");
97WorkingDirectory = _directory.FullName,
TestServices\FakePlaywrightServices.cs (4)
66_bundleDirectory = new DirectoryInfo(Path.Combine(executionContext.WorkingDirectory.FullName, ".fake-aspire-skills-bundle"));
164var path = Path.Combine(_bundleDirectory.FullName, "skills", skillName, relativePath);
190await File.WriteAllTextAsync(Path.Combine(_bundleDirectory.FullName, "skill-manifest.json"), manifestJson, cancellationToken);
205Sha512 = ComputeSha512(Path.Combine(_bundleDirectory.FullName, "skills", skillName, entry.Key.RelativePath))
Utils\CliPathHelperTests.cs (15)
188var installPrefix = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire");
201var installPrefix = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-pr-test");
219var binaryPath = WriteBinaryWithSidecar(workspace.WorkspaceRoot.FullName, source);
230var installPrefix = Path.Combine(workspace.WorkspaceRoot.FullName, "portable");
291var target = Path.Combine(workspace.WorkspaceRoot.FullName, "target-aspire");
294var link = Path.Combine(workspace.WorkspaceRoot.FullName, "aspire");
366var realPath = Path.Combine(workspace.WorkspaceRoot.FullName, "binary-under-test");
382var realPath = Path.Combine(workspace.WorkspaceRoot.FullName, "binary-under-test");
402var installPrefix = Path.Combine(workspace.WorkspaceRoot.FullName, "portable");
434var staleFile = BackchannelConstants.ComputeCliSocketPath(tempRoot.FullName, "cli.sock");
437var freshFile = BackchannelConstants.ComputeCliSocketPath(tempRoot.FullName, "cli.sock");
463var matching = BackchannelConstants.ComputeCliSocketPath(tempRoot.FullName, "cli.sock");
466var unrelated = BackchannelConstants.ComputeCliSocketPath(tempRoot.FullName, "apphost.sock");
491var missingDir = probe.FullName;
505var deleted = CliPathHelper.CleanupStaleCliSockets(tempDir.FullName, TimeSpan.FromHours(24));
Utils\DcpConnectionHealthCheckTests.cs (12)
48new FixedLayoutDiscovery(LayoutComponent.Dcp, dcpDirectory.FullName),
78var bundleService = new RecordingBundleService(dcpDirectory.FullName);
90Assert.All(probedPaths, path => Assert.Equal(dcpDirectory.FullName, path));
111var bundleService = new RecordingBundleService(extractedDcpDirectory.FullName);
113new FixedLayoutDiscovery(LayoutComponent.Dcp, discoveredDcpDirectory.FullName),
122Assert.All(probedPaths, path => Assert.Equal(discoveredDcpDirectory.FullName, path));
161() => checker.TestConnectionAsync(dcpDirectory.FullName, useDeveloperCertificate: false, cancellation.Token));
179Assert.Equal(dcpDirectory.FullName, path);
185new FixedLayoutDiscovery(LayoutComponent.Dcp, dcpDirectory.FullName),
215new FixedLayoutDiscovery(LayoutComponent.Dcp, dcpDirectory.FullName),
258var kubeconfigPath = Path.Combine(workspace.WorkspaceRoot.FullName, "kubeconfig");
318File.WriteAllText(BundleDiscovery.GetDcpExecutablePath(dcpDirectory.FullName), string.Empty);
Utils\DevCertsCheckTests.cs (52)
68var certUtilPath = Path.Combine(directory.FullName, CertificateHelpers.CertUtilCommand);
81? Path.Combine(directory.FullName, "openssl.cmd")
82: Path.Combine(directory.FullName, "openssl");
116File.WriteAllText(Path.Combine(trustDirectory.FullName, GetOpenSslCertificateFileName(certificate)), certificatePem);
117File.WriteAllText(Path.Combine(trustDirectory.FullName, hashEntryName), certificatePem);
378["PATH"] = tempDirectory.FullName
406var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
424["PATH"] = tempDirectory.FullName,
425[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
450var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
468["PATH"] = tempDirectory.FullName,
469[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
501var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
519["PATH"] = tempDirectory.FullName,
520[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
556var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
557File.WriteAllText(Path.Combine(trustDirectory.FullName, GetOpenSslCertificateFileName(certificate)), certificate.ExportCertificatePem());
574["PATH"] = tempDirectory.FullName,
575[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
606var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
607File.WriteAllText(Path.Combine(trustDirectory.FullName, GetOpenSslCertificateFileName(certificate)), certificate.ExportCertificatePem());
624["PATH"] = tempDirectory.FullName,
625[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
665var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
666File.WriteAllText(Path.Combine(trustDirectory.FullName, GetOpenSslCertificateFileName(certificate)), certificate.ExportCertificatePem());
683["PATH"] = tempDirectory.FullName,
684[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
722var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
723File.WriteAllText(Path.Combine(trustDirectory.FullName, GetOpenSslCertificateFileName(certificate)), certificate.ExportCertificatePem());
740["PATH"] = tempDirectory.FullName,
741[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
764var trustDirectory = Path.Combine(tempDirectory.FullName, "missing-trust");
781["PATH"] = tempDirectory.FullName,
808var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
825["PATH"] = tempDirectory.FullName,
826[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
852var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
854File.WriteAllText(Path.Combine(trustDirectory.FullName, corruptCertificateFileName), "not a certificate");
871["PATH"] = tempDirectory.FullName,
872[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
898var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
900File.WriteAllText(Path.Combine(trustDirectory.FullName, corruptCertificateFileName), "not a certificate");
917["PATH"] = tempDirectory.FullName,
918[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
944var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
946File.WriteAllText(Path.Combine(trustDirectory.FullName, "unrelated.pem"), "not a certificate");
963["PATH"] = tempDirectory.FullName,
964[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
988var trustDirectory = Directory.CreateDirectory(Path.Combine(tempDirectory.FullName, "trust"));
989File.WriteAllText(Path.Combine(trustDirectory.FullName, GetOpenSslCertificateFileName(certificate)), staleCertificate.ExportCertificatePem());
1006["PATH"] = tempDirectory.FullName,
1007[CertificateHelpers.DevCertsOpenSslCertDirEnvVar] = trustDirectory.FullName
Utils\FileSystemHelperTests.cs (35)
16var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
19File.WriteAllText(Path.Combine(sourceDir.FullName, "file1.txt"), "content1");
20File.WriteAllText(Path.Combine(sourceDir.FullName, "file2.txt"), "content2");
21File.WriteAllText(Path.Combine(sourceDir.FullName, "file3.cs"), "using System;");
24FileSystemHelper.CopyDirectory(sourceDir.FullName, destDir);
43var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
49File.WriteAllText(Path.Combine(sourceDir.FullName, "root.txt"), "root content");
50File.WriteAllText(Path.Combine(subDir1.FullName, "level1.txt"), "level 1 content");
51File.WriteAllText(Path.Combine(subDir2.FullName, "level2.txt"), "level 2 content");
54FileSystemHelper.CopyDirectory(sourceDir.FullName, destDir);
75var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "empty_destination");
78FileSystemHelper.CopyDirectory(sourceDir.FullName, destDir);
91var nonExistentSource = Path.Combine(workspace.WorkspaceRoot.FullName, "nonexistent");
92var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
104var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
120FileSystemHelper.CopyDirectory(sourceDir.FullName, null!));
128var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
144FileSystemHelper.CopyDirectory(sourceDir.FullName, string.Empty));
153var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
156var binaryFilePath = Path.Combine(sourceDir.FullName, "binary.dat");
162FileSystemHelper.CopyDirectory(sourceDir.FullName, destDir);
178var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
185File.WriteAllText(Path.Combine(current.FullName, $"file{i}.txt"), $"content at level {i}");
189FileSystemHelper.CopyDirectory(sourceDir.FullName, destDir);
209var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
212File.WriteAllText(Path.Combine(sourceDir.FullName, "file1.txt"), "new content 1");
213File.WriteAllText(Path.Combine(sourceDir.FullName, "file2.txt"), "new content 2");
216File.WriteAllText(Path.Combine(subDir.FullName, "project.assets.json"), "new assets");
217File.WriteAllText(Path.Combine(subDir.FullName, "project.csproj.nuget.dgspec.json"), "new dgspec");
225File.WriteAllText(Path.Combine(destSubDir.FullName, "project.assets.json"), "old assets");
226File.WriteAllText(Path.Combine(destSubDir.FullName, "project.csproj.nuget.dgspec.json"), "old dgspec");
229FileSystemHelper.CopyDirectory(sourceDir.FullName, destDir, overwrite: true);
244var destDir = Path.Combine(workspace.WorkspaceRoot.FullName, "destination");
247File.WriteAllText(Path.Combine(sourceDir.FullName, "file1.txt"), "new content");
255FileSystemHelper.CopyDirectory(sourceDir.FullName, destDir, overwrite: false));
Utils\LegacySettingsFileCheckTests.cs (13)
15var legacyDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
21var subDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "src"));
43Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
60var legacyDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
64Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
83Path.Combine(workspace.WorkspaceRoot.FullName, AspireConfigFile.FileName),
88var subDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "src"));
105var legacyDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
111var subDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "src", "MyProject"));
131var legacyDir = Path.Combine(workspace.WorkspaceRoot.FullName, ".aspire");
136var childDir = new DirectoryInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "project"));
139Path.Combine(childDir.FullName, AspireConfigFile.FileName),
143var workingDir = new DirectoryInfo(Path.Combine(childDir.FullName, "src"));
Utils\PathNormalizerTests.cs (52)
21var file = new FileInfo(Path.Combine(subdir.FullName, "app.csproj"));
22File.WriteAllText(file.FullName, "<Project />");
24var firstPass = PathNormalizer.ResolveSymlinks(file.FullName);
42var file = new FileInfo(Path.Combine(directory.FullName, "App.csproj"));
43File.WriteAllText(file.FullName, "<Project />");
44var caseVariantPath = Path.Combine(workspace.WorkspaceRoot.FullName, "mixedcase", "app.CSPROJ");
51PathNormalizer.ResolveSymlinks(file.FullName),
61var file = new FileInfo(Path.Combine(directory.FullName, "App.csproj"));
62File.WriteAllText(file.FullName, "<Project />");
63var caseVariantPath = Path.Combine(workspace.WorkspaceRoot.FullName, "mixedcase", "app.CSPROJ");
70PathNormalizer.ResolveSymlinks(file.FullName),
71PathNormalizer.ResolveToFilesystemPath(file.FullName));
78var missingPath = Path.Combine(workspace.WorkspaceRoot.FullName, "Missing", "App.csproj");
80PathNormalizer.ResolveSymlinks(workspace.WorkspaceRoot.FullName),
92var target = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "target.csproj"));
93File.WriteAllText(target.FullName, "<Project />");
95var linkPath = Path.Combine(workspace.WorkspaceRoot.FullName, "link.csproj");
96TestSymlinkHelper.TryCreateSymlink(linkPath, target.FullName, isDirectory: false);
103Assert.Equal(PathNormalizer.ResolveSymlinks(target.FullName), resolved);
117var file = new FileInfo(Path.Combine(nested.FullName, "app.csproj"));
118File.WriteAllText(file.FullName, "<Project />");
120var linkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
121TestSymlinkHelper.TryCreateSymlink(linkDirectory, realDirectory.FullName);
128var resolvedThroughReal = PathNormalizer.ResolveSymlinks(file.FullName);
138var missingTarget = Path.Combine(workspace.WorkspaceRoot.FullName, "missing.csproj");
139var linkPath = Path.Combine(workspace.WorkspaceRoot.FullName, "broken-link.csproj");
157var projectFile = new FileInfo(Path.Combine(realDirectory.FullName, "AppHost.csproj"));
158File.WriteAllText(projectFile.FullName, "<Project />");
160var linkDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "link");
161TestSymlinkHelper.TryCreateSymlink(linkDirectory, realDirectory.FullName);
166Assert.Equal(PathNormalizer.ResolveSymlinks(projectFile.FullName), resolved);
177var file = new FileInfo(Path.Combine(tempDirectory.FullName, "AppHost.csproj"));
178File.WriteAllText(file.FullName, "<Project />");
180var logicalPath = file.FullName.StartsWith("/private/var/", StringComparison.Ordinal)
181? file.FullName["/private".Length..]
182: file.FullName;
201var missingPath = Path.Combine(workspace.WorkspaceRoot.FullName, "Missing.AppHost", "Missing.AppHost.csproj");
216var decomposedPath = Path.Combine(testRoot.FullName, decomposedName);
219var enumeratedPath = Assert.Single(Directory.EnumerateDirectories(testRoot.FullName));
220var composedPath = Path.Combine(testRoot.FullName, composedName);
241var normalizationMatch = Path.Combine(testRoot.FullName, "Cafe\u0301");
247var candidate = Path.Combine(testRoot.FullName, "Caf\u00E9");
257Assert.True(PathNormalizer.TryResolveToFilesystemPath(caseMatch.FullName, out _));
267var file = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "app.csproj"));
268File.WriteAllText(file.FullName, "<Project />");
270file.FullName.Length >= 3 &&
271file.FullName[1] == ':' &&
272file.FullName[2] == Path.DirectorySeparatorChar,
275var lowercaseDrivePath = $"{char.ToLowerInvariant(file.FullName[0])}{file.FullName[1..]}";
276var uppercaseDrivePath = $"{char.ToUpperInvariant(file.FullName[0])}{file.FullName[1..]}";
Aspire.Dashboard (6)
Aspire.Dashboard.Components.Tests (11)
Aspire.Dashboard.Playwright.Tests (18)
Aspire.Dashboard.Tests (36)
Aspire.Deployment.EndToEnd.Tests (164)
AzureSandboxesDeploymentTests.cs (17)
57var defaultUrlFile = Path.Combine(workspace.WorkspaceRoot.FullName, "dotnet-default-url.txt");
58var anonymousUrlFile = Path.Combine(workspace.WorkspaceRoot.FullName, "dotnet-anonymous-url.txt");
59var deployOutputFile = Path.Combine(workspace.WorkspaceRoot.FullName, "dotnet-deploy-output.txt");
60var stateMarkerFile = Path.Combine(workspace.WorkspaceRoot.FullName, "dotnet-state-marker");
65output.WriteLine($"Workspace: {workspace.WorkspaceRoot.FullName}");
247var firstDeployOutputFile = Path.Combine(workspace.WorkspaceRoot.FullName, "first-deploy-output.txt");
248var secondDeployOutputFile = Path.Combine(workspace.WorkspaceRoot.FullName, "second-deploy-output.txt");
249var firstUrlFile = Path.Combine(workspace.WorkspaceRoot.FullName, "first-url.txt");
250var secondUrlFile = Path.Combine(workspace.WorkspaceRoot.FullName, "second-url.txt");
251var stateMarkerFile = Path.Combine(workspace.WorkspaceRoot.FullName, "state-marker");
256output.WriteLine($"Workspace: {workspace.WorkspaceRoot.FullName}");
418var siteDir = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "site"));
419File.WriteAllText(Path.Combine(siteDir.FullName, "Dockerfile"), """
424File.WriteAllText(Path.Combine(siteDir.FullName, "index.html"), $$"""
432File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts"), """
464var projectDir = Path.Combine(workspace.WorkspaceRoot.FullName, projectName);
574File.WriteAllText(Path.Combine(propertiesDir.FullName, "launchSettings.json"), """
TypeScriptJavaScriptHostingDeploymentTests.cs (8)
53output.WriteLine($"Workspace: {workspace.WorkspaceRoot.FullName}");
123var apiDir = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "api"));
124File.WriteAllText(Path.Combine(apiDir.FullName, "package.json"), """
134File.WriteAllText(Path.Combine(apiDir.FullName, "server.js"), """
144var staticSiteDir = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "staticsite"));
145File.WriteAllText(Path.Combine(staticSiteDir.FullName, "package.json"), """
155File.WriteAllText(Path.Combine(staticSiteDir.FullName, "index.html"), """
168File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "apphost.mts"), """
Aspire.EndToEnd.Tests (7)
Aspire.Hosting (29)
src\Shared\SocketPermissionHelper.cs (12)
46var isWorkingDirectory = string.Equals(directory.FullName, Path.TrimEndingDirectorySeparator(currentDirectory), comparison);
47var isUserProfile = string.Equals(directory.FullName, profileRoot, comparison);
48var isTemporaryRoot = string.Equals(Path.TrimEndingDirectorySeparator(directory.FullName), tempRoot, comparison);
61if (string.Equals(current.FullName, profileRoot, comparison) ||
62string.Equals(current.FullName, tempRoot, comparison))
65if (!Directory.Exists(resolvedBase.FullName))
67throw new IOException($"The socket directory base '{current.FullName}' must resolve to an existing directory.");
84if (directory.Exists && (File.GetUnixFileMode(directory.FullName) & UnixFileMode.StickyBit) != 0)
91return DirectoryHelper.CreateWithOwnerOnlyPermissions(directory.FullName);
96Directory.CreateDirectory(directory.FullName, OwnerOnlyMode);
97if (File.GetUnixFileMode(directory.FullName) != OwnerOnlyMode)
174throw new IOException($"The configured socket directory '{directory.FullName}' must have a protected owner-only ACL with inheritable full control for the current user (SYSTEM is also allowed). Set those permissions or choose a new dedicated directory.");
Aspire.Hosting.Azure (4)
Aspire.Hosting.Azure.EntraId.Tests (1)
Aspire.Hosting.Azure.Tests (32)
AzureEnvironmentResourceTests.cs (14)
23output.WriteLine($"Temp directory: {workspace.FullName}");
24using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, output, workspace.FullName);
36var mainBicepPath = Path.Combine(workspace.FullName, "main.bicep");
40var envBicepPath = Path.Combine(workspace.FullName, "env", "env.bicep");
55output.WriteLine($"Temp directory: {workspace.FullName}");
56using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, output, workspace.FullName);
73var mainBicepPath = Path.Combine(workspace.FullName, "main.bicep");
87output.WriteLine($"Temp directory: {workspace.FullName}");
89workspace.FullName);
126var mainBicepPath = Path.Combine(workspace.FullName, "main.bicep");
137output.WriteLine($"Temp directory: {workspace.FullName}");
139workspace.FullName);
176var mainBicep = File.ReadAllText(Path.Combine(workspace.FullName, "main.bicep"));
177var storageBicep = File.ReadAllText(Path.Combine(workspace.FullName, "storage", "storage.bicep"));
Aspire.Hosting.Blazor (2)
Aspire.Hosting.Blazor.Tests (22)
AddBlazorGatewayTests.cs (15)
229var gatewayDirectory = Directory.CreateDirectory(Path.Combine(directory.Path, "Gateway")).FullName;
430File.WriteAllText(Path.Combine(solutionRoot.FullName, "Test.slnx"), "<Solution />");
431var appHostDirectory = Directory.CreateDirectory(Path.Combine(solutionRoot.FullName, "src", "AppHost")).FullName;
433var projectDirectory = Directory.CreateDirectory(Path.Combine(solutionRoot.FullName, "src", "Client")).FullName;
435Assert.Equal(solutionRoot.FullName, BlazorGatewayExtensions.GetSolutionRoot(appHostDirectory, projectDirectory));
449var appHostDirectory = Directory.CreateDirectory(Path.Combine(directory.FullName, "AppHost")).FullName;
451var projectDirectory = Directory.CreateDirectory(Path.Combine(directory.FullName, "Client")).FullName;
470var appHostDirectory = Directory.CreateDirectory(Path.Combine(directory.FullName, "AppHost")).FullName;
472var projectDirectory = Directory.CreateDirectory(Path.Combine(directory.FullName, "Client")).FullName;
Aspire.Hosting.Browsers.Tests (33)
BrowserLogsSessionManagerTests.cs (22)
63var browserExecutable = Path.Combine(userDataDirectory.FullName, "browser");
70createUserDataDirectory: (configuration, _) => BrowserLogsUserDataDirectory.CreatePersistent(userDataDirectory.FullName, configuration.Profile),
103var browserExecutable = Path.Combine(userDataDirectory.FullName, "browser");
110createUserDataDirectory: (configuration, _) => BrowserLogsUserDataDirectory.CreatePersistent(userDataDirectory.FullName, configuration.Profile),
138var browserExecutable = Path.Combine(userDataDirectory.FullName, "browser");
144createUserDataDirectory: (configuration, _) => BrowserLogsUserDataDirectory.CreatePersistent(userDataDirectory.FullName, configuration.Profile),
172var browserExecutable = Path.Combine(userDataDirectory.FullName, "browser");
174var identity = new BrowserHostIdentity(browserExecutable, userDataDirectory.FullName);
188createUserDataDirectory: (configuration, _) => BrowserLogsUserDataDirectory.CreatePersistent(userDataDirectory.FullName, configuration.Profile),
258Path.Combine(userDataDirectory.FullName, "browser"),
259userDataDirectory.FullName);
260var metadataPath = BrowserEndpointDiscovery.GetEndpointMetadataFilePath(userDataDirectory.FullName);
288Path.Combine(userDataDirectory.FullName, "bröwser"),
289userDataDirectory.FullName);
290var metadataPath = BrowserEndpointDiscovery.GetEndpointMetadataFilePath(userDataDirectory.FullName);
318Path.Combine(userDataDirectory.FullName, "browser"),
319userDataDirectory.FullName);
320var metadataPath = BrowserEndpointDiscovery.GetEndpointMetadataFilePath(userDataDirectory.FullName);
329"userDataRootPath": {{System.Text.Json.JsonSerializer.Serialize(userDataDirectory.FullName)}}
351Path.Combine(userDataDirectory.FullName, "browser"),
352userDataDirectory.FullName);
566action(userDataDirectory.FullName);
Aspire.Hosting.CodeGeneration.Go.Tests (41)
AtsGoCodeGeneratorTests.cs (20)
75await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
77await File.WriteAllTextAsync(Path.Combine(directory.FullName, "terminal_test.go"), """
107WorkingDirectory = directory.FullName,
155await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
158await File.WriteAllTextAsync(Path.Combine(directory.FullName, "transport_test.go"), """
222: Path.Combine(directory.FullName, "socket");
237WorkingDirectory = directory.FullName,
309await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
312await File.WriteAllTextAsync(Path.Combine(directory.FullName, "transport_hardening_test.go"), """
687await File.WriteAllTextAsync(Path.Combine(directory.FullName, "decode_test.go"), """
1017WorkingDirectory = directory.FullName,
1056await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
1059await File.WriteAllTextAsync(Path.Combine(directory.FullName, "runtime_test.go"), """
1180WorkingDirectory = directory.FullName,
1563await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
1566await File.WriteAllTextAsync(Path.Combine(directory.FullName, "callback_test.go"), """
1692WorkingDirectory = directory.FullName,
1735await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
1738await File.WriteAllTextAsync(Path.Combine(directory.FullName, "declared_interface_test.go"), """
1831WorkingDirectory = directory.FullName,
GoDocCommentTests.cs (4)
229await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
232var build = await RunAsync("go", directory.FullName, timeout.Token, "build", "./...");
235var vet = await RunAsync("go", directory.FullName, timeout.Token, "vet", "./...");
243var formatted = await RunAsync("gofmt", directory.FullName, timeout.Token, "aspire.go");
GoGeneratorEscapingTests.cs (3)
64await File.WriteAllTextAsync(Path.Combine(directory.FullName, name), content, timeout.Token);
67var build = await GoDocCommentTests.RunAsync("go", directory.FullName, timeout.Token, "build", "./...");
70var vet = await GoDocCommentTests.RunAsync("go", directory.FullName, timeout.Token, "vet", "./...");
Aspire.Hosting.CodeGeneration.Java.Tests (10)
AtsJavaCodeGeneratorTests.cs (8)
3811_classes = Directory.CreateDirectory(Path.Combine(_root.FullName, "classes"));
3816var path = Path.Combine(_root.FullName, relativePath.Replace('/', Path.DirectorySeparatorChar));
3824.EnumerateFiles(_root.FullName, "*.java", SearchOption.AllDirectories)
3825.Select(path => Path.GetRelativePath(_root.FullName, path))
3829var sourcesFile = Path.Combine(_root.FullName, "sources.txt");
3835["--release", "21", "-d", _classes.FullName, "@sources.txt"],
3845=> RunProcessAsync("java", ["-cp", _classes.FullName, className], timeout);
3864WorkingDirectory = _root.FullName,
Aspire.Hosting.CodeGeneration.Rust.Tests (15)
Aspire.Hosting.CodeGeneration.TypeScript (1)
Aspire.Hosting.CodeGeneration.TypeScript.Tests (12)
Aspire.Hosting.Containers.Tests (7)
Aspire.Hosting.Dotnet (6)
Aspire.Hosting.Dotnet.Tests (81)
DotnetProjectBuildCoordinatorTests.cs (23)
481var filePath = Path.Combine(fileDirectory.FullName, "worker.cs");
934var projectRoot = workspace.CreateDirectory("projects").FullName;
936var feed = Directory.CreateDirectory(Path.Combine(projectRoot, "feed")).FullName;
2023var runtimeWorkingDirectory = Directory.CreateDirectory(Path.Combine(workspace.Path, "runtime")).FullName;
2024var sdkWorkingDirectory = Directory.CreateDirectory(Path.Combine(workspace.Path, "sdk-runtime")).FullName;
2077var firstSdkWorkingDirectory = Directory.CreateDirectory(Path.Combine(workspace.Path, "sdk-runtime-1")).FullName;
2078var secondSdkWorkingDirectory = Directory.CreateDirectory(Path.Combine(workspace.Path, "sdk-runtime-2")).FullName;
2125var sourceRoot = Directory.CreateDirectory(Path.Combine(workspace.Path, "source")).FullName;
2129var runtimeWorkingDirectory = Directory.CreateDirectory(Path.Combine(workspace.Path, "runtime")).FullName;
2151Directory.CreateDirectory(Path.Combine(workspace.Path, "source")).FullName,
2155var foreignRoot = Directory.CreateDirectory(Path.Combine(workspace.Path, "foreign")).FullName;
2157var runtimeWorkingDirectory = Directory.CreateDirectory(Path.Combine(foreignRoot, "runtime")).FullName;
2333var linkedProjectPath = CreateProject(physicalRoot.FullName, "Service", "Service.csproj");
2334File.WriteAllText(Path.Combine(physicalRoot.FullName, "global.json"), """
2345Directory.CreateSymbolicLink(linkPath, physicalRoot.FullName);
2803var sentinels = Directory.CreateDirectory(Path.Combine(workspace.Path, "instances")).FullName;
3859var path = Path.Combine(directory.FullName, projectFileName);
3868File.WriteAllText(Path.Combine(propertiesDirectory.FullName, "launchSettings.json"), $$"""
3920var relativeSharedProject = Path.GetRelativePath(directory.FullName, sharedProject);
3921var projectPath = Path.Combine(directory.FullName, $"{name}{extension}");
4052var projectPath = Path.Combine(directory.FullName, $"{name}{extension}");
4060var appPath = Path.Combine(directory.FullName, $"{name}.cs");
4061var relativeSharedProject = Path.GetRelativePath(directory.FullName, sharedProject)
DotnetProjectPathTests.cs (28)
56var projectPath = Path.Combine(directory.FullName, $"Service{extension}");
58File.WriteAllText(Path.Combine(directory.FullName, "app.cs"), "");
59File.WriteAllText(Path.Combine(directory.FullName, "script.fsx"), "");
61File.WriteAllText(Path.Combine(nested.FullName, "Other.csproj"), "<Project />");
66var absolute = builder.AddDotnetProject("absolute", directory.FullName, options => options.ExcludeLaunchProfile = true);
71Assert.Equal(directory.FullName, absolute.Resource.WorkingDirectory);
72Assert.Equal(directory.FullName, relative.Resource.WorkingDirectory);
78File.WriteAllText(Path.Combine(directory.FullName, "Later.vbproj"), "<Project />");
122File.WriteAllText(Path.Combine(directory.FullName, $"First{firstExtension}"), "<Project />");
123File.WriteAllText(Path.Combine(directory.FullName, $"Second{secondExtension}"), "<Project />");
125File.WriteAllText(Path.Combine(directory.FullName, "app.cs"), "");
130var resource = builder.AddDotnetProject("service", directory.FullName, options => options.ExcludeLaunchProfile = true);
132Assert.Equal(directory.FullName, resource.Resource.GetProjectMetadata().ProjectPath);
144$"Path to .NET project for resource 'service' could not be determined. The directory '{directory.FullName}' must contain exactly one .csproj, .fsproj, or .vbproj file. Specify an explicit project filename when multiple supported projects exist.",
188var csharpPath = Path.Combine(directory.FullName, "Service.csproj");
193File.WriteAllText(Path.Combine(directory.FullName, "Service.fsproj"), "<Project />");
194File.WriteAllText(Path.Combine(directory.FullName, "Service.vbproj"), "<Project />");
200var legacy = builder.AddProject("legacy", directory.FullName, options => options.ExcludeLaunchProfile = true);
201var legacyFileApp = builder.AddCSharpApp("legacy-file", directory.FullName, options => options.ExcludeLaunchProfile = true);
203var modern = builder.AddDotnetProject("modern", directory.FullName, options => options.ExcludeLaunchProfile = true);
205Assert.Equal(includeCSharpProject ? csharpPath : directory.FullName, legacy.Resource.GetProjectMetadata().ProjectPath);
206Assert.Equal(includeCSharpProject ? csharpPath : directory.FullName, legacyFileApp.Resource.GetProjectMetadata().ProjectPath);
207Assert.Equal(directory.FullName, modern.Resource.GetProjectMetadata().ProjectPath);
264File.WriteAllText(Path.Combine(directory.FullName, $"First{firstExtension}"), "<Project />");
265File.WriteAllText(Path.Combine(directory.FullName, $"Second{secondExtension}"), "<Project />");
267File.WriteAllText(Path.Combine(directory.FullName, "app.cs"), "");
271builder.AddDotnetProject("service", directory.FullName));
274$"Path to .NET project for resource 'service' could not be determined. The directory '{directory.FullName}' must contain exactly one .csproj, .fsproj, or .vbproj file. Specify an explicit project filename when multiple supported projects exist.",
DotnetProjectResourceTests.cs (22)
425var projectPath = CreateFile(projectDirectory.FullName, "MyService.csproj");
427File.WriteAllText(Path.Combine(projectDirectory.FullName, "Dockerfile"), "FROM scratch");
431.WithWorkingDirectory(runtimeDirectory.FullName)
439Assert.Equal(projectDirectory.FullName, dockerfile.ContextPath);
451var projectPath = Path.Combine(projectDir.FullName, "MyService.csproj");
455var app = builder.AddDotnetProject("svc", projectDir.FullName, o => o.ExcludeLaunchProfile = true);
469File.WriteAllText(Path.Combine(projectDir.FullName, "First.csproj"), "<Project />");
470File.WriteAllText(Path.Combine(projectDir.FullName, "Second.csproj"), "<Project />");
473var app = builder.AddDotnetProject("svc", projectDir.FullName, o => o.ExcludeLaunchProfile = true);
476Assert.Equal(projectDir.FullName, metadata.ProjectPath);
538var projectPath = Path.Combine(projectDir.FullName, "MyService.csproj");
541var propertiesDir = Directory.CreateDirectory(Path.Combine(projectDir.FullName, "Properties"));
542await File.WriteAllTextAsync(Path.Combine(propertiesDir.FullName, "launchSettings.json"), """
644var projectPath = Path.Combine(projectDir.FullName, "MyService.csproj");
647var propertiesDir = Directory.CreateDirectory(Path.Combine(projectDir.FullName, "Properties"));
648await File.WriteAllTextAsync(Path.Combine(propertiesDir.FullName, "launchSettings.json"), """
714var projectPath = Path.Combine(projectDir.FullName, "MyService.csproj");
717var propertiesDir = Directory.CreateDirectory(Path.Combine(projectDir.FullName, "Properties"));
718await File.WriteAllTextAsync(Path.Combine(propertiesDir.FullName, "launchSettings.json"), """
1097var projectPath = Path.Combine(projectDirectory.FullName, $"Project{extension}");
1190CreateFile(projectDirectory.FullName, "MyService.csproj");
1191return projectDirectory.FullName;
Aspire.Hosting.Garnet.Tests (1)
Aspire.Hosting.Go.Tests (69)
AddGoAppTests.cs (69)
92File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
94using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
95builder.AddGoApp("api", sourceDir.FullName, packagePath: "./cmd/server");
99var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
528var app = builder.AddGoApp("api", sourceDir.FullName,
554Assert.Equal(sourceDir.FullName, plan.WorkingDirectory);
575var packageDirectory = Path.Combine(sourceDir.FullName, "cmd", "server");
577var app = builder.AddGoApp("api", sourceDir.FullName,
588Assert.Equal(sourceDir.FullName, launchConfig.WorkingDirectory);
599var app = builder.AddGoApp("api", sourceDir.FullName);
625var app = builder.AddGoApp("api", sourceDir.FullName,
662var app = builder.AddGoApp("api", sourceDir.FullName, packagePath: "./cmd/server")
692var app = builder.AddGoApp("api", sourceDir.FullName,
845File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.23\n");
846File.WriteAllText(Path.Combine(sourceDir.FullName, "main.go"), "package main\nfunc main() {}");
848using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
849builder.AddGoApp("api", sourceDir.FullName);
853var dockerfilePath = Path.Combine(outputDir.FullName, "api.Dockerfile");
868using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
869builder.AddGoApp("api", sourceDir.FullName);
873var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
885File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.22\n");
887using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
888builder.AddGoApp("api", sourceDir.FullName,
895var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
907File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
912using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
913builder.AddGoApp("api", sourceDir.FullName, ldFlags: "-X main.msg=it's alive");
917var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
930File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch");
932using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
933var app = builder.AddGoApp("api", sourceDir.FullName);
1051builder.AddGoApp("api", workspace.CreateDirectory("source").FullName, packagePath: "./cmd/server");
1165File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.22\n");
1167using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1168builder.AddGoApp("api", sourceDir.FullName)
1173var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1187File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1189using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1190builder.AddGoApp("api", sourceDir.FullName)
1195var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1207File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1209using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1210builder.AddGoApp("api", sourceDir.FullName)
1215var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1239DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1263File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1266DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1275var api = builder.AddGoApp("api", sourceDir.FullName);
1280var dockerfile = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1297File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1300DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1314var api = builder.AddGoApp("api", sourceDir.FullName);
1320var dockerfile = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1365File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1367using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1368builder.AddGoApp("api", sourceDir.FullName, raceDetector: true);
1372var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1439File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1441using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1442builder.AddGoApp("api", sourceDir.FullName);
1446var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1458File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1460using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1461builder.AddGoApp("api", sourceDir.FullName)
1466var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1547File.WriteAllText(Path.Combine(sourceDir.FullName, "go.mod"), "module example.com/api\n\ngo 1.24\n");
1548File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch\nENTRYPOINT [\"/app/api\"]\n");
1550return sourceDir.FullName;
Aspire.Hosting.Java (6)
Aspire.Hosting.Java.Tests (113)
AddJavaAppPublishTests.cs (103)
232File.WriteAllText(Path.Combine(sourceDir.FullName, "build.gradle"), "");
238var app = builder.AddJavaApp("api", sourceDir.FullName, "build/libs/api.jar");
241() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
418WritePom(sourceDir.FullName, javaVersion: "21");
419File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch\n");
421using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
422builder.AddJavaApp("api", sourceDir.FullName).WithMavenGoal("spring-boot:run");
425Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
439WritePom(sourceDir.FullName, javaVersion: "21");
440File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch\n");
442using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
443builder.AddJavaApp("api", sourceDir.FullName)
455$"'{sourceDir.FullName}' and its OpenTelemetry agent path 'target/otel/javaagent.jar' is " +
470WritePom(sourceDir.FullName, javaVersion: "21");
471File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch\n");
473using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
474builder.AddJavaApp("api", sourceDir.FullName)
494WritePom(sourceDir.FullName, javaVersion: "21");
496using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
497builder.AddJavaApp("api", sourceDir.FullName)
503var manifest = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "aspire-manifest.json"), TestContext.Current.CancellationToken);
1226WritePom(sourceDir.FullName, javaVersion: "21");
1230builder.AddJavaApp("worker", sourceDir.FullName, "target/worker.jar", ["--interval-seconds", "10"])
1254File.WriteAllText(Path.Combine(sourceDir.FullName, "pom.xml"), "<project/>");
1257var app = builder.AddJavaApp("api", sourceDir.FullName, "target/api.jar");
1260() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1272WritePom(sourceDir.FullName, javaVersion: "21");
1273WriteWrapper(siblingDir.FullName, "mvnw");
1276var app = builder.AddJavaApp("api", sourceDir.FullName)
1281() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1299var app = builder.AddJavaApp("api", sourceDir.FullName, jarPath);
1304() => JavaDockerfileGenerator.TryGetPrebuiltJarPath(app.Resource, sourceDir.FullName, out _));
1319WritePom(sourceDir.FullName, javaVersion: "21");
1322var app = builder.AddJavaApp("api", sourceDir.FullName)
1327() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1342var app = builder.AddJavaApp("api", sourceDir.FullName, jarPath);
1346Assert.True(JavaDockerfileGenerator.TryGetPrebuiltJarPath(app.Resource, sourceDir.FullName, out var resolved));
1399WritePom(sourceDir.FullName, javaVersion: "21");
1403File.Delete(Path.Combine(sourceDir.FullName, "mvnw"));
1404WriteWrapper(sourceDir.FullName, "mvnw.cmd");
1407var app = builder.AddJavaApp("api", sourceDir.FullName)
1412() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1428WriteWrapper(sourceDir.FullName, wrapperName);
1429Directory.Delete(Path.Combine(sourceDir.FullName, supportDirectory), recursive: true);
1432var app = builder.AddJavaApp("api", sourceDir.FullName);
1439() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
1539Path.Combine(sourceDir.FullName, "App.java"),
1553$"run --rm -v {sourceDir.FullName}:/work -w /work docker.io/library/eclipse-temurin:{JavaVersionDetector.DefaultJavaVersion}-jdk " +
1555sourceDir.FullName);
1558using (var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest"))
1560builder.AddJavaApp("api", sourceDir.FullName, Path.Combine("target", "app.jar"), ["--greeting", "hello"]);
1569await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "aspire-manifest.json"), TestContext.Current.CancellationToken));
1579Path.Combine(outputDir.FullName, "api.Dockerfile"),
1580Path.Combine(sourceDir.FullName, "Dockerfile"));
1582Path.Combine(outputDir.FullName, "api.Dockerfile.dockerignore"),
1583Path.Combine(sourceDir.FullName, ".dockerignore"));
1589var buildResult = await RunDockerCommandAsync($"build --network=host -t {imageName} -f Dockerfile .", sourceDir.FullName);
1593var runResult = await RunDockerCommandAsync($"run --rm --network=none {imageName} {string.Join(' ', manifestArgs)}", sourceDir.FullName);
1602await RunDockerCommandAsync($"rmi {imageName}", sourceDir.FullName);
1619Path.Combine(sourceDir.FullName, "pom.xml"),
1650var sourcePath = Directory.CreateDirectory(Path.Combine(sourceDir.FullName, "src", "main", "java"));
1652Path.Combine(sourcePath.FullName, "App.java"),
1671$"run --rm -v {sourceDir.FullName}:/work -w /work docker.io/library/maven:3.9-eclipse-temurin-{JavaVersionDetector.DefaultJavaVersion} " +
1673sourceDir.FullName);
1676using (var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest"))
1678builder.AddJavaApp("api", sourceDir.FullName)
1686Path.Combine(outputDir.FullName, "api.Dockerfile"),
1687Path.Combine(sourceDir.FullName, "Dockerfile"));
1689Path.Combine(outputDir.FullName, "api.Dockerfile.dockerignore"),
1690Path.Combine(sourceDir.FullName, ".dockerignore"));
1698var buildResult = await RunDockerCommandAsync($"build --network=host -t {imageName} -f Dockerfile .", sourceDir.FullName);
1701var runResult = await RunDockerCommandAsync($"run --rm --network=none {imageName}", sourceDir.FullName);
1710await RunDockerCommandAsync($"rmi {imageName}", sourceDir.FullName);
2131WritePom(sourceDir.FullName, javaVersion: "21");
2132var nested = Directory.CreateDirectory(Path.Combine(sourceDir.FullName, "build tools"));
2133WriteWrapper(nested.FullName, "mvnw");
2136var app = builder.AddJavaApp("api", sourceDir.FullName)
2141() => JavaDockerfileGenerator.ResolveContainerBuildForTesting(app.Resource, sourceDir.FullName));
2157WritePom(sourceDir.FullName, javaVersion: "21");
2158WritePom(movedDir.FullName, javaVersion: "21");
2160using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2161builder.AddJavaApp("api", sourceDir.FullName)
2163.WithWorkingDirectory(movedDir.FullName);
2170File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")),
2184configureSource(sourceDir.FullName);
2186using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2190var app = builder.AddQuarkusApp("api", sourceDir.FullName);
2196return await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
2366WritePom(sourceDir.FullName, javaVersion: "21");
2369builder.AddJavaApp("api", sourceDir.FullName)
2371.WithWorkingDirectory(elsewhere.FullName);
2394Assert.Contains(elsewhere.FullName, exception.Message, StringComparison.Ordinal);
2395Assert.Contains(sourceDir.FullName, exception.Message, StringComparison.Ordinal);
2407configureSource?.Invoke(sourceDir.FullName);
2409using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2412? builder.AddJavaApp("api", sourceDir.FullName)
2413: builder.AddJavaApp("api", sourceDir.FullName, jarPath);
2419return await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
2431configureSource?.Invoke(sourceDir.FullName);
2433using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2436? builder.AddJavaApp("api", sourceDir.FullName)
2437: builder.AddJavaApp("api", sourceDir.FullName, jarPath);
2443var ignorePath = Path.Combine(outputDir.FullName, "api.Dockerfile.dockerignore");
Aspire.Hosting.JavaScript (2)
Aspire.Hosting.JavaScript.Tests (10)
Aspire.Hosting.Kafka.Tests (1)
Aspire.Hosting.Kubernetes (8)
Aspire.Hosting.Maui (2)
Aspire.Hosting.Milvus.Tests (1)
Aspire.Hosting.MongoDB.Tests (3)
Aspire.Hosting.MySql.Tests (3)
Aspire.Hosting.Native.CodeGeneration (1)
Aspire.Hosting.Native.Core.Tests (69)
NativeComposeCSharpDockerTests.cs (6)
34"-p", project, "-f", Path.Combine(work.FullName, "compose.yaml")];
38var inputs = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(work.FullName, "deployment-inputs.json")))!;
58if (File.Exists(Path.Combine(work.FullName, "compose.yaml")))
89start.ArgumentList.Add("--output-path=" + work.FullName);
123var state = JsonNode.Parse(await File.ReadAllTextAsync(Path.Combine(work.FullName, "deployment-state.json")))!;
135new(work.FullName, toolEnvironment, TimeSpan.FromSeconds(60), CancellationToken.None));
NativeComposeCSharpTests.cs (28)
24var (context, _) = await ExportAsync(client, root.FullName);
30Assert.Equal(DockerComposeGenerator.ProjectName(root.FullName, "Comparison", "compose"), actualProject);
32Assert.Equal(Path.Combine(root.FullName, "web"), build["context"]!.GetValue<string>());
33Assert.Equal(Path.Combine(root.FullName, "web", "Dockerfile"), build["dockerfile"]!.GetValue<string>());
69var (context, _) = await ExportAsync(client, root.FullName);
137var requestPath = Path.Combine(root.FullName, "comparison.json");
175Directory.CreateDirectory(Path.Combine(root.FullName, "web"));
176await File.WriteAllTextAsync(Path.Combine(root.FullName, "web", "Dockerfile"), "FROM node:24-alpine\n");
180var builder = ComposeTestApplication.Create(root.FullName, environment =>
211.Replace(JsonEncodedText.Encode(Path.Combine(root.FullName, "web", "Dockerfile")).ToString(), "/app/web/Dockerfile")
212.Replace(JsonEncodedText.Encode(Path.Combine(root.FullName, "web")).ToString(), "/app/web")
213.Replace(DockerComposeGenerator.ProjectName(root.FullName, "Comparison", "compose"), "comparison-project"));
227Directory.CreateDirectory(Path.Combine(root.FullName, "web"));
228await File.WriteAllTextAsync(Path.Combine(root.FullName, "web", "Dockerfile"), "FROM node:24-alpine\n");
231var (context, _) = await ExportAsync(client, root.FullName);
263DockerComposeGenerator.ProjectName(root.FullName, "Comparison", "compose"), "comparison-project"));
267string NormalizePath(string value) => value.Replace(root.FullName, "/app", StringComparison.Ordinal)
282Directory.CreateDirectory(Path.Combine(root.FullName, "web"));
283await File.WriteAllTextAsync(Path.Combine(root.FullName, "web", "Dockerfile"), "FROM node:24-alpine\n");
286var (context, _) = await ExportAsync(client, root.FullName);
307Directory.CreateDirectory(Path.Combine(root.FullName, "web"));
308await File.WriteAllTextAsync(Path.Combine(root.FullName, "web", "Dockerfile"), "FROM node:24-alpine\n");
311var (context, _) = await ExportAsync(client, root.FullName);
416var (context, _) = await ExportAsync(client, root.FullName);
436var (context, _) = await ExportAsync(client, root.FullName);
464var (context, _) = await ExportAsync(client, root.FullName);
489new(root.FullName, new Dictionary<string, string>(), exceedsOutput ? TimeSpan.FromSeconds(30) : TimeSpan.FromMilliseconds(200),
512new(root.FullName, new Dictionary<string, string>(), TimeSpan.FromSeconds(30), cancellation.Token));
NativeIpcSecurityTests.cs (3)
37File.SetUnixFileMode(directory.FullName, UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute |
39var canaryPath = Path.Combine(directory.FullName, "public.sock");
77"-u", "nobody", "--", python, "-I", "-c", probe, directory.FullName, canaryPath,
NativeProductCliTests.cs (8)
22var apphost = Path.Combine(directory.FullName, "apphost.mts");
23var proof = Path.Combine(directory.FullName, "proof.json");
45await File.WriteAllTextAsync(Path.Combine(directory.FullName, "aspire.config.json"),
48Path.Combine(directory.FullName, "package.json"));
50Path.Combine(directory.FullName, "tsconfig.apphost.json"));
77await File.WriteAllTextAsync(Path.Combine(directory.FullName, "finish"), "");
99WorkingDirectory = directory.FullName,
108start.Environment["ASPIRE_HOME"] = Path.Combine(directory.FullName, "home");
Aspire.Hosting.Native.Server (17)
src\Shared\SocketPermissionHelper.cs (12)
46var isWorkingDirectory = string.Equals(directory.FullName, Path.TrimEndingDirectorySeparator(currentDirectory), comparison);
47var isUserProfile = string.Equals(directory.FullName, profileRoot, comparison);
48var isTemporaryRoot = string.Equals(Path.TrimEndingDirectorySeparator(directory.FullName), tempRoot, comparison);
61if (string.Equals(current.FullName, profileRoot, comparison) ||
62string.Equals(current.FullName, tempRoot, comparison))
65if (!Directory.Exists(resolvedBase.FullName))
67throw new IOException($"The socket directory base '{current.FullName}' must resolve to an existing directory.");
84if (directory.Exists && (File.GetUnixFileMode(directory.FullName) & UnixFileMode.StickyBit) != 0)
91return DirectoryHelper.CreateWithOwnerOnlyPermissions(directory.FullName);
96Directory.CreateDirectory(directory.FullName, OwnerOnlyMode);
97if (File.GetUnixFileMode(directory.FullName) != OwnerOnlyMode)
174throw new IOException($"The configured socket directory '{directory.FullName}' must have a protected owner-only ACL with inheritable full control for the current user (SYSTEM is also allowed). Set those permissions or choose a new dedicated directory.");
Aspire.Hosting.Nats.Tests (1)
Aspire.Hosting.Oracle.Tests (3)
Aspire.Hosting.PostgreSQL.Tests (3)
Aspire.Hosting.Python.Tests (55)
AddPythonAppTests.cs (52)
268var projectDirectory = Directory.CreateTempSubdirectory().FullName;
445.WithVirtualEnvironment(venvDir.FullName);
455Assert.Equal(Path.Join(venvDir.FullName, "Scripts", "python.exe"), pythonProjectResource.Command);
459Assert.Equal(Path.Join(venvDir.FullName, "bin", "python"), pythonProjectResource.Command);
533var appVenvPath = Path.Combine(appDir.FullName, ".venv");
537var resourceBuilder = builder.AddPythonApp("pythonProject", appDir.FullName, scriptName);
546var expectedProjectDirectory = Path.GetFullPath(Path.Combine(builder.AppHostDirectory, appDir.FullName));
657var resourceBuilder = builder.AddPythonApp("pythonProject", appDir.FullName, scriptName);
666var expectedProjectDirectory = Path.GetFullPath(Path.Combine(builder.AppHostDirectory, appDir.FullName));
1377File.WriteAllText(Path.Combine(sourceDir.FullName, "main.py"), "print('Hello from Python!')");
1379using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1380builder.AddPythonApp("api", sourceDir.FullName, "main.py")
1385var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"));
1399builder.AddPythonApp("api", workspace.CreateDirectory("source").FullName, "main.py")
1530var projectDirectory = sourceDir.FullName;
1560using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1577var scriptDockerfilePath = Path.Combine(outputDir.FullName, "script-app.Dockerfile");
1580var moduleDockerfilePath = Path.Combine(outputDir.FullName, "module-app.Dockerfile");
1583var executableDockerfilePath = Path.Combine(outputDir.FullName, "executable-app.Dockerfile");
1601var projectDirectory = sourceDir.FullName;
1626using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1643var scriptDockerfilePath = Path.Combine(outputDir.FullName, "script-app.Dockerfile");
1646var moduleDockerfilePath = Path.Combine(outputDir.FullName, "module-app.Dockerfile");
1649var executableDockerfilePath = Path.Combine(outputDir.FullName, "executable-app.Dockerfile");
2056var projectDirectory = sourceDir.FullName;
2084using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2097var dockerfilePath = Path.Combine(outputDir.FullName, "custom-images-app.Dockerfile");
2115var projectDirectory = sourceDir.FullName;
2130using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2139var dockerfilePath = Path.Combine(outputDir.FullName, "script-app.Dockerfile");
2163var projectDirectory = sourceDir.FullName;
2180using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2189var dockerfilePath = Path.Combine(outputDir.FullName, "script-app.Dockerfile");
2203var projectDirectory = sourceDir.FullName;
2212using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2221var dockerfilePath = Path.Combine(outputDir.FullName, "script-app.Dockerfile");
2235var projectDirectory = sourceDir.FullName;
2247using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
2258var scriptDockerfilePath = Path.Combine(outputDir.FullName, "script-app.Dockerfile");
2261var moduleDockerfilePath = Path.Combine(outputDir.FullName, "module-app.Dockerfile");
2264var executableDockerfilePath = Path.Combine(outputDir.FullName, "executable-app.Dockerfile");
2421.WithVirtualEnvironment(venvDir.FullName, createIfNotExists: false);
2448.WithVirtualEnvironment(venvDir.FullName, createIfNotExists: true);
2476.WithVirtualEnvironment(venvDir.FullName);
2575.WithVirtualEnvironment(venvDir.FullName, createIfNotExists: true);
2605.WithVirtualEnvironment(venvDir.FullName, createIfNotExists: false);
2640.WithVirtualEnvironment(venvDir.FullName, createIfNotExists: true)
2676.WithVirtualEnvironment(venvDir.FullName, createIfNotExists: false)
2858.WithVirtualEnvironment(venvDir.FullName, createIfNotExists: true);
2873File.WriteAllText(Path.Combine(sourceDir.FullName, "main.py"), "print('Hello from Python!')");
2874File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch\nENTRYPOINT [\"python\", \"main.py\"]\n");
2876return sourceDir.FullName;
Aspire.Hosting.Qdrant.Tests (1)
Aspire.Hosting.RabbitMQ.Tests (1)
Aspire.Hosting.Radius (3)
Aspire.Hosting.Radius.Tests (6)
Aspire.Hosting.Redis.Tests (2)
Aspire.Hosting.RemoteHost (13)
src\Shared\SocketPermissionHelper.cs (12)
46var isWorkingDirectory = string.Equals(directory.FullName, Path.TrimEndingDirectorySeparator(currentDirectory), comparison);
47var isUserProfile = string.Equals(directory.FullName, profileRoot, comparison);
48var isTemporaryRoot = string.Equals(Path.TrimEndingDirectorySeparator(directory.FullName), tempRoot, comparison);
61if (string.Equals(current.FullName, profileRoot, comparison) ||
62string.Equals(current.FullName, tempRoot, comparison))
65if (!Directory.Exists(resolvedBase.FullName))
67throw new IOException($"The socket directory base '{current.FullName}' must resolve to an existing directory.");
84if (directory.Exists && (File.GetUnixFileMode(directory.FullName) & UnixFileMode.StickyBit) != 0)
91return DirectoryHelper.CreateWithOwnerOnlyPermissions(directory.FullName);
96Directory.CreateDirectory(directory.FullName, OwnerOnlyMode);
97if (File.GetUnixFileMode(directory.FullName) != OwnerOnlyMode)
174throw new IOException($"The configured socket directory '{directory.FullName}' must have a protected owner-only ACL with inheritable full control for the current user (SYSTEM is also allowed). Set those permissions or choose a new dedicated directory.");
Aspire.Hosting.RemoteHost.Tests (60)
IntegrationLoadContextTests.cs (8)
47var manifestPath = Path.Combine(manifestDirectory.FullName, "integration-package-probe-manifest.json");
65Directory.Delete(manifestDirectory.FullName, recursive: true);
75var nativeLibraryPath = Path.Combine(manifestDirectory.FullName, "runtimes", "linux-x64", "native", "libe_sqlite3.so");
79var manifestPath = Path.Combine(manifestDirectory.FullName, "integration-package-probe-manifest.json");
94Directory.Delete(manifestDirectory.FullName, recursive: true);
104var resourceAssemblyPath = Path.Combine(manifestDirectory.FullName, "fr", "Aspire.Hosting.Redis.resources.dll");
108var manifestPath = Path.Combine(manifestDirectory.FullName, "integration-package-probe-manifest.json");
128Directory.Delete(manifestDirectory.FullName, recursive: true);
tests\Shared\Processes\ProcessTestFixture.cs (11)
47while (!File.Exists(Path.Combine(repository.FullName, "Aspire.slnx")))
61var sourcePaths = sources.Select(source => Path.Combine(repository.FullName, "src", "Shared", source)).Concat(
63Path.Combine(repository.FullName, "tests", "Shared", "AsyncTestHelpers.cs"),
64Path.Combine(repository.FullName, "tests", "Aspire.TestUtilities", "PlatformDetection.cs")
68var project = Path.Combine(_directory.FullName, "ProcessTestHost.csproj");
84await File.WriteAllTextAsync(Path.Combine(_directory.FullName, "Program.cs"), HostProgram);
85await RunDotnetAsync(repository.FullName,
86["restore", project, "--configfile", Path.Combine(repository.FullName, "NuGet.config"), "--verbosity", "quiet"]);
87await RunDotnetAsync(repository.FullName, ["build", project, "--no-restore", "--verbosity", "quiet"]);
88_assemblyPath = Path.Combine(_directory.FullName, "bin", "Debug", targetFramework, "ProcessTestHost.dll");
97WorkingDirectory = _directory.FullName,
TestServices\IntegrationHostProcessFixture.cs (16)
29while (!File.Exists(Path.Combine(repository.FullName, "Aspire.slnx")))
33var project = Path.Combine(_directory.FullName, "LifetimeTestHost.csproj");
44<ProjectReference Include="{Path.Combine(repository.FullName, "src", "Aspire.Hosting.RemoteHost", "Aspire.Hosting.RemoteHost.csproj")}" />
45<ProjectReference Include="{Path.Combine(repository.FullName, "src", "Aspire.TypeSystem", "Aspire.TypeSystem.csproj")}" />
49await File.WriteAllTextAsync(Path.Combine(_directory.FullName, "Program.cs"), HostProgram);
50await RunDotnetAsync(repository.FullName,
51["restore", project, $"--property:Configuration={BuildConfiguration}", "--configfile", Path.Combine(repository.FullName, "NuGet.config"), "--verbosity", "quiet"]);
52await RunDotnetAsync(repository.FullName,
54_hostAssembly = Path.Combine(_directory.FullName, "bin", BuildConfiguration, "net10.0", "LifetimeTestHost.dll");
62var script = Path.Combine(directory.FullName, "host.js");
64await File.WriteAllTextAsync(Path.Combine(directory.FullName, "appsettings.json"), JsonSerializer.Serialize(new
82await File.WriteAllTextAsync(Path.Combine(directory.FullName, "fail-startup"), "");
86await File.WriteAllTextAsync(Path.Combine(directory.FullName, "skip-registration"), "");
90await File.WriteAllTextAsync(Path.Combine(directory.FullName, "missing-command"), "");
94await File.WriteAllTextAsync(Path.Combine(directory.FullName, "stall-discovery"), "");
97return new IntegrationHostServerProcess(directory.FullName, _hostAssembly, useAppHostExecutable, output);
Aspire.Hosting.Rust (2)
Aspire.Hosting.Rust.Tests (137)
AddRustAppPublishTests.cs (122)
114using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
116var rust = builder.AddRustApp("api", sourceDir.FullName).WithCargoTarget(target);
147using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
149builder.AddRustApp("api", sourceDir.FullName).WithCargoTarget(target);
174using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
176builder.AddRustApp("api", sourceDir.FullName).WithCargoTarget(target);
195using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
197builder.AddRustApp("api", sourceDir.FullName)
221using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
223builder.AddRustApp("api", sourceDir.FullName)
247using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
249builder.AddRustApp("api", sourceDir.FullName)
279using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
281builder.AddRustApp("api", sourceDir.FullName)
301using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
310var rust = builder.AddRustApp("api", sourceDir.FullName);
401using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
405var rust = builder.AddRustApp("api", sourceDir.FullName);
416Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
438using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
445var rust = builder.AddRustApp("api", sourceDir.FullName);
471Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
495File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch\n");
497using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
498builder.AddRustApp("api", sourceDir.FullName);
501Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
513File.WriteAllText(Path.Combine(sourceDir.FullName, "Dockerfile"), "FROM scratch\n");
515using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
516builder.AddRustApp("api", sourceDir.FullName).WithCargoTarget(target);
519Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
529var customDockerfile = Path.Combine(customContext.FullName, "Dockerfile.prod");
533using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
534builder.AddRustApp("api", sourceDir.FullName)
535.PublishAsDockerFile(container => container.WithDockerfile(customContext.FullName, "Dockerfile.prod"));
541Assert.Equal(customContext.FullName, dockerfile.ContextPath);
543Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
554using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
555builder.AddRustApp("api", sourceDir.FullName)
557customContext.FullName,
564Path.Combine(outputDir.FullName, "api.Dockerfile"),
567Assert.Equal(customContext.FullName, dockerfile.ContextPath);
588var manifestDirectory = Directory.CreateDirectory(Path.Combine(sourceDir.FullName, "Crates", "API"));
589File.WriteAllText(Path.Combine(manifestDirectory.FullName, "Cargo.toml"), "[package]\nname = \"api\"\n");
592if (!File.Exists(Path.Combine(sourceDir.FullName, differentlyCasedPath)))
597using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
599builder.AddRustApp("api", sourceDir.FullName).WithCargoManifestPath(differentlyCasedPath);
602var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
615var manifestDirectory = Directory.CreateDirectory(Path.Combine(sourceDir.FullName, decomposedDirectoryName));
617File.WriteAllText(Path.Combine(manifestDirectory.FullName, "Cargo.toml"), "[package]\nname = \"api\"\n");
620if (!File.Exists(Path.Combine(sourceDir.FullName, composedManifestPath)))
625var storedDirectoryName = Path.GetFileName(Assert.Single(Directory.EnumerateDirectories(sourceDir.FullName)));
627using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
629builder.AddRustApp("api", sourceDir.FullName).WithCargoManifestPath(composedManifestPath);
632var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
649var sourceDir = Directory.CreateDirectory(Path.Combine(restrictedAncestor.FullName, "source"));
650var manifestDirectory = Directory.CreateDirectory(Path.Combine(sourceDir.FullName, "Crates", "API"));
653File.WriteAllText(Path.Combine(manifestDirectory.FullName, "Cargo.toml"), "[package]\nname = \"api\"\n");
655var originalMode = File.GetUnixFileMode(restrictedAncestor.FullName);
660File.SetUnixFileMode(restrictedAncestor.FullName, UnixFileMode.UserExecute);
664Directory.GetFileSystemEntries(restrictedAncestor.FullName);
671using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
673builder.AddRustApp("api", sourceDir.FullName).WithCargoManifestPath("Crates/API/Cargo.toml");
677Path.Combine(outputDir.FullName, "api.Dockerfile"),
684File.SetUnixFileMode(restrictedAncestor.FullName, originalMode);
716File.WriteAllText(Path.Combine(manifestDirectory.FullName, "Cargo.toml"), "[package]\nname = \"api\"\n");
734var canonicalSourceDir = TestPathNormalizer.ResolveSymlinks(sourceDir.FullName);
736if (string.Equals(sourceDir.FullName, canonicalSourceDir, StringComparison.Ordinal))
745var manifestPath = Path.GetRelativePath(sourceDir.FullName, canonicalManifest);
747using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
749builder.AddRustApp("api", sourceDir.FullName).WithCargoManifestPath(manifestPath);
752var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
768var canonicalSourceDir = TestPathNormalizer.ResolveSymlinks(sourceDir.FullName);
769var manifestDirectory = Directory.CreateDirectory(Path.Combine(sourceDir.FullName, "Crates", "API"));
771File.WriteAllText(Path.Combine(manifestDirectory.FullName, "Cargo.toml"), "[package]\nname = \"api\"\n");
773if (string.Equals(sourceDir.FullName, canonicalSourceDir, StringComparison.Ordinal))
784var manifestPath = Path.GetRelativePath(sourceDir.FullName, differentlyCasedCanonicalManifest);
786using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
788builder.AddRustApp("api", sourceDir.FullName).WithCargoManifestPath(manifestPath);
791var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
803File.WriteAllText(Path.Combine(outsideDir.FullName, "Cargo.toml"), "[package]\nname = \"outside\"\n");
804CreateDirectorySymbolicLinkOrSkip(Path.Combine(sourceDir.FullName, "linked"), outsideDir.FullName);
806using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
808builder.AddRustApp("api", sourceDir.FullName).WithCargoManifestPath("linked/Cargo.toml");
811Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
820var firstLink = Path.Combine(sourceDir.FullName, "linked");
821var secondLink = Path.Combine(sourceDir.FullName, "loop");
829using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
831builder.AddRustApp("api", sourceDir.FullName).WithCargoManifestPath("linked/Cargo.toml");
834Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile")));
919using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
921builder.AddRustApp("api", sourceDir.FullName);
925var first = await File.ReadAllTextAsync(Path.Combine(firstOutputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
926var second = await File.ReadAllTextAsync(Path.Combine(secondOutputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
937using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
939builder.AddRustApp("api", sourceDir.FullName);
940builder.AddRustApp("worker", sourceDir.FullName);
943var first = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
944var second = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "worker.Dockerfile"), TestContext.Current.CancellationToken);
967using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
969builder.AddRustApp("api", sourceDir.FullName);
972var ignore = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile.dockerignore"), TestContext.Current.CancellationToken);
986File.WriteAllText(Path.Combine(sourceDir.FullName, ".dockerignore"), "*.md\n");
988using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
990builder.AddRustApp("api", sourceDir.FullName);
993Assert.False(File.Exists(Path.Combine(outputDir.FullName, "api.Dockerfile.dockerignore")));
1008File.WriteAllText(Path.Combine(relocatedDir.FullName, "Dockerfile"), "FROM scratch\n");
1013using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1015builder.AddRustApp("api", sourceDir.FullName).WithWorkingDirectory(relocatedDir.FullName);
1024Assert.Equal(relocatedDir.FullName, dockerfile.ContextPath);
1029Assert.Equal(Path.Combine(relocatedDir.FullName, "Dockerfile"), dockerfile.DockerfilePath);
1034Assert.Equal(relocatedDir.FullName, reader.LastWorkingDirectory);
1051File.WriteAllText(Path.Combine(workspace.WorkspaceRoot.FullName, "Cargo.lock"), "version = 4\n");
1055File.WriteAllText(Path.Combine(sourceDir.FullName, "Cargo.lock"), "version = 4\n");
1058using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1060builder.AddRustApp("api", sourceDir.FullName + Path.DirectorySeparatorChar)
1064var content = await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
1126configureSource?.Invoke(sourceDir.FullName);
1128using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish, outputDir.FullName, step: "publish-manifest");
1135var app = builder.AddRustApp("api", sourceDir.FullName);
1141return await File.ReadAllTextAsync(Path.Combine(outputDir.FullName, "api.Dockerfile"), TestContext.Current.CancellationToken);
Aspire.Hosting.Sdk.Tests (95)
AppHostSdkTargetsTests.cs (84)
327var aspireCliPath = await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
328await CreateFakeDnxAsync(fakeCliDirectory.FullName);
333CreatePathEnvironment(fakeCliDirectory.FullName));
351var dnxPath = await CreateFakeDnxAsync(fakeCliDirectory.FullName);
354await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
371[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(fakeCliDirectory.FullName)
390var dnxPath = await CreateFakeDnxAsync(fakeCliDirectory.FullName);
391await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
402CreatePathEnvironment(fakeCliDirectory.FullName));
430CreatePathEnvironment(emptyPathDirectory.FullName, includeCurrentPath: false));
446var nonExecutableDnxPath = Path.Combine(nonExecutableDirectory.FullName, "dnx");
454var executableDnxPath = await CreateFakeDnxAsync(executableDirectory.FullName);
456var path = $"{nonExecutableDirectory.FullName}{Path.PathSeparator}{CreatePathWithoutAspire(executableDirectory.FullName)}";
475var aspireCliPath = await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
494await CreateFakeDnxThatFailsVersionAsync(fakeCliDirectory.FullName);
501[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(fakeCliDirectory.FullName)
515var aspireCliPath = await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
530var aspireCliPath = await CreateFakeAspireCommandShimAsync(fakeCliDirectory.FullName, extension);
555var aspireCliPath = await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
562[GetPathEnvironmentVariableName()] = CreatePathWithoutDnx(emptyPathDirectory.FullName)
596var aspireCliPath = await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
601CreatePathEnvironment(fakeCliDirectory.FullName));
667await CreateFakeAspireCliAsync(fakeCliDirectory.FullName);
674[pathEnvironmentVariable] = CreatePathWithoutAspire(fakeCliDirectory.FullName)
704await CreateFakeDnxAsync(fakeCliDirectory.FullName);
711[pathEnvironmentVariable] = CreatePathWithoutAspire(fakeCliDirectory.FullName)
747CreateFakeNativeAspireCli(fakeCliDirectory.FullName);
752[GetPathEnvironmentVariableName()] = CreatePathWithoutDnx(fakeCliDirectory.FullName)
787var aspireCliPath = await CreateFakeAspireCommandShimAsync(fakeCliDirectory.FullName);
823var cliPath = Path.Combine(fakeCliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.cmd" : "aspire");
824await CreateFakeAspireCliWithVersionAsync(fakeCliDirectory.FullName, cliVersion);
839await CreateFakeAspireCliWithVersionAsync(fakeCliDirectory.FullName, "13.4.5");
840var dnxPath = await CreateFakeDnxAsync(fakeCliDirectory.FullName);
843[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(fakeCliDirectory.FullName)
872await CreateFakeAspireCliWithVersionAsync(staleCliDirectory.FullName, AspireCliVersion);
873var staleBundle = CreateFakeCliBundle(staleCliDirectory.FullName);
878await CreateFakeDnxAsync(dnxDirectory.FullName);
893[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(staleCliDirectory.FullName, dnxDirectory.FullName)
928await CreateFakeDnxWithSetupExitCodeAsync(cliDirectory.FullName, 42);
931CreateFakeNativeAspireCli(cliDirectory.FullName);
940[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(cliDirectory.FullName)
959await CreateFakeDnxWithSetupExitCodeAsync(dnxDirectory.FullName, 0);
963CreateFakeNativeAspireCli(cliDirectory.FullName);
964await File.WriteAllTextAsync(Path.Combine(cliDirectory.FullName, "setup-exit-code"), "42");
974[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(cliDirectory.FullName, dnxDirectory.FullName)
1084var aspireCliPath = await CreateFakeAspireCliThatSetsUpBundleAsync(fakeCliDirectory.FullName);
1094var selectedBundle = GetFakeCliBundlePaths(fakeCliDirectory.FullName);
1100AssertCliBundleExists(fakeCliDirectory.FullName, JsonSerializer.Serialize(properties));
1108var selectedCliPath = await CreateFakeAspireCliThatSetsUpBundleAsync(selectedCliDirectory.FullName);
1110await CreateFakeAspireCliWithVersionAsync(staleCliDirectory.FullName, AspireCliVersion);
1111var staleBundle = CreateFakeCliBundle(staleCliDirectory.FullName);
1117[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(selectedCliDirectory.FullName, staleCliDirectory.FullName)
1121var selectedBundle = GetFakeCliBundlePaths(selectedCliDirectory.FullName);
1129AssertCliBundleExists(selectedCliDirectory.FullName, JsonSerializer.Serialize(properties));
1139var aspireCliPath = CreateFakeNativeAspireCli(fakeCliDirectory.FullName);
1150var selectedBundle = GetFakeCliBundlePaths(fakeCliDirectory.FullName);
1155AssertCliBundleExists(fakeCliDirectory.FullName, JsonSerializer.Serialize(properties));
1165await CreateFakeAspireCliThatHangsOnSetupAsync(fakeCliDirectory.FullName);
1166await CreateFakeDnxAsync(fakeCliDirectory.FullName);
1171[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(fakeCliDirectory.FullName)
1194CopyFakeCommandHost(fakeCommandDirectory.FullName);
1195var commandShimPath = Path.Combine(fakeCommandDirectory.FullName, "aspire.cmd");
1331await CreateFakeDnxAsync(fakeCliDirectory.FullName);
1337[GetPathEnvironmentVariableName()] = CreatePathWithoutAspire(fakeCliDirectory.FullName)
1356await CreateFakeAspireCliThatFailsVersionAsync(fakeCliDirectory.FullName);
1357var dnxPath = await CreateFakeDnxAsync(fakeCliDirectory.FullName);
1362CreatePathEnvironment(fakeCliDirectory.FullName));
1382var cliPath = Path.Combine(fakeCliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.cmd" : "aspire");
1383await CreateFakeAspireCliWithVersionAsync(fakeCliDirectory.FullName, cliVersion);
1398var cliPath = Path.Combine(fakeCliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.cmd" : "aspire");
1399await CreateFakeAspireCliWithVersionAndLargeStdErrAsync(fakeCliDirectory.FullName, "13.5.0");
1414var cliPath = Path.Combine(fakeCliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.cmd" : "aspire");
1415await CreateFakeAspireCliThatHangsOnVersionAsync(fakeCliDirectory.FullName);
1430var cliPath = Path.Combine(fakeCliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.cmd" : "aspire");
1431await CreateFakeAspireCliWithVersionAsync(fakeCliDirectory.FullName, "aspire version 13.5.0");
1446var cliPath = Path.Combine(fakeCliDirectory.FullName, OperatingSystem.IsWindows() ? "aspire.cmd" : "aspire");
1447await CreateFakeAspireCliThatFailsVersionAsync(fakeCliDirectory.FullName);
1466CreatePathEnvironment(emptyPathDirectory.FullName, includeCurrentPath: false));
1751await File.WriteAllTextAsync(Path.Combine(fakeSdkDirectory.FullName, "dotnet.dll"), "");
2349directory = Directory.GetParent(directory)?.FullName;
Aspire.Hosting.Seq.Tests (1)
Aspire.Hosting.SqlServer.Tests (1)
Aspire.Hosting.Tasks (1)
Aspire.Hosting.Testing.Tests (5)
Aspire.Hosting.Tests (361)
Dcp\DcpHostNotificationTests.cs (12)
548var terminalHostPath = Path.Combine(directory.FullName, "aspire-managed.exe");
550File.WriteAllText(Path.Combine(directory.FullName, "conpty.dll"), "");
551Directory.CreateDirectory(Path.Combine(directory.FullName, architectureDirectory));
552File.WriteAllText(Path.Combine(directory.FullName, architectureDirectory, "OpenConsole.exe"), "");
557Assert.Equal(directory.FullName, conPtyPath);
578var terminalHostPath = Path.Combine(directory.FullName, "aspire-managed.exe");
580var nativeDirectory = Path.Combine(directory.FullName, "runtimes", runtimeIdentifier, "native");
608var terminalHostPath = Path.Combine(directory.FullName, "aspire-managed.exe");
612File.WriteAllText(Path.Combine(directory.FullName, "conpty.dll"), "");
618Directory.CreateDirectory(Path.Combine(directory.FullName, architectureDirectory));
619File.WriteAllText(Path.Combine(directory.FullName, architectureDirectory, "OpenConsole.exe"), "");
729var dcpOptions = new DcpOptions { CliPath = CreateFakeDcpLauncher(launcherDir.FullName, launcherExitCode) };
Dcp\ProcessUtilTests.cs (5)
97var appPath = DotnetFileAppProcess.WriteApp(workspace.WorkspaceRoot.FullName, "argument-list.cs", """
119var appPath = DotnetFileAppProcess.WriteApp(workspace.WorkspaceRoot.FullName, "argument-list-failure.cs", """
144var appPath = DotnetFileAppProcess.WriteApp(workspace.WorkspaceRoot.FullName, "path-executable.cs", """
214var appPath = DotnetFileAppProcess.WriteApp(workspace.WorkspaceRoot.FullName, "single-line.cs", """
229var appPath = DotnetFileAppProcess.WriteApp(workspace.WorkspaceRoot.FullName, "failing.cs", $$"""
DistributedApplicationBuilderTests.cs (30)
120var projectDirectory = workspace.WorkspaceRoot.FullName;
166var projectDirectory = workspace.WorkspaceRoot.FullName;
524var unrelatedFile = Path.Combine(tempDirectory.FullName, "unrelated.json");
548var secretsFile = Path.Combine(tempDirectory.FullName, "Production.json");
637var path = Path.Combine(directory.FullName, "state.json");
690var legacyPath = Path.Combine(directory.FullName, "legacy.json");
691var aspirePath = Path.Combine(directory.FullName, "Development.json");
740var secretsFile = Path.Combine(tempDirectory.FullName, "Production.json");
771var secretsFile = Path.Combine(tempDirectory.FullName, "Production.json");
966var appHostPath = Path.Combine(projectDirectory.FullName, "apphost.ts");
970ProjectDirectory = projectDirectory.FullName,
977ProjectDirectory = projectDirectory.FullName,
979AppHostFilePath = Path.Combine(projectDirectory.FullName, "AppHost.ts"),
1015var appHostPath = Path.Combine(realDirectory.FullName, "apphost.ts");
1018var symlinkDirectory = Path.Combine(projectDirectory.FullName, "link");
1019Directory.CreateSymbolicLink(symlinkDirectory, realDirectory.FullName);
1024ProjectDirectory = projectDirectory.FullName,
1048var legacyAppHostPath = Path.GetFullPath(Path.Join(projectDirectory.FullName, projectName));
1066ProjectDirectory = projectDirectory.FullName,
1068AppHostFilePath = Path.Combine(projectDirectory.FullName, "apphost.ts"),
1114ProjectDirectory = projectDirectory.FullName,
1116AppHostFilePath = Path.Combine(projectDirectory.FullName, "apphost.ts"),
1139ProjectDirectory = projectDirectory.FullName,
1141AppHostFilePath = Path.Combine(projectDirectory.FullName, "apphost.ts"),
1198ProjectDirectory = projectDirectory.FullName,
1200AppHostFilePath = Path.Combine(projectDirectory.FullName, "apphost.ts"),
1262ProjectDirectory = projectDirectory.FullName,
1264AppHostFilePath = Path.Combine(projectDirectory.FullName, "apphost.ts"),
1324ProjectDirectory = projectDirectory.FullName,
1326AppHostFilePath = Path.Combine(projectDirectory.FullName, "apphost.ts"),
MSBuildTests.cs (86)
23var directory = workspace.WorkspaceRoot.FullName;
73var directory = workspace.WorkspaceRoot.FullName;
112CreateLibraryProject(workspace.WorkspaceRoot.FullName, "Library");
114var appHostDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost");
169CreateAppProject(workspace.WorkspaceRoot.FullName, "App");
171var appHostDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost");
222var temp = workspace?.WorkspaceRoot.FullName;
445var projectPath = Path.Combine(workspace.WorkspaceRoot.FullName, "Plain.AppHost.csproj");
455workspace.WorkspaceRoot.FullName,
475var bundle = CreateFakeCliBundle(workspace.WorkspaceRoot.FullName);
476var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
497var layoutRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "layout");
500var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
521var layoutRoot = Path.Combine(workspace.WorkspaceRoot.FullName, "layout");
524var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
544var bundle = CreateFakeCliBundle(workspace.WorkspaceRoot.FullName);
547workspace.WorkspaceRoot.FullName,
569var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "bin"));
570var fakeCliPath = CreateFakeAspireCli(fakeCliDirectory.FullName);
571var bundle = CreateFakeCliBundle(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-home"));
572var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
593var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "empty-aspire-home");
594var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "fake-cli"));
595_ = CreateFakeAspireCliThatSetsUpBundle(fakeCliDirectory.FullName);
596var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot, additionalProperties: "");
603["PATH"] = GetPathWithoutAspire(fakeCliDirectory.FullName)
607var bundleRoot = Path.Combine(workspace.WorkspaceRoot.FullName, BundleDiscovery.BundleDirectoryName);
622var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "empty-aspire-home");
623var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "fake-cli"));
624var fakeCliPath = CreateFakeAspireCliThatSetsUpBundle(fakeCliDirectory.FullName);
626workspace.WorkspaceRoot.FullName,
642Assert.False(Directory.Exists(Path.Combine(workspace.WorkspaceRoot.FullName, BundleDiscovery.BundleDirectoryName)));
651var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "empty-aspire-home");
652var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "fake-cli"));
653var fakeCliPath = CreateFakeAspireCliThatFailsSetup(fakeCliDirectory.FullName);
655workspace.WorkspaceRoot.FullName,
681var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "empty-aspire-home");
682var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "fake-cli"));
683var fakeCliPath = CreateFakeAspireCliThatTimesOutSetup(fakeCliDirectory.FullName);
685workspace.WorkspaceRoot.FullName,
711var aspireHome = Path.Combine(workspace.WorkspaceRoot.FullName, "empty-aspire-home");
713var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, literalSegment));
714var fakeCliPath = CreateFakeAspireCliThatSetsUpBundle(fakeCliDirectory.FullName);
716workspace.WorkspaceRoot.FullName,
731var bundleRoot = Path.Combine(workspace.WorkspaceRoot.FullName, BundleDiscovery.BundleDirectoryName);
745var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, literalSegment));
746var fakeCliPath = CreateFakeAspireCliThatFailsSetup(fakeCliDirectory.FullName);
748workspace.WorkspaceRoot.FullName,
758["ASPIRE_HOME"] = Path.Combine(workspace.WorkspaceRoot.FullName, "empty-aspire-home"),
773var bundle = CreateFakeCliBundle(Path.Combine(workspace.WorkspaceRoot.FullName, "aspire-home"));
774var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot, additionalProperties: "");
796var toolsDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, ".dotnet", "tools"));
797var shimPath = CreateFakeAspireCli(toolsDirectory.FullName);
799toolsDirectory.FullName,
808_ = CreateFakeAspireCli(nativeCliDirectory.FullName);
809File.WriteAllText(Path.Combine(nativeCliDirectory.FullName, ".aspire-install.json"), """{"source":"dotnet-tool"}""");
810var bundle = CreateFakeCliBundleAtLayoutRoot(nativeCliDirectory.FullName);
811var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
832var bundle = CreateFakeCliBundle(workspace.WorkspaceRoot.FullName);
833var repoDcpDir = EnsureTrailingSeparator(Path.Combine(workspace.WorkspaceRoot.FullName, "repo-dcp"));
834var repoDashboardDir = EnsureTrailingSeparator(Path.Combine(workspace.WorkspaceRoot.FullName, "repo-dashboard"));
838var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
861var missingBundlePath = Path.Combine(workspace.WorkspaceRoot.FullName, "missing-bundle");
862var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
896workspace.WorkspaceRoot.FullName,
899var fakeCliDirectory = Directory.CreateDirectory(Path.Combine(workspace.WorkspaceRoot.FullName, "fake-cli"));
900var dnxPath = Path.Combine(fakeCliDirectory.FullName, OperatingSystem.IsWindows() ? "dnx.exe" : "dnx");
917["ASPIRE_HOME"] = Path.Combine(workspace.WorkspaceRoot.FullName, "empty-aspire-home"),
918["PATH"] = GetPathWithoutAspire(fakeCliDirectory.FullName)
936var missingCliPath = Path.Combine(workspace.WorkspaceRoot.FullName, "missing-aspire");
937var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
958var appHostDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost");
991CreateAppProject(workspace.WorkspaceRoot.FullName, "App");
992var bundle = CreateFakeCliBundle(workspace.WorkspaceRoot.FullName);
993var appHostDirectory = CreateSdkBundleAppHostProject(workspace.WorkspaceRoot.FullName, repoRoot,
1273CreateLibraryProject(workspace.WorkspaceRoot.FullName, "Library");
1275var appHostDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost");
1332CreateLibraryProject(workspace.WorkspaceRoot.FullName, "Library");
1334var appHostDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost");
1387var projectDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "MyHostingExtension");
1436var projectDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "MyHostingExtension");
1485var packageOutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "packages");
1512var packageOutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "packages");
1558var packageOutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "packages");
1568var projectDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "MyHostingExtension");
1701var appHostDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost");
Publishing\DeploymentStateManagerTests.cs (8)
406_aspireHome.FullName,
431Path.Combine(_aspireHome.FullName, "deployments", sha, "development.json"),
994_aspireHome.FullName,
1017_aspireHome.FullName,
1194var legacyDirectory = Path.Combine(_aspireHome.FullName, "deployments", legacySha);
1201var canonicalPath = Path.Combine(_aspireHome.FullName, "deployments", Guid.NewGuid().ToString("N"), "production.json");
1202var legacyDirectory = Path.Combine(_aspireHome.FullName, "deployments", Guid.NewGuid().ToString("N"));
1220[KnownConfigNames.AspireHome] = _aspireHome.FullName
Publishing\DotnetProgramArchiveTests.cs (20)
40var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar");
41var resource = AddArchiveResource(builder, workspace.WorkspaceRoot.FullName, archivePath);
76var firstArchive = Path.Combine(firstWorkspace.WorkspaceRoot.FullName, "program.tar");
77var secondArchive = Path.Combine(secondWorkspace.WorkspaceRoot.FullName, "program.tar");
78var firstResource = AddArchiveResource(firstBuilder, firstWorkspace.WorkspaceRoot.FullName, firstArchive);
79var secondResource = AddArchiveResource(secondBuilder, secondWorkspace.WorkspaceRoot.FullName, secondArchive);
135var resource = AddArchiveResource(builder, workspace.WorkspaceRoot.FullName, Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar"));
181var resource = AddArchiveResource(builder, workspace.WorkspaceRoot.FullName, Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar"));
219var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar.gz");
221var resource = AddArchiveResource(builder, workspace.WorkspaceRoot.FullName, archivePath);
261var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar");
263var resource = AddArchiveResource(builder, workspace.WorkspaceRoot.FullName, outputPath);
284var blockedDirectory = Path.Combine(workspace.WorkspaceRoot.FullName, "output");
288workspace.WorkspaceRoot.FullName,
317var resource = AddArchiveResource(builder, workspace.WorkspaceRoot.FullName, Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar"));
347var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, path);
356var resource = AddArchiveResource(builder, workspace.WorkspaceRoot.FullName, outputPath);
Publishing\ResourceContainerImageManagerTests.cs (35)
60var appPath = Path.Combine(workspace.WorkspaceRoot.FullName, "app.cs");
66var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "app.tar.gz");
317var tempOutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "NewFolder"); // tests that the folder is created if it doesn't exist
706.WithAnnotation(new TestProjectMetadata(Path.Combine(workspace.WorkspaceRoot.FullName, "missing.csproj")))
711ctx.OutputPath = workspace.WorkspaceRoot.FullName;
737.WithAnnotation(new TestProjectMetadata(Path.Combine(workspace.WorkspaceRoot.FullName, "program.csproj")))
770.WithAnnotation(new TestProjectMetadata(Path.Combine(workspace.WorkspaceRoot.FullName, "missing.csproj")))
775ctx.OutputPath = workspace.WorkspaceRoot.FullName;
817.WithAnnotation(new TestProjectMetadata(Path.Combine(workspace.WorkspaceRoot.FullName, "program.csproj")))
827context.OutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar");
855var projectPath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.csproj");
868context.OutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar");
909var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar.gz");
911var projectPath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.csproj");
930Assert.Equal(workspace.WorkspaceRoot.FullName, contextPath);
998var archivePath = Path.Combine(workspace.WorkspaceRoot.FullName, "program.tar.gz");
1001.WithAnnotation(new TestProjectMetadata(Path.Combine(workspace.WorkspaceRoot.FullName, "program.csproj")))
1049.WithAnnotation(new TestProjectMetadata(Path.Combine(workspace.WorkspaceRoot.FullName, "app.cs")))
1054context.OutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "app.tar");
1090var projectPath = Path.Combine(workspace.WorkspaceRoot.FullName, fileBased ? "app.cs" : "app.csproj");
1096context.OutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "app.tar");
1130var projectPath = Path.Combine(workspace.WorkspaceRoot.FullName, fileBased ? "app.cs" : "app.csproj");
1191var projectPath = Path.Combine(workspace.WorkspaceRoot.FullName, fileBased ? "app.cs" : "app.csproj");
1226var probePath = Path.Combine(workspace.WorkspaceRoot.FullName, "properties.proj");
1247WorkingDirectory = workspace.WorkspaceRoot.FullName,
1274var projectPath = Path.Combine(workspace.WorkspaceRoot.FullName, "app.csproj");
1275var outputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "archive;100%.tar");
1301var probePath = Path.Combine(workspace.WorkspaceRoot.FullName, "properties.proj");
1311WorkingDirectory = workspace.WorkspaceRoot.FullName,
1570var tempSecretFile = System.IO.Path.Combine(workspace.WorkspaceRoot.FullName, ".npmrc");
1599Assert.Equal(new FileInfo(tempSecretFile).FullName, fakeContainerRuntime.CapturedBuildSecrets["FILE_SECRET"].Value);
1967ctx.OutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "archives");
2095ctx.OutputPath = Path.Combine(workspace.WorkspaceRoot.FullName, "archives");
2166var dockerfilePath = Path.Combine(workspace.WorkspaceRoot.FullName, "Dockerfile");
2172var container = builder.AddDockerfile("broken-container", workspace.WorkspaceRoot.FullName, dockerfilePath);
Terminals\Hex1bPtySocketTests.cs (13)
32var directory = Path.Combine(root.FullName, "custom");
63var directory = Path.Combine(root.FullName, "custom");
79EnvironmentVariables = { [Hex1bPtySocketHelper.SocketDirectoryEnvironmentVariable] = Path.Combine(root.FullName, "child") }
117Directory.CreateDirectory(Path.Combine(root.FullName, ".aspire"));
118var directory = Path.Combine(root.FullName, ".aspire", "pty");
152var directory = Directory.CreateDirectory(Path.Combine(root.FullName, "custom"));
162Environment.SetEnvironmentVariable(Hex1bPtySocketHelper.SocketDirectoryEnvironmentVariable, directory.FullName);
210var directory = Path.Combine(root.FullName, new string('a', 108));
242var directory = Path.Combine(root.FullName, ".aspire", "pty");
262EnvironmentVariables = { [Hex1bPtySocketHelper.SocketDirectoryEnvironmentVariable] = Path.Combine(root.FullName, "child") },
275var laterDirectory = Path.Combine(root.FullName, "later");
285Assert.False(Directory.Exists(Path.Combine(root.FullName, "child")));
305Assert.Equal(Path.Combine(root.FullName, "later"), Environment.GetEnvironmentVariable(Hex1bPtySocketHelper.SocketDirectoryEnvironmentVariable));
Utils\SocketPermissionHelperTests.cs (63)
25var directory = Path.Combine(root.FullName, "custom");
69var directory = Path.Combine(root.FullName, ".aspire", "pty");
96var directory = Path.Combine(root.FullName, "custom");
138var directory = SocketPermissionHelper.CreateDirectory(Path.Combine(root.FullName, "custom"), repairExisting: false);
148Assert.Throws<IOException>(() => SocketPermissionHelper.CreateDirectory(directory.FullName, repairExisting: false));
164Directory.CreateDirectory(Path.Combine(root.FullName, ".aspire"));
165var directory = Path.Combine(root.FullName, ".aspire", "pty");
191var target = Directory.CreateDirectory(Path.Combine(root.FullName, "target"));
192Directory.CreateDirectory(Path.Combine(target.FullName, "home"));
193var link = Path.Combine(root.FullName, "homes");
194Directory.CreateSymbolicLink(link, target.FullName);
199path, repairExisting: true, root.FullName, profile, root.FullName);
201Assert.Equal(path, directory.FullName);
202AssertDirectoryPermissions(Path.Combine(target.FullName, "home", ".aspire", "cli", "bch"));
225var target = Directory.CreateDirectory(Path.Combine(root.FullName, "target"));
226var baseMode = File.GetUnixFileMode(target.FullName);
227var link = Path.Combine(root.FullName, "base");
228Directory.CreateSymbolicLink(link, target.FullName);
230var targetDirectory = Path.Combine(target.FullName, ".aspire", "trmnl");
237path, repairExisting, root.FullName,
238temporaryBase ? root.FullName : link,
239temporaryBase ? link : root.FullName);
241Assert.Equal(path, directory.FullName);
243Assert.Equal(baseMode, File.GetUnixFileMode(target.FullName));
246path, repairExisting: false, root.FullName,
247temporaryBase ? root.FullName : link,
248temporaryBase ? link : root.FullName);
274var home = Directory.CreateDirectory(Path.Combine(root.FullName, "home"));
275var profile = Path.Combine(root.FullName, "profile");
276Directory.CreateSymbolicLink(profile, home.FullName);
277var target = Path.Combine(root.FullName, "target");
286root.FullName, profile, root.FullName));
310var target = Path.Combine(root.FullName, "target");
315var profile = Path.Combine(root.FullName, "profile");
320root.FullName, profile, root.FullName));
346var target = Path.Combine(root.FullName, "target");
349Directory.CreateDirectory(Path.Combine(root.FullName, ".aspire"));
350var link = Path.Combine(root.FullName, ".aspire", "pty");
385var directory = Path.GetFullPath(Path.Combine(root.FullName, "base", relativePath));
418var directory = Path.Combine(root.FullName, ".aspire", "pty");
423var currentDirectory = environmentDirectory == "working" ? directory : root.FullName;
424var userProfileDirectory = environmentDirectory == "profile" ? directory : root.FullName;
425var tempDirectory = environmentDirectory == "temp" ? directory : root.FullName;
449"custom", repairExisting: false, root.FullName, root.FullName, root.FullName);
451Assert.Equal(Path.Combine(root.FullName, "custom"), directory.FullName);
452AssertDirectoryPermissions(directory.FullName);
468var directory = Path.Combine(root.FullName, dcpLayout ? "aspire-dcp-test" : ".aspire/pty");
475directory, repairExisting: false, root.FullName, root.FullName, root.FullName));
499var target = Directory.CreateDirectory(Path.Combine(root.FullName, "target"));
500var directory = Path.Combine(target.FullName, "pty");
503Directory.CreateSymbolicLink(Path.Combine(root.FullName, ".aspire"), target.FullName);
506Path.Combine(root.FullName, ".aspire", "pty"), repairExisting: false));
527var directory = Directory.CreateDirectory(Path.Combine(root.FullName, ".aspire", "pty")).FullName;
Aspire.Hosting.TestUtilities (16)
Aspire.Hosting.Valkey.Tests (1)
Aspire.Managed.Tests (28)
TerminalHostSignalTests.cs (17)
25var socketDirectory = new DirectoryInfo(Path.Combine(root.FullName, "terminals"));
26var producerPath = Path.Combine(socketDirectory.FullName, "p.sock");
27var consumerPath = Path.Combine(socketDirectory.FullName, "h.sock");
28var controlPath = Path.Combine(socketDirectory.FullName, "c.sock");
108.Select(name => Path.Combine(root.FullName, "terminals", name)).ToArray();
146var startInfo = CreateTerminalHostStartInfo(Path.Combine(root.FullName, "s", "p.sock"), "consumer", "control");
150File.Delete(Path.Combine(root.FullName, "terminalhost", OperatingSystem.IsWindows() ? "Aspire.TerminalHost.exe" : "Aspire.TerminalHost"));
177var socketDirectory = new DirectoryInfo(Path.Combine(root.FullName, "terminals"));
178var parentProducerPath = Path.Combine(socketDirectory.FullName, "pp.sock");
179var parentConsumerPath = Path.Combine(socketDirectory.FullName, "ph.sock");
180var parentControlPath = Path.Combine(socketDirectory.FullName, "pc.sock");
182var producerPath = Path.Combine(socketDirectory.FullName, "p.sock");
183var consumerPath = Path.Combine(socketDirectory.FullName, "h.sock");
184var controlPath = Path.Combine(socketDirectory.FullName, "c.sock");
293foreach (var (fixture, directory) in new[] { ("terminalhost", terminal.FullName), ("managed", managed.FullName) })
306var managedAssembly = Path.Combine(managed.FullName, "aspire-managed.dll");
Aspire.Playground.Tests (3)
Aspire.Templates.Tests (6)
Aspire.TerminalHost (12)
src\Shared\SocketPermissionHelper.cs (12)
46var isWorkingDirectory = string.Equals(directory.FullName, Path.TrimEndingDirectorySeparator(currentDirectory), comparison);
47var isUserProfile = string.Equals(directory.FullName, profileRoot, comparison);
48var isTemporaryRoot = string.Equals(Path.TrimEndingDirectorySeparator(directory.FullName), tempRoot, comparison);
61if (string.Equals(current.FullName, profileRoot, comparison) ||
62string.Equals(current.FullName, tempRoot, comparison))
65if (!Directory.Exists(resolvedBase.FullName))
67throw new IOException($"The socket directory base '{current.FullName}' must resolve to an existing directory.");
84if (directory.Exists && (File.GetUnixFileMode(directory.FullName) & UnixFileMode.StickyBit) != 0)
91return DirectoryHelper.CreateWithOwnerOnlyPermissions(directory.FullName);
96Directory.CreateDirectory(directory.FullName, OwnerOnlyMode);
97if (File.GetUnixFileMode(directory.FullName) != OwnerOnlyMode)
174throw new IOException($"The configured socket directory '{directory.FullName}' must have a protected owner-only ACL with inheritable full control for the current user (SYSTEM is also allowed). Set those permissions or choose a new dedicated directory.");
Aspire.TerminalHost.Tests (11)
Aspire.Tray.Tests (28)
MacTrayPayloadTests.cs (5)
31var script = Path.Combine(workspace.FullName, "tools", "CreateLayout", "verify-tray-payload.sh");
34var app = Path.Combine(workspace.FullName, rid, "tray", "Aspire Tray.app");
51var source = Path.Combine(workspace.FullName, "main.c");
67var archive = Path.Combine(workspace.FullName, "payload.tar.gz");
68await RunSuccessfullyAsync("/usr/bin/tar", "-czf", archive, "-C", workspace.FullName, rid);
CodeStyleConfigFileGenerator (2)
csc (1)
dotnet (3)
dotnet-aot (26)
dotnet-build-cache (1)
dotnet-dev-certs (5)
dotnet-format (2)
dotnet-openapi (2)
dotnet-suggest (8)
dotnet-svcutil-lib (33)
CommandProcessorOptions.cs (10)
217await ProcessOutputFileOptionAsync(this.OutputDir.FullName, cancellationToken);
396Path.GetDirectoryName(this.OutputFile.FullName) : Path.GetDirectoryName(Path.Combine(Directory.GetCurrentDirectory(), this.OutputFile.OriginalPath()));
657if (this.Project != null && PathHelper.GetRelativePath(this.OutputDir.FullName, new DirectoryInfo(this.Project.DirectoryPath), out var relPath))
704var projectFullPath = Path.Combine(this.BootstrapPath.FullName, "TFMResolver", "TFMResolver.csproj");
742var inputFiles = Metadata.MetadataFileNameManager.ResolveFiles(metadataUri.LocalPath).Select(f => f.FullName);
853string projFolder = Path.Combine(this.BootstrapPath.FullName, nameof(SvcutilBootstrapper));
858assembly = Assembly.LoadFrom(assemblyFile.FullName);
1029if (!Directory.Exists(this.BootstrapPath.FullName))
1031Directory.CreateDirectory(this.BootstrapPath.FullName);
1035await RuntimeEnvironmentHelper.TryCopyingConfigFiles(workingDirectory, this.BootstrapPath.FullName, logger, cancellationToken).ConfigureAwait(false);
dotnet-svcutil-lib.Tests (3)
dotnet-svcutil.xmlserializer (3)
GenerateDocumentationAndConfigFiles (10)
Program.cs (10)
433var fileWithPath = Path.Combine(directory.FullName, args.PropsFileName);
442fileWithPath = Path.Combine(directory.FullName, args.PropsFileToDisableNetAnalyzersInNuGetPackageName);
544var fileWithPath = Path.Combine(directory.FullName, args.AnalyzerDocumentationFileName);
640var fileWithPath = Path.Combine(directory.FullName, args.AnalyzerSarifFileName);
734Validate(Path.Combine(directory.FullName, args.AnalyzerSarifFileName), stringWriter.ToString(), fileNamesWithValidationFailures);
776var fileWithPath = Path.Combine(directory.FullName, "RulesMissingDocumentation.md");
1112var rulesetFilePath = Path.Combine(directory.FullName, rulesetFileName);
1177var editorconfigFilePath = Path.Combine(directory.FullName, ".editorconfig");
1400var configFilePath = Path.Combine(directory.FullName, fileName.ToLowerInvariant());
1612var fileWithPath = Path.Combine(directory.FullName, targetsFileName);
GenerateTemplateManifest (7)
ilasm (1)
illink (4)
Infrastructure.Tests (117)
TemplateManifest\TemplateRestorePlanTests.cs (11)
19var source = workspace.CreateDirectory("source").FullName;
35await plan.DiscoverAsync(source, source, workspace.CreateDirectory("work").FullName);
53var source = workspace.CreateDirectory("source").FullName;
78await plan.DiscoverAsync(source, source, workspace.CreateDirectory("work").FullName);
91var source = workspace.CreateDirectory("source").FullName;
110await plan.DiscoverAsync(source, source, workspace.CreateDirectory("work").FullName);
159var directory = workspace.CreateDirectory(normalize ? "normalized" : "original").FullName;
249var source = workspace.CreateDirectory("source").FullName;
259await plan.DiscoverAsync(source, source, workspace.CreateDirectory("work").FullName);
273var source = workspace.CreateDirectory("source").FullName;
282await Assert.ThrowsAsync<InvalidDataException>(() => plan.DiscoverAsync(source, source, workspace.CreateDirectory("work").FullName));
TestTriggerMap\SelectTestsCliTests.cs (20)
166var slnxPath = Path.Combine(dir.FullName, "custom", "MyApp.slnx");
169File.WriteAllText(Path.Combine(dir.FullName, "map.yml"), Map);
171WithGitHubEnv(dir.FullName, _ =>
173var propsPath = Path.Combine(dir.FullName, "BeforeBuildProps.props");
174var changed = WriteChangedFiles(dir.FullName, "trigger.txt");
177dir.FullName, propsPath, changedFilesPath: changed,
186Directory.Delete(dir.FullName, recursive: true);
1542File.WriteAllText(Path.Combine(dir.FullName, "Aspire.slnx"), slnx);
1543File.WriteAllText(Path.Combine(dir.FullName, "map.yml"), map);
1545WithGitHubEnv(dir.FullName, output =>
1546body(dir.FullName, Path.Combine(dir.FullName, "BeforeBuildProps.props"), output));
1550Directory.Delete(dir.FullName, recursive: true);
1561RunGit(dir.FullName, "init", "-q", "-b", "main");
1562RunGit(dir.FullName, "config", "user.email", "test@example.com");
1563RunGit(dir.FullName, "config", "user.name", "Test");
1564RunGit(dir.FullName, "config", "commit.gpgsign", "false");
1566WithGitHubEnv(dir.FullName, output => body(dir.FullName, output));
1570Directory.Delete(dir.FullName, recursive: true);
WorkflowScripts\AnalyzeCiFailureWorkflowTests.cs (31)
140Path.Combine(_workspace.Path, "ci-failure-data", "prior-causes")).FullName;
162Path.Combine(_workspace.Path, "ci-failure-data", "prior-causes")).FullName;
1094Path.Combine(_workspace.Path, "ci-failure-data", "prior-causes")).FullName;
2468Path.Combine(testResultsDirectory.FullName, "00001.trx"),
2497testResultsDirectory.FullName,
2517Path.Combine(testResultsDirectory.FullName, "00001.json"),
2538testResultsDirectory.FullName,
2559Path.Combine(testResultsDirectory.FullName, "00001.json"),
2580testResultsDirectory.FullName,
2597Path.Combine(testResultsDirectory.FullName, "00001.json"),
2624testResultsDirectory.FullName,
2651testResultsDirectory.FullName,
2668Path.Combine(testResultsDirectory.FullName, "00001.json"),
2681testResultsDirectory.FullName,
2702Path.Combine(testResultsDirectory.FullName, "00001.trx"),
2711Path.Combine(testResultsDirectory.FullName, "00002.trx"),
2723testResultsDirectory.FullName,
2743Path.Combine(testResultsDirectory.FullName, "00001.trx"),
2755testResultsDirectory.FullName,
2774await File.WriteAllTextAsync(Path.Combine(testResultsDirectory.FullName, "results.xml"), "<TestRun />");
2785testResultsDirectory.FullName,
2805Path.Combine(testResultsDirectory.FullName, "00001.trx"),
2823testResultsDirectory.FullName,
3806var failureDataDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, "ci-failure-data")).FullName;
4589var failureDataDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, "ci-failure-data")).FullName;
4733var fakeBinDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, "fake-bin")).FullName;
4756var fakeBinDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, "fake-bin")).FullName;
4778var fakeBinDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, $"fake-bin-{Guid.NewGuid():N}")).FullName;
4815var analysisDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, "ci-analysis-output")).FullName;
4816var failureDataDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, "ci-failure-data")).FullName;
4971var causesDirectory = Directory.CreateDirectory(Path.Combine(_workspace.Path, "ci-analysis-output", "causes")).FullName;
WorkflowScripts\ExtensionReleaseWorkflowTests.cs (13)
39var fakeGh = await CreateFakeGhAsync(tempDirectory.FullName);
59Directory.Delete(tempDirectory.FullName, recursive: true);
70var fakeGh = await CreateFakeGhAsync(tempDirectory.FullName);
90Directory.Delete(tempDirectory.FullName, recursive: true);
101var fakeGh = await CreateFakeGhAsync(tempDirectory.FullName);
123Directory.Delete(tempDirectory.FullName, recursive: true);
305var bodyPath = Path.Combine(tempDirectory.FullName, "pr_body.md");
315Directory.Delete(tempDirectory.FullName, recursive: true);
324var bodyPath = Path.Combine(tempDirectory.FullName, "pr_body.md");
334Directory.Delete(tempDirectory.FullName, recursive: true);
345var commitsPath = Path.Combine(tempDirectory.FullName, "commits.txt");
346var outputPath = Path.Combine(tempDirectory.FullName, "release_notes.md");
393Directory.Delete(tempDirectory.FullName, recursive: true);
Microsoft.Agents.AI.ProjectTemplates.Tests (2)
Microsoft.AspNetCore.DataProtection (13)
Microsoft.AspNetCore.DeveloperCertificates.XPlat (5)
Microsoft.AspNetCore.InternalTesting (3)
Microsoft.AspNetCore.Mvc.Testing (2)
Microsoft.AspNetCore.Server.IntegrationTesting (6)
Microsoft.AspNetCore.Server.Kestrel.Core (5)
Microsoft.AspNetCore.TestHost (2)
Microsoft.Build (6)
Microsoft.Build.Framework (27)
Microsoft.Build.NuGetSdkResolver (11)
Microsoft.Build.Tasks.CodeAnalysis (3)
Microsoft.Build.Tasks.Core (74)
DownloadFile.cs (7)
185var destinationFile = new FileInfo(Path.Combine(destinationDirectory.FullName, filename));
190Log.LogMessageFromResources(MessageImportance.Normal, "DownloadFile.DidNotDownloadBecauseOfFileMatch", SourceUrl, destinationFile.FullName, nameof(SkipUnchangedFiles), "true");
192DownloadedFile = new TaskItem(destinationFile.FullName);
198Log.LogErrorFromResources("DownloadFile.Downloading", SourceUrl, destinationFile.FullName, response.Content.Headers.ContentLength);
206using (var target = new FileStream(destinationFile.FullName, FileMode.Create, FileAccess.Write, FileShare.None))
208Log.LogMessageFromResources(MessageImportance.High, "DownloadFile.Downloading", SourceUrl, destinationFile.FullName, response.Content.Headers.ContentLength);
220DownloadedFile = new TaskItem(destinationFile.FullName);
TarDirectory.cs (16)
168Log.LogErrorWithCodeFromResources("TarDirectory.ErrorDirectoryDoesNotExist", _sourceDirectory.FullName);
178Log.LogErrorWithCodeFromResources("TarDirectory.ErrorFailIfNotIncremental", _sourceDirectory.FullName, _destinationFile.FullName);
187Log.LogErrorWithCodeFromResources("TarDirectory.ErrorFileExists", _destinationFile.FullName);
194File.Delete(_destinationFile.FullName);
198string lockedFileMessage = LockCheck.GetLockedFileMessage(_destinationFile.FullName);
199Log.LogErrorWithCodeFromResources("TarDirectory.ErrorFailed", _sourceDirectory.FullName, _destinationFile.FullName, e.Message, lockedFileMessage);
234Log.LogMessageFromResources(MessageImportance.High, "TarDirectory.Comment", _sourceDirectory.FullName, _destinationFile.FullName);
241using (FileStream destinationStream = new FileStream(_destinationFile.FullName, FileMode.Create, FileAccess.Write, FileShare.None))
278await writer.WriteEntryAsync(info.FullName, entryName, cancellationToken)
301Log.LogErrorWithCodeFromResources("TarDirectory.ErrorFailed", _sourceDirectory.FullName, _destinationFile.FullName, e.Message, string.Empty);
338string basePath = FileUtilities.EnsureTrailingSlash(_sourceDirectory.FullName);
366string relativePath = info.FullName.Substring(basePath.Length);
Untar.cs (16)
147if (!FileSystems.Default.FileExists(sourceFile.FullName))
149Log.LogErrorWithCodeFromResources("Untar.ErrorFileDoesNotExist", sourceFile.FullName);
194Log.LogErrorWithCodeFromResources("Untar.ErrorCouldNotOpenFile", sourceFile.FullName, e.Message);
204Log.LogErrorWithCodeFromResources("Untar.ErrorCouldNotOpenFile", sourceFile.FullName, e.Message);
274AbsolutePath fullDestinationDirectoryPath = TaskEnvironment.GetAbsolutePath(FileUtilities.EnsureTrailingSlash(destinationDirectory.FullName)).GetCanonicalForm();
286AbsolutePath fullDestinationPath = TaskEnvironment.GetAbsolutePath(Path.Combine(destinationDirectory.FullName, entryName)).GetCanonicalForm();
300if (tarEntry.EntryType is TarEntryType.Directory || Path.GetFileName(destinationPath.FullName).Length == 0)
304Directory.CreateDirectory(destinationPath.FullName);
311Log.LogErrorWithCodeFromResources("Untar.ErrorCouldNotCreateDestinationDirectory", destinationPath.FullName, e.Message);
326Log.LogMessageFromResources(MessageImportance.Low, "Untar.DidNotUntarBecauseOfFileMatch", entryName, destinationPath.FullName, nameof(SkipUnchangedFiles), "true");
331Log.LogErrorWithCodeFromResources("Untar.ErrorFailIfNotIncremental", entryName, destinationPath.FullName);
353string lockedFileMessage = LockCheck.GetLockedFileMessage(destinationPath.FullName);
354Log.LogErrorWithCodeFromResources("Untar.ErrorCouldNotMakeFileWriteable", entryName, destinationPath.FullName, e.Message, lockedFileMessage);
361Log.LogMessageFromResources(MessageImportance.Normal, "Untar.FileComment", entryName, destinationPath.FullName);
367await tarEntry.ExtractToFileAsync(destinationPath.FullName, overwrite: true, _cancellationTokenSource.Token)
376Log.LogErrorWithCodeFromResources("Untar.ErrorCouldNotExtractFile", entryName, destinationPath.FullName, e.Message);
Unzip.cs (15)
179AbsolutePath fullDestinationDirectoryPath = TaskEnvironment.GetAbsolutePath(FileUtilities.EnsureTrailingSlash(destinationDirectory.FullName)).GetCanonicalForm();
190AbsolutePath fullDestinationPath = TaskEnvironment.GetAbsolutePath(Path.Combine(destinationDirectory.FullName, zipArchiveEntry.FullName)).GetCanonicalForm();
198if (Path.GetFileName(destinationPath.FullName).Length == 0)
201Directory.CreateDirectory(destinationPath.FullName);
205if (!destinationPath.FullName.StartsWith(destinationDirectory.FullName, StringComparison.OrdinalIgnoreCase))
209Log.LogErrorFromResources("Unzip.ErrorExtractingResultsInFilesOutsideDestination", destinationPath.FullName, destinationDirectory.FullName);
215Log.LogMessageFromResources(MessageImportance.Low, "Unzip.DidNotUnzipBecauseOfFileMatch", zipArchiveEntry.FullName, destinationPath.FullName, nameof(SkipUnchangedFiles), "true");
220Log.LogErrorFromResources("Unzip.FileComment", zipArchiveEntry.FullName, destinationPath.FullName);
242string lockedFileMessage = LockCheck.GetLockedFileMessage(destinationPath.FullName);
243Log.LogErrorWithCodeFromResources("Unzip.ErrorCouldNotMakeFileWriteable", zipArchiveEntry.FullName, destinationPath.FullName, e.Message, lockedFileMessage);
250Log.LogMessageFromResources(MessageImportance.Normal, "Unzip.FileComment", zipArchiveEntry.FullName, destinationPath.FullName);
275using (FileStream destination = new FileStream(destinationPath.FullName, fileStreamOptions))
293Log.LogErrorWithCodeFromResources("Unzip.ErrorCouldNotExtractFile", zipArchiveEntry.FullName, destinationPath.FullName, e.Message);
ZipDirectory.cs (18)
71Log.LogErrorWithCodeFromResources("ZipDirectory.ErrorDirectoryDoesNotExist", sourceDirectory.FullName);
86Log.LogErrorWithCodeFromResources("ZipDirectory.ErrorFileExists", destinationFile.FullName);
93File.Delete(destinationFile.FullName);
97string lockedFileMessage = LockCheck.GetLockedFileMessage(destinationFile.FullName);
98Log.LogErrorWithCodeFromResources("ZipDirectory.ErrorFailed", sourceDirectory.FullName, destinationFile.FullName, e.Message, lockedFileMessage);
108Log.LogErrorFromResources("ZipDirectory.Comment", sourceDirectory.FullName, destinationFile.FullName);
112Log.LogMessageFromResources(MessageImportance.High, "ZipDirectory.Comment", sourceDirectory.FullName, destinationFile.FullName);
115ZipFile.CreateFromDirectory(sourceDirectory.FullName, destinationFile.FullName);
119ZipFile.CreateFromDirectory(sourceDirectory.FullName, destinationFile.FullName, compressionLevel.Value, includeBaseDirectory: false);
135ZipFile.CreateFromDirectory(sourceDirectory.FullName, destinationFile.FullName);
141Log.LogErrorWithCodeFromResources("ZipDirectory.ErrorFailed", sourceDirectory.FullName, destinationFile.FullName, e.Message, string.Empty);
Microsoft.CodeAnalysis.BuildClient.Package (1)
Microsoft.CodeAnalysis.CSharp.Workspaces (1)
Microsoft.CodeAnalysis.Features (1)
Microsoft.CodeAnalysis.Razor.Compiler (1)
Microsoft.CodeAnalysis.Scripting (1)
Microsoft.CodeAnalysis.Workspaces (1)
Microsoft.CodeAnalysis.Workspaces.MSBuild.Contracts (1)
Microsoft.Data.Analysis.Tests (1)
Microsoft.DotNet.Build.Tasks.Feed (3)
Microsoft.DotNet.Build.Tasks.FileCatalog (2)
Microsoft.DotNet.Build.Tasks.Packaging (1)
Microsoft.DotNet.Cli.Definitions (1)
Microsoft.DotNet.Cli.Utils (3)
Microsoft.DotNet.Configurer (1)
Microsoft.DotNet.HotReload.Watch (1)
Microsoft.DotNet.InternalAbstractions (3)
Microsoft.DotNet.NativeWrapper (1)
Microsoft.DotNet.NuGetRepack.Tasks (9)
Microsoft.DotNet.ProjectTools (1)
Microsoft.DotNet.SharedFramework.Sdk (2)
Microsoft.DotNet.XliffTasks (5)
Microsoft.Extensions.AI.Evaluation.Console (4)
Microsoft.Extensions.AI.Evaluation.Reporting (4)
Microsoft.Extensions.AI.Templates.Tests (2)
Microsoft.Extensions.DataIngestion (6)
Microsoft.Extensions.DataIngestion.Abstractions (2)
Microsoft.Extensions.DataIngestion.Markdig (1)
Microsoft.Extensions.DataIngestion.MarkItDown (6)
Microsoft.Extensions.DataIngestion.Tests (11)
Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests (7)
Microsoft.Extensions.FileProviders.Physical (3)
Microsoft.Extensions.FileSystemGlobbing (6)
Microsoft.Extensions.Http.Resilience.Tests (2)
Microsoft.Maui.Resizetizer (10)
Microsoft.ML.AutoML (4)
Microsoft.ML.AutoML.Tests (1)
Microsoft.ML.Core.Tests (5)
Microsoft.ML.IntegrationTests (1)
Microsoft.ML.PerformanceTests (3)
Microsoft.ML.Samples (4)
Microsoft.ML.Samples.GPU (4)
Microsoft.ML.SamplesUtils (1)
Microsoft.ML.SearchSpace.Tests (2)
Microsoft.ML.TestFramework (7)
Microsoft.ML.TestFrameworkCommon (1)
Microsoft.NET.Build.Containers (5)
Microsoft.NET.HostModel (3)
Microsoft.NET.ProjectData (3)
Microsoft.NET.ProjectData.Tasks (4)
Microsoft.NET.Sdk.Publish.Tasks (2)
Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver (1)
Microsoft.TemplateEngine.Cli (2)
Microsoft.TemplateEngine.Edge (6)
Microsoft.TemplateEngine.Utils (1)
Microsoft.TestPlatform.Extensions.BlameDataCollector (2)
Microsoft.TestPlatform.TestHostRuntimeProvider (2)
Microsoft.VisualBasic.Forms (2)
Microsoft.VisualStudio.TestPlatform.Common (1)
MSBuild (2)
NuGet.Build.Tasks (2)
NuGet.Build.Tasks.Console (1)
NuGet.CommandLine.XPlat (1)
NuGet.Commands (4)
NuGet.Configuration (6)
NuGet.PackageManagement (3)
NuGet.Packaging (18)
NuGet.Protocol (20)
PresentationCore (1)
PresentationUI (1)
RepoTasks (5)
ResultsOfTGenerator (2)
sdk-tasks (2)
System.CodeDom (1)
System.Configuration.ConfigurationManager (2)
System.DirectoryServices (1)
System.Formats.Tar (5)
System.IO.Compression.ZipFile (4)
System.IO.FileSystem.AccessControl (7)
System.IO.Packaging (1)
System.IO.Ports (4)
System.Private.CoreLib (6)
System.Windows.Forms.Design (1)
vbc (1)
VBCSCompiler (1)
vstest.console (5)
vstest.console.arm64 (5)