public virtual void InvalidUpgradeRing() { this.SetUpgradeRing("Invalid"); string expectedError = "Invalid upgrade ring `Invalid` specified in gvfs config."; string errorString; GitHubUpgrader.Create(this.LocalConfig, this.Tracer, out errorString).ShouldBeNull(); errorString.ShouldContain(expectedError); }
public virtual void InvalidUpgradeRing() { this.SetUpgradeRing("Invalid"); string expectedError = "Invalid upgrade ring `Invalid` specified in scalar config."; string errorString; GitHubUpgrader.Create( this.Tracer, this.FileSystem, dryRun: false, noVerify: false, localConfig: this.LocalConfig, error: out errorString).ShouldBeNull(); errorString.ShouldContain(expectedError); }
private bool TryQueryForNewerVersion(ITracer tracer, GitHubUpgrader productUpgrader, out Version newVersion, out string errorMessage) { errorMessage = null; tracer.RelatedInfo($"Querying server for latest version in ring {productUpgrader.Config.UpgradeRing}..."); if (!productUpgrader.TryQueryNewestVersion(out newVersion, out string detailedError)) { errorMessage = "Could not fetch new version info. " + detailedError; return(false); } string logMessage = newVersion == null ? "No newer versions available." : $"Newer version available: {newVersion}."; tracer.RelatedInfo(logMessage); return(true); }
private void TimerCallback(object unusedState) { string errorMessage = null; using (ITracer activity = this.tracer.StartActivity("Checking for product upgrades.", EventLevel.Informational)) { try { ProductUpgraderInfo info = new ProductUpgraderInfo( this.tracer, this.fileSystem); ProductUpgrader.TryCreateUpgrader( this.tracer, this.fileSystem, new LocalScalarConfig(), credentialStore: null, dryRun: false, noVerify: false, newUpgrader: out ProductUpgrader productUpgrader, error: out errorMessage); if (productUpgrader == null) { string message = string.Format( "{0}.{1}: failed to create upgrader: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } if (!productUpgrader.SupportsAnonymousVersionQuery) { // If this is a NuGetUpgrader that does not support anonymous version query, // fall back to using the GitHubUpgrader, to preserve existing behavior. // Once we have completely transitioned to using the anonymous endpoint, // we can remove this code. if (productUpgrader is NuGetUpgrader) { productUpgrader = GitHubUpgrader.Create( this.tracer, this.fileSystem, new LocalScalarConfig(), dryRun: false, noVerify: false, error: out errorMessage); if (productUpgrader == null) { string gitHubUpgraderFailedMessage = string.Format( "{0}.{1}: GitHubUpgrader.Create failed to create upgrader: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: gitHubUpgraderFailedMessage, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } } else { errorMessage = string.Format( "{0}.{1}: Configured Product Upgrader does not support anonymous version queries.", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: errorMessage, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } } InstallerPreRunChecker prerunChecker = new InstallerPreRunChecker(this.tracer, string.Empty); if (!prerunChecker.TryRunPreUpgradeChecks(out errorMessage)) { string message = string.Format( "{0}.{1}: PreUpgradeChecks failed with: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } if (!productUpgrader.UpgradeAllowed(out errorMessage)) { errorMessage = errorMessage ?? $"{nameof(ProductUpgradeTimer)}.{nameof(this.TimerCallback)}: Upgrade is not allowed, but no reason provided."; activity.RelatedWarning( metadata: new EventMetadata(), message: errorMessage, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } if (!this.TryQueryForNewerVersion( activity, productUpgrader, out Version newerVersion, out errorMessage)) { string message = string.Format( "{0}.{1}: TryQueryForNewerVersion failed with: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } info.RecordHighestAvailableVersion(highestAvailableVersion: newerVersion); this.DisplayUpgradeAvailableToast(newerVersion.ToString()); } catch (Exception ex) when( ex is IOException || ex is UnauthorizedAccessException || ex is NotSupportedException) { this.tracer.RelatedWarning( CreateEventMetadata(ex), "Exception encountered recording highest available version"); } catch (Exception ex) { this.tracer.RelatedError( CreateEventMetadata(ex), "Unhanlded exception encountered recording highest available version"); Environment.Exit((int)ReturnCode.GenericError); } } }
private void TimerCallback(object unusedState) { string errorMessage = null; using (ITracer activity = this.tracer.StartActivity("Checking for product upgrades.", EventLevel.Informational)) { try { ProductUpgraderInfo info = new ProductUpgraderInfo( this.tracer, this.fileSystem); // The upgrade check always goes against GitHub GitHubUpgrader productUpgrader = GitHubUpgrader.Create( this.tracer, this.fileSystem, dryRun: false, noVerify: false, error: out errorMessage); if (productUpgrader == null) { string message = string.Format( "{0}.{1}: GitHubUpgrader.Create failed to create upgrader: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } InstallerPreRunChecker prerunChecker = new InstallerPreRunChecker(this.tracer, string.Empty); if (!prerunChecker.TryRunPreUpgradeChecks(out errorMessage)) { string message = string.Format( "{0}.{1}: PreUpgradeChecks failed with: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } if (!productUpgrader.UpgradeAllowed(out errorMessage)) { errorMessage = errorMessage ?? $"{nameof(ProductUpgradeTimer)}.{nameof(this.TimerCallback)}: Upgrade is not allowed, but no reason provided."; activity.RelatedWarning( metadata: new EventMetadata(), message: errorMessage, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } if (!this.TryQueryForNewerVersion( activity, productUpgrader, out Version newerVersion, out errorMessage)) { string message = string.Format( "{0}.{1}: TryQueryForNewerVersion failed with: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } info.RecordHighestAvailableVersion(highestAvailableVersion: newerVersion); } catch (Exception ex) when( ex is IOException || ex is UnauthorizedAccessException || ex is NotSupportedException) { this.tracer.RelatedWarning( CreateEventMetadata(ex), "Exception encountered recording highest available version"); } catch (Exception ex) { this.tracer.RelatedError( CreateEventMetadata(ex), "Unhanlded exception encountered recording highest available version"); Environment.Exit((int)ReturnCode.GenericError); } } }