Beispiel #1
0
        static void Main(string[] args)
        {
            var appUpdater = new AppUpdaterBuilder("NuSelfUpdate.Sample")
                             .SourceUpdatesFrom(FullPath("packages"))
                             .Build();

            Observable.Interval(TimeSpan.FromSeconds(5), Scheduler.TaskPool)
            .Select(_ => appUpdater.CheckForUpdate())
            .Do(Console.WriteLine)
            .Where(check => check.UpdateAvailable)
            .Take(1)     // We only want to prepare the update once
            .Select(uc => appUpdater.PrepareUpdate(uc.UpdatePackage))
            .Do(Console.WriteLine)
            .Select(appUpdater.ApplyPreparedUpdate)
            .Do(Console.WriteLine)
            .Select(appUpdater.LaunchInstalledUpdate)
            .Subscribe(Quit);

            Console.WriteLine("NuSelfUpdate.Sample - version: " + appUpdater.CurrentVersion);
            Console.WriteLine("Sample, will check for updates every 5 seconds.");
            Console.WriteLine("Drop a new package version into the packages\\NuSelfUpdate.Sample.<version> folder to update.");

            PrintCommandLineArgs();

            Console.WriteLine();
            Console.WriteLine("Press enter to exit");

            Console.ReadLine();
        }
Beispiel #2
0
        /// <summary>
        /// Runs the command
        /// </summary>
        /// <param name="suite">The current suite model the command is applied to</param>
        /// <param name="parameters">Parameters given to the command (in unprocessed form)</param>
        /// <returns>Returns <c>true</c> if the command succeeded</returns>
        public bool Run(Suite suite, string[] parameters)
        {
            var fileSystem = new ExtendedPhysicalFileSystem(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));
            var updater    = new AppUpdaterBuilder(NUGET_PACKAGE_ID)
                             .FileSystemAccessedThrough(fileSystem)
                             .Build();

            output.Message("Checking for updates (current version: {0})...", updater.CurrentVersion);
            var check = updater.CheckForUpdate();

            if (check.UpdateAvailable)
            {
                output.Message("..found update: {0}", check.UpdatePackage.Version);
                output.Message("..preparing update..");
                var preparedUpdate = PrepareUpdate(updater, fileSystem, check.UpdatePackage);

                output.Message("..applying update..");
                updater.ApplyPreparedUpdate(preparedUpdate);

                output.Message("Update completed.");
                output.Warning("You should rebuild your suites with the updated bari before using them!");
            }
            else
            {
                output.Message("No updates available.");
            }
            return(true);
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            var appUpdater = new AppUpdaterBuilder("NuSelfUpdate.Sample")
                .SourceUpdatesFrom(FullPath("packages"))
                .Build();

            Observable.Interval(TimeSpan.FromSeconds(5), Scheduler.TaskPool)
                .Select(_ => appUpdater.CheckForUpdate())
                .Do(Console.WriteLine)
                .Where(check => check.UpdateAvailable)
                .Take(1) // We only want to prepare the update once
                .Select(uc => appUpdater.PrepareUpdate(uc.UpdatePackage))
                .Do(Console.WriteLine)
                .Select(appUpdater.ApplyPreparedUpdate)
                .Do(Console.WriteLine)
                .Select(appUpdater.LaunchInstalledUpdate)
                .Subscribe(Quit);

            Console.WriteLine("NuSelfUpdate.Sample - version: " + appUpdater.CurrentVersion);
            Console.WriteLine("Sample, will check for updates every 5 seconds.");
            Console.WriteLine("Drop a new package version into the packages\\NuSelfUpdate.Sample.<version> folder to update.");

            PrintCommandLineArgs();

            Console.WriteLine();
            Console.WriteLine("Press enter to exit");

            Console.ReadLine();
        }
Beispiel #4
0
        void AndGivenNoPackagesHaveBeenPublished()
        {
            _packages = Enumerable.Empty <IPackage>();

            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                       .SetupWithTestValues(_installedVersion)
                       .SetPublishedPackages(_packages);
        }
Beispiel #5
0
        /// <summary>
        /// NOTE: This should only be called once per test as each time you call it you will get a new instance.
        /// </summary>
        public static MockFileSystem GetMockFileSystem(this AppUpdaterBuilder builder)
        {
            var fileSystem = new MockFileSystem(TestConstants.AppDirectory);

            builder.FileSystemAccessedThrough(fileSystem);

            return(fileSystem);
        }
        void AndGivenPackagesWithOtherPackageIdsOfANewerVersionHaveBeenPublished()
        {
            _packages = _packages.Concat(Packages.FromVersions("Other.Package", new Version(1, 1, 0, 0)));

            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_installedVersion)
                .SetPublishedPackages(_packages);
        }
