public void It_sets_UnauthorizedAccess_to_true_when_an_UnauthorizedAccessException_happens() { var fileMock = new FileMock(); var directoryMock = new DirectoryMock(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileMock, directoryMock); nugetCacheSentinel.UnauthorizedAccess.Should().BeTrue(); }
public void It_sets_UnauthorizedAccess_to_false_when_no_UnauthorizedAccessException_happens() { var fileSystemMock = _fileSystemMockBuilder.Build(); var fileMock = new FileMock(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileMock, fileSystemMock.Directory); nugetCacheSentinel.UnauthorizedAccess.Should().BeFalse(); }
public void As_soon_as_it_gets_created_it_tries_to_get_handle_of_the_InProgress_sentinel() { var fileSystemMock = _fileSystemMockBuilder.Build(); var fileMock = new FileMock(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileMock, fileSystemMock.Directory); fileMock.OpenFileWithRightParamsCalled.Should().BeTrue(); }
public void It_returns_false_if_the_sentinel_does_not_exist() { var fileSystemMock = _fileSystemMockBuilder.Build(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileSystemMock.File, fileSystemMock.Directory); nugetCacheSentinel.Exists().Should().BeFalse(); }
public void It_returns_true_if_the_sentinel_exists() { _fileSystemMockBuilder.AddFiles(NUGET_CACHE_PATH, NuGetCacheSentinel.SENTINEL); var fileSystemMock = _fileSystemMockBuilder.Build(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileSystemMock.File); nugetCacheSentinel.Exists().Should().BeTrue(); }
public void It_returns_false_to_the_in_progress_sentinel_already_exists_when_it_succeeds_in_getting_a_handle_to_it() { var fileSystemMock = _fileSystemMockBuilder.Build(); var fileMock = new FileMock(); fileMock.InProgressSentinel = new MemoryStream(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileMock, fileSystemMock.Directory); nugetCacheSentinel.InProgressSentinelAlreadyExists().Should().BeFalse(); }
public void It_returns_false_to_the_in_progress_sentinel_already_exists_when_it_fails_to_get_a_handle_to_it_but_it_failed_because_it_was_unauthorized() { var fileMock = new FileMock(); var directoryMock = new DirectoryMock(); fileMock.InProgressSentinel = null; var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileMock, directoryMock); nugetCacheSentinel.InProgressSentinelAlreadyExists().Should().BeFalse(); }
public void It_returns_true_to_the_in_progress_sentinel_already_exists_when_it_fails_to_get_a_handle_to_it() { var fileSystemMock = _fileSystemMockBuilder.Build(); var fileMock = new FileMock(); fileMock.InProgressSentinel = null; var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileMock, fileSystemMock.Directory); nugetCacheSentinel.InProgressSentinelAlreadyExists().Should().BeTrue(); }
public void It_creates_the_sentinel_in_the_nuget_cache_path_if_it_does_not_exist_already() { var fileSystemMock = _fileSystemMockBuilder.Build(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileSystemMock.File); nugetCacheSentinel.Exists().Should().BeFalse(); nugetCacheSentinel.CreateIfNotExists(); nugetCacheSentinel.Exists().Should().BeTrue(); }
public void It_disposes_of_the_handle_to_the_InProgressSentinel_when_NuGetCacheSentinel_is_disposed() { var mockStream = new MockStream(); var fileMock = new FileMock(); fileMock.InProgressSentinel = mockStream; using (var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileMock)) {} mockStream.IsDisposed.Should().BeTrue(); }
public void It_does_not_create_the_sentinel_again_if_it_already_exists_in_the_nuget_cache_path() { const string contentToValidateSentinalWasNotReplaced = "some string"; var sentinel = Path.Combine(NUGET_CACHE_PATH, NuGetCacheSentinel.SENTINEL); _fileSystemMockBuilder.AddFile(sentinel, contentToValidateSentinalWasNotReplaced); var fileSystemMock = _fileSystemMockBuilder.Build(); var nugetCacheSentinel = new NuGetCacheSentinel(NUGET_CACHE_PATH, fileSystemMock.File); nugetCacheSentinel.Exists().Should().BeTrue(); nugetCacheSentinel.CreateIfNotExists(); fileSystemMock.File.ReadAllText(sentinel).Should().Be(contentToValidateSentinalWasNotReplaced); }
internal static int ProcessArgs(string[] args, ITelemetry telemetryClient = null) { // CommandLineApplication is a bit restrictive, so we parse things ourselves here. Individual apps should use CLA. var success = true; var command = string.Empty; var lastArg = 0; var cliFallbackFolderPathCalculator = new CliFallbackFolderPathCalculator(); using (INuGetCacheSentinel nugetCacheSentinel = new NuGetCacheSentinel(cliFallbackFolderPathCalculator)) using (IFirstTimeUseNoticeSentinel disposableFirstTimeUseNoticeSentinel = new FirstTimeUseNoticeSentinel(cliFallbackFolderPathCalculator)) { IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel = disposableFirstTimeUseNoticeSentinel; for (; lastArg < args.Length; lastArg++) { if (IsArg(args[lastArg], "d", "diagnostics")) { Environment.SetEnvironmentVariable(CommandContext.Variables.Verbose, bool.TrueString); CommandContext.SetVerbose(true); } else if (IsArg(args[lastArg], "version")) { PrintVersion(); return(0); } else if (IsArg(args[lastArg], "info")) { PrintInfo(); return(0); } else if (IsArg(args[lastArg], "h", "help") || args[lastArg] == "-?" || args[lastArg] == "/?") { HelpCommand.PrintHelp(); return(0); } else if (args[lastArg].StartsWith("-")) { Reporter.Error.WriteLine($"Unknown option: {args[lastArg]}"); success = false; } else { // It's the command, and we're done! command = args[lastArg]; if (IsDotnetBeingInvokedFromNativeInstaller(command)) { firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel(); } ConfigureDotNetForFirstTimeUse( nugetCacheSentinel, firstTimeUseNoticeSentinel, cliFallbackFolderPathCalculator); break; } } if (!success) { HelpCommand.PrintHelp(); return(1); } if (telemetryClient == null) { telemetryClient = new Telemetry.Telemetry(firstTimeUseNoticeSentinel); } TelemetryEventEntry.Subscribe(telemetryClient.TrackEvent); TelemetryEventEntry.TelemetryFilter = new TelemetryFilter(); } IEnumerable <string> appArgs = (lastArg + 1) >= args.Length ? Enumerable.Empty <string>() : args.Skip(lastArg + 1).ToArray(); if (CommandContext.IsVerbose()) { Console.WriteLine($"Telemetry is: {(telemetryClient.Enabled ? "Enabled" : "Disabled")}"); } if (string.IsNullOrEmpty(command)) { command = "help"; } TelemetryEventEntry.TrackEvent(command, null, null); int exitCode; if (BuiltInCommandsCatalog.Commands.TryGetValue(command, out var builtIn)) { TelemetryEventEntry.SendFiltered(Parser.Instance.ParseFrom($"dotnet {command}", appArgs.ToArray())); exitCode = builtIn.Command(appArgs.ToArray()); } else { CommandResult result = Command.Create( "dotnet-" + command, appArgs, FrameworkConstants.CommonFrameworks.NetStandardApp15) .Execute(); exitCode = result.ExitCode; } return(exitCode); }
internal static int ProcessArgs(string[] args, ITelemetry telemetryClient = null) { // CommandLineApplication is a bit restrictive, so we parse things ourselves here. Individual apps should use CLA. bool?verbose = null; var success = true; var command = string.Empty; var lastArg = 0; using (INuGetCacheSentinel nugetCacheSentinel = new NuGetCacheSentinel()) { for (; lastArg < args.Length; lastArg++) { if (IsArg(args[lastArg], "v", "verbose")) { verbose = true; } else if (IsArg(args[lastArg], "version")) { PrintVersion(); return(0); } else if (IsArg(args[lastArg], "info")) { PrintInfo(); return(0); } else if (IsArg(args[lastArg], "h", "help")) { HelpCommand.PrintHelp(); return(0); } else if (args[lastArg].StartsWith("-")) { Reporter.Error.WriteLine($"Unknown option: {args[lastArg]}"); success = false; } else { ConfigureDotNetForFirstTimeUse(nugetCacheSentinel); // It's the command, and we're done! command = args[lastArg]; break; } } if (!success) { HelpCommand.PrintHelp(); return(1); } if (telemetryClient == null) { telemetryClient = new Telemetry(nugetCacheSentinel); } } var appArgs = (lastArg + 1) >= args.Length ? Enumerable.Empty <string>() : args.Skip(lastArg + 1).ToArray(); if (verbose.HasValue) { Environment.SetEnvironmentVariable(CommandContext.Variables.Verbose, verbose.ToString()); Console.WriteLine($"Telemetry is: {(telemetryClient.Enabled ? "Enabled" : "Disabled")}"); } if (string.IsNullOrEmpty(command)) { command = "help"; } telemetryClient.TrackEvent(command, null, null); int exitCode; Func <string[], int> builtIn; if (s_builtIns.TryGetValue(command, out builtIn)) { exitCode = builtIn(appArgs.ToArray()); } else { CommandResult result = Command.Create("dotnet-" + command, appArgs, FrameworkConstants.CommonFrameworks.NetStandardApp15) .Execute(); exitCode = result.ExitCode; } return(exitCode); }
internal static int ProcessArgs(string[] args, ITelemetry telemetryClient = null) { // CommandLineApplication is a bit restrictive, so we parse things ourselves here. Individual apps should use CLA. var success = true; var command = string.Empty; var lastArg = 0; TopLevelCommandParserResult topLevelCommandParserResult = TopLevelCommandParserResult.Empty; using (INuGetCacheSentinel nugetCacheSentinel = new NuGetCacheSentinel()) using (IFirstTimeUseNoticeSentinel disposableFirstTimeUseNoticeSentinel = new FirstTimeUseNoticeSentinel()) { IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel = disposableFirstTimeUseNoticeSentinel; IAspNetCertificateSentinel aspNetCertificateSentinel = new AspNetCertificateSentinel(); IFileSentinel toolPathSentinel = new FileSentinel( new FilePath( Path.Combine( CliFolderPathCalculator.DotnetUserProfileFolderPath, ToolPathSentinelFileName))); for (; lastArg < args.Length; lastArg++) { if (IsArg(args[lastArg], "d", "diagnostics")) { Environment.SetEnvironmentVariable(CommandContext.Variables.Verbose, bool.TrueString); CommandContext.SetVerbose(true); } else if (IsArg(args[lastArg], "version")) { PrintVersion(); return(0); } else if (IsArg(args[lastArg], "info")) { PrintInfo(); return(0); } else if (IsArg(args[lastArg], "h", "help") || args[lastArg] == "-?" || args[lastArg] == "/?") { HelpCommand.PrintHelp(); return(0); } else if (args[lastArg].StartsWith("-", StringComparison.OrdinalIgnoreCase)) { Reporter.Error.WriteLine($"Unknown option: {args[lastArg]}"); success = false; } else { // It's the command, and we're done! command = args[lastArg]; if (string.IsNullOrEmpty(command)) { command = "help"; } var environmentProvider = new EnvironmentProvider(); bool generateAspNetCertificate = environmentProvider.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true); bool printTelemetryMessage = environmentProvider.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true); bool skipFirstRunExperience = environmentProvider.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false); ReportDotnetHomeUsage(environmentProvider); topLevelCommandParserResult = new TopLevelCommandParserResult(command); var hasSuperUserAccess = false; if (IsDotnetBeingInvokedFromNativeInstaller(topLevelCommandParserResult)) { aspNetCertificateSentinel = new NoOpAspNetCertificateSentinel(); firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel(); toolPathSentinel = new NoOpFileSentinel(exists: false); hasSuperUserAccess = true; // When running through a native installer, we want the cache expansion to happen, so // we need to override this. skipFirstRunExperience = false; } var dotnetFirstRunConfiguration = new DotnetFirstRunConfiguration( generateAspNetCertificate, printTelemetryMessage, skipFirstRunExperience); ConfigureDotNetForFirstTimeUse( nugetCacheSentinel, firstTimeUseNoticeSentinel, aspNetCertificateSentinel, toolPathSentinel, hasSuperUserAccess, dotnetFirstRunConfiguration, environmentProvider); break; } } if (!success) { HelpCommand.PrintHelp(); return(1); } if (telemetryClient == null) { telemetryClient = new Telemetry.Telemetry(firstTimeUseNoticeSentinel); } TelemetryEventEntry.Subscribe(telemetryClient.TrackEvent); TelemetryEventEntry.TelemetryFilter = new TelemetryFilter(Sha256Hasher.HashWithNormalizedCasing); } IEnumerable <string> appArgs = (lastArg + 1) >= args.Length ? Enumerable.Empty <string>() : args.Skip(lastArg + 1).ToArray(); if (CommandContext.IsVerbose()) { Console.WriteLine($"Telemetry is: {(telemetryClient.Enabled ? "Enabled" : "Disabled")}"); } TelemetryEventEntry.SendFiltered(topLevelCommandParserResult); int exitCode; if (BuiltInCommandsCatalog.Commands.TryGetValue(topLevelCommandParserResult.Command, out var builtIn)) { var parseResult = Parser.Instance.ParseFrom($"dotnet {topLevelCommandParserResult.Command}", appArgs.ToArray()); if (!parseResult.Errors.Any()) { TelemetryEventEntry.SendFiltered(parseResult); } exitCode = builtIn.Command(appArgs.ToArray()); } else { CommandResult result = Command.Create( "dotnet-" + topLevelCommandParserResult.Command, appArgs, FrameworkConstants.CommonFrameworks.NetStandardApp15) .Execute(); exitCode = result.ExitCode; } return(exitCode); }