public void ZipCacherShouldCache() { var cacheKey = Guid.NewGuid().ToString(); var zipFile = Path.Combine(Directory.GetCurrentDirectory(),"validation.zip"); var fa = new ZipCacher(zipFile,cacheKey); Assert.IsFalse(fa.IsActual()); var sw = new Stopwatch(); sw.Start(); fa.GetContents(); sw.Stop(); var firstRun = sw.ElapsedMilliseconds; Assert.IsTrue(fa.IsActual()); sw.Restart(); fa.GetContents(); sw.Stop(); var secondRun = sw.ElapsedMilliseconds; Assert.IsTrue(firstRun > secondRun); fa = new ZipCacher(zipFile,cacheKey); Assert.IsTrue(fa.IsActual()); sw.Start(); fa.GetContents(); sw.Stop(); var thirdRun = sw.ElapsedMilliseconds; Assert.IsTrue(thirdRun < firstRun); fa.Clear(); Assert.IsFalse(fa.IsActual()); sw.Restart(); fa.GetContents(); sw.Stop(); var fourthRun = sw.ElapsedMilliseconds; Assert.IsTrue(fourthRun > secondRun); File.SetLastWriteTime(zipFile, DateTime.Now); Assert.IsFalse(fa.IsActual()); }
/// <summary> /// Unpacks zip-files containing the artifact files, and enumerates all (zipped/nonzipped) files. /// </summary> /// <remarks>This is an expensive operations and should be run once. As well, it unpacks files on the /// file system and is not thread-safe.</remarks> public void Prepare() { #if !PORTABLE45 _artifactFiles = new List<string>(); var zips = Directory.GetFiles(_contentDirectory, "*.zip"); // Get the files in each *.zip files present in the content directory // The ZipCacher will avoid re-extracting these files. foreach (string zipPath in zips) { ZipCacher zc = new ZipCacher(zipPath, CACHE_KEY); _artifactFiles.AddRange(zc.GetContents()); } _isPrepared = true; #else throw Error.NotImplemented("File based Core artifact source is not supported on the portable runtime"); #endif }