Beispiel #7
0
        /// <summary>
        /// NOTE: This should only be called once per test as each time you call it you will get a new instance.
        /// </summary>
        public static IProcessWrapper GetSubsituteProcessWrapper(this AppUpdaterBuilder builder)
        {
            var pw = Substitute.For <IProcessWrapper>();

            builder.RelaunchAppWith(pw);

            return(pw);
        }
Beispiel #8
0
        /// <summary>
        /// NOTE: This should only be called once per test as each time you call it you will get a new instance.
        /// </summary>
        public static ICommandLineWrapper GetSubsituteCommandLineWrapper(this AppUpdaterBuilder builder)
        {
            var clw = Substitute.For <ICommandLineWrapper>();

            builder.CommandLineInfoProvidedBy(clw);

            return(clw);
        }
        void AndGivenPackagesWithOtherPackageIdsOfANewerVersionHaveBeenPublished()
        {
            _packages = _packages.Concat(Packages.FromVersions("Other.Package", new Version(1, 1, 0, 0)));

            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                       .SetupWithTestValues(_installedVersion)
                       .SetPublishedPackages(_packages);
        }
        void AndGivenAPackageForANewerVersionHasBeenPublished()
        {
            _newVersion = new SemanticVersion(new Version(1, 1));
            _packages   = Packages.FromVersions(TestConstants.AppPackageId, _installedVersion, _newVersion).ToList();

            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                       .SetupWithTestValues(_installedVersion)
                       .SetPublishedPackages(_packages);
        }
        void AndGivenAnAppUpdater()
        {
            var builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                          .SetupWithTestValues(_installedVersion);

            _fileSystem = builder.GetMockFileSystem();

            _appUpdater = builder.Build();
        }
        void AndGivenAnAppUpdater()
        {
            var builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_installedVersion);

            _fileSystem = builder.GetMockFileSystem();

            _appUpdater = builder.Build();
        }
        void AndGivenAPackageForANewerVersionHasBeenPublished()
        {
            _newVersion = new Version(1, 1);
            _packages = Packages.FromVersions(TestConstants.AppPackageId, _installedVersion, _newVersion).ToList();

            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_installedVersion)
                .SetPublishedPackages(_packages);
        }
        void GivenTheAppWasRunWithAPathThatContainsSpacesAndArgumentsThatDoContainSpaces()
        {
            _installedVersion = new Version(1, 0);
            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_installedVersion);

            _commandLineWrapper = _builder.GetSubsituteCommandLineWrapper();
            _processWrapper = _builder.GetSubsituteProcessWrapper();

            _commandLineWrapper.Full.Returns("\"C:\\Program Files\\myapp.exe\" -v1 -updatemode \"auto update\"");
            _commandLineWrapper.Arguments.Returns(new[] { "C:\\Program Files\\myapp.exe", "-v1", "-updatemode", "auto update" });
        }
        void GivenTheAppWasRunWithArgumentsThatDoNotContainSpaces()
        {
            _installedVersion = new Version(1, 0);
            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_installedVersion);

            _commandLineWrapper = _builder.GetSubsituteCommandLineWrapper();
            _processWrapper = _builder.GetSubsituteProcessWrapper();

            _commandLineWrapper.Full.Returns(@".\myapp.exe -v1 -updatemode autoupdate");
            _commandLineWrapper.Arguments.Returns(new[] { @".\myapp.exe", "-v1", "-updatemode", "autoupdate" });
        }
        void GivenAnInstalledVersion()
        {
            _preUpdateVersion = new Version(1, 0);
            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_preUpdateVersion);

            FileSystem = _builder.GetMockFileSystem();

            _appFile = "app.exe";

            FileSystem.AddFile(Path.Combine(AppDirectory, _appFile), MockFileContent(_appFile, _preUpdateVersion));
        }
        void GivenTheAppWasRunWithNoArguments()
        {
            _installedVersion = new Version(1, 0);
            _builder          = new AppUpdaterBuilder(TestConstants.AppPackageId)
                                .SetupWithTestValues(_installedVersion);

            _commandLineWrapper = _builder.GetSubsituteCommandLineWrapper();
            _processWrapper     = _builder.GetSubsituteProcessWrapper();

            _commandLineWrapper.Full.Returns(@"\.myapp.exe");
            _commandLineWrapper.Arguments.Returns(new[] { @"\.myapp.exe" });
        }
        void GivenAnInstalledVersion()
        {
            _preUpdateVersion = new SemanticVersion(new Version(1, 0));
            _builder          = new AppUpdaterBuilder(TestConstants.AppPackageId)
                                .SetupWithTestValues(_preUpdateVersion);

            FileSystem = _builder.GetMockFileSystem();

            _appFile = "app.exe";

            FileSystem.AddFile(Path.Combine(AppDirectory, _appFile), MockFileContent(_appFile, _preUpdateVersion));
        }
        void GivenTheAppWasRunWithNoArguments()
        {
            _installedVersion = new Version(1, 0);
            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_installedVersion);

            _commandLineWrapper = _builder.GetSubsituteCommandLineWrapper();
            _processWrapper = _builder.GetSubsituteProcessWrapper();

            _commandLineWrapper.Full.Returns(@"\.myapp.exe");
            _commandLineWrapper.Arguments.Returns(new[] { @"\.myapp.exe" });
        }
