public void Execute() { var tempFileName = Path.GetTempFileName(); File.Delete(tempFileName); try { NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(testPort); using (var ravenDbServer = new RavenDbServer(new RavenConfiguration { DataDirectory = tempFileName, Port = testPort, AnonymousUserAccessMode = AnonymousUserAccessMode.All, RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true })) { using (var zipFile = new ZipFile(file)) { var zipEntries = zipFile.OfType<ZipEntry>() .Where(x => x.Name.StartsWith("raw/")) .Where(x => Path.GetExtension(x.Name) == ".txt") .GroupBy(x => x.Name.Split('_').First()) .Select(x => new { Request = x.First(), Response = x.Last() }) .ToArray(); foreach (var pair in zipEntries) { // wait until we are finished executing // make scenario executing predictable while (ravenDbServer.Database.HasTasks) Thread.Sleep(50); TestSingleRequest( new StreamReader(zipFile.GetInputStream(pair.Request)).ReadToEnd(), zipFile.GetInputStream(pair.Response).ReadData() ); } } } } finally { if (Directory.Exists(tempFileName)) Directory.Delete(tempFileName, true); } }
public void Execute() { var tempFileName = Path.GetTempFileName(); File.Delete(tempFileName); try { RavenDbServer.EnsureCanListenToWhenInNonAdminContext(testPort); using (new RavenDbServer(new RavenConfiguration { DataDirectory = tempFileName, Port = testPort, AnonymousUserAccessMode = AnonymousUserAccessMode.All, ShouldCreateDefaultsWhenBuildingNewDatabaseFromScratch = false })) { using (var zipFile = new ZipFile(file)) { var zipEntries = zipFile.OfType<ZipEntry>() .Where(x => x.Name.StartsWith("raw/")) .Where(x => Path.GetExtension(x.Name) == ".txt") .GroupBy(x => x.Name.Split('_').First()) .Select(x => new {Request = x.First(), Response = x.Last()}) .ToArray(); foreach (var pair in zipEntries) { TestSingleRequest( new StreamReader(zipFile.GetInputStream(pair.Request)).ReadToEnd(), zipFile.GetInputStream(pair.Response).ReadData() ); } } } } finally { Directory.Delete(tempFileName, true); } }
public static async Task ExtractZipForInstall(string zipFilePath, string outFolder) { var zf = new ZipFile(zipFilePath); var entries = zf.OfType<ZipEntry>().ToArray(); var re = new Regex(@"lib[\\\/][^\\\/]*[\\\/]", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); try { await Utility.ForEachAsync(entries, (zipEntry) => { if (!zipEntry.IsFile) return; var entryFileName = Uri.UnescapeDataString(zipEntry.Name); if (!re.Match(entryFileName).Success) return; var fullZipToPath = Path.Combine(outFolder, re.Replace(entryFileName, "", 1)); var directoryName = Path.GetDirectoryName(fullZipToPath); var buffer = new byte[64*1024]; if (directoryName.Length > 0) { Utility.Retry(() => Directory.CreateDirectory(directoryName), 2); } Utility.Retry(() => { using (var zipStream = zf.GetInputStream(zipEntry)) using (FileStream streamWriter = File.Create(fullZipToPath)) { StreamUtils.Copy(zipStream, streamWriter, buffer); } }, 5); }, 4); } finally { zf.Close(); } }