Example #1
0
        private void InitialiseUpdateChecker()
        {
            var updateCfg = ConfigManager.Config.Application.UpdateChecking;

            if (!updateCfg.CheckForUpdates)
            {
                return;
            }

            IUpdateSource updateSource;

            switch (updateCfg.UpdateSource)
            {
            case UpdateSource.GitHub:
                updateSource = new GitHubUpdateSource();
                break;

            case UpdateSource.Chocolatey:
                updateSource = new ChocolateyUpdateSource();
                break;

            case UpdateSource.Dummy:
                updateSource = new DummyUpdateSource
                {
                    Versions = new List <ProgramVersion>
                    {
                        new ProgramVersion
                        {
                            VersionNumber = new SemanticVersion(10, 0, 0),
                            Important     = true,
                        },
                        new ProgramVersion
                        {
                            VersionNumber = SemanticVersion.Parse("v11.0-pre1", ParseMode.Lenient),
                            IsPrerelease  = true,
                        },
                    }
                };
                break;

            default:
                throw new ArgumentOutOfRangeException(null, "Invalid update provider.");
            }
            var versionString = Version.Split('-').First();

            updateChecker = new UpdateChecker(updateSource,
                                              SemanticVersion.Parse(versionString, ParseMode.Lenient),
                                              updateCfg.AllowPrereleases,
                                              updateCfg.CheckIntervalTimeSpan,
                                              updateCfg.InitialDelayTimeSpan);

            updateChecker.UpdateAvailable += (sender, args) =>
            {
                notificationService.HandleUpdateAvailable(args);
            };
            updateChecker.Start();
        }
Example #2
0
        public void UpdateChecker_RaisesAfterSpecifiedTime()
        {
            const int checkBeforeMs = 800;
            const int raiseAfterMs  = 1000;
            const int checkAgainMs  = 400;
            const int checkAttempts = 10;

            var source = new DummyUpdateSource
            {
                Versions = new List <ProgramVersion>
                {
                    new ProgramVersion
                    {
                        VersionNumber = new SemanticVersion(1, 0, 1)
                    }
                }
            };

            var checker = new UpdateChecker(source, new SemanticVersion(1, 0, 0), false, TimeSpan.FromMilliseconds(raiseAfterMs));

            var raised = false;

            checker.UpdateAvailable += (sender, args) => { raised = true; };
            checker.Start();

            // Validate that the event is not raised before the time specified in raiseAfterMs has expired.
            Thread.Sleep(checkBeforeMs);
            Assert.False(raised, "Notification was raised before update interval expired");

            // Validate that the event has been raised now.
            Thread.Sleep(checkAgainMs);
            for (int i = 0; i < checkAttempts && !raised; i++)
            {
                Thread.Sleep(checkAgainMs);
            }

            Assert.True(raised, "Notification was not raised");
        }
Example #3
0
        /// <summary>
        /// Checks whether supplying a given update version against a given base version raises an update-available event.
        /// </summary>
        private bool RaisesEvent(SemanticVersion currentVersion, SemanticVersion updateVersion)
        {
            var source = new DummyUpdateSource
            {
                Versions = new List <ProgramVersion>
                {
                    new ProgramVersion
                    {
                        VersionNumber = updateVersion
                    }
                }
            };

            var checker = new UpdateChecker(source, currentVersion, false, TimeSpan.FromMilliseconds(1));

            var raised = false;

            checker.UpdateAvailable += (sender, args) =>
            {
                raised = true;
                checker.Dispose();
            };
            checker.Start();

            // Wait a while to see if the event is raised.
            for (var i = 0; i < 20; i++)
            {
                Thread.Sleep(50);
                if (raised)
                {
                    return(true);
                }
            }

            return(raised);
        }
