public void SelfUpdate() { //arrange var byteArray = Encoding.ASCII.GetBytes("paketExeContent"); var stream = new MemoryStream(byteArray); var tempFileNameNew = BootstrapperHelper.GetTempFile("newBootstrapper"); var tempFileNameOld = BootstrapperHelper.GetTempFile("oldBootstrapper"); mockWebProxy.Setup(x => x.DownloadFile(It.IsAny <string>(), It.IsAny <Stream>(), It.IsAny <int>())) .Callback <string, Stream, int>((url, streamIn, bufferIn) => stream.CopyTo(streamIn)).Verifiable(); var buffer = new byte[byteArray.Length]; mockFileProxy.Setup(x => x.Create(tempFileNameNew)).Returns(new MemoryStream(buffer)); mockFileProxy.Setup(x => x.GetLocalFileVersion(It.IsAny <string>())).Returns("2.52.1"); //act sut.SelfUpdate("2.57.1"); //assert mockWebProxy.Verify(); mockFileProxy.Verify(x => x.FileMove(Assembly.GetAssembly(typeof(GitHubDownloadStrategy)).Location, tempFileNameOld)); mockFileProxy.Verify(x => x.FileMove(tempFileNameNew, Assembly.GetAssembly(typeof(GitHubDownloadStrategy)).Location)); var text = Encoding.ASCII.GetString(buffer); Assert.That(text, Is.EqualTo("paketExeContent")); }
protected override void DownloadVersionCore(string latestVersion, string target, PaketHashFile hashfile) { string url = String.Format(Constants.PaketNupkgDownloadUrlTemplate, latestVersion); ConsoleImpl.WriteInfo("Starting download from {0}", url); var tmpFile = BootstrapperHelper.GetTempFile("paketnupkg"); WebRequestProxy.DownloadFile(url, tmpFile); string packageName = Path.GetFileName(url); var randomFullPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); FileSystemProxy.CreateDirectory(randomFullPath); string packagePath = Path.Combine(randomFullPath, packageName); FileSystemProxy.CopyFile(tmpFile, packagePath, true); FileSystemProxy.DeleteFile(tmpFile); var installAsTool = new InstallKind.InstallAsTool(FileSystemProxy); installAsTool.Run(randomFullPath, target, latestVersion); FileSystemProxy.DeleteDirectory(randomFullPath, true); }
protected override void DownloadVersionCore(string latestVersion, string target, PaketHashFile hashfile) { var url = String.Format(Constants.PaketExeDownloadUrlTemplate, latestVersion); ConsoleImpl.WriteInfo("Starting download from {0}", url); var tmpFile = BootstrapperHelper.GetTempFile("paket"); WebRequestProxy.DownloadFile(url, tmpFile); if (!BootstrapperHelper.ValidateHash(FileSystemProxy, hashfile, latestVersion, tmpFile)) { ConsoleImpl.WriteWarning("Hash of downloaded paket.exe is invalid, retrying once"); WebRequestProxy.DownloadFile(url, tmpFile); if (!BootstrapperHelper.ValidateHash(FileSystemProxy, hashfile, latestVersion, tmpFile)) { ConsoleImpl.WriteWarning("Hash of downloaded paket.exe still invalid (Using the file anyway)"); } else { ConsoleImpl.WriteTrace("Hash of downloaded file successfully found in {0}", hashfile); } } else { ConsoleImpl.WriteTrace("Hash of downloaded file successfully found in {0}", hashfile); } FileSystemProxy.CopyFile(tmpFile, target, true); FileSystemProxy.DeleteFile(tmpFile); }
protected override void DownloadVersionCore(string latestVersion, string target, PaketHashFile hashFile) { var cached = Path.Combine(PaketCacheDir, latestVersion, "paket.exe"); if (!FileSystemProxy.FileExists(cached)) { ConsoleImpl.WriteInfo("Version {0} not found in cache.", latestVersion); DownloadAndPlaceInCache(latestVersion, target, cached, hashFile); return; } FileSystemProxy.WaitForFileFinished(cached); if (!BootstrapperHelper.ValidateHash(FileSystemProxy, hashFile, latestVersion, cached)) { ConsoleImpl.WriteWarning("Version {0} found in cache but it's hashFile isn't valid.", latestVersion); DownloadAndPlaceInCache(latestVersion, target, cached, hashFile); return; } ConsoleImpl.WriteInfo("Copying version {0} from cache.", latestVersion); ConsoleImpl.WriteTrace("{0} -> {1}", cached, target); using (var targetStream = FileSystemProxy.CreateExclusive(target)) using (var cachedStream = FileSystemProxy.OpenRead(cached)) { cachedStream.CopyTo(targetStream); } }
public void SelfUpdate(string latestVersion) { var executingAssembly = Assembly.GetExecutingAssembly(); string exePath = executingAssembly.Location; var localVersion = FileSystemProxy.GetLocalFileVersion(exePath); if (localVersion.StartsWith(latestVersion)) { ConsoleImpl.WriteDebug("Bootstrapper is up to date. Nothing to do."); return; } var url = String.Format("https://github.com/fsprojects/Paket/releases/download/{0}/paket.bootstrapper.exe", latestVersion); ConsoleImpl.WriteDebug("Starting download of bootstrapper from {0}", url); string renamedPath = BootstrapperHelper.GetTempFile("oldBootstrapper"); string tmpDownloadPath = BootstrapperHelper.GetTempFile("newBootstrapper"); WebRequestProxy.DownloadFile(url, tmpDownloadPath); try { FileSystemProxy.MoveFile(exePath, renamedPath); FileSystemProxy.MoveFile(tmpDownloadPath, exePath); ConsoleImpl.WriteDebug("Self update of bootstrapper was successful."); } catch (Exception) { ConsoleImpl.WriteDebug("Self update failed. Resetting bootstrapper."); FileSystemProxy.MoveFile(renamedPath, exePath); throw; } }
private void DownloadAndPlaceInCache(string latestVersion, string target, string cached, PaketHashFile hashFile) { FileSystemProxy.CreateDirectory(Path.GetDirectoryName(cached)); var tempFile = Path.Combine(FileSystemProxy.GetTempPath(), Guid.NewGuid().ToString()); EffectiveStrategy.DownloadVersion(latestVersion, tempFile, hashFile); if (!BootstrapperHelper.ValidateHash(FileSystemProxy, hashFile, latestVersion, tempFile)) { throw new InvalidOperationException( string.Format("paket.exe was corrupted after download by {0}: Invalid hash", EffectiveStrategy.Name)); } ConsoleImpl.WriteTrace("Caching version {0} for later, hash is ok", latestVersion); using (var targetStream = FileSystemProxy.CreateExclusive(target)) using (var cachedStream = FileSystemProxy.CreateExclusive(cached)) { using (var tempStream = FileSystemProxy.OpenRead(tempFile)) { tempStream.CopyTo(targetStream); tempStream.Seek(0, SeekOrigin.Begin); tempStream.CopyTo(cachedStream); } } FileSystemProxy.DeleteFile(tempFile); }
public Stream GetResponseStream(string url) { var request = BootstrapperHelper.PrepareWebRequest(url, envProxy); using (var httpResponse = (HttpWebResponse)request.GetResponse()) { return(httpResponse.GetResponseStream()); } }
protected override void DownloadHashFileCore(string latestVersion) { var url = String.Format(Constants.PaketCheckSumDownloadUrlTemplate, latestVersion); ConsoleImpl.WriteInfo("Starting download from {0}", url); var tmpFile = BootstrapperHelper.GetTempFile("paket-sha256.txt"); WebRequestProxy.DownloadFile(url, tmpFile); }
public void DownloadHashFile() { var expectedPath = BootstrapperHelper.GetTempFile("paket-sha256.txt"); var expectedUrl = string.Format(GitHubDownloadStrategy.Constants.PaketCheckSumDownloadUrlTemplate, "42.0"); var hashFilePath = sut.DownloadHashFile("42.0"); Assert.That(hashFilePath, Is.EqualTo(expectedPath)); mockWebProxy.Verify(x => x.DownloadFile(expectedUrl, expectedPath), Times.Once); }
protected virtual GeneratorBootstrapper CreateBootstrapper(Action <IScaffoldBuilder> configurationAction) { var helper = new TestHelper { ScaffoldAction = configurationAction }; var factory = new TestBootstrapperFactory(bootstrapper => bootstrapper.RegisterConvention( new ActionBasedServiceConfigurationConvention(s => s.AddSingleton(helper)))); return(factory.Create(BootstrapperHelper.CreateTestContext <TestGenerator>())); }
public void DownloadFile(string url, Stream stream, int bufferSize) { var request = BootstrapperHelper.PrepareWebRequest(url); using (var httpResponse = (HttpWebResponse)request.GetResponse()) { using (var responseStream = httpResponse.GetResponseStream()) { responseStream.CopyTo(stream, bufferSize); } } }
public void test_simple() { var helper = new TestHelper(); helper.OptionsAction = (factory, options) => options.Choice1 = "foo"; var context = BootstrapperHelper.CreateTestContext<TestGenerator>(); new TestBootstrapperFactory(strapper => strapper.RegisterConvention( new ActionBasedServiceConfigurationConvention(s => s.AddSingleton(helper) .AddSingleton<TestGeneratorOptions>().AddSingleton<IScaffoldConfigurer, TestScaffolderConfigurer>()))).Create(context).Execute(); Assert.Equal("foo", helper.Stream1.ReadAsString()); }
public void DownloadVersion_HashFileNotFound() { //arrange var tempFileName = BootstrapperHelper.GetTempFile("paket"); //act sut.DownloadVersion("2.57.1", "paketExeLocation", null); //assert mockWebProxy.Verify(x => x.DownloadFile(It.IsAny <string>(), tempFileName), Times.Once); mockFileProxy.Verify(x => x.CopyFile(tempFileName, "paketExeLocation", true), Times.Once); mockFileProxy.Verify(x => x.DeleteFile(tempFileName), Times.Once); }
public void DownloadVersion(string latestVersion, string target) { var url = String.Format(Constants.PaketExeDownloadUrlTemplate, latestVersion); ConsoleImpl.WriteDebug("Starting download from {0}", url); var tmpFile = BootstrapperHelper.GetTempFile("paket"); WebRequestProxy.DownloadFile(url, tmpFile); FileSystemProxy.CopyFile(tmpFile, target, true); FileSystemProxy.DeleteFile(tmpFile); }
public void test_simple_list_option_two() { var helper = new TestHelper(); var context = BootstrapperHelper.CreateTestContext <TestGenerator>(x => x.Arguments = new[] { "bar" }); new TestBootstrapperFactory( x => x.RegisterConvention(new ActionBasedServiceConfigurationConvention(s => s.AddSingleton(helper)))) .Create(context).Execute(new GeneratorExecutor()); Assert.Equal("bar", helper.Stream.ReadAsString()); }
public void Initialize() { BootstrapperHelper.StartDefault(); _client = ServiceLocator.Current.GetInstance <IServiceClient>("CachedServiceClient"); //IResponse<TResponse> Get<TResponse>(Uri uri) where TResponse : class; //IResponse Put<TRequest>(Uri uri, IRequest<TRequest> data) where TRequest : class; //IResponse Post<TRequest>(Uri uri, IRequest<TRequest> data) where TRequest : class; //IResponse Delete(Uri uri); //_serializer.Setup(d => d.Get<string>(It.IsAny<string>())).Returns("Something"); //var r = _client.Get<string>(new Uri("http://google.nl/")); }
public void test_dependent_generator() { var helper = new TestHelper(); var context = BootstrapperHelper.CreateTestContext <TestGenerator>(x => x.Arguments = new[] { "foo", "AreBelongToUs" }); new TestBootstrapperFactory( x => x.RegisterConvention(new ActionBasedServiceConfigurationConvention(s => s.AddSingleton(helper).AddScoped <DependentGenerator>()))) .Create(context).Execute(new GeneratorExecutor()); Assert.Equal("foo", helper.Stream1.ReadAsString()); Assert.Equal("AreBelongToUs", helper.Stream2.ReadAsString()); }
public void test_combined_options_one() { var helper = new TestHelper(); var context = BootstrapperHelper.CreateTestContext <TestGenerator>(x => x.Arguments = new[] { "foo", "base" }); new TestBootstrapperFactory( x => x.RegisterConvention(new ActionBasedServiceConfigurationConvention(s => s.AddSingleton(helper)))) .Create(context).Execute(); Assert.Equal("base", helper.Stream2.ReadAsString()); Assert.Equal("AllYourBase", helper.Stream1.ReadAsString()); }
public void DownloadVersion() { //arrange var tempFileName = BootstrapperHelper.GetTempFile("paket"); mockWebProxy.Setup(x => x.DownloadFile(It.IsAny <string>(), It.IsAny <string>())).Verifiable(); //act sut.DownloadVersion("2.57.1", "paketExeLocation"); //assert mockWebProxy.Verify(x => x.DownloadFile(It.IsAny <string>(), tempFileName)); mockFileProxy.Verify(x => x.CopyFile(tempFileName, "paketExeLocation", true)); mockFileProxy.Verify(x => x.DeleteFile(tempFileName)); }
public void DownloadVersion(string latestVersion, string target) { var url = String.Format(Constants.PaketExeDownloadUrlTemplate, latestVersion); ConsoleImpl.WriteDebug("Starting download from {0}", url); var tmpFile = BootstrapperHelper.GetTempFile("paket"); using (var fileStream = FileProxy.Create(tmpFile)) { WebRequestProxy.DownloadFile(url, fileStream, HttpBufferSize); } FileProxy.Copy(tmpFile, target, true); FileProxy.Delete(tmpFile); }
public void SelfUpdate() { //arrange var tempFileNameNew = BootstrapperHelper.GetTempFile("newBootstrapper"); var tempFileNameOld = BootstrapperHelper.GetTempFile("oldBootstrapper"); mockWebProxy.Setup(x => x.DownloadFile(It.IsAny <string>(), It.IsAny <string>())).Verifiable(); mockFileProxy.Setup(x => x.GetLocalFileVersion(It.IsAny <string>())).Returns("2.52.1"); //act sut.SelfUpdate("2.57.1"); //assert mockWebProxy.Verify(x => x.DownloadFile(It.IsAny <string>(), tempFileNameNew)); mockFileProxy.Verify(x => x.MoveFile(Assembly.GetAssembly(typeof(GitHubDownloadStrategy)).Location, tempFileNameOld)); mockFileProxy.Verify(x => x.MoveFile(tempFileNameNew, Assembly.GetAssembly(typeof(GitHubDownloadStrategy)).Location)); }
public void DownloadVersion_InvalidHashRetryOnce() { //arrange var content = Guid.NewGuid().ToByteArray(); var sha = new SHA256Managed(); var checksum = sha.ComputeHash(new MemoryStream(content)); var hash = BitConverter.ToString(checksum).Replace("-", String.Empty); mockFileProxy.Setup(x => x.OpenRead(It.IsAny <string>())).Returns(() => new MemoryStream(Guid.NewGuid().ToByteArray())); var tempFileName = BootstrapperHelper.GetTempFile("paket"); //act sut.DownloadVersion("2.57.1", "paketExeLocation", new PaketHashFile(new List <string> { hash + " paket.exe" })); //assert mockWebProxy.Verify(x => x.DownloadFile(It.IsAny <string>(), tempFileName), Times.Exactly(2)); mockFileProxy.Verify(x => x.CopyFile(tempFileName, "paketExeLocation", true), Times.Once); mockFileProxy.Verify(x => x.DeleteFile(tempFileName), Times.Once); }
protected override void DownloadVersionCore(string latestVersion, string target, string hashfile) { var cached = Path.Combine(_paketCacheDir, latestVersion, "paket.exe"); if (!FileSystemProxy.FileExists(cached)) { ConsoleImpl.WriteInfo("Version {0} not found in cache.", latestVersion); DownloadAndPlaceInCache(latestVersion, target, cached, hashfile); return; } if (!BootstrapperHelper.ValidateHash(FileSystemProxy, hashfile, latestVersion, cached)) { ConsoleImpl.WriteWarning("Version {0} found in cache but it's hash isn't valid.", latestVersion); DownloadAndPlaceInCache(latestVersion, target, cached, hashfile); return; } ConsoleImpl.WriteInfo("Copying version {0} from cache.", latestVersion); ConsoleImpl.WriteTrace("{0} -> {1}", cached, target); FileSystemProxy.CopyFile(cached, target, true); }
public void DownloadVersion() { //arrange var byteArray = Encoding.ASCII.GetBytes("paketExeContent"); var stream = new MemoryStream(byteArray); var tempFileName = BootstrapperHelper.GetTempFile("paket"); mockWebProxy.Setup(x => x.DownloadFile(It.IsAny <string>(), It.IsAny <Stream>(), It.IsAny <int>())) .Callback <string, Stream, int>((url, streamIn, bufferIn) => stream.CopyTo(streamIn)).Verifiable(); var buffer = new byte[byteArray.Length]; mockFileProxy.Setup(x => x.Create(tempFileName)).Returns(new MemoryStream(buffer)); //act sut.DownloadVersion("2.57.1", "paketExeLocation"); //assert mockWebProxy.Verify(); mockFileProxy.Verify(x => x.Copy(tempFileName, "paketExeLocation", true)); mockFileProxy.Verify(x => x.Delete(tempFileName)); var text = Encoding.ASCII.GetString(buffer); Assert.That(text, Is.EqualTo("paketExeContent")); }
public void SelfUpdate(string latestVersion) { string target = Assembly.GetExecutingAssembly().Location; var localVersion = FileProxy.GetLocalFileVersion(target); if (localVersion.StartsWith(latestVersion)) { ConsoleImpl.WriteDebug("Bootstrapper is up to date. Nothing to do."); return; } var apiHelper = new NugetApiHelper(PaketBootstrapperNugetPackageName, NugetSource); const string paketNupkgFile = "paket.bootstrapper.latest.nupkg"; const string paketNupkgFileTemplate = "paket.bootstrapper.{0}.nupkg"; var getLatestFromNugetUrl = apiHelper.GetLatestPackage(); var paketDownloadUrl = getLatestFromNugetUrl; var paketFile = paketNupkgFile; if (!String.IsNullOrWhiteSpace(latestVersion)) { paketDownloadUrl = apiHelper.GetSpecificPackageVersion(latestVersion); paketFile = String.Format(paketNupkgFileTemplate, latestVersion); } var randomFullPath = Path.Combine(Folder, Path.GetRandomFileName()); DirectoryProxy.CreateDirectory(randomFullPath); var paketPackageFile = Path.Combine(randomFullPath, paketFile); if (DirectoryProxy.Exists(NugetSource)) { if (String.IsNullOrWhiteSpace(latestVersion)) { latestVersion = GetLatestVersion(false); } var sourcePath = Path.Combine(NugetSource, String.Format(paketNupkgFileTemplate, latestVersion)); ConsoleImpl.WriteDebug("Starting download from {0}", sourcePath); FileProxy.Copy(sourcePath, paketPackageFile); } else { ConsoleImpl.WriteDebug("Starting download from {0}", paketDownloadUrl); WebRequestProxy.DownloadFile(paketDownloadUrl, paketPackageFile); } FileProxy.ExtractToDirectory(paketPackageFile, randomFullPath); var paketSourceFile = Path.Combine(randomFullPath, "tools", "paket.bootstrapper.exe"); var renamedPath = BootstrapperHelper.GetTempFile("oldBootstrapper"); try { FileProxy.FileMove(target, renamedPath); FileProxy.FileMove(paketSourceFile, target); ConsoleImpl.WriteDebug("Self update of bootstrapper was successful."); } catch (Exception) { ConsoleImpl.WriteDebug("Self update failed. Resetting bootstrapper."); FileProxy.FileMove(renamedPath, target); throw; } DirectoryProxy.Delete(randomFullPath, true); }
public void Initialize() { BootstrapperHelper.StartDefault(); _serializer = ServiceLocator.Current.GetInstance <ISerializer>("DataSerializer"); }
public void MoveFile(string fromFile, string toFile) { BootstrapperHelper.FileMove(fromFile, toFile); }
public string DownloadString(string address) { BootstrapperHelper.PrepareWebClient(Client, address, envProxy); return(Client.DownloadString(address)); }
public string GetLocalFileVersion(string filename) { return(BootstrapperHelper.GetLocalFileVersion(filename, this)); }
public void DownloadFile(string url, string targetLocation) { BootstrapperHelper.PrepareWebClient(Client, url, envProxy); Client.DownloadFile(url, targetLocation); }