public static ToolsetInfo Create(string repoRoot, string configuration, TestCommandLine commandLine) { var ret = new ToolsetInfo(); repoRoot = commandLine.SDKRepoPath ?? repoRoot; configuration = commandLine.SDKRepoConfiguration ?? configuration; if (repoRoot != null) { ret.CliVersionForBundledVersions = File.ReadAllText(Path.Combine(repoRoot, "DotnetCLIVersion.txt")).Trim(); ret.DotNetHostPath = Path.Combine(repoRoot, ".dotnet_cli", $"dotnet{Constants.ExeSuffix}"); ret.SdksPath = Path.Combine(repoRoot, "bin", configuration, "Sdks"); } else { ret.DotNetHostPath = ResolveCommand("dotnet"); } if (!string.IsNullOrEmpty(commandLine.FullFrameworkMSBuildPath)) { ret.FullFrameworkMSBuildPath = commandLine.FullFrameworkMSBuildPath; } else if (commandLine.UseFullFrameworkMSBuild) { ret.FullFrameworkMSBuildPath = ResolveCommand("MSBuild"); } return(ret); }
public static void Initialize(TestCommandLine commandLine) { TestContext testContext = new TestContext(); // This is dependent on the current artifacts layout: // * $(RepoRoot)/artifacts/$(Configuration)/tmp // * $(RepoRoot)/artifacts/$(Configuration)/bin/Tests/$(MSBuildProjectName) testContext.TestExecutionDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "tmp")); testContext.TestAssetsDirectory = FindFolderInTree(Path.Combine("src", "Assets", "TestProjects"), AppContext.BaseDirectory); string repoRoot = null; string repoConfiguration = null; if (commandLine.SDKRepoPath != null) { repoRoot = commandLine.SDKRepoPath; } else if (!commandLine.NoRepoInference) { repoRoot = GetRepoRoot(); if (repoRoot != null) { // assumes tests are always executed from the "artifacts/$Configuration/bin/Tests/$MSBuildProjectFile" directory repoConfiguration = new DirectoryInfo(AppContext.BaseDirectory).Parent.Parent.Parent.Name; } } if (repoRoot != null) { testContext.NuGetFallbackFolder = Path.Combine(repoRoot, "artifacts", ".nuget", "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(repoRoot, "artifacts", ".nuget", $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(repoRoot, "artifacts", ".nuget", "packages"); } else { var nugetFolder = FindOrCreateFolderInTree(".nuget", AppContext.BaseDirectory); testContext.NuGetFallbackFolder = Path.Combine(nugetFolder, "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(nugetFolder, $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(nugetFolder, "packages"); } if (commandLine.BuildVersion != null) { testContext.BuildVersion = commandLine.BuildVersion; } else { var assemblyInformationalVersion = (AssemblyInformationalVersionAttribute)(Attribute.GetCustomAttribute(typeof(TestContext).Assembly, typeof(AssemblyInformationalVersionAttribute))); testContext.BuildVersion = assemblyInformationalVersion.InformationalVersion; } testContext.ToolsetUnderTest = ToolsetInfo.Create(repoRoot, repoConfiguration, commandLine); TestContext.Current = testContext; }
public static TestCommandLine HandleCommandLine(string [] args) { TestCommandLine commandLine = Parse(args); if (!commandLine.ShouldShowHelp) { TestContext.Initialize(commandLine); } return(commandLine); }
public static List <string> HandleCommandLine(string [] args, out bool showHelp) { TestCommandLine commandLine = Parse(args); if (!commandLine.ShouldShowHelp) { TestContext.Initialize(commandLine); } showHelp = commandLine.ShouldShowHelp; return(commandLine.RemainingArgs); }
public static void Initialize(TestCommandLine commandLine) { TestContext testContext = new TestContext(); testContext.TestExecutionDirectory = AppContext.BaseDirectory; testContext.TestAssetsDirectory = FindFolderInTree("TestAssets", AppContext.BaseDirectory); string repoRoot = null; string repoConfiguration = null; if (commandLine.SDKRepoPath != null) { repoRoot = commandLine.SDKRepoPath; } else if (!commandLine.NoRepoInference) { repoRoot = GetRepoRoot(); if (repoRoot != null) { // assumes tests are always executed from the "bin/$Configuration/Tests" directory repoConfiguration = new DirectoryInfo(AppContext.BaseDirectory).Parent.Name; } } if (repoRoot != null) { testContext.NuGetFallbackFolder = Path.Combine(repoRoot, "bin", "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(repoRoot, ".nuget", $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(repoRoot, "packages"); } else { testContext.NuGetFallbackFolder = FindOrCreateFolderInTree("NuGetFallbackFolder", AppContext.BaseDirectory); testContext.NuGetCachePath = FindOrCreateFolderInTree("packages", AppContext.BaseDirectory); var nuGetFolder = FindFolderInTree(".nuget", AppContext.BaseDirectory, false); if (nuGetFolder != null) { testContext.NuGetExePath = Path.Combine(nuGetFolder, $"nuget{Constants.ExeSuffix}"); } } testContext.ToolsetUnderTest = ToolsetInfo.Create(repoRoot, repoConfiguration, commandLine); TestContext.Current = testContext; }
public static ToolsetInfo Create(string repoRoot, string repoArtifactsDir, string configuration, TestCommandLine commandLine) { repoRoot = commandLine.SDKRepoPath ?? repoRoot; configuration = commandLine.SDKRepoConfiguration ?? configuration; string dotnetInstallDirFromEnvironment = Environment.GetEnvironmentVariable("DOTNET_INSTALL_DIR"); string dotnetRoot; if (!string.IsNullOrEmpty(commandLine.DotnetHostPath)) { dotnetRoot = Path.GetDirectoryName(commandLine.DotnetHostPath); } else if (repoRoot != null) { dotnetRoot = Path.Combine(repoArtifactsDir, "bin", "redist", configuration, "dotnet"); } else if (!string.IsNullOrEmpty(dotnetInstallDirFromEnvironment)) { dotnetRoot = dotnetInstallDirFromEnvironment; } else { dotnetRoot = Path.GetDirectoryName(ResolveCommand("dotnet")); } var ret = new ToolsetInfo(dotnetRoot); if (!string.IsNullOrEmpty(commandLine.FullFrameworkMSBuildPath)) { ret.FullFrameworkMSBuildPath = commandLine.FullFrameworkMSBuildPath; } else if (commandLine.UseFullFrameworkMSBuild) { ret.FullFrameworkMSBuildPath = ResolveCommand("MSBuild"); } var microsoftNETBuildExtensionsTargetsFromEnvironment = Environment.GetEnvironmentVariable("MicrosoftNETBuildExtensionsTargets"); if (!string.IsNullOrWhiteSpace(microsoftNETBuildExtensionsTargetsFromEnvironment)) { ret.MicrosoftNETBuildExtensionsPathOverride = Path.GetDirectoryName(microsoftNETBuildExtensionsTargetsFromEnvironment); } else if (repoRoot != null && ret.ShouldUseFullFrameworkMSBuild) { // Find path to Microsoft.NET.Build.Extensions for full framework string sdksPath = Path.Combine(repoArtifactsDir, "bin", configuration, "Sdks"); var buildExtensionsSdkPath = Path.Combine(sdksPath, "Microsoft.NET.Build.Extensions"); ret.MicrosoftNETBuildExtensionsPathOverride = Path.Combine(buildExtensionsSdkPath, "msbuildExtensions", "Microsoft", "Microsoft.NET.Build.Extensions"); } if (ret.ShouldUseFullFrameworkMSBuild) { if (repoRoot != null) { // Find path to MSBuildSdkResolver for full framework ret.SdkResolverPath = Path.Combine(repoArtifactsDir, "bin", "Microsoft.DotNet.MSBuildSdkResolver", configuration, "net472", "SdkResolvers"); } else if (!string.IsNullOrWhiteSpace(commandLine.MsbuildAdditionalSdkResolverFolder)) { ret.SdkResolverPath = Path.Combine(commandLine.MsbuildAdditionalSdkResolverFolder, configuration, "net472", "SdkResolvers"); } else { throw new InvalidOperationException("Microsoft.DotNet.MSBuildSdkResolver path is not provided, set msbuildAdditionalSdkResolverFolder on test commandline or set repoRoot"); } } if (repoRoot != null) { ret.CliHomePath = Path.Combine(repoArtifactsDir, "tmp", configuration); } return(ret); }
public static TestCommandLine Parse(string[] args) { TestCommandLine ret = new TestCommandLine(); ret.RemainingArgs = new List <string>(); Stack <string> argStack = new Stack <string>(args.Reverse()); while (argStack.Any()) { string arg = argStack.Pop(); if (arg.Equals("-useFullMSBuild", StringComparison.InvariantCultureIgnoreCase)) { ret.UseFullFrameworkMSBuild = true; } else if (arg.Equals("-fullMSBuildPath", StringComparison.InvariantCultureIgnoreCase) && argStack.Any()) { ret.FullFrameworkMSBuildPath = argStack.Pop(); } else if (arg.Equals("-dotnetPath", StringComparison.InvariantCultureIgnoreCase) && argStack.Any()) { ret.DotnetHostPath = argStack.Pop(); } else if (arg.Equals("-sdkRepo", StringComparison.InvariantCultureIgnoreCase) && argStack.Any()) { ret.SDKRepoPath = argStack.Pop(); } else if (arg.Equals("-sdkConfig", StringComparison.InvariantCultureIgnoreCase) && argStack.Any()) { ret.SDKRepoConfiguration = argStack.Pop(); } else if (arg.Equals("-noRepoInference", StringComparison.CurrentCultureIgnoreCase)) { ret.NoRepoInference = true; } else if (arg.Equals("-sdkVersion", StringComparison.CurrentCultureIgnoreCase)) { ret.SdkVersion = argStack.Pop(); } else if (arg.Equals("-testExecutionDirectory", StringComparison.CurrentCultureIgnoreCase)) { ret.TestExecutionDirectory = argStack.Pop(); } else if (arg.Equals("-testConfigFile", StringComparison.CurrentCultureIgnoreCase) || arg.Equals("-testConfig", StringComparison.CurrentCultureIgnoreCase)) { ret.TestConfigFiles.Add(argStack.Pop()); } else if (arg.Equals("-testList", StringComparison.CurrentCultureIgnoreCase)) { ret.TestListsToRun.Add(argStack.Pop()); } else if (arg.Equals("-showSdkInfo", StringComparison.CurrentCultureIgnoreCase)) { ret.ShowSdkInfo = true; } else if (arg.Equals("-help", StringComparison.CurrentCultureIgnoreCase) || arg.Equals("--help", StringComparison.CurrentCultureIgnoreCase) || arg.Equals("/?") || arg.Equals("-?")) { ret.ShouldShowHelp = true; } else { ret.RemainingArgs.Add(arg); } } if (!string.IsNullOrEmpty(ret.SDKRepoPath) && string.IsNullOrEmpty(ret.SDKRepoConfiguration)) { ret.SDKRepoConfiguration = "Release"; } if (string.IsNullOrEmpty(ret.FullFrameworkMSBuildPath)) { // Run tests on full framework MSBuild if environment variable is set pointing to it string msbuildPath = Environment.GetEnvironmentVariable("DOTNET_SDK_TEST_MSBUILD_PATH"); if (!string.IsNullOrEmpty(msbuildPath)) { ret.FullFrameworkMSBuildPath = msbuildPath; } } return(ret); }
public static ToolsetInfo Create(string repoRoot, string repoArtifactsDir, string configuration, TestCommandLine commandLine) { var ret = new ToolsetInfo(); repoRoot = commandLine.SDKRepoPath ?? repoRoot; configuration = commandLine.SDKRepoConfiguration ?? configuration; string dotnetInstallDirFromEnvironment = Environment.GetEnvironmentVariable("DOTNET_INSTALL_DIR"); if (!string.IsNullOrEmpty(commandLine.DotnetHostPath)) { ret.DotNetHostPath = commandLine.DotnetHostPath; } else if (!string.IsNullOrEmpty(dotnetInstallDirFromEnvironment)) { ret.DotNetHostPath = Path.Combine(dotnetInstallDirFromEnvironment, $"dotnet{Constants.ExeSuffix}"); } else if (repoRoot != null) { ret.DotNetHostPath = Path.Combine(repoRoot, ".dotnet", $"dotnet{Constants.ExeSuffix}"); } else { ret.DotNetHostPath = ResolveCommand("dotnet"); } if (repoRoot != null) { ret.SdksPath = Path.Combine(repoArtifactsDir, "bin", configuration, "Sdks"); } if (!string.IsNullOrEmpty(commandLine.FullFrameworkMSBuildPath)) { ret.FullFrameworkMSBuildPath = commandLine.FullFrameworkMSBuildPath; } else if (commandLine.UseFullFrameworkMSBuild) { ret.FullFrameworkMSBuildPath = ResolveCommand("MSBuild"); } return(ret); }
public static void Initialize(TestCommandLine commandLine) { // Show verbose debugging output for tests CommandContext.SetVerbose(true); Reporter.Reset(); Environment.SetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP", "0"); // Reset this environment variable so that if the dotnet under test is different than the // one running the tests, it won't interfere Environment.SetEnvironmentVariable("MSBuildSdksPath", null); TestContext testContext = new TestContext(); bool runAsTool = false; if (Directory.Exists(Path.Combine(AppContext.BaseDirectory, "Assets"))) { runAsTool = true; testContext.TestAssetsDirectory = Path.Combine(AppContext.BaseDirectory, "Assets"); } else if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DOTNET_SDK_TEST_AS_TOOL"))) { // Pretend to run as a tool, but use the test assets found in the repo // This allows testing most of the "tests as global tool" behavior by setting an environment // variable instead of packing the test, and installing it as a global tool. runAsTool = true; testContext.TestAssetsDirectory = FindFolderInTree(Path.Combine("src", "Assets"), AppContext.BaseDirectory); } string repoRoot = null; #if DEBUG string repoConfiguration = "Debug"; #else string repoConfiguration = "Release"; #endif if (commandLine.SDKRepoPath != null) { repoRoot = commandLine.SDKRepoPath; } else if (!commandLine.NoRepoInference && !runAsTool) { repoRoot = GetRepoRoot(); //if (repoRoot != null) //{ // // assumes tests are always executed from the "artifacts/bin/Tests/$MSBuildProjectFile/$Configuration" directory // repoConfiguration = new DirectoryInfo(AppContext.BaseDirectory).Name; //} } if (!string.IsNullOrEmpty(commandLine.TestExecutionDirectory)) { testContext.TestExecutionDirectory = commandLine.TestExecutionDirectory; } else if (runAsTool) { testContext.TestExecutionDirectory = Path.Combine(Path.GetTempPath(), "dotnetSdkTests", Path.GetRandomFileName()); } else { testContext.TestExecutionDirectory = (Path.Combine(FindFolderInTree("artifacts", AppContext.BaseDirectory), "tmp", repoConfiguration)); testContext.TestAssetsDirectory = FindFolderInTree(Path.Combine("src", "Assets"), AppContext.BaseDirectory); } Directory.CreateDirectory(testContext.TestExecutionDirectory); string artifactsDir = Environment.GetEnvironmentVariable("DOTNET_SDK_ARTIFACTS_DIR"); if (string.IsNullOrEmpty(artifactsDir) && !string.IsNullOrEmpty(repoRoot)) { artifactsDir = Path.Combine(repoRoot, "artifacts"); } if (!string.IsNullOrEmpty(artifactsDir)) { testContext.TestGlobalPackagesFolder = Path.Combine(artifactsDir, ".nuget", "packages"); } else { testContext.TestGlobalPackagesFolder = Path.Combine(testContext.TestExecutionDirectory, ".nuget", "packages"); } if (repoRoot != null) { testContext.NuGetFallbackFolder = Path.Combine(artifactsDir, ".nuget", "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(artifactsDir, ".nuget", $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(artifactsDir, ".nuget", "packages"); testContext.TestPackages = Path.Combine(artifactsDir, "tmp", repoConfiguration, "testpackages"); } else if (runAsTool) { testContext.NuGetFallbackFolder = Path.Combine(testContext.TestAssetsDirectory, ".nuget", "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(testContext.TestAssetsDirectory, ".nuget", $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(testContext.TestAssetsDirectory, ".nuget", "packages"); var testPackages = Path.Combine(testContext.TestExecutionDirectory, "Testpackages"); if (Directory.Exists(testPackages)) { testContext.TestPackages = testPackages; } } else { var nugetFolder = FindFolderInTree(".nuget", AppContext.BaseDirectory, false) ?? Path.Combine(testContext.TestExecutionDirectory, ".nuget"); testContext.NuGetFallbackFolder = Path.Combine(nugetFolder, "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(nugetFolder, $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(nugetFolder, "packages"); } if (commandLine.SdkVersion != null) { testContext.SdkVersion = commandLine.SdkVersion; } testContext.ToolsetUnderTest = ToolsetInfo.Create(repoRoot, artifactsDir, repoConfiguration, commandLine); // Important to set this before below code which ends up calling through TestContext.Current, which would // result in infinite recursion / stack overflow if TestContext.Current wasn't set TestContext.Current = testContext; // Set up test hooks for in-process tests Environment.SetEnvironmentVariable( DotNet.Cli.Utils.Constants.MSBUILD_EXE_PATH, Path.Combine(testContext.ToolsetUnderTest.SdkFolderUnderTest, "MSBuild.dll")); Environment.SetEnvironmentVariable( "MSBuildSDKsPath", Path.Combine(testContext.ToolsetUnderTest.SdksPath)); #if NETCOREAPP DotNet.Cli.Utils.MSBuildForwardingAppWithoutLogging.MSBuildExtensionsPathTestHook = testContext.ToolsetUnderTest.SdkFolderUnderTest; #endif }
public static void Initialize(TestCommandLine commandLine) { Environment.SetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP", "0"); TestContext testContext = new TestContext(); bool runAsTool = false; if (Directory.Exists(Path.Combine(AppContext.BaseDirectory, "Assets"))) { runAsTool = true; testContext.TestAssetsDirectory = Path.Combine(AppContext.BaseDirectory, "Assets", "TestProjects"); } else if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DOTNET_SDK_TEST_AS_TOOL"))) { // Pretend to run as a tool, but use the test assets found in the repo // This allows testing most of the "tests as global tool" behavior by setting an environment // variable instead of packing the test, and installing it as a global tool. runAsTool = true; testContext.TestAssetsDirectory = FindFolderInTree(Path.Combine("src", "Assets", "TestProjects"), AppContext.BaseDirectory); } string repoRoot = null; string repoConfiguration = "Debug"; if (commandLine.SDKRepoPath != null) { repoRoot = commandLine.SDKRepoPath; } else if (!commandLine.NoRepoInference && !runAsTool) { repoRoot = GetRepoRoot(); if (repoRoot != null) { // assumes tests are always executed from the "artifacts/bin/Tests/$MSBuildProjectFile/$Configuration" directory repoConfiguration = new DirectoryInfo(AppContext.BaseDirectory).Name; } } if (runAsTool) { testContext.TestExecutionDirectory = Path.Combine(Path.GetTempPath(), "dotnetSdkTests"); } else { // This is dependent on the current artifacts layout: // * $(RepoRoot)/artifacts/tmp/$Configuration) // * $(RepoRoot)/artifacts/bin/Tests/$(MSBuildProjectName)/$(Configuration) testContext.TestExecutionDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "tmp", repoConfiguration)); testContext.TestAssetsDirectory = FindFolderInTree(Path.Combine("src", "Assets", "TestProjects"), AppContext.BaseDirectory); } string artifactsDir = Environment.GetEnvironmentVariable("DOTNET_SDK_ARTIFACTS_DIR"); if (string.IsNullOrEmpty(artifactsDir) && !string.IsNullOrEmpty(repoRoot)) { artifactsDir = Path.Combine(repoRoot, "artifacts"); } if (repoRoot != null) { testContext.NuGetFallbackFolder = Path.Combine(artifactsDir, ".nuget", "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(artifactsDir, ".nuget", $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(artifactsDir, ".nuget", "packages"); } else { var nugetFolder = FindFolderInTree(".nuget", AppContext.BaseDirectory, false) ?? Path.Combine(testContext.TestExecutionDirectory, ".nuget"); testContext.NuGetFallbackFolder = Path.Combine(nugetFolder, "NuGetFallbackFolder"); testContext.NuGetExePath = Path.Combine(nugetFolder, $"nuget{Constants.ExeSuffix}"); testContext.NuGetCachePath = Path.Combine(nugetFolder, "packages"); } if (commandLine.SdkVersion != null) { testContext.SdkVersion = commandLine.SdkVersion; } testContext.ToolsetUnderTest = ToolsetInfo.Create(repoRoot, artifactsDir, repoConfiguration, commandLine); TestContext.Current = testContext; }
public static ToolsetInfo Create(string repoRoot, string repoArtifactsDir, string configuration, TestCommandLine commandLine) { repoRoot = commandLine.SDKRepoPath ?? repoRoot; configuration = commandLine.SDKRepoConfiguration ?? configuration; string dotnetInstallDirFromEnvironment = Environment.GetEnvironmentVariable("DOTNET_INSTALL_DIR"); string dotnetRoot; if (!string.IsNullOrEmpty(commandLine.DotnetHostPath)) { dotnetRoot = Path.GetDirectoryName(commandLine.DotnetHostPath); } else if (repoRoot != null) { dotnetRoot = Path.Combine(repoArtifactsDir, "bin", "redist", configuration, "dotnet"); } else if (!string.IsNullOrEmpty(dotnetInstallDirFromEnvironment)) { dotnetRoot = dotnetInstallDirFromEnvironment; } else { dotnetRoot = Path.GetDirectoryName(ResolveCommand("dotnet")); } var ret = new ToolsetInfo(dotnetRoot); // if (!string.IsNullOrWhiteSpace(commandLine.MSBuildSDKsPath)) // { // ret.SdksPath = commandLine.MSBuildSDKsPath; // } // else if (repoRoot != null) // { // ret.SdksPath = Path.Combine(repoArtifactsDir, "bin", configuration, "Sdks"); // } if (!string.IsNullOrEmpty(commandLine.FullFrameworkMSBuildPath)) { ret.FullFrameworkMSBuildPath = commandLine.FullFrameworkMSBuildPath; } else if (commandLine.UseFullFrameworkMSBuild) { ret.FullFrameworkMSBuildPath = ResolveCommand("MSBuild"); } if (repoRoot != null && ret.ShouldUseFullFrameworkMSBuild) { // Find path to Microsoft.NET.Build.Extensions for full framework string sdksPath = Path.Combine(repoArtifactsDir, "bin", configuration, "Sdks"); var buildExtensionsSdkPath = Path.Combine(sdksPath, "Microsoft.NET.Build.Extensions"); ret.MicrosoftNETBuildExtensionsPathOverride = Path.Combine(buildExtensionsSdkPath, "msbuildExtensions", "Microsoft", "Microsoft.NET.Build.Extensions"); } if (repoRoot != null) { ret.CliHomePath = Path.Combine(repoArtifactsDir, "tmp", configuration); } return(ret); }