Example #4
0
        public void UpdateChecker_UpdatesPreReleases()
        {
            var current = SemanticVersion.Parse("2.0.0-pre2", ParseMode.Lenient);
            var sourceWithNewPrerelease = new DummyUpdateSource
            {
                Versions = new List <ProgramVersion>
                {
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0-pre2"),
                        IsPrerelease  = true
                    },
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0-pre3"),
                        IsPrerelease  = true
                    },
                    // Versions may be specified in any order
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0-pre1"),
                        IsPrerelease  = true
                    }
                }
            };

            using (var checker = new UpdateChecker(sourceWithNewPrerelease, current, true, TimeSpan.FromMilliseconds(1)))
            {
                AssertUpdateCheck(checker, (sender, args) =>
                {
                    Assert.Equal(args.Version.VersionNumber, SemanticVersion.Parse("2.0.0-pre3", ParseMode.Lenient));
                });
            }

            // Ensure we get back the final release, even if it's specified as a pre-release.
            var sourceWithFinalRelease = new DummyUpdateSource
            {
                Versions = new List <ProgramVersion>
                {
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0-pre3"),
                        IsPrerelease  = true
                    },
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0-pre2"),
                        IsPrerelease  = true
                    },
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0-pre1"),
                        IsPrerelease  = true
                    },
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0-pre4"),
                        IsPrerelease  = true
                    },
                    new ProgramVersion
                    {
                        VersionNumber = SemanticVersion.Parse("2.0.0"),
                        IsPrerelease  = true
                    }
                }
            };

            using (var checker = new UpdateChecker(sourceWithFinalRelease, current, true, TimeSpan.FromMilliseconds(1)))
            {
                AssertUpdateCheck(checker, (sender, args) =>
                {
                    Assert.Equal(args.Version.VersionNumber, SemanticVersion.Parse("2.0.0", ParseMode.Lenient));
                });
            }
        }
Example #5
0
        public void UpdateChecker_ProvidesCorrectReleaseType()
        {
            var sourceWithNewerPrerelease = new DummyUpdateSource
            {
                Versions = new List <ProgramVersion>
                {
                    new ProgramVersion
                    {
                        VersionNumber = new SemanticVersion(3, 0, 0),
                        IsPrerelease  = true
                    },
                    new ProgramVersion
                    {
                        VersionNumber = new SemanticVersion(2, 0, 0),
                    }
                }
            };
            var sourceWithOlderPrerelease = new DummyUpdateSource
            {
                Versions = new List <ProgramVersion>
                {
                    new ProgramVersion
                    {
                        VersionNumber = new SemanticVersion(3, 0, 0),
                    },
                    new ProgramVersion
                    {
                        VersionNumber = new SemanticVersion(2, 0, 0),
                        IsPrerelease  = true
                    },
                    new ProgramVersion
                    {
                        VersionNumber = new SemanticVersion(1, 0, 0)
                    }
                }
            };

            // An update checker that may not return prereleases should return the latest non-prerelease version.
            using (var checker = new UpdateChecker(sourceWithNewerPrerelease, new SemanticVersion(1, 0, 0), false, TimeSpan.FromMilliseconds(1)))
            {
                AssertUpdateCheck(checker, (sender, args) =>
                {
                    Assert.False(args.Version.IsPrerelease);
                    Assert.Equal(args.Version.VersionNumber, new SemanticVersion(2, 0, 0));
                });
            }

            // An update checker that may return prereleases should return a prerelease if it's the latest version.
            using (var checker = new UpdateChecker(sourceWithNewerPrerelease, new SemanticVersion(1, 0, 0), true, TimeSpan.FromMilliseconds(1)))
            {
                AssertUpdateCheck(checker, (sender, args) =>
                {
                    Assert.True(args.Version.IsPrerelease);
                    Assert.Equal(args.Version.VersionNumber, new SemanticVersion(3, 0, 0));
                });
            }


            // An update checker that may return prereleases should not return a prerelease if there's a newer general release.
            using (var checker = new UpdateChecker(sourceWithOlderPrerelease, new SemanticVersion(1, 0, 0), true, TimeSpan.FromMilliseconds(1)))
            {
                AssertUpdateCheck(checker, (sender, args) =>
                {
                    Assert.False(args.Version.IsPrerelease);
                    Assert.Equal(args.Version.VersionNumber, new SemanticVersion(3, 0, 0));
                });
            }
        }