Beispiel #20
0
        void GivenTheAppWasRunWithArgumentsThatDoNotContainSpaces()
        {
            _installedVersion = new Version(1, 0);
            _builder          = new AppUpdaterBuilder(TestConstants.AppPackageId)
                                .SetupWithTestValues(_installedVersion);

            _commandLineWrapper = _builder.GetSubsituteCommandLineWrapper();
            _processWrapper     = _builder.GetSubsituteProcessWrapper();

            _commandLineWrapper.Full.Returns(@".\myapp.exe -v1 -updatemode autoupdate");
            _commandLineWrapper.Arguments.Returns(new[] { @".\myapp.exe", "-v1", "-updatemode", "autoupdate" });
        }
Beispiel #21
0
        void GivenTheAppWasRunWithAPathThatContainsSpacesAndArgumentsThatDoContainSpaces()
        {
            _installedVersion = new SemanticVersion(new Version(1, 0));
            _builder          = new AppUpdaterBuilder(TestConstants.AppPackageId)
                                .SetupWithTestValues(_installedVersion);

            _commandLineWrapper = _builder.GetSubsituteCommandLineWrapper();
            _processWrapper     = _builder.GetSubsituteProcessWrapper();

            _commandLineWrapper.Full.Returns("\"C:\\Program Files\\myapp.exe\" -v1 -updatemode \"auto update\"");
            _commandLineWrapper.Arguments.Returns(new[] { "C:\\Program Files\\myapp.exe", "-v1", "-updatemode", "auto update" });
        }
        void GivenAnApplicationDirectoryContainingAppFiles()
        {
            _installedVersion = new Version(1, 0);
            _builder = new AppUpdaterBuilder(TestConstants.AppPackageId)
                .SetupWithTestValues(_installedVersion);

            _fileSystem = _builder.GetMockFileSystem();

            _appFiles = new[] { "app.exe", "app.exe.config", "nuget.dll", "data.db", "content\\logo.png" };

            foreach (var file in _appFiles)
                _fileSystem.AddFile(Path.Combine(AppDirectory, file), MockFileContent(file, _installedVersion));
        }
Beispiel #23
0
        public static AppUpdaterBuilder SetupWithTestValues(this AppUpdaterBuilder builder, Version installedVersion)
        {
            var versionProvider = Substitute.For <IAppVersionProvider>();

            versionProvider.CurrentVersion.Returns(installedVersion);

            return(builder
                   .SourceUpdatesFrom("repository")
                   .CreatePackageRepositoriesWith(PackageRepositoryFactories.Create(Enumerable.Empty <IPackage>()))
                   .CurrentVersionProvidedBy(versionProvider)
                   .FileSystemAccessedThrough(new MockFileSystem(TestConstants.AppDirectory))
                   .CommandLineInfoProvidedBy(Substitute.For <ICommandLineWrapper>())
                   .RelaunchAppWith(Substitute.For <IProcessWrapper>()));
        }
        void GivenAnApplicationDirectoryContainingAppFiles()
        {
            _installedVersion = new Version(1, 0);
            _builder          = new AppUpdaterBuilder(TestConstants.AppPackageId)
                                .SetupWithTestValues(_installedVersion);

            _fileSystem = _builder.GetMockFileSystem();

            _appFiles = new[] { "app.exe", "app.exe.config", "nuget.dll", "data.db", "content\\logo.png" };

            foreach (var file in _appFiles)
            {
                _fileSystem.AddFile(Path.Combine(AppDirectory, file), MockFileContent(file, _installedVersion));
            }
        }
Beispiel #25
0
 public static AppUpdaterBuilder SetPublishedPackages(this AppUpdaterBuilder builder, IEnumerable <IPackage> publishedPackages)
 {
     return(builder.CreatePackageRepositoriesWith(PackageRepositoryFactories.Create(publishedPackages)));
 }