Ejemplo n.º 1
0
		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);
			}
		}
Ejemplo n.º 2
0
        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();
            }
        }