public void TestCachedFileNameGenerated(string path, string query, string expected) { string result1 = CachedImageHelper.GetCachedImageFileName(path); string result2 = CachedImageHelper.GetCachedImageFileName(path, query); Assert.AreEqual(result1, result2); Assert.AreEqual(result1, expected); }
/// <summary> /// Gets a value indicating whether the image is new or updated in an asynchronous manner. /// </summary> /// <returns> /// The asynchronous <see cref="Task"/> returning the value. /// </returns> public override async Task <bool> IsNewOrUpdatedAsync() { // TODO: Before this check is performed it should be throttled. For example, only perform this check // if the last time it was checked is greater than 5 seconds. This would be much better for perf // if there is a high throughput of image requests. string cachedFileName = await this.CreateCachedFileNameAsync().ConfigureAwait(false); this.CachedPath = CachedImageHelper.GetCachedPath(cloudCachedBlobContainer.Uri.ToString(), cachedFileName, true, this.FolderDepth); this.cachedRewritePath = CachedImageHelper.GetCachedPath(useCachedContainerInUrl ? Path.Combine(cachedCdnRoot, cloudCachedBlobContainer.Name) : cachedCdnRoot, cachedFileName, true, this.FolderDepth); bool isUpdated = false; CachedImage cachedImage = CacheIndexer.Get(this.CachedPath); if (new Uri(this.CachedPath).IsFile&& File.Exists(this.CachedPath)) { cachedImage = new CachedImage { Key = Path.GetFileNameWithoutExtension(this.CachedPath), Path = this.CachedPath, CreationTimeUtc = File.GetCreationTimeUtc(this.CachedPath) }; CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } if (cachedImage is null) { string blobPath = this.CachedPath.Substring(cloudCachedBlobContainer.Uri.ToString().Length + 1); CloudBlockBlob blockBlob = cloudCachedBlobContainer.GetBlockBlobReference(blobPath); if (await blockBlob.ExistsAsync().ConfigureAwait(false)) { // Pull the latest info. await blockBlob.FetchAttributesAsync().ConfigureAwait(false); if (blockBlob.Properties.LastModified.HasValue) { cachedImage = new CachedImage { Key = Path.GetFileNameWithoutExtension(this.CachedPath), Path = this.CachedPath, CreationTimeUtc = blockBlob.Properties.LastModified.Value.UtcDateTime }; CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } } if (cachedImage is null) { // Nothing in the cache so we should return true. isUpdated = true; } else { // Check to see if the cached image is set to expire // or a new file with the same name has replaced our current image if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc).ConfigureAwait(false)) { CacheIndexer.Remove(this.CachedPath); isUpdated = true; } } return(isUpdated); }
public void TestCachedFilePathGenerated(string path, string filename, bool makeVirtual, int depth, string expected) { string result = CachedImageHelper.GetCachedPath(path, filename, makeVirtual, depth); Assert.AreEqual(result, expected); }