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(); }
/// <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); }
void AndGivenNoPackagesHaveBeenPublished() { _packages = Enumerable.Empty <IPackage>(); _builder = new AppUpdaterBuilder(TestConstants.AppPackageId) .SetupWithTestValues(_installedVersion) .SetPublishedPackages(_packages); }
/// <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); }
/// <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); }
/// <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 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 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 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)); }
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)); } }
public static AppUpdaterBuilder SetPublishedPackages(this AppUpdaterBuilder builder, IEnumerable <IPackage> publishedPackages) { return(builder.CreatePackageRepositoriesWith(PackageRepositoryFactories.Create(publishedPackages